id: adjust/restrict smack support to newer versions of libsmack
[platform/upstream/coreutils.git] / m4 / jm-macros.m4
index 63cbff3..649a344 100644 (file)
@@ -1,14 +1,13 @@
-#serial 77   -*- autoconf -*-
+#serial 110   -*- autoconf -*-
 
 dnl Misc type-related macros for coreutils.
 
-# Copyright (C) 1998, 2000, 2001, 2002, 2003, 2004 Free Software
-# Foundation, Inc.
+# Copyright (C) 1998-2013 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
 
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -16,211 +15,205 @@ dnl Misc type-related macros for coreutils.
 # GNU General Public License for more details.
 
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # Written by Jim Meyering.
 
-AC_DEFUN([gl_MACROS],
+AC_DEFUN([coreutils_MACROS],
 [
-  AC_PREREQ(2.58)
-
-  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(MAN)
-  AC_SUBST(DF_PROG)
+  AC_SUBST([MAN])
 
   dnl This macro actually runs replacement code.  See isc-posix.m4.
   AC_REQUIRE([AC_ISC_POSIX])dnl
 
   gl_CHECK_ALL_TYPES
 
-  AC_REQUIRE([gl_HOST_OS])
-  AC_REQUIRE([gl_ASSERT])
-  AC_REQUIRE([gl_CHECK_TYPE_STRUCT_UTIMBUF])
-  AC_REQUIRE([gl_CHECK_TYPE_STRUCT_DIRENT_D_TYPE])
-  AC_REQUIRE([gl_CHECK_TYPE_STRUCT_DIRENT_D_INO])
   AC_REQUIRE([gl_CHECK_DECLS])
 
   AC_REQUIRE([gl_PREREQ])
 
-  AC_REQUIRE([gl_FUNC_DIRFD])
-  AC_REQUIRE([AC_FUNC_ACL])
-  AC_REQUIRE([gl_FUNC_LCHOWN])
-  AC_REQUIRE([fetish_FUNC_RMDIR_NOTEMPTY])
-  AC_REQUIRE([gl_FUNC_CHOWN])
-  AC_REQUIRE([AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK])
-  AC_REQUIRE([AC_FUNC_STRERROR_R])
-  AC_REQUIRE([gl_FUNC_GROUP_MEMBER])
-  AC_REQUIRE([gl_AFS])
-  AC_REQUIRE([gl_AC_FUNC_LINK_FOLLOWS_SYMLINK])
-
-  # This is for od and stat, and any other program that
-  # uses the PRI.MAX macros from inttypes.h.
-  AC_REQUIRE([gt_INTTYPES_PRI])
-
-  AC_REQUIRE([gl_FUNC_GETGROUPS])
-
   AC_REQUIRE([AC_FUNC_FSEEKO])
-  AC_REQUIRE([AC_FUNC_ALLOCA])
-
-  AC_CONFIG_LIBOBJ_DIR([lib])
-  AC_FUNC_GETLOADAVG([lib])
-
-  AC_REQUIRE([gl_SYS_PROC_UPTIME])
-  AC_REQUIRE([gl_FUNC_FTRUNCATE])
 
-  # raise is used by at least sort and ls.
-  AC_REPLACE_FUNCS(raise)
+  # By default, argmatch should fail calling usage (EXIT_FAILURE).
+  AC_DEFINE([ARGMATCH_DIE], [usage (EXIT_FAILURE)],
+            [Define to the function xargmatch calls on failures.])
+  AC_DEFINE([ARGMATCH_DIE_DECL], [void usage (int _e)],
+            [Define to the declaration of the xargmatch failure function.])
 
-  # By default, argmatch should fail calling usage (1).
-  AC_DEFINE(ARGMATCH_DIE, [usage (1)],
-           [Define to the function xargmatch calls on failures.])
-  AC_DEFINE(ARGMATCH_DIE_DECL, [extern void usage ()],
-           [Define to the declaration of the xargmatch failure function.])
+  # used by shred
+  AC_CHECK_FUNCS_ONCE([directio])
+
+  # Used by install.c.
+  coreutils_saved_libs=$LIBS
+    LIBS="$LIBS $LIB_SELINUX"
+    AC_CHECK_FUNCS([matchpathcon_init_prefix], [],
+    [
+      case "$ac_cv_search_setfilecon:$ac_cv_header_selinux_selinux_h" in
+        no:*) # SELinux disabled
+          ;;
+        *:no) # SELinux disabled
+          ;;
+        *)
+        AC_MSG_WARN([SELinux enabled, but matchpathcon_init_prefix not found])
+        AC_MSG_WARN([The install utility may run slowly])
+      esac
+    ])
+  LIBS=$coreutils_saved_libs
+
+  # Used by sort.c.
+  AC_CHECK_FUNCS_ONCE([nl_langinfo])
+  # Used by timeout.c
+  AC_CHECK_FUNCS_ONCE([setrlimit prctl])
+
+  # Used by tail.c.
+  AC_CHECK_FUNCS([inotify_init],
+    [AC_DEFINE([HAVE_INOTIFY], [1],
+     [Define to 1 if you have usable inotify support.])])
+
+  AC_CHECK_FUNCS_ONCE([
+    endgrent
+    endpwent
+    fchown
+    fchmod
+    ftruncate
+    iswspace
+    mkfifo
+    mbrlen
+    setgroups
+    sethostname
+    siginterrupt
+    sync
+    sysctl
+    sysinfo
+    tcgetpgrp
+  ])
 
-  dnl Used to define SETVBUF in sys2.h.
-  dnl This evokes the following warning from autoconf:
-  dnl ...: warning: AC_TRY_RUN called without default to allow cross compiling
-  AC_FUNC_SETVBUF_REVERSED
+  # These checks are for Interix, to avoid its getgr* functions, in favor
+  # of these replacements.  The replacement functions are much more efficient
+  # because they do not query the domain controller for user information
+  # when it is not needed.
+  AC_CHECK_FUNCS_ONCE([
+    getgrgid_nomembers
+    getgrnam_nomembers
+    getgrent_nomembers
+  ])
 
-  # used by sleep and shred
-  AC_REQUIRE([gl_CLOCK_TIME])
-  AC_CHECK_FUNCS_ONCE(gettimeofday)
-  AC_FUNC_GETTIMEOFDAY_CLOBBER
-  # used by shred
-  AC_CHECK_FUNCS_ONCE(directio)
-
-  AC_REQUIRE([AC_FUNC_CLOSEDIR_VOID])
-
-  AC_CHECK_FUNCS_ONCE( \
-    endgrent \
-    endpwent \
-    ftruncate \
-    gethrtime \
-    hasmntopt \
-    isascii \
-    iswspace \
-    lchown \
-    listmntent \
-    localeconv \
-    memcpy \
-    mempcpy \
-    mkfifo \
-    mbrlen \
-    realpath \
-    sethostname \
-    strchr \
-    strerror \
-    strrchr \
-    sysctl \
-    sysinfo \
-    tcgetpgrp \
-    wcrtomb \
-    tzset \
-  )
-
-  AC_FUNC_STRTOD
-
-  AC_REQUIRE([cu_PREREQ_STAT_PROG])
-  AC_REQUIRE([GL_FUNC_GETCWD_PATH_MAX])
-  AC_REQUIRE([GL_FUNC_READDIR])
+  dnl This can't use AC_REQUIRE; I'm not quite sure why.
+  cu_PREREQ_STAT_PROG
 
   # for dd.c and shred.c
-  fetish_saved_libs=$LIBS
+  #
+  # Use fdatasync only if declared.  On MacOS X 10.7, fdatasync exists but
+  # is not declared, and is ineffective.
+  LIB_FDATASYNC=
+  AC_SUBST([LIB_FDATASYNC])
+  AC_CHECK_DECLS_ONCE([fdatasync])
+  if test $ac_cv_have_decl_fdatasync = yes; then
+    coreutils_saved_libs=$LIBS
     AC_SEARCH_LIBS([fdatasync], [rt posix4],
-                  [test "$ac_cv_search_fdatasync" = "none required" ||
-                   LIB_FDATASYNC=$ac_cv_search_fdatasync])
-    AC_SUBST([LIB_FDATASYNC])
-    AC_CHECK_FUNCS(fdatasync)
-  LIBS=$fetish_saved_libs
+                   [test "$ac_cv_search_fdatasync" = "none required" ||
+                    LIB_FDATASYNC=$ac_cv_search_fdatasync])
+    AC_CHECK_FUNCS([fdatasync])
+    LIBS=$coreutils_saved_libs
+  fi
 
-  # See if linking `seq' requires -lm.
+  # Check whether libcap is usable -- for ls --color support
+  LIB_CAP=
+  AC_ARG_ENABLE([libcap],
+    AC_HELP_STRING([--disable-libcap], [disable libcap support]))
+  if test "X$enable_libcap" != "Xno"; then
+    AC_CHECK_LIB([cap], [cap_get_file],
+      [AC_CHECK_HEADER([sys/capability.h],
+        [LIB_CAP=-lcap
+         AC_DEFINE([HAVE_CAP], [1], [libcap usability])]
+      )])
+    if test "X$LIB_CAP" = "X"; then
+      if test "X$enable_libcap" = "Xyes"; then
+        AC_MSG_ERROR([libcap library was not found or not usable])
+      else
+        AC_MSG_WARN([libcap library was not found or not usable.])
+        AC_MSG_WARN([AC_PACKAGE_NAME will be built without capability support.])
+      fi
+    fi
+  else
+    AC_MSG_WARN([libcap support disabled by user])
+  fi
+  AC_SUBST([LIB_CAP])
+
+  # Check whether libsmack is available
+  LIB_SMACK=
+  AC_ARG_ENABLE([libsmack],
+    AC_HELP_STRING([--disable-libsmack], [disable libsmack support]))
+  if test "X$enable_libsmack" != "Xno"; then
+    AC_CHECK_LIB([smack], [smack_new_label_from_self],
+      [AC_CHECK_LIB([smack], [smack_new_label_from_path],
+        [AC_CHECK_HEADER([sys/smack.h],
+          [LIB_SMACK=-lsmack
+           AC_DEFINE([HAVE_SMACK], [1], [libsmack usability])]
+        )])])
+    if test "X$LIB_SMACK" = "X"; then
+      if test "X$enable_libsmack" = "Xyes"; then
+        AC_MSG_ERROR([libsmack library was not found or not usable])
+      fi
+    fi
+  else
+    AC_MSG_WARN([libsmack support disabled by user])
+  fi
+  AC_SUBST([LIB_SMACK])
+
+  # 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_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_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)
+     AC_TRY_LINK([#include <math.h>], [$ac_seq_body], [SEQ_LIBM=-lm])
      LIBS="$ac_seq_save_LIBS"
     ])
 
-  AM_LANGINFO_CODESET
-  gl_GLIBC21
-  AM_ICONV
-  gl_FUNC_UNLINK_BUSY_TEXT
-
-  # These tests are for df.
-  AC_REQUIRE([gl_FSUSAGE])
-  AC_REQUIRE([gl_MOUNTLIST])
-  if test $gl_cv_list_mounted_fs = yes && test $gl_cv_fs_space = yes; then
-    DF_PROG='df$(EXEEXT)'
+  AC_REQUIRE([AM_LANGINFO_CODESET])
+
+  # Accept configure options: --with-tty-group[=GROUP], --without-tty-group
+  # You can determine the group of a TTY via 'stat --format %G /dev/tty'
+  # Omitting this option is equivalent to using --without-tty-group.
+  AC_ARG_WITH([tty-group],
+    AS_HELP_STRING([--with-tty-group[[[=NAME]]]],
+      [group used by system for TTYs, "tty" when not specified]
+      [ (default: do not rely on any group used for TTYs)]),
+    [tty_group_name=$withval],
+    [tty_group_name=no])
+
+  if test "x$tty_group_name" != xno; then
+    if test "x$tty_group_name" = xyes; then
+      tty_group_name=tty
+    fi
+    AC_MSG_NOTICE([TTY group used by system set to "$tty_group_name"])
+    AC_DEFINE_UNQUOTED([TTY_GROUP_NAME], ["$tty_group_name"],
+      [group used by system for TTYs])
   fi
-  AC_REQUIRE([gl_AC_DOS])
-  AC_REQUIRE([AC_FUNC_CANONICALIZE_FILE_NAME])
-
-  # If any of these functions don't exist (e.g. DJGPP 2.03),
-  # use the corresponding stub.
-  AC_CHECK_FUNC([fchdir], , [AC_LIBOBJ(fchdir-stub)])
-
-  AC_REQUIRE([gl_FUNC_FREE])
 ])
 
-# 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([gl_CHECK_ALL_HEADERS],
 [
-  AC_CHECK_HEADERS_ONCE( \
-    errno.h  \
-    fcntl.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/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 \
-  )
-  AC_CHECK_HEADERS(sys/mount.h sys/sysctl.h, [], [],
+  AC_CHECK_HEADERS_ONCE([
+    hurd.h
+    paths.h
+    priv.h
+    stropts.h
+    sys/param.h
+    sys/systeminfo.h
+    syslog.h
+  ])
+  AC_CHECK_HEADERS([sys/sysctl.h], [], [],
     [AC_INCLUDES_DEFAULT
      [#if HAVE_SYS_PARAM_H
        #include <sys/param.h>
@@ -230,61 +223,33 @@ AC_DEFUN([gl_CHECK_ALL_HEADERS],
 # This macro must be invoked before any tests that run the compiler.
 AC_DEFUN([gl_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.
-  AC_REQUIRE([AC_SYS_LARGEFILE])
-
-  dnl This test must precede tests of compiler characteristics like
-  dnl that for the inline keyword, since it may change the degree to
-  dnl which the compiler supports such features.
-  AC_REQUIRE([AM_C_PROTOTYPES])
-
   dnl Checks for typedefs, structures, and compiler characteristics.
-  AC_REQUIRE([AC_C_BIGENDIAN])
-  AC_REQUIRE([AC_C_CONST])
+  AC_REQUIRE([gl_BIGENDIAN])
   AC_REQUIRE([AC_C_VOLATILE])
   AC_REQUIRE([AC_C_INLINE])
-  AC_REQUIRE([AC_C_LONG_DOUBLE])
+  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
 
   AC_REQUIRE([gl_CHECK_ALL_HEADERS])
-  AC_REQUIRE([AC_HEADER_DIRENT])
-  AC_REQUIRE([AC_HEADER_STDC])
   AC_CHECK_MEMBERS(
-    [struct stat.st_author,
-     struct stat.st_blksize],,,
+    [struct stat.st_author],,,
     [$ac_includes_default
 #include <sys/stat.h>
   ])
   AC_REQUIRE([AC_STRUCT_ST_BLOCKS])
 
-  AC_REQUIRE([AC_HEADER_STAT])
-  AC_REQUIRE([AC_STRUCT_ST_MTIM_NSEC])
-  AC_REQUIRE([AC_STRUCT_ST_DM_MODE])
-
   AC_REQUIRE([AC_TYPE_GETGROUPS])
   AC_REQUIRE([AC_TYPE_MBSTATE_T])
   AC_REQUIRE([AC_TYPE_MODE_T])
   AC_REQUIRE([AC_TYPE_OFF_T])
   AC_REQUIRE([AC_TYPE_PID_T])
-  AC_REQUIRE([AC_TYPE_SIGNAL])
   AC_REQUIRE([AC_TYPE_SIZE_T])
   AC_REQUIRE([AC_TYPE_UID_T])
-  AC_CHECK_TYPE(ino_t, unsigned long int)
+  AC_CHECK_TYPE([ino_t], [unsigned long int])
 
-  gt_TYPE_SSIZE_T
-
-  dnl This relies on the fact that autoconf 2.14a's implementation of
+  dnl This relies on the fact that Autoconf's implementation of
   dnl AC_CHECK_TYPE checks includes unistd.h.
-  AC_CHECK_TYPE(major_t, unsigned int)
-  AC_CHECK_TYPE(minor_t, unsigned int)
-
-  AC_REQUIRE([gl_AC_TYPE_UINT32_T])
-  AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])
-  AC_REQUIRE([gl_AC_TYPE_UINTPTR_T])
-  AC_REQUIRE([gl_AC_TYPE_UNSIGNED_LONG_LONG])
+  AC_CHECK_TYPE([major_t], [unsigned int])
+  AC_CHECK_TYPE([minor_t], [unsigned int])
 
   AC_REQUIRE([AC_HEADER_MAJOR])
-  AC_REQUIRE([AC_HEADER_DIRENT])
-
 ])