The `regex' struct is both input and output.
[gnulib.git] / m4 / jm-macros.m4
1 #serial 49   -*- autoconf -*-
2
3 dnl Misc type-related macros for fileutils, sh-utils, textutils.
4
5 AC_DEFUN([jm_MACROS],
6 [
7   AC_PREREQ(2.52g)
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   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)
19
20   dnl This macro actually runs replacement code.  See isc-posix.m4.
21   AC_REQUIRE([AC_ISC_POSIX])dnl
22
23   jm_CHECK_ALL_TYPES
24   gl_REGEX
25
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])
34
35   AC_REQUIRE([jm_PREREQ])
36
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([gl_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([AC_FUNC_FNMATCH_GNU])
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_FPENDING])
63
64   AC_REQUIRE([jm_FUNC_GETGROUPS])
65   test -n "$GETGROUPS_LIB" && LIBS="$GETGROUPS_LIB $LIBS"
66
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])
74
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)
84
85   dnl used by e.g. intl/*domain.c and lib/canon-host.c
86   AC_REPLACE_FUNCS(strdup)
87
88   AC_REPLACE_FUNCS(memchr memcpy memmove memrchr memset)
89   AC_CHECK_FUNCS(getpagesize)
90
91   AC_REQUIRE([UTILS_FUNC_MKSTEMP])
92
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.])
98
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
103
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.
107
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
119
120   AC_REQUIRE([AC_FUNC_CLOSEDIR_VOID])
121   AC_REQUIRE([jm_FUNC_UTIME])
122
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   )
154
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
160
161   AC_FUNC_STRTOD
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     hurd.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   )
243 ])
244
245 # This macro must be invoked before any tests that run the compiler.
246 AC_DEFUN([jm_CHECK_ALL_TYPES],
247 [
248   dnl This test must come as early as possible after the compiler configuration
249   dnl tests, because the choice of the file model can (in principle) affect
250   dnl whether functions and headers are available, whether they work, etc.
251   AC_REQUIRE([AC_SYS_LARGEFILE])
252
253   dnl This test must precede tests of compiler characteristics like
254   dnl that for the inline keyword, since it may change the degree to
255   dnl which the compiler supports such features.
256   AC_REQUIRE([AM_C_PROTOTYPES])
257
258   dnl Checks for typedefs, structures, and compiler characteristics.
259   AC_REQUIRE([AC_C_BIGENDIAN])
260   AC_REQUIRE([AC_C_CONST])
261   AC_REQUIRE([AC_C_VOLATILE])
262   AC_REQUIRE([AC_C_INLINE])
263   AC_REQUIRE([AC_C_LONG_DOUBLE])
264
265   AC_REQUIRE([jm_CHECK_ALL_HEADERS])
266   AC_REQUIRE([AC_HEADER_DIRENT])
267   AC_REQUIRE([AC_HEADER_STDC])
268   AC_CHECK_MEMBERS(
269     [struct stat.st_author,
270      struct stat.st_blksize],,,
271     [$ac_includes_default
272 #include <sys/stat.h>
273   ])
274   AC_REQUIRE([AC_STRUCT_ST_BLOCKS])
275
276   AC_REQUIRE([AC_STRUCT_TM])
277   AC_REQUIRE([AC_STRUCT_TIMEZONE])
278   AC_REQUIRE([AC_HEADER_STAT])
279   AC_REQUIRE([AC_STRUCT_ST_MTIM_NSEC])
280   AC_REQUIRE([AC_STRUCT_ST_DM_MODE])
281   AC_REQUIRE([jm_CHECK_TYPE_STRUCT_TIMESPEC])
282
283   AC_REQUIRE([AC_TYPE_GETGROUPS])
284   AC_REQUIRE([AC_TYPE_MODE_T])
285   AC_REQUIRE([AC_TYPE_OFF_T])
286   AC_REQUIRE([AC_TYPE_PID_T])
287   AC_REQUIRE([AC_TYPE_SIGNAL])
288   AC_REQUIRE([AC_TYPE_SIZE_T])
289   AC_REQUIRE([AC_TYPE_UID_T])
290   AC_CHECK_TYPE(ino_t, unsigned long)
291
292   dnl This relies on the fact that autoconf 2.14a's implementation of
293   dnl AC_CHECK_TYPE checks includes unistd.h.
294   AC_CHECK_TYPE(ssize_t, int)
295   AC_CHECK_TYPE(major_t, unsigned int)
296   AC_CHECK_TYPE(minor_t, unsigned int)
297
298   AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])
299   AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])
300
301   AC_REQUIRE([AC_HEADER_MAJOR])
302   AC_REQUIRE([AC_HEADER_DIRENT])
303
304 ])