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