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