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