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