Quote the first argument in each use of AC_DEFUN.
[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.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   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   AC_FUNC_GETTIMEOFDAY_CLOBBER
117
118   AC_REQUIRE([AC_FUNC_CLOSEDIR_VOID])
119   AC_REQUIRE([jm_FUNC_UTIME])
120
121   AC_CHECK_FUNCS( \
122     acl \
123     bcopy \
124     endgrent \
125     endpwent \
126     fchdir \
127     fdatasync \
128     ftime \
129     ftruncate \
130     getcwd \
131     gethrtime \
132     getmntinfo \
133     hasmntopt \
134     isascii \
135     lchown \
136     listmntent \
137     localeconv \
138     memcpy \
139     mempcpy \
140     mkfifo \
141     realpath \
142     resolvepath \
143     sethostname \
144     strchr \
145     strerror \
146     strrchr \
147     sysinfo \
148     wcrtomb \
149     tzset \
150   )
151
152   AM_FUNC_GETLINE
153   if test $am_cv_func_working_getline != yes; then
154     AC_CHECK_FUNCS(getdelim)
155   fi
156   AM_FUNC_OBSTACK
157
158   AM_FUNC_STRTOD
159   AC_SUBST(POW_LIBM)
160   test $am_cv_func_strtod_needs_libm = yes && POW_LIBM=-lm
161
162   # See if linking `seq' requires -lm.
163   # It does on nearly every system.  The single exception (so far) is
164   # BeOS which has all the math functions in the normal runtime library
165   # and doesn't have a separate math library.
166
167   AC_SUBST(SEQ_LIBM)
168   ac_seq_body='
169      static double x, y;
170      x = floor (x);
171      x = rint (x);
172      x = modf (x, &y);'
173   AC_TRY_LINK([#include <math.h>], $ac_seq_body, ,
174     [ac_seq_save_LIBS="$LIBS"
175      LIBS="$LIBS -lm"
176      AC_TRY_LINK([#include <math.h>], $ac_seq_body, SEQ_LIBM=-lm)
177      LIBS="$ac_seq_save_LIBS"
178     ])
179
180   AM_LANGINFO_CODESET
181   jm_GLIBC21
182   AM_ICONV
183   jm_FUNC_UNLINK_BUSY_TEXT
184
185   # These tests are for df.
186   jm_LIST_MOUNTED_FILESYSTEMS([list_mounted_fs=yes], [list_mounted_fs=no])
187   jm_FSTYPENAME
188   jm_FILE_SYSTEM_USAGE([space=yes], [space=no])
189   if test $list_mounted_fs = yes && test $space = yes; then
190     DF_PROG="df"
191     AC_LIBOBJ(fsusage)
192     AC_LIBOBJ(mountlist)
193   fi
194   AC_REQUIRE([jm_AC_DOS])
195
196 ])
197
198 # These tests must be run before any use of AC_CHECK_TYPE,
199 # because that macro compiles code that tests e.g., HAVE_UNISTD_H.
200 # See the definition of ac_includes_default in `configure'.
201 AC_DEFUN([jm_CHECK_ALL_HEADERS],
202 [
203   AC_CHECK_HEADERS( \
204     errno.h  \
205     fcntl.h \
206     fenv.h \
207     float.h \
208     limits.h \
209     memory.h \
210     mntent.h \
211     mnttab.h \
212     netdb.h \
213     paths.h \
214     stdlib.h \
215     stddef.h \
216     stdint.h \
217     string.h \
218     sys/acl.h \
219     sys/filsys.h \
220     sys/fs/s5param.h \
221     sys/fs_types.h \
222     sys/fstyp.h \
223     sys/ioctl.h \
224     sys/mntent.h \
225     sys/mount.h \
226     sys/param.h \
227     sys/resource.h \
228     sys/socket.h \
229     sys/statfs.h \
230     sys/statvfs.h \
231     sys/systeminfo.h \
232     sys/time.h \
233     sys/timeb.h \
234     sys/vfs.h \
235     sys/wait.h \
236     syslog.h \
237     termios.h \
238     unistd.h \
239     utime.h \
240     values.h \
241   )
242 ])
243
244 # This macro must be invoked before any tests that run the compiler.
245 AC_DEFUN([jm_CHECK_ALL_TYPES],
246 [
247   # FIXME: I shouldn't have to require this macro here.  Rather, it should
248   # be required by any autoconf macro that performs a compile-time test or
249   # otherwise uses confdefs.h.
250   AC_REQUIRE([AC__GNU_SOURCE])
251
252   dnl This test must come as early as possible after the compiler configuration
253   dnl tests, because the choice of the file model can (in principle) affect
254   dnl whether functions and headers are available, whether they work, etc.
255   AC_REQUIRE([AC_SYS_LARGEFILE])
256
257   dnl This test must precede tests of compiler characteristics like
258   dnl that for the inline keyword, since it may change the degree to
259   dnl which the compiler supports such features.
260   AC_REQUIRE([AM_C_PROTOTYPES])
261
262   dnl Checks for typedefs, structures, and compiler characteristics.
263   AC_REQUIRE([AC_C_BIGENDIAN])
264   AC_REQUIRE([AC_PROG_CC_STDC])
265   AC_REQUIRE([AC_C_CONST])
266   AC_REQUIRE([AC_C_VOLATILE])
267   AC_REQUIRE([AC_C_INLINE])
268   AC_REQUIRE([AC_C_LONG_DOUBLE])
269
270   AC_REQUIRE([jm_CHECK_ALL_HEADERS])
271   AC_REQUIRE([AC_HEADER_DIRENT])
272   AC_REQUIRE([AC_HEADER_STDC])
273   AC_CHECK_MEMBERS([struct stat.st_blksize],,,[$ac_includes_default
274 #include <sys/stat.h>
275   ])
276   AC_REQUIRE([AC_STRUCT_ST_BLOCKS])
277
278   AC_REQUIRE([AC_STRUCT_TM])
279   AC_REQUIRE([AC_STRUCT_TIMEZONE])
280   AC_REQUIRE([AC_HEADER_STAT])
281   AC_REQUIRE([AC_STRUCT_ST_MTIM_NSEC])
282   AC_REQUIRE([AC_STRUCT_ST_DM_MODE])
283   AC_REQUIRE([jm_CHECK_TYPE_STRUCT_TIMESPEC])
284
285   AC_REQUIRE([AC_TYPE_GETGROUPS])
286   AC_REQUIRE([AC_TYPE_MODE_T])
287   AC_REQUIRE([AC_TYPE_OFF_T])
288   AC_REQUIRE([AC_TYPE_PID_T])
289   AC_REQUIRE([AC_TYPE_SIGNAL])
290   AC_REQUIRE([AC_TYPE_SIZE_T])
291   AC_REQUIRE([AC_TYPE_UID_T])
292   AC_CHECK_TYPE(ino_t, unsigned long)
293
294   dnl This relies on the fact that autoconf 2.14a's implementation of
295   dnl AC_CHECK_TYPE checks includes unistd.h.
296   AC_CHECK_TYPE(ssize_t, int)
297   AC_CHECK_TYPE(major_t, unsigned int)
298   AC_CHECK_TYPE(minor_t, unsigned int)
299
300   AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])
301   AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])
302
303   AC_REQUIRE([AC_HEADER_MAJOR])
304   AC_REQUIRE([AC_HEADER_DIRENT])
305
306 ])