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