95e2626708fa6969610d97f0defe4df2046339b6
[gnulib.git] / m4 / jm-macros.m4
1 #serial 27
2
3 dnl Misc type-related macros for fileutils, sh-utils, textutils.
4
5 AC_DEFUN(jm_MACROS,
6 [
7   AC_PREREQ(2.14a)
8
9   GNU_PACKAGE="GNU $PACKAGE"
10   AC_DEFINE_UNQUOTED(GNU_PACKAGE, "$GNU_PACKAGE",
11     [The concatenation of the strings `GNU ', and PACKAGE.])
12   AC_SUBST(GNU_PACKAGE)
13
14   AC_SUBST(OPTIONAL_BIN_PROGS)
15   AC_SUBST(OPTIONAL_BIN_ZCRIPTS)
16   AC_SUBST(MAN)
17   AC_SUBST(DF_PROG)
18
19   dnl This macro actually runs replacement code.  See isc-posix.m4.
20   AC_REQUIRE([AC_ISC_POSIX])dnl
21
22   AC_CHECK_HEADERS( \
23     errno.h  \
24     fcntl.h \
25     fenv.h \
26     float.h \
27     limits.h \
28     memory.h \
29     mntent.h \
30     mnttab.h \
31     netdb.h \
32     paths.h \
33     stdlib.h \
34     stddef.h \
35     string.h \
36     sys/acl.h \
37     sys/filsys.h \
38     sys/fs/s5param.h \
39     sys/fs_types.h \
40     sys/fstyp.h \
41     sys/ioctl.h \
42     sys/mntent.h \
43     sys/mount.h \
44     sys/param.h \
45     sys/socket.h \
46     sys/statfs.h \
47     sys/statvfs.h \
48     sys/systeminfo.h \
49     sys/time.h \
50     sys/timeb.h \
51     sys/vfs.h \
52     sys/wait.h \
53     syslog.h \
54     termios.h \
55     unistd.h \
56     utime.h \
57     values.h \
58   )
59
60   jm_INCLUDED_REGEX([lib/regex.c])
61
62   AC_REQUIRE([jm_BISON])
63   AC_REQUIRE([jm_ASSERT])
64   AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
65   AC_REQUIRE([jm_CHECK_TYPE_STRUCT_UTIMBUF])
66   AC_REQUIRE([jm_CHECK_TYPE_STRUCT_DIRENT_D_TYPE])
67   AC_REQUIRE([jm_CHECK_TYPE_STRUCT_DIRENT_D_INO])
68   AC_REQUIRE([jm_CHECK_DECLS])
69
70   AC_REQUIRE([jm_PREREQ])
71
72   AC_REQUIRE([jm_FUNC_LCHOWN])
73   AC_REQUIRE([fetish_FUNC_RMDIR_NOTEMPTY])
74   AC_REQUIRE([jm_FUNC_CHOWN])
75   AC_REQUIRE([jm_FUNC_MKTIME])
76   AC_REQUIRE([jm_FUNC_LSTAT])
77   AC_REQUIRE([AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK])
78   AC_REQUIRE([jm_FUNC_STAT])
79   AC_REQUIRE([jm_FUNC_REALLOC])
80   AC_REQUIRE([jm_FUNC_MALLOC])
81   AC_REQUIRE([AC_FUNC_STRERROR_R])
82   AC_REQUIRE([jm_FUNC_NANOSLEEP])
83   AC_REQUIRE([jm_FUNC_READDIR])
84   AC_REQUIRE([jm_FUNC_MEMCMP])
85   AC_REQUIRE([jm_FUNC_GLIBC_UNLOCKED_IO])
86   AC_REQUIRE([jm_FUNC_FNMATCH])
87   AC_REQUIRE([jm_FUNC_GROUP_MEMBER])
88   AC_REQUIRE([jm_FUNC_PUTENV])
89   AC_REQUIRE([jm_AFS])
90   AC_REQUIRE([jm_AC_PREREQ_XSTRTOUMAX])
91   AC_REQUIRE([jm_AC_FUNC_LINK_FOLLOWS_SYMLINK])
92   AC_REQUIRE([AM_FUNC_ERROR_AT_LINE])
93   AC_REQUIRE([jm_FUNC_GNU_STRFTIME])
94   AC_REQUIRE([jm_FUNC_MKTIME])
95   AC_REQUIRE([jm_FUNC_FPENDING])
96
97   AC_REQUIRE([jm_FUNC_GETGROUPS])
98   test -n "$GETGROUPS_LIB" && LIBS="$GETGROUPS_LIB $LIBS"
99
100   AC_REQUIRE([AC_FUNC_VPRINTF])
101   AC_REQUIRE([AC_FUNC_ALLOCA])
102   AC_FUNC_GETLOADAVG([lib])
103   AC_REQUIRE([jm_SYS_PROC_UPTIME])
104   AC_REQUIRE([jm_FUNC_FTRUNCATE])
105
106   AC_REPLACE_FUNCS(strcasecmp strncasecmp)
107   AC_REPLACE_FUNCS(dup2)
108   AC_REPLACE_FUNCS(gethostname getusershell)
109   AC_REPLACE_FUNCS(stime strcspn stpcpy strstr strtol strtoul)
110   AC_REPLACE_FUNCS(strpbrk)
111   AC_REPLACE_FUNCS(euidaccess memcmp rmdir rpmatch strndup strverscmp)
112   AC_REPLACE_FUNCS(atexit)
113   AC_REPLACE_FUNCS(strnlen)
114   AC_REPLACE_FUNCS(getpass)
115
116   dnl used by e.g. intl/*domain.c and lib/canon-host.c
117   AC_REPLACE_FUNCS(strdup)
118
119   AC_REPLACE_FUNCS(memchr memcpy memmove memrchr memset)
120   AC_CHECK_FUNCS(getpagesize)
121
122   # By default, argmatch should fail calling usage (1).
123   AC_DEFINE(ARGMATCH_DIE, [usage (1)],
124             [Define to the function xargmatch calls on failures.])
125   AC_DEFINE(ARGMATCH_DIE_DECL, [extern void usage ()],
126             [Define to the declaration of the xargmatch failure function.])
127
128   dnl Used to define SETVBUF in sys2.h.
129   dnl This evokes the following warning from autoconf:
130   dnl ...: warning: AC_TRY_RUN called without default to allow cross compiling
131   AC_FUNC_SETVBUF_REVERSED
132
133   # used by sleep and shred
134   # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function.
135   # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.
136
137   # Save and restore LIBS so e.g., -lrt, isn't added to it.  Otherwise, *all*
138   # programs in the package would end up linked with that potentially-shared
139   # library, inducing unnecessary run-time overhead.
140   fetish_saved_libs=$LIBS
141     AC_SEARCH_LIBS(clock_gettime, [rt posix4],
142                    [LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime])
143     AC_SUBST(LIB_CLOCK_GETTIME)
144     AC_CHECK_FUNCS(clock_gettime)
145   LIBS=$fetish_saved_libs
146   AC_CHECK_FUNCS(gettimeofday)
147
148   AC_REQUIRE([AC_FUNC_CLOSEDIR_VOID])
149   AC_REQUIRE([jm_FUNC_UTIME])
150
151   AC_CHECK_FUNCS( \
152     acl \
153     bcopy \
154     endgrent \
155     endpwent \
156     fchdir \
157     fdatasync \
158     fseeko \
159     ftime \
160     ftruncate \
161     getcwd \
162     gethrtime \
163     getmntinfo \
164     hasmntopt \
165     isascii \
166     lchown \
167     listmntent \
168     localeconv \
169     memcpy \
170     mempcpy \
171     mkfifo \
172     realpath \
173     resolvepath \
174     sethostname \
175     strchr \
176     strerror \
177     strrchr \
178     sysinfo \
179     wcrtomb \
180     tzset \
181   )
182
183   AM_FUNC_GETLINE
184   if test $am_cv_func_working_getline != yes; then
185     AC_CHECK_FUNCS(getdelim)
186   fi
187   AM_FUNC_OBSTACK
188
189   AM_FUNC_STRTOD
190   AC_SUBST(POW_LIBM)
191   test $am_cv_func_strtod_needs_libm = yes && POW_LIBM=-lm
192
193   # See if linking `seq' requires -lm.
194   # It does on nearly every system.  The single exception (so far) is
195   # BeOS which has all the math functions in the normal runtime library
196   # and doesn't have a separate math library.
197
198   AC_SUBST(SEQ_LIBM)
199   ac_seq_body='
200      static double x, y;
201      x = floor (x);
202      x = rint (x);
203      x = modf (x, &y);'
204   AC_TRY_LINK([#include <math.h>], $ac_seq_body, ,
205     [ac_seq_save_LIBS="$LIBS"
206      LIBS="$LIBS -lm"
207      AC_TRY_LINK([#include <math.h>], $ac_seq_body, SEQ_LIBM=-lm)
208      LIBS="$ac_seq_save_LIBS"
209     ])
210
211   jm_LANGINFO_CODESET
212   jm_GLIBC21
213   jm_ICONV
214   jm_FUNC_UNLINK_BUSY_TEXT
215
216   # These tests are for df.
217   jm_LIST_MOUNTED_FILESYSTEMS([list_mounted_fs=yes], [list_mounted_fs=no])
218   jm_FSTYPENAME
219   jm_FILE_SYSTEM_USAGE([space=yes], [space=no])
220   if test $list_mounted_fs = yes && test $space = yes; then
221     DF_PROG="df"
222     AC_LIBOBJ(fsusage)
223     AC_LIBOBJ(mountlist)
224   fi
225
226 ])
227
228 # This macro must be invoked before any tests that run the compiler.
229 AC_DEFUN(jm_CHECK_ALL_TYPES,
230 [
231   # FIXME: I shouldn't have to require this macro here.  Rather, it should
232   # be required by any autoconf macro that performs a compile-time test or
233   # otherwise uses confdefs.h.
234   AC_REQUIRE([AC__GNU_SOURCE])
235
236   dnl This test must come as early as possible after the compiler configuration
237   dnl tests, because the choice of the file model can (in principle) affect
238   dnl whether functions and headers are available, whether they work, etc.
239   AC_REQUIRE([AC_SYS_LARGEFILE])
240
241   dnl This test must precede tests of compiler characteristics like
242   dnl that for the inline keyword, since it may change the degree to
243   dnl which the compiler supports such features.
244   AC_REQUIRE([AM_C_PROTOTYPES])
245
246   dnl Checks for typedefs, structures, and compiler characteristics.
247   AC_REQUIRE([AC_C_BIGENDIAN])
248   AC_REQUIRE([AC_PROG_CC_STDC])
249   AC_REQUIRE([AC_C_CONST])
250   AC_REQUIRE([AC_C_VOLATILE])
251   AC_REQUIRE([AC_C_INLINE])
252   AC_REQUIRE([AC_C_LONG_DOUBLE])
253
254   AC_REQUIRE([AC_HEADER_DIRENT])
255   AC_REQUIRE([AC_HEADER_STDC])
256   AC_CHECK_MEMBERS([struct stat.st_blksize],,,[$ac_includes_default
257 #include <sys/stat.h>
258   ])
259   AC_REQUIRE([AC_STRUCT_ST_BLOCKS])
260
261   AC_REQUIRE([AC_STRUCT_TM])
262   AC_REQUIRE([AC_STRUCT_TIMEZONE])
263   AC_REQUIRE([AC_HEADER_STAT])
264   AC_REQUIRE([AC_STRUCT_ST_MTIM_NSEC])
265   AC_REQUIRE([AC_STRUCT_ST_DM_MODE])
266   AC_REQUIRE([jm_CHECK_TYPE_STRUCT_TIMESPEC])
267
268   AC_REQUIRE([AC_TYPE_GETGROUPS])
269   AC_REQUIRE([AC_TYPE_MODE_T])
270   AC_REQUIRE([AC_TYPE_OFF_T])
271   AC_REQUIRE([AC_TYPE_PID_T])
272   AC_REQUIRE([AC_TYPE_SIGNAL])
273   AC_REQUIRE([AC_TYPE_SIZE_T])
274   AC_REQUIRE([AC_TYPE_UID_T])
275   AC_CHECK_TYPE(ino_t, unsigned long)
276
277   dnl This relies on the fact that autoconf 2.14a's implementation of
278   dnl AC_CHECK_TYPE checks includes unistd.h.
279   AC_CHECK_TYPE(ssize_t, int)
280
281   AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])
282   AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])
283
284   AC_REQUIRE([AC_HEADER_MAJOR])
285   AC_REQUIRE([AC_HEADER_DIRENT])
286
287 ])