An independent .m4 file for each module.
[gnulib.git] / m4 / jm-macros.m4
index 317ea28..b2d55d0 100644 (file)
@@ -1,16 +1,17 @@
-#serial 14
+#serial 49   -*- autoconf -*-
 
 dnl Misc type-related macros for fileutils, sh-utils, textutils.
 
-AC_DEFUN(jm_MACROS,
+AC_DEFUN([jm_MACROS],
 [
-  AC_PREREQ(2.14a)
+  AC_PREREQ(2.52g)
 
   GNU_PACKAGE="GNU $PACKAGE"
   AC_DEFINE_UNQUOTED(GNU_PACKAGE, "$GNU_PACKAGE",
     [The concatenation of the strings `GNU ', and PACKAGE.])
   AC_SUBST(GNU_PACKAGE)
 
+  AM_MISSING_PROG(HELP2MAN, help2man)
   AC_SUBST(OPTIONAL_BIN_PROGS)
   AC_SUBST(OPTIONAL_BIN_ZCRIPTS)
   AC_SUBST(MAN)
@@ -19,49 +20,13 @@ AC_DEFUN(jm_MACROS,
   dnl This macro actually runs replacement code.  See isc-posix.m4.
   AC_REQUIRE([AC_ISC_POSIX])dnl
 
-  AC_CHECK_HEADERS( \
-    errno.h  \
-    fcntl.h \
-    fenv.h \
-    float.h \
-    limits.h \
-    memory.h \
-    mntent.h \
-    mnttab.h \
-    netdb.h \
-    paths.h \
-    stdlib.h \
-    stddef.h \
-    string.h \
-    sys/acl.h \
-    sys/filsys.h \
-    sys/fs/s5param.h \
-    sys/fs_types.h \
-    sys/fstyp.h \
-    sys/ioctl.h \
-    sys/mntent.h \
-    sys/mount.h \
-    sys/param.h \
-    sys/socket.h \
-    sys/statfs.h \
-    sys/statvfs.h \
-    sys/systeminfo.h \
-    sys/time.h \
-    sys/timeb.h \
-    sys/vfs.h \
-    sys/wait.h \
-    syslog.h \
-    termios.h \
-    unistd.h \
-    utime.h \
-    values.h \
-  )
-
-  jm_INCLUDED_REGEX([lib/regex.c])
+  jm_CHECK_ALL_TYPES
+  gl_REGEX
 
+  AC_REQUIRE([UTILS_HOST_OS])
+  AC_REQUIRE([UTILS_FUNC_MKDIR_TRAILING_SLASH])
   AC_REQUIRE([jm_BISON])
   AC_REQUIRE([jm_ASSERT])
-  AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
   AC_REQUIRE([jm_CHECK_TYPE_STRUCT_UTIMBUF])
   AC_REQUIRE([jm_CHECK_TYPE_STRUCT_DIRENT_D_TYPE])
   AC_REQUIRE([jm_CHECK_TYPE_STRUCT_DIRENT_D_INO])
@@ -69,51 +34,62 @@ AC_DEFUN(jm_MACROS,
 
   AC_REQUIRE([jm_PREREQ])
 
+  AC_REQUIRE([UTILS_FUNC_DIRFD])
+  AC_REQUIRE([AC_FUNC_ACL])
   AC_REQUIRE([jm_FUNC_LCHOWN])
+  AC_REQUIRE([fetish_FUNC_RMDIR_NOTEMPTY])
   AC_REQUIRE([jm_FUNC_CHOWN])
-  AC_REQUIRE([jm_FUNC_MKTIME])
+  AC_REQUIRE([gl_FUNC_MKTIME])
   AC_REQUIRE([jm_FUNC_LSTAT])
-  AC_REQUIRE([jm_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK])
+  AC_REQUIRE([AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK])
   AC_REQUIRE([jm_FUNC_STAT])
   AC_REQUIRE([jm_FUNC_REALLOC])
   AC_REQUIRE([jm_FUNC_MALLOC])
-  AC_REQUIRE([jm_FUNC_STRERROR_R])
+  AC_REQUIRE([AC_FUNC_STRERROR_R])
   AC_REQUIRE([jm_FUNC_NANOSLEEP])
   AC_REQUIRE([jm_FUNC_READDIR])
   AC_REQUIRE([jm_FUNC_MEMCMP])
   AC_REQUIRE([jm_FUNC_GLIBC_UNLOCKED_IO])
-  AC_REQUIRE([jm_FUNC_FNMATCH])
+  AC_REQUIRE([AC_FUNC_FNMATCH_GNU])
   AC_REQUIRE([jm_FUNC_GROUP_MEMBER])
   AC_REQUIRE([jm_FUNC_PUTENV])
   AC_REQUIRE([jm_AFS])
   AC_REQUIRE([jm_AC_PREREQ_XSTRTOUMAX])
+  AC_REQUIRE([jm_AC_PREREQ_XSTRTOIMAX])
   AC_REQUIRE([jm_AC_FUNC_LINK_FOLLOWS_SYMLINK])
-  AC_REQUIRE([AM_FUNC_ERROR_AT_LINE])
+  AC_REQUIRE([AC_FUNC_ERROR_AT_LINE])
   AC_REQUIRE([jm_FUNC_GNU_STRFTIME])
-  AC_REQUIRE([jm_FUNC_MKTIME])
+  AC_REQUIRE([jm_FUNC_FPENDING])
 
   AC_REQUIRE([jm_FUNC_GETGROUPS])
   test -n "$GETGROUPS_LIB" && LIBS="$GETGROUPS_LIB $LIBS"
 
+  AC_REQUIRE([AC_FUNC_FSEEKO])
   AC_REQUIRE([AC_FUNC_VPRINTF])
   AC_REQUIRE([AC_FUNC_ALLOCA])
-  AC_REQUIRE([AM_FUNC_GETLOADAVG])
+  AC_FUNC_GETLOADAVG([lib])
   AC_REQUIRE([jm_SYS_PROC_UPTIME])
   AC_REQUIRE([jm_FUNC_FTRUNCATE])
+  AC_REQUIRE([vb_FUNC_RENAME])
 
   AC_REPLACE_FUNCS(strcasecmp strncasecmp)
   AC_REPLACE_FUNCS(dup2)
   AC_REPLACE_FUNCS(gethostname getusershell)
-  AC_REPLACE_FUNCS(stime strcspn stpcpy strstr strtol strtoul)
+  AC_REPLACE_FUNCS(sig2str)
+  AC_REPLACE_FUNCS(strcspn stpcpy strstr strtol strtoul)
   AC_REPLACE_FUNCS(strpbrk)
-  AC_REPLACE_FUNCS(euidaccess memcmp mkdir rmdir rpmatch strndup strverscmp)
+  AC_REPLACE_FUNCS(euidaccess memcmp rmdir rpmatch strndup strverscmp)
+  AC_REPLACE_FUNCS(atexit)
+  AC_REPLACE_FUNCS(getpass)
 
   dnl used by e.g. intl/*domain.c and lib/canon-host.c
   AC_REPLACE_FUNCS(strdup)
 
-  AC_REPLACE_FUNCS(memchr memmove memcpy memset)
+  AC_REPLACE_FUNCS(memchr memcpy memmove memrchr memset)
   AC_CHECK_FUNCS(getpagesize)
 
+  AC_REQUIRE([UTILS_FUNC_MKSTEMP])
+
   # By default, argmatch should fail calling usage (1).
   AC_DEFINE(ARGMATCH_DIE, [usage (1)],
            [Define to the function xargmatch calls on failures.])
@@ -128,21 +104,29 @@ AC_DEFUN(jm_MACROS,
   # used by sleep and shred
   # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function.
   # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.
-  AC_SEARCH_LIBS(clock_gettime, [rt posix4])
-  AC_CHECK_FUNCS(clock_gettime)
+
+  # Save and restore LIBS so e.g., -lrt, isn't added to it.  Otherwise, *all*
+  # programs in the package would end up linked with that potentially-shared
+  # library, inducing unnecessary run-time overhead.
+  fetish_saved_libs=$LIBS
+    AC_SEARCH_LIBS(clock_gettime, [rt posix4],
+                  [LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime])
+    AC_SUBST(LIB_CLOCK_GETTIME)
+    AC_CHECK_FUNCS(clock_gettime clock_settime)
+  LIBS=$fetish_saved_libs
   AC_CHECK_FUNCS(gettimeofday)
+  AC_FUNC_GETTIMEOFDAY_CLOBBER
 
   AC_REQUIRE([AC_FUNC_CLOSEDIR_VOID])
   AC_REQUIRE([jm_FUNC_UTIME])
 
   AC_CHECK_FUNCS( \
-    acl \
     bcopy \
+    canonicalize_file_name \
     endgrent \
     endpwent \
     fchdir \
     fdatasync \
-    fseeko \
     ftime \
     ftruncate \
     getcwd \
@@ -150,6 +134,7 @@ AC_DEFUN(jm_MACROS,
     getmntinfo \
     hasmntopt \
     isascii \
+    iswspace \
     lchown \
     listmntent \
     localeconv \
@@ -163,6 +148,7 @@ AC_DEFUN(jm_MACROS,
     strerror \
     strrchr \
     sysinfo \
+    wcrtomb \
     tzset \
   )
 
@@ -170,37 +156,95 @@ AC_DEFUN(jm_MACROS,
   if test $am_cv_func_working_getline != yes; then
     AC_CHECK_FUNCS(getdelim)
   fi
-  AM_FUNC_OBSTACK
-
-  AM_FUNC_STRTOD
-  AC_SUBST(POW_LIBM)
-  test $am_cv_func_strtod_needs_libm = yes && POW_LIBM=-lm
-
-  jm_LANGINFO_CODESET
-
-  jm_ICONV
+  AC_FUNC_OBSTACK
+
+  AC_FUNC_STRTOD
+
+  # See if linking `seq' requires -lm.
+  # It does on nearly every system.  The single exception (so far) is
+  # BeOS which has all the math functions in the normal runtime library
+  # and doesn't have a separate math library.
+
+  AC_SUBST(SEQ_LIBM)
+  ac_seq_body='
+     static double x, y;
+     x = floor (x);
+     x = rint (x);
+     x = modf (x, &y);'
+  AC_TRY_LINK([#include <math.h>], $ac_seq_body, ,
+    [ac_seq_save_LIBS="$LIBS"
+     LIBS="$LIBS -lm"
+     AC_TRY_LINK([#include <math.h>], $ac_seq_body, SEQ_LIBM=-lm)
+     LIBS="$ac_seq_save_LIBS"
+    ])
+
+  AM_LANGINFO_CODESET
+  jm_GLIBC21
+  AM_ICONV
+  jm_FUNC_UNLINK_BUSY_TEXT
 
   # These tests are for df.
   jm_LIST_MOUNTED_FILESYSTEMS([list_mounted_fs=yes], [list_mounted_fs=no])
   jm_FSTYPENAME
   jm_FILE_SYSTEM_USAGE([space=yes], [space=no])
   if test $list_mounted_fs = yes && test $space = yes; then
-    DF_PROG="df"
-    LIBOBJS="$LIBOBJS fsusage.$ac_objext"
-    LIBOBJS="$LIBOBJS mountlist.$ac_objext"
+    DF_PROG=df
+    AC_LIBOBJ(fsusage)
+    AC_LIBOBJ(mountlist)
   fi
+  AC_REQUIRE([jm_AC_DOS])
 
 ])
 
-# This macro must be invoked before any tests that run the compiler.
-AC_DEFUN(jm_CHECK_ALL_TYPES,
+# These tests must be run before any use of AC_CHECK_TYPE,
+# because that macro compiles code that tests e.g., HAVE_UNISTD_H.
+# See the definition of ac_includes_default in `configure'.
+AC_DEFUN([jm_CHECK_ALL_HEADERS],
 [
-  # Enable GNU extensions.
-  # Define this here, not in acconfig's @TOP@ section, since definitions
-  # in the latter don't make it into the configure-time tests.
-  AC_DEFINE([_GNU_SOURCE], 1,
-    [Enable GNU extensions on systems that have them.])
+  AC_CHECK_HEADERS( \
+    errno.h  \
+    fcntl.h \
+    fenv.h \
+    float.h \
+    hurd.h \
+    limits.h \
+    memory.h \
+    mntent.h \
+    mnttab.h \
+    netdb.h \
+    paths.h \
+    stdlib.h \
+    stddef.h \
+    stdint.h \
+    string.h \
+    sys/filsys.h \
+    sys/fs/s5param.h \
+    sys/fs_types.h \
+    sys/fstyp.h \
+    sys/ioctl.h \
+    sys/mntent.h \
+    sys/mount.h \
+    sys/param.h \
+    sys/resource.h \
+    sys/socket.h \
+    sys/statfs.h \
+    sys/statvfs.h \
+    sys/systeminfo.h \
+    sys/time.h \
+    sys/timeb.h \
+    sys/vfs.h \
+    sys/wait.h \
+    syslog.h \
+    termios.h \
+    unistd.h \
+    utime.h \
+    values.h \
+  )
+])
 
+# This macro must be invoked before any tests that run the compiler.
+AC_DEFUN([jm_CHECK_ALL_TYPES],
+[
   dnl This test must come as early as possible after the compiler configuration
   dnl tests, because the choice of the file model can (in principle) affect
   dnl whether functions and headers are available, whether they work, etc.
@@ -213,15 +257,18 @@ AC_DEFUN(jm_CHECK_ALL_TYPES,
 
   dnl Checks for typedefs, structures, and compiler characteristics.
   AC_REQUIRE([AC_C_BIGENDIAN])
-  AC_REQUIRE([AC_PROG_CC_STDC])
   AC_REQUIRE([AC_C_CONST])
   AC_REQUIRE([AC_C_VOLATILE])
   AC_REQUIRE([AC_C_INLINE])
   AC_REQUIRE([AC_C_LONG_DOUBLE])
 
+  AC_REQUIRE([jm_CHECK_ALL_HEADERS])
   AC_REQUIRE([AC_HEADER_DIRENT])
   AC_REQUIRE([AC_HEADER_STDC])
-  AC_CHECK_MEMBERS((struct stat.st_blksize),,,[$ac_includes_default
+  AC_CHECK_MEMBERS(
+    [struct stat.st_author,
+     struct stat.st_blksize],,,
+    [$ac_includes_default
 #include <sys/stat.h>
   ])
   AC_REQUIRE([AC_STRUCT_ST_BLOCKS])
@@ -245,6 +292,8 @@ AC_DEFUN(jm_CHECK_ALL_TYPES,
   dnl This relies on the fact that autoconf 2.14a's implementation of
   dnl AC_CHECK_TYPE checks includes unistd.h.
   AC_CHECK_TYPE(ssize_t, int)
+  AC_CHECK_TYPE(major_t, unsigned int)
+  AC_CHECK_TYPE(minor_t, unsigned int)
 
   AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])
   AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])