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