*** empty log message ***
[gnulib.git] / m4 / jm-macros.m4
blob66415a3bf6ae49389f3561286b322ed5c5a00abb
1 #serial 46   -*- autoconf -*-
3 dnl Misc type-related macros for fileutils, sh-utils, textutils.
5 AC_DEFUN([jm_MACROS],
7   AC_PREREQ(2.52g)
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)
14   AM_MISSING_PROG(HELP2MAN, help2man)
15   AC_SUBST(OPTIONAL_BIN_PROGS)
16   AC_SUBST(OPTIONAL_BIN_ZCRIPTS)
17   AC_SUBST(MAN)
18   AC_SUBST(DF_PROG)
20   dnl This macro actually runs replacement code.  See isc-posix.m4.
21   AC_REQUIRE([AC_ISC_POSIX])dnl
23   jm_CHECK_ALL_TYPES
24   jm_INCLUDED_REGEX([lib/regex.c])
26   AC_REQUIRE([UTILS_HOST_OS])
27   AC_REQUIRE([UTILS_FUNC_MKDIR_TRAILING_SLASH])
28   AC_REQUIRE([jm_BISON])
29   AC_REQUIRE([jm_ASSERT])
30   AC_REQUIRE([jm_CHECK_TYPE_STRUCT_UTIMBUF])
31   AC_REQUIRE([jm_CHECK_TYPE_STRUCT_DIRENT_D_TYPE])
32   AC_REQUIRE([jm_CHECK_TYPE_STRUCT_DIRENT_D_INO])
33   AC_REQUIRE([jm_CHECK_DECLS])
35   AC_REQUIRE([jm_PREREQ])
37   AC_REQUIRE([UTILS_FUNC_DIRFD])
38   AC_REQUIRE([AC_FUNC_ACL])
39   AC_REQUIRE([jm_FUNC_LCHOWN])
40   AC_REQUIRE([fetish_FUNC_RMDIR_NOTEMPTY])
41   AC_REQUIRE([jm_FUNC_CHOWN])
42   AC_REQUIRE([jm_FUNC_MKTIME])
43   AC_REQUIRE([jm_FUNC_LSTAT])
44   AC_REQUIRE([AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK])
45   AC_REQUIRE([jm_FUNC_STAT])
46   AC_REQUIRE([jm_FUNC_REALLOC])
47   AC_REQUIRE([jm_FUNC_MALLOC])
48   AC_REQUIRE([AC_FUNC_STRERROR_R])
49   AC_REQUIRE([jm_FUNC_NANOSLEEP])
50   AC_REQUIRE([jm_FUNC_READDIR])
51   AC_REQUIRE([jm_FUNC_MEMCMP])
52   AC_REQUIRE([jm_FUNC_GLIBC_UNLOCKED_IO])
53   AC_REQUIRE([jm_FUNC_FNMATCH])
54   AC_REQUIRE([jm_FUNC_GROUP_MEMBER])
55   AC_REQUIRE([jm_FUNC_PUTENV])
56   AC_REQUIRE([jm_AFS])
57   AC_REQUIRE([jm_AC_PREREQ_XSTRTOUMAX])
58   AC_REQUIRE([jm_AC_PREREQ_XSTRTOIMAX])
59   AC_REQUIRE([jm_AC_FUNC_LINK_FOLLOWS_SYMLINK])
60   AC_REQUIRE([AC_FUNC_ERROR_AT_LINE])
61   AC_REQUIRE([jm_FUNC_GNU_STRFTIME])
62   AC_REQUIRE([jm_FUNC_MKTIME])
63   AC_REQUIRE([jm_FUNC_FPENDING])
65   AC_REQUIRE([jm_FUNC_GETGROUPS])
66   test -n "$GETGROUPS_LIB" && LIBS="$GETGROUPS_LIB $LIBS"
68   AC_REQUIRE([AC_FUNC_FSEEKO])
69   AC_REQUIRE([AC_FUNC_VPRINTF])
70   AC_REQUIRE([AC_FUNC_ALLOCA])
71   AC_FUNC_GETLOADAVG([lib])
72   AC_REQUIRE([jm_SYS_PROC_UPTIME])
73   AC_REQUIRE([jm_FUNC_FTRUNCATE])
74   AC_REQUIRE([vb_FUNC_RENAME])
76   AC_REPLACE_FUNCS(strcasecmp strncasecmp)
77   AC_REPLACE_FUNCS(dup2)
78   AC_REPLACE_FUNCS(gethostname getusershell)
79   AC_REPLACE_FUNCS(strcspn stpcpy strstr strtol strtoul)
80   AC_REPLACE_FUNCS(strpbrk)
81   AC_REPLACE_FUNCS(euidaccess memcmp rmdir rpmatch strndup strverscmp)
82   AC_REPLACE_FUNCS(atexit)
83   AC_REPLACE_FUNCS(getpass)
85   dnl used by e.g. intl/*domain.c and lib/canon-host.c
86   AC_REPLACE_FUNCS(strdup)
88   AC_REPLACE_FUNCS(memchr memcpy memmove memrchr memset)
89   AC_CHECK_FUNCS(getpagesize)
91   AC_REQUIRE([UTILS_FUNC_MKSTEMP])
93   # By default, argmatch should fail calling usage (1).
94   AC_DEFINE(ARGMATCH_DIE, [usage (1)],
95             [Define to the function xargmatch calls on failures.])
96   AC_DEFINE(ARGMATCH_DIE_DECL, [extern void usage ()],
97             [Define to the declaration of the xargmatch failure function.])
99   dnl Used to define SETVBUF in sys2.h.
100   dnl This evokes the following warning from autoconf:
101   dnl ...: warning: AC_TRY_RUN called without default to allow cross compiling
102   AC_FUNC_SETVBUF_REVERSED
104   # used by sleep and shred
105   # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function.
106   # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.
108   # Save and restore LIBS so e.g., -lrt, isn't added to it.  Otherwise, *all*
109   # programs in the package would end up linked with that potentially-shared
110   # library, inducing unnecessary run-time overhead.
111   fetish_saved_libs=$LIBS
112     AC_SEARCH_LIBS(clock_gettime, [rt posix4],
113                    [LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime])
114     AC_SUBST(LIB_CLOCK_GETTIME)
115     AC_CHECK_FUNCS(clock_gettime clock_settime)
116   LIBS=$fetish_saved_libs
117   AC_CHECK_FUNCS(gettimeofday)
118   AC_FUNC_GETTIMEOFDAY_CLOBBER
120   AC_REQUIRE([AC_FUNC_CLOSEDIR_VOID])
121   AC_REQUIRE([jm_FUNC_UTIME])
123   AC_CHECK_FUNCS( \
124     bcopy \
125     canonicalize_file_name \
126     endgrent \
127     endpwent \
128     fchdir \
129     fdatasync \
130     ftime \
131     ftruncate \
132     getcwd \
133     gethrtime \
134     getmntinfo \
135     hasmntopt \
136     isascii \
137     iswspace \
138     lchown \
139     listmntent \
140     localeconv \
141     memcpy \
142     mempcpy \
143     mkfifo \
144     realpath \
145     resolvepath \
146     sethostname \
147     strchr \
148     strerror \
149     strrchr \
150     sysinfo \
151     wcrtomb \
152     tzset \
153   )
155   AM_FUNC_GETLINE
156   if test $am_cv_func_working_getline != yes; then
157     AC_CHECK_FUNCS(getdelim)
158   fi
159   AC_FUNC_OBSTACK
161   AC_FUNC_STRTOD
162   AC_FUNC_STRNLEN
164   # See if linking `seq' requires -lm.
165   # It does on nearly every system.  The single exception (so far) is
166   # BeOS which has all the math functions in the normal runtime library
167   # and doesn't have a separate math library.
169   AC_SUBST(SEQ_LIBM)
170   ac_seq_body='
171      static double x, y;
172      x = floor (x);
173      x = rint (x);
174      x = modf (x, &y);'
175   AC_TRY_LINK([#include <math.h>], $ac_seq_body, ,
176     [ac_seq_save_LIBS="$LIBS"
177      LIBS="$LIBS -lm"
178      AC_TRY_LINK([#include <math.h>], $ac_seq_body, SEQ_LIBM=-lm)
179      LIBS="$ac_seq_save_LIBS"
180     ])
182   AM_LANGINFO_CODESET
183   jm_GLIBC21
184   AM_ICONV
185   jm_FUNC_UNLINK_BUSY_TEXT
187   # These tests are for df.
188   jm_LIST_MOUNTED_FILESYSTEMS([list_mounted_fs=yes], [list_mounted_fs=no])
189   jm_FSTYPENAME
190   jm_FILE_SYSTEM_USAGE([space=yes], [space=no])
191   if test $list_mounted_fs = yes && test $space = yes; then
192     DF_PROG=df
193     AC_LIBOBJ(fsusage)
194     AC_LIBOBJ(mountlist)
195   fi
196   AC_REQUIRE([jm_AC_DOS])
200 # These tests must be run before any use of AC_CHECK_TYPE,
201 # because that macro compiles code that tests e.g., HAVE_UNISTD_H.
202 # See the definition of ac_includes_default in `configure'.
203 AC_DEFUN([jm_CHECK_ALL_HEADERS],
205   AC_CHECK_HEADERS( \
206     errno.h  \
207     fcntl.h \
208     fenv.h \
209     float.h \
210     limits.h \
211     memory.h \
212     mntent.h \
213     mnttab.h \
214     netdb.h \
215     paths.h \
216     stdlib.h \
217     stddef.h \
218     stdint.h \
219     string.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   )
245 # This macro must be invoked before any tests that run the compiler.
246 AC_DEFUN([jm_CHECK_ALL_TYPES],
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])
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])
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])
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])
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])
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])
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)
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)
301   AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])
302   AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])
304   AC_REQUIRE([AC_HEADER_MAJOR])
305   AC_REQUIRE([AC_HEADER_DIRENT])