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