*** empty log message ***
[coreutils.git] / m4 / jm-macros.m4
blob602c440b63b66c7d2b4a547e6ce036437335109c
1 #serial 49   -*- autoconf -*-
3 dnl Misc type-related macros for fileutils, sh-utils, textutils.
5 AC_DEFUN([jm_MACROS],
7   AC_PREREQ(2.53b)
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([AC_FUNC_REALLOC])
47   AC_REQUIRE([AC_FUNC_MALLOC])
48   AC_REQUIRE([AC_FUNC_STRERROR_R])
49   AC_REQUIRE([jm_FUNC_NANOSLEEP])
50   AC_REQUIRE([jm_FUNC_MEMCMP])
51   AC_REQUIRE([jm_FUNC_GLIBC_UNLOCKED_IO])
52   AC_REQUIRE([AC_FUNC_FNMATCH_GNU])
53   AC_REQUIRE([jm_FUNC_GROUP_MEMBER])
54   AC_REQUIRE([jm_FUNC_PUTENV])
55   AC_REQUIRE([jm_AFS])
56   AC_REQUIRE([jm_AC_PREREQ_XSTRTOUMAX])
57   AC_REQUIRE([jm_AC_PREREQ_XSTRTOIMAX])
58   AC_REQUIRE([jm_AC_FUNC_LINK_FOLLOWS_SYMLINK])
59   AC_REQUIRE([AC_FUNC_ERROR_AT_LINE])
60   AC_REQUIRE([jm_FUNC_GNU_STRFTIME])
61   AC_REQUIRE([jm_FUNC_MKTIME])
62   AC_REQUIRE([jm_FUNC_FPENDING])
64   AC_REQUIRE([jm_FUNC_GETGROUPS])
65   test -n "$GETGROUPS_LIB" && LIBS="$GETGROUPS_LIB $LIBS"
67   AC_REQUIRE([AC_FUNC_FSEEKO])
68   AC_REQUIRE([AC_FUNC_VPRINTF])
69   AC_REQUIRE([AC_FUNC_ALLOCA])
70   AC_FUNC_GETLOADAVG([lib])
71   AC_REQUIRE([jm_SYS_PROC_UPTIME])
72   AC_REQUIRE([jm_FUNC_FTRUNCATE])
73   AC_REQUIRE([vb_FUNC_RENAME])
75   AC_REPLACE_FUNCS(strcasecmp strncasecmp)
76   AC_REPLACE_FUNCS(dup2)
77   AC_REPLACE_FUNCS(gethostname getusershell)
78   AC_REPLACE_FUNCS(sig2str)
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     sysctl \
151     sysinfo \
152     wcrtomb \
153     tzset \
154   )
156   AM_FUNC_GETLINE
157   if test $am_cv_func_working_getline != yes; then
158     AC_CHECK_FUNCS(getdelim)
159   fi
160   AC_FUNC_OBSTACK
162   AC_FUNC_STRTOD
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     hurd.h \
211     limits.h \
212     memory.h \
213     mntent.h \
214     mnttab.h \
215     netdb.h \
216     paths.h \
217     stdlib.h \
218     stddef.h \
219     stdint.h \
220     string.h \
221     sys/filsys.h \
222     sys/fs/s5param.h \
223     sys/fs_types.h \
224     sys/fstyp.h \
225     sys/ioctl.h \
226     sys/mntent.h \
227     sys/mount.h \
228     sys/param.h \
229     sys/resource.h \
230     sys/socket.h \
231     sys/statfs.h \
232     sys/statvfs.h \
233     sys/sysctl.h \
234     sys/systeminfo.h \
235     sys/time.h \
236     sys/timeb.h \
237     sys/vfs.h \
238     sys/wait.h \
239     syslog.h \
240     termios.h \
241     unistd.h \
242     utime.h \
243     values.h \
244   )
247 # This macro must be invoked before any tests that run the compiler.
248 AC_DEFUN([jm_CHECK_ALL_TYPES],
250   dnl This test must come as early as possible after the compiler configuration
251   dnl tests, because the choice of the file model can (in principle) affect
252   dnl whether functions and headers are available, whether they work, etc.
253   AC_REQUIRE([AC_SYS_LARGEFILE])
255   dnl This test must precede tests of compiler characteristics like
256   dnl that for the inline keyword, since it may change the degree to
257   dnl which the compiler supports such features.
258   AC_REQUIRE([AM_C_PROTOTYPES])
260   dnl Checks for typedefs, structures, and compiler characteristics.
261   AC_REQUIRE([AC_C_BIGENDIAN])
262   AC_REQUIRE([AC_C_CONST])
263   AC_REQUIRE([AC_C_VOLATILE])
264   AC_REQUIRE([AC_C_INLINE])
265   AC_REQUIRE([AC_C_LONG_DOUBLE])
267   AC_REQUIRE([jm_CHECK_ALL_HEADERS])
268   AC_REQUIRE([AC_HEADER_DIRENT])
269   AC_REQUIRE([AC_HEADER_STDC])
270   AC_CHECK_MEMBERS(
271     [struct stat.st_author,
272      struct stat.st_blksize],,,
273     [$ac_includes_default
274 #include <sys/stat.h>
275   ])
276   AC_REQUIRE([AC_STRUCT_ST_BLOCKS])
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])
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)
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)
300   AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])
301   AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])
303   AC_REQUIRE([AC_HEADER_MAJOR])
304   AC_REQUIRE([AC_HEADER_DIRENT])