Add macro %isu_package to generate ISU Package
[platform/upstream/rpm.git] / configure.ac
index 0215e34..0c29311 100644 (file)
@@ -1,11 +1,13 @@
 AC_PREREQ(2.61)
-AC_INIT(rpm, 4.8.0-beta1, rpm-maint@lists.rpm.org)
+AC_INIT(rpm, 4.14.1, rpm-maint@lists.rpm.org)
 
 AC_CONFIG_SRCDIR([rpmqv.c])
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_MACRO_DIR([m4])
 
-AM_INIT_AUTOMAKE([1.10 foreign tar-ustar dist-bzip2 subdir-objects nostdinc])
+AM_INIT_AUTOMAKE([1.10 foreign tar-pax dist-bzip2 subdir-objects nostdinc])
+dnl Allow silent build on automake versions that support it
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES])
 
 AC_CONFIG_TESTDIR(tests)
 
@@ -13,6 +15,8 @@ AC_USE_SYSTEM_EXTENSIONS
 
 AC_DISABLE_STATIC
 
+PKG_PROG_PKG_CONFIG
+
 dnl Checks for programs.
 AC_PROG_CXX
 AC_PROG_AWK
@@ -33,24 +37,24 @@ fi
 AS=${AS-as}
 AC_SUBST(AS)
 if test "$GCC" = yes; then
-    CFLAGS="$CFLAGS -fPIC -DPIC -D_REENTRANT -Wall -Wpointer-arith -Wmissing-prototypes -Wno-char-subscripts"
-    # XXX disabled for now due to noise from NSPR headers
-    # CFLAGS="$CFLAGS -Wstrict-prototypes"
-    cflags_to_try="-fno-strict-aliasing -fstack-protector -Wempty-body"
+    cflags_to_try="-fno-strict-aliasing -fstack-protector-strong -Wempty-body"
     AC_MSG_CHECKING([supported compiler flags])
     old_cflags=$CFLAGS
     echo
     for flag in $cflags_to_try; do
-        CFLAGS="$CFLAGS $flag"
-        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],[
+        CFLAGS="$CFLAGS $flag -Werror"
+        AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[#include <alloca.h>
+                                               alloca(100);]])],[
                 echo "   $flag"
                 RPMCFLAGS="$RPMCFLAGS $flag"
         ],[])
         CFLAGS=$old_cflags
     done
-    CFLAGS="$CFLAGS $RPMCFLAGS"
+    RPMCFLAGS="-fPIC -DPIC -D_REENTRANT -Wall -Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes $RPMCFLAGS"
+    CFLAGS="$RPMCFLAGS"
 fi
 export CFLAGS
+AC_SUBST(RPMCFLAGS)
 
 AC_SYS_LARGEFILE
 
@@ -89,6 +93,7 @@ fi
 dnl
 dnl Find some common programs
 dnl
+AC_PATH_PROGS(__7ZIP, [7zip 7za 7z], /usr/bin/7za, $MYPATH)
 AC_PATH_PROG(__BZIP2, bzip2, /usr/bin/bzip2, $MYPATH)
 AC_PATH_PROG(__CAT, cat, /bin/cat, $MYPATH)
 AC_PATH_PROG(__CHGRP, chgrp, /bin/chgrp, $MYPATH)
@@ -98,28 +103,21 @@ AC_PATH_PROG(__CP, cp, /bin/cp, $MYPATH)
 AC_PATH_PROG(__CPIO, cpio, /bin/cpio, $MYPATH)
 AC_PATH_PROG(__CURL, curl, /usr/bin/curl, $MYPATH)
 AC_PATH_PROG(__FILE, file, /usr/bin/file, $MYPATH)
-AC_PATH_PROG(__GPG, gpg, /usr/bin/gpg, $MYPATH)
+AC_PATH_PROGS(__GPG, gpg2 gpg, /usr/bin/gpg2, $MYPATH)
 AC_PATH_PROG(__GREP, grep, /bin/grep, $MYPATH)
 AC_PATH_PROG(__GZIP, gzip, /bin/gzip, $MYPATH)
 AC_PATH_PROG(__UNZIP, unzip, /usr/bin/unzip, $MYPATH)
-
 AC_PATH_PROG(__ID, id, /usr/bin/id, $MYPATH)
-AC_MSG_CHECKING(checking whether id supports -u)
-    if ${__ID} -u 2>&1 > /dev/null ; then
-       __ID_U="%{__id} -u"
-       AC_MSG_RESULT(yes)
-    else
-       __ID_U="%{__id} | %{__sed} 's/[[^=]]*=\\\\([[0-9]][[0-9]]*\\\\).*$/\\\\1/'"
-       AC_MSG_RESULT(no)
-    fi
-AC_SUBST(__ID_U)
-
 AC_PATH_PROG(__INSTALL, install, /usr/bin/install, $MYPATH)
+AC_PATH_PROG(__LRZIP, lrzip, /usr/bin/lrzip, $MYPATH)
+AC_PATH_PROG(__LZIP, lzip, /usr/bin/lzip, $MYPATH)
 AC_PATH_PROG(__XZ, xz, /usr/bin/xz, $MYPATH)
+AC_PATH_PROG(__GEM, gem, /usr/bin/gem, $MYPATH)
 AC_PATH_PROG(__MAKE, make, /usr/bin/make, $MYPATH)
 AC_PATH_PROG(__MKDIR, mkdir, /bin/mkdir, $MYPATH)
 AC_PATH_PROG(__MV, mv, /bin/mv, $MYPATH)
 AC_PATH_PROG(__PATCH, patch, /usr/bin/patch, $MYPATH)
+AC_PATH_PROG(__RESTORECON, restorecon, /sbin/restorecon, $MYPATH)
 AC_MSG_CHECKING(old version of patch)
     PATCHVERSION=`patch --version 2>&1`
 
@@ -137,15 +135,24 @@ AC_PATH_PROG(__PYTHON, python, /usr/bin/python, $MYPATH)
 AC_PATH_PROG(__RM, rm, /bin/rm, $MYPATH)
 AC_PATH_PROG(__RSH, rsh, /usr/bin/rsh, $MYPATH)
 AC_PATH_PROG(__SED, sed, /bin/sed, $MYPATH)
+AC_PATH_PROG(__SEMODULE, semodule, /usr/bin/semodule, $MYPATH)
 AC_PATH_PROG(__SSH, ssh, /usr/bin/ssh, $MYPATH)
 AC_PATH_PROG(__TAR, tar, /bin/tar, $MYPATH)
+AC_PATH_PROG(__ZSTD, zstd, /usr/bin/zstd, $MYPATH)
 
 AC_PATH_PROG(__LD, ld, /usr/bin/ld, $MYPATH)
 AC_PATH_PROG(__NM, nm, /usr/bin/nm, $MYPATH)
 AC_PATH_PROG(__OBJCOPY, objcopy, /usr/bin/objcopy, $MYPATH)
 AC_PATH_PROG(__OBJDUMP, objdump, /usr/bin/objdump, $MYPATH)
 AC_PATH_PROG(__STRIP, strip, /usr/bin/strip, $MYPATH)
-AC_PATH_PROG(__FAKECHROOT, fakechroot, /usr/bin/fakechroot, $MYPATH)
+
+AC_PATH_PROG(__GIT, git, /usr/bin/git, $MYPATH)
+AC_PATH_PROG(__HG, hg, /usr/bin/hg, $MYPATH)
+AC_PATH_PROG(__BZR, bzr, /usr/bin/bzr, $MYPATH)
+AC_PATH_PROG(__QUILT, quilt, /usr/bin/quilt, $MYPATH)
+
+AC_PATH_PROG(__FAKECHROOT, fakechroot, no, $MYPATH)
+AM_CONDITIONAL(HAVE_FAKECHROOT, [test "$__FAKECHROOT" != "no"])
 
 dnl see if we have a mkdir that supports `-p' for rpmbuild's purposes
 AC_PROG_MKDIR_P
@@ -175,6 +182,8 @@ AC_CHECK_HEADERS([zlib.h],[
 dnl zlib-1.0.4 has not gzseek
     AC_CHECK_LIB(${zlib}, gzseek, [AC_DEFINE(HAVE_GZSEEK, 1, [Define as 1 if your zlib has gzseek()])])
   ])
+],[
+  AC_MSG_ERROR([missing required header zlib.h])
 ])
 
 AC_SUBST(WITH_ZLIB_INCLUDE)
@@ -184,13 +193,7 @@ AC_SUBST(WITH_ZLIB_LIB)
 # Check for bzip2 library.
 
 AC_CHECK_HEADERS([bzlib.h],[
-  AC_CHECK_LIB(bz2, bzread, [WITH_BZ2_LIB=-lbz2],
-  [
-    AC_CHECK_LIB(bz2, BZ2_bzread,[ 
-      WITH_BZ2_LIB="-lbz2"
-      AC_DEFINE(HAVE_BZ2_1_0, 1, [Define as 1 if you bzip2 1.0])
-    ]) 
-  ])
+  AC_CHECK_LIB(bz2, BZ2_bzread, [WITH_BZ2_LIB=-lbz2])
 ])
 AC_SUBST(WITH_BZ2_LIB)
 
@@ -203,6 +206,31 @@ AC_CHECK_HEADERS([lzma.h],[
 AC_SUBST(WITH_LZMA_LIB)
 
 #=================
+# Check for zstd.
+
+AC_ARG_ENABLE([zstd],
+              [AS_HELP_STRING([--enable-zstd=@<:@yes/no/auto@:>@],
+                              [build without zstd support (default=auto)])],
+              [enable_zstd="$enableval"],
+              [enable_zstd=auto])
+
+AS_IF([test "x$enable_zstd" != "xno"], [
+  PKG_CHECK_MODULES([ZSTD], [libzstd], [have_zstd=yes], [have_zstd=no])
+  AS_IF([test "$enable_zstd" = "yes"], [
+    if test "$have_zstd" = "no"; then
+      AC_MSG_ERROR([--enable-zstd specified, but not available])
+    fi
+  ])
+])
+
+if test "x$have_zstd" = "xyes"; then
+  AC_DEFINE([HAVE_ZSTD], [1], [Define if libzstd is available])
+  ZSTD_REQUIRES=libzstd
+  AC_SUBST(ZSTD_REQUIRES)
+fi
+AM_CONDITIONAL([HAVE_ZSTD], [test "x$have_zstd" = "xyes"])
+
+#=================
 
 dnl
 dnl Check for features
@@ -214,8 +242,6 @@ AC_CHECK_FUNC(gethostname, [], [
     AC_CHECK_LIB(nsl, gethostname)
 ])
 
-AC_CHECK_HEADERS(poll.h)
-
 AC_CHECK_HEADERS(pthread.h)
 
 AC_CHECK_LIB(pthread, pthread_mutex_trylock, [], [
@@ -225,20 +251,10 @@ AC_CHECK_LIB(pthread, pthread_mutex_trylock, [], [
   ])
 ])
 
-AC_SEARCH_LIBS(aio_read, [c rt aio posix4])
-
-AC_CHECK_FUNCS(vsnprintf snprintf)
-
-dnl Temporary hack for MiNT.  Some functions (writev, snprintf) are
-dnl not in the libc but in libport (for political reasons).  This check
-dnl can hopefully be removed soon.  Please use the default action
-dnl for this macro (not LIBS=...), otherwise the check for dbopen
-dnl will fail.
-AC_CHECK_LIB(port, writev)
+AC_SEARCH_LIBS(dlopen, [dl])
 
 #=================
 # Check for libelf library. Prefer external, otherwise none.
-WITH_LIBELF_INCLUDE=
 WITH_LIBELF_LIB=
 AC_CHECK_HEADER([libelf.h])
 AC_CHECK_HEADERS([gelf.h], [
@@ -248,7 +264,6 @@ AC_CHECK_HEADERS([gelf.h], [
            WITH_LIBELF=yes
        ])
 ])
-AC_SUBST(WITH_LIBELF_INCLUDE)
 AC_SUBST(WITH_LIBELF_LIB)
 AM_CONDITIONAL(LIBELF,[test "$WITH_LIBELF" = yes])
 
@@ -258,20 +273,155 @@ AC_CHECK_HEADERS([dwarf.h], [
 AM_CONDITIONAL(LIBDWARF,[test "$WITH_LIBDWARF" = yes])
 
 #=================
+# Select crypto library
+AC_ARG_WITH(crypto,
+            [AC_HELP_STRING([--with-crypto=CRYPTO_LIB],
+                            [The cryptographic library to use (nss|beecrypt|openssl). The default is nss.])
+                            ],[],
+                            [with_crypto=nss])
+
+# Refuse to proceed if someone specified --with-beecrypt (removed)
+AC_ARG_WITH(beecrypt,
+    [AC_HELP_STRING([--with-beecrypt (OBSOLETE)], [Obsolete argument. Use --with-crypto=beecrypt])
+    ],[AC_MSG_ERROR([--with-beecrypt no longer supported. Use --with-crypto=beecrypt])],
+    [])
+
+# Check for beecrypt library if requested.
+AC_ARG_WITH(internal_beecrypt, [  --with-internal-beecrypt build with internal beecrypt library ],,[with_internal_beecrypt=no])
+AM_CONDITIONAL([WITH_INTERNAL_BEECRYPT],[test "$with_internal_beecrypt" = yes])
+if test "$with_internal_beecrypt" = yes ; then
+  with_crypto=beecrypt
+fi
+AM_CONDITIONAL([WITH_BEECRYPT],[test "$with_crypto" = beecrypt])
+
+WITH_BEECRYPT_INCLUDE=
+WITH_BEECRYPT_LIB=
+if test "$with_crypto" = beecrypt ; then
+  AC_DEFINE(WITH_BEECRYPT, 1, [Build with beecrypt instead of nss3 support?])
+  if test "$with_internal_beecrypt" = yes ; then
+    WITH_BEECRYPT_INCLUDE="-I\$(top_srcdir)/beecrypt"
+    AC_DEFINE(HAVE_BEECRYPT_API_H, 1, [Define to 1 if you have the <beecrypt/api.h> header file.])
+  else
+    AC_CHECK_LIB(beecrypt, mpfprintln, [
+      WITH_BEECRYPT_LIB="-lbeecrypt"
+    ],[
+      AC_MSG_ERROR([missing required library 'beecrypt'])
+    ])
+    AC_CHECK_HEADER([beecrypt/api.h], [AC_DEFINE(HAVE_BEECRYPT_API_H, 1, [Define to 1 if you have the <beecrypt/api.h> header file.])
+    ])
+  fi
+fi
+AC_SUBST(WITH_BEECRYPT_LIB)
+AC_SUBST(WITH_BEECRYPT_INCLUDE)
+
+#=================
+# Check for OpenSSL library.
+# We need evp.h from OpenSSL.
+
+WITH_OPENSSL_INCLUDE=
+WITH_OPENSSL_LIB=
+if test "$with_crypto" = openssl; then
+# If we have pkgconfig make sure CPPFLAGS are setup correctly for the OpenSSL
+# -I include path.
+AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no], [$PATH:/usr/bin:/usr/local/bin])
+if test "x$PKGCONFIG" != "xno"; then
+  CPPFLAGS="$CPPFLAGS $($PKGCONFIG --cflags libcrypto)"
+  WITH_OPENSSL_LIB=$($PKGCONFIG --libs libcrypto)
+else
+  WITH_OPENSSL_LIB=-lcrypto
+fi
+
+AC_CHECK_HEADERS([openssl/evp.h], [], [
+  AC_MSG_ERROR([missing required OpenSSL header])
+])
+AC_CHECK_HEADERS([openssl/rsa.h], [], [
+  AC_MSG_ERROR([missing required OpenSSL header])
+])
+AC_CHECK_HEADERS([openssl/dsa.h], [], [
+  AC_MSG_ERROR([missing required OpenSSL header])
+])
+
+AC_CHECK_LIB(crypto, EVP_DigestInit_ex, [], [
+  AC_MSG_ERROR([required OpenSSL library 'libcrypto' missing or too old])
+])
+
+AC_CHECK_LIB(crypto, EVP_MD_CTX_new, [
+    AC_DEFINE(HAVE_EVP_MD_CTX_NEW, 1, [Define to 1 if OpenSSL has EVP_MD_CTX_new])
+    AC_SUBST(HAVE_EVP_MD_CTX_NEW, [1])
+  ], [
+  AC_CHECK_LIB(crypto, EVP_MD_CTX_create, [], [
+      AC_MSG_ERROR([required OpenSSL library 'libcrypto' missing or too old])
+  ])
+])
+
+AC_CHECK_LIB(crypto, EVP_PKEY_CTX_new, [], [
+  AC_MSG_ERROR([required OpenSSL library 'libcrypto' missing or too old])
+])
+
+AC_CHECK_LIB(crypto, DSA_set0_key, [
+    AC_DEFINE(HAVE_DSA_SET0_KEY, 1, [Define to 1 if OpenSSL has DSA_set0_key])
+    AC_SUBST(HAVE_DSA_SET0_KEY, [1])
+    ], []
+)
+
+AC_CHECK_LIB(crypto, DSA_set0_pqg, [
+    AC_DEFINE(HAVE_DSA_SET0_PQG, 1, [Define to 1 if OpenSSL has DSA_set0_pqg])
+    AC_SUBST(HAVE_DSA_SET0_PQG, [1])
+    ], []
+)
+
+AC_CHECK_LIB(crypto, DSA_SIG_set0, [
+    AC_DEFINE(HAVE_DSA_SIG_SET0, 1, [Define to 1 if OpenSSL has DSA_SIG_set0])
+    AC_SUBST(HAVE_DSA_SIG_SET0, [1])
+    ], []
+)
+
+AC_CHECK_LIB(crypto, RSA_set0_key, [
+    AC_DEFINE(HAVE_RSA_SET0_KEY, 1, [Define to 1 if OpenSSL has RSA_set0_key])
+    AC_SUBST(HAVE_RSA_SET0_KEY, [1])
+    ], []
+)
+
+AC_CHECK_LIB(crypto, BN_bn2binpad, [
+    AC_DEFINE(HAVE_BN2BINPAD, 1, [Define to 1 if OpenSSL has BN_bn2binpad])
+    AC_SUBST(HAVE_BN2BINPAD, [1])
+    ], []
+)
+
+fi
+
+AM_CONDITIONAL([WITH_OPENSSL],[test "$with_crypto" = openssl])
+AC_SUBST(WITH_OPENSSL_INCLUDE)
+AC_SUBST(WITH_OPENSSL_LIB)
+
+#=================
 # Check for NSS library.
-# We need nss.h from NSS which needs nspr.h. Unfortunately both glibc and NSS 
-# have a header named nss.h... so make extra check for NSS's sechash.h 
+# We need nss.h from NSS which needs nspr.h. Unfortunately both glibc and NSS
+# have a header named nss.h... so make extra check for NSS's sechash.h
 # which we use too and hopefully is slightly more unique to NSS.
 WITH_NSS_INCLUDE=
 WITH_NSS_LIB=
+if test "$with_crypto" = nss; then
+# If we have pkgconfig make sure CPPFLAGS are setup correctly for the nss
+# -I include path. Otherwise the below checks will fail because nspr.h
+# cannot be found.
+AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no], [$PATH:/usr/bin:/usr/local/bin])
+if test "x$PKGCONFIG" != "xno"; then
+  CPPFLAGS="$CPPFLAGS $($PKGCONFIG --cflags nss)"
+fi
 AC_CHECK_HEADERS([nspr.h nss.h sechash.h], [], [
   AC_MSG_ERROR([missing required NSPR / NSS header])
 ])
-AC_CHECK_LIB(nss3, NSS_NoDB_Init, [
+AC_CHECK_LIB(nss3, VFY_VerifyDigestDirect, [
   WITH_NSS_LIB=-lnss3
+  AC_CHECK_LIB(nss3, NSS_InitContext, [
+    AC_DEFINE(HAVE_NSS_INITCONTEXT, 1, [Define to 1 if NSS has NSS_InitContext])
+    AC_SUBST(HAVE_NSS_INITCONTEXT, [1])
+  ])
 ], [
-  AC_MSG_ERROR([missing required NSS library 'nss3'])
+  AC_MSG_ERROR([required NSS library 'nss3' missing or too old])
 ])
+fi
 AC_SUBST(WITH_NSS_INCLUDE)
 AC_SUBST(WITH_NSS_LIB)
 
@@ -314,6 +464,53 @@ AC_SUBST(WITH_POPT_INCLUDE)
 AC_SUBST(WITH_POPT_LIB)
 
 #=================
+# Check for libarchive library.
+AC_ARG_WITH([archive], [AS_HELP_STRING([--with-archive], [build rpm2archive - requires libarchive])],
+            [],
+            [with_archive=yes])
+
+WITH_ARCHIVE_INCLUDE=
+WITH_ARCHIVE_LIB=
+AS_IF([test "$with_archive" != no],[
+  AC_CHECK_HEADER([archive.h], [
+    AC_CHECK_LIB(archive, archive_write_open_filename, [
+      WITH_ARCHIVE_INCLUDE=
+      WITH_ARCHIVE_LIB="-larchive"
+    ],[
+      AC_MSG_ERROR([missing required library 'libarchive'])
+    ])
+],[
+      AC_MSG_ERROR([missing required header archive.h])
+  ])
+])
+
+AC_SUBST(WITH_ARCHIVE_INCLUDE)
+AC_SUBST(WITH_ARCHIVE_LIB)
+AM_CONDITIONAL(WITH_ARCHIVE,[test "$with_archive" = yes])
+
+#=================
+# Check for elfutils libdw library with dwelf_elf_gnu_build_id.
+WITH_LIBDW_LIB=
+HAVE_LIBDW_STRTAB=
+AS_IF([test "$WITH_LIBELF" = yes],[
+  AC_CHECK_HEADERS([elfutils/libdwelf.h],[
+    # dwelf_elf_gnu_build_id was introduced in elfutils 0.159
+    AC_CHECK_LIB(dw, dwelf_elf_gnu_build_id, [
+      AC_DEFINE(HAVE_LIBDW, 1,
+                [Define to 1 if you have elfutils libdw library])
+      WITH_LIBDW_LIB="-ldw"
+      WITH_LIBDW=yes
+      # If possible we also want the strtab functions from elfutils 0.167.
+      # But we can fall back on the (unsupported) ebl alternatives if not.
+      AC_CHECK_LIB(dw, dwelf_strtab_init, [HAVE_LIBDW_STRTAB=yes])
+    ])
+  ])
+])
+AC_SUBST(WITH_LIBDW_LIB)
+AM_CONDITIONAL(LIBDW,[test "$WITH_LIBDW" = yes])
+AM_CONDITIONAL(HAVE_LIBDW_STRTAB,[test "$HAVE_LIBDW_STRTAB" = yes])
+
+#=================
 # Process --with/without-external-db
 AC_ARG_WITH(external_db, [AS_HELP_STRING([--with-external-db],[build against an external Berkeley db])],
 [case "$with_external_db" in
@@ -325,71 +522,119 @@ esac],
 case "$with_external_db" in
 yes )
   AC_CHECK_HEADERS([db.h],[
-    AC_CHECK_TYPE([db_threadid_t],[],
-      [AC_MSG_WARN([missing type db_threadid_t])],
-      [#include <db.h>])
-    save_LIBS="$LIBS"
-    AC_CHECK_LIB([db],[db_create],[],[
-      AC_MSG_ERROR([missing db_create in libdb])
-      ])
-    AC_CHECK_LIB([db],[db_env_create],[],[
-      AC_MSG_ERROR([missing db_env_create in libdb])
+    AC_PREPROC_IFELSE([
+      AC_LANG_SOURCE([
+       #include <db.h>
+       #if ((DB_VERSION_MAJOR < 4) || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 5))
+       #error Berkeley DB too old
+       #endif
       ])
-    AC_CHECK_LIB([db],[db_env_set_func_fsync],[],[
-      AC_MSG_ERROR([missing db_env_set_func_fsync in libdb])
-      ])
-    AC_CHECK_LIB([db],[db_strerror],[],[
-      AC_MSG_ERROR([missing db_strerror in libdb])
-      ])
-    WITH_DB_LIB=-ldb
-    LIBS="$save_LIBS"
+    ],[ WITH_DB_LIB=-ldb ], 
+      [ AC_MSG_ERROR([Berkeley DB version >= 4.5 required])
+    ])
   ],[
     AC_MSG_ERROR([missing required header db.h])
   ])
   ;;
-* ) # Fall back to internal db if available
+no|maybe )
+  # Try internal database first, then fall back to external
+  # unless --without-external-db (no) was explicitly given.
   if [ test -x db/dist/configure ]; then
     AC_DEFINE(HAVE_DB_H, 1, [Define if you have the <db3/db.h> header file])
   else
-    AC_MSG_ERROR([internal Berkeley DB directory not present, see INSTALL])
+    case "$with_external_db" in
+    maybe)
+      AC_CHECK_HEADERS([db.h],[
+        AC_PREPROC_IFELSE([
+          AC_LANG_SOURCE([
+           #include <db.h>
+           #if ((DB_VERSION_MAJOR < 4) || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 5))
+           #error Berkeley DB too old
+           #endif
+          ])
+        ],[ WITH_DB_LIB=-ldb ],
+          [ AC_MSG_ERROR([Berkeley DB version >= 4.5 required])
+        ])
+      ],[
+        AC_MSG_ERROR([missing required header db.h])
+      ])
+    ;;
+    no)
+      AC_MSG_ERROR([internal Berkeley DB directory not present, see INSTALL])
+    ;;
+    esac
   fi
   ;;
 esac
 
 AC_SUBST([WITH_DB_LIB])
 
-dnl AmigaOS and IXEmul have a fork() dummy
-  case "$host" in
-    m68k-*-amigaos ) 
-       echo "Building for AmigaOS: using vfork() instead of fork()"; 
-       CFLAGS="$CFLAGS -Dfork=vfork" 
-       ;;
-  esac
+#=================
+# Process --enable-ndb
+AC_ARG_ENABLE([ndb], [AS_HELP_STRING([--enable-ndb (EXPERIMENTAL)],[enable the new rpm database format])],
+[case "$enable_ndb" in
+yes|no) ;;
+*) AC_MSG_ERROR([invalid argument to --enable-ndb])
+  ;;
+esac],
+[enable_ndb=no])
+AS_IF([test "$enable_ndb" = yes],[
+  AC_CHECK_FUNCS([mremap],
+    [AC_DEFINE(ENABLE_NDB, 1, [Enable new rpm database format?])],
+    [AC_MSG_ERROR([mremap function required by ndb])],
+    [#include <sys/mman.h>])
+])
+AM_CONDITIONAL([NDB], [test "$enable_ndb" = yes])
+
+#=================
+# Check for LMDB support
+AC_ARG_ENABLE([lmdb],
+              [AS_HELP_STRING([--enable-lmdb=@<:@yes/no/auto@:>@ (EXPERIMENTAL)],
+                              [build with LMDB rpm database format support (default=auto)])],
+              [enable_lmdb="$enableval"],
+              [enable_lmdb=auto])
+
+AS_IF([test "x$enable_lmdb" != "xno"], [
+  PKG_CHECK_MODULES([LMDB], [lmdb], [have_lmdb=yes], [have_lmdb=no])
+  AS_IF([test "$enable_lmdb" = "yes"], [
+    if test "$have_lmdb" = "no"; then
+      AC_MSG_ERROR([--enable-lmdb specified, but not available])
+    fi
+  ])
+])
+
+if test "x$have_lmdb" = "xyes"; then
+  AC_DEFINE([WITH_LMDB], [1], [Define if LMDB is available])
+  LMDB_REQUIRES=lmdb
+  AC_SUBST(LMDB_REQUIRES)
+fi
+AM_CONDITIONAL([LMDB], [test "x$have_lmdb" = "xyes"])
 
 AM_GNU_GETTEXT_VERSION([0.16.1])
 AM_GNU_GETTEXT([external])
+AM_ICONV
 
 dnl Checks for header files we can live without.
 AC_HEADER_STDC
+dnl glibc and autoconf don't really play well together.
+dnl glibc will produce a warning when including the wrong header.
+dnl but still define major and minor. Causing us to include the header
+dnl that produces a giant warning for each major/minor use.
+dnl Use -Werror to work around that.
+old_CFLAGS=$CFLAGS
+CFLAGS="$CFLAGS -Werror"
 AC_HEADER_MAJOR
-AC_HEADER_DIRENT
-AC_HEADER_TIME
+CFLAGS=$old_CFLAGS
+AC_STRUCT_DIRENT_D_TYPE
 
-AC_CHECK_HEADERS(locale.h)
 AC_CHECK_HEADERS(limits.h)
-AC_CHECK_HEADERS(fcntl.h getopt.h memory.h netdb.h utime.h)
-
-AC_CHECK_HEADERS(sys/ipc.h sys/select.h)
-AC_CHECK_HEADERS(sys/types.h sys/stdtypes.h)
-AC_CHECK_HEADERS(sys/mman.h sys/utsname.h sys/wait.h)
+AC_CHECK_HEADERS(fcntl.h getopt.h)
 
-AC_CHECK_HEADERS(netinet/in_systm.h)
-AC_CHECK_HEADERS(mntent.h sys/mnttab.h sys/systemcfg.h)
-AC_CHECK_HEADERS(sys/mount.h sys/mntctl.h sys/param.h sys/vmount.h)
-AC_CHECK_HEADERS(libio.h)
-AC_CHECK_HEADERS(err.h mcheck.h)
+AC_CHECK_HEADERS(sys/utsname.h)
 
-AC_CHECK_HEADERS(glob.h)
+AC_CHECK_HEADERS(sys/systemcfg.h)
+AC_CHECK_HEADERS(sys/param.h)
+AC_CHECK_HEADERS(sys/auxv.h)
 
 dnl statfs portability fiddles.
 dnl
@@ -510,34 +755,8 @@ main() {
 ])
 fi
 
-AC_C_INLINE
-
 dnl look for libc features
 
-dnl If a system doesn't have S_IFSOCK, define it as 0 which will
-dnl make S_ISSOCK always return false (nice, eh?)
-AC_MSG_CHECKING(if <sys/stat.h> defines S_IFSOCK)
-AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/stat.h>]], [[printf("%d", S_IFSOCK)]])],[HAS_S_IFSOCK=yes],[HAS_S_IFSOCK=no])
-AC_MSG_RESULT($HAS_S_IFSOCK)
-if test $HAS_S_IFSOCK = yes; then
-       AC_DEFINE(HAVE_S_IFSOCK, 1, [Define as 1 if <sys/stat.h> defines S_IFSOCK])
-fi
-
-dnl Some Unix's are missing S_ISLNK, S_ISSOCK
-AC_MSG_CHECKING(if <sys/stat.h> defines S_ISLNK)
-AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/stat.h>]], [[printf("%d", S_ISLNK(0755))]])],[HAS_S_ISLNK=yes],[HAS_S_ISLNK=no])
-AC_MSG_RESULT($HAS_S_ISLNK)
-if test $HAS_S_ISLNK = yes; then
-       AC_DEFINE(HAVE_S_ISLNK, 1, [Define as 1 if <sys/stat.h> defines S_ISLNK])
-fi
-
-AC_MSG_CHECKING(if <sys/stat.h> defines S_ISSOCK)
-AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/stat.h>]], [[printf("%d", S_ISSOCK(0755))]])],[HAS_S_ISSOCK=yes],[HAS_S_ISSOCK=no])
-AC_MSG_RESULT($HAS_S_ISSOCK)
-if test $HAS_S_ISSOCK = yes; then
-       AC_DEFINE(HAVE_S_ISSOCK, 1, [Define as 1 if <sys/stat.h> defines S_ISSOCK])
-fi
-
 dnl Check for missing typedefs
 AC_TYPE_MODE_T
 AC_TYPE_OFF_T
@@ -545,37 +764,31 @@ AC_TYPE_PID_T
 AC_TYPE_SIZE_T
 
 dnl Checks for library functions.
-AC_FUNC_VPRINTF
-dnl XXX don't want to re-enable code that's been unused for years at this
-dnl point, but should offer good performance improvements, check after
-dnl 4.4.2.1...
-dnl AC_FUNC_MMAP
-
-AC_CHECK_FUNCS(mtrace)
-AC_CHECK_FUNCS(strndup strerror)
-
-AC_REPLACE_FUNCS(basename getcwd getwd)
-AC_REPLACE_FUNCS(putenv realpath setenv)
-AC_REPLACE_FUNCS(stpcpy stpncpy strcspn)
-AC_REPLACE_FUNCS(strdup strtol strtoul strspn strstr)
+AC_CHECK_FUNCS(putenv)
+AC_CHECK_FUNCS(mempcpy)
+AC_CHECK_FUNCS(fdatasync)
+AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>])
+AC_CHECK_FUNCS(lutimes)
+AC_CHECK_FUNCS(mergesort)
+AC_CHECK_FUNCS(getauxval)
+AC_CHECK_FUNCS(setprogname, [], [], [#include <stdlib.h>])
+
+AC_MSG_CHECKING([whether __progname is defined])
+AC_LINK_IFELSE([AC_LANG_PROGRAM([extern const char *__progname;],
+          [if (*__progname == 0) return 0;])],
+          AC_DEFINE([HAVE___PROGNAME], [1], [Define if __progname is defined])
+          AC_MSG_RESULT([yes]),
+          AC_MSG_RESULT([no]))
+
+AC_REPLACE_FUNCS(stpcpy stpncpy)
+
+AC_CHECK_FUNCS([secure_getenv __secure_getenv])
+
+AC_CHECK_FUNCS(
+   [mkstemp getcwd basename dirname realpath setenv unsetenv regcomp lchown \
+    utimes getline],
+   [], [AC_MSG_ERROR([function required by rpm])])
 
-AC_CHECK_FUNCS(__secure_getenv)
-
-AC_CHECK_FUNCS(regcomp)
-
-AC_CHECK_FUNCS(ftok)
-
-AC_CHECK_FUNCS([mkstemp], [], [AC_MSG_ERROR([mkstemp() is required by rpm])])
-
-dnl XXX Glob *is* broken on linux with libc5, solaris and possibly aix when
-dnl %files gets something like
-dnl    /usr/*/locale/*/LC_MESSAGES/*.mo
-dnl (Note: more than one asterisk in glob pattern.)
-dnl
-dnl XXX Glob is "fixed" in glibc-2.3.3-61, but the cost is that
-dnl dangling symlinks are no longer globbed. Always use the internal glob.
-AC_DEFINE(USE_GNU_GLOB, 1, [Use the included glob.c?])
-AC_LIBOBJ(glob)
 AC_LIBOBJ(fnmatch)
 
 dnl check if python is requested
@@ -587,33 +800,16 @@ yes|no) ;;
 esac],
 [enable_python=no])
 
+WITH_PYTHON_SUBPACKAGE=0
 AS_IF([test "$enable_python" = yes],[
   AM_PATH_PYTHON([2.6],[
-    WITH_PYTHON_INCLUDE=`${PYTHON} -c 'from distutils.sysconfig import *; import sys; sys.stdout.write(get_python_inc())'`
-    WITH_PYTHON_SUBPACKAGE=1
-    save_CPPFLAGS="$CPPFLAGS"
-    CPPFLAGS="$CPPFLAGS -I$WITH_PYTHON_INCLUDE"
-    AC_CHECK_HEADER([Python.h],[],
-      [AC_MSG_ERROR([missing Python.h])
-      ])
-    CPPFLAGS="$save_CPPFLAGS"
-    save_LIBS="$LIBS"
-    AC_SEARCH_LIBS([Py_Main],[python${PYTHON_VERSION} python],[
-      WITH_PYTHON_LIB="$ac_res"
-    ],[AC_MSG_ERROR([missing python library])
-    ])
-    LIBS="$save_LIBS"
+    PKG_CHECK_MODULES([PYTHON], [python-${PYTHON_VERSION}], [WITH_PYTHON_SUBPACKAGE=1])
+    AC_SUBST(PYTHON_CFLAGS)
+    AC_SUBST(PYTHON_LIB)
   ])
-],[
-    WITH_PYTHON_INCLUDE=
-    WITH_PYTHON_LIB=
-    WITH_PYTHON_SUBPACKAGE=0
 ])
 
-AC_SUBST(WITH_PYTHON_INCLUDE)
-AC_SUBST(WITH_PYTHON_LIB)
-
-AM_CONDITIONAL(PYTHON,[test "$WITH_PYTHON_SUBPACKAGE" = 1])
+AM_CONDITIONAL(ENABLE_PYTHON,[test "$WITH_PYTHON_SUBPACKAGE" = 1])
 
 AC_PATH_PROG(DOXYGEN, doxygen, no)
 dnl
@@ -643,11 +839,32 @@ esac],
 
 AS_IF([test "$with_selinux" = yes],[
   AC_CHECK_HEADER([selinux/selinux.h],[
-    AC_CHECK_LIB(selinux,[is_selinux_enabled],[with_selinux=yes],[
-      AC_MSG_ERROR([--with-selinux given, but libselinux not found])])
+    save_LIBS="$LIBS"
+    AC_CHECK_LIB([selinux],[is_selinux_enabled],[],[
+      AC_MSG_ERROR([--with-selinux given, but is_selinux_enabled not found in libselinux])])
+    AC_CHECK_LIB([selinux],[selinux_getpolicytype],[],[
+      AC_MSG_ERROR([--with-selinux given, but selinux_getpolicytype not found in libselinux])])
+    AC_CHECK_LIB([selinux],[selinux_reset_config],[],[
+      AC_MSG_ERROR([--with-selinux given, but selinux_reset_config not found in libselinux])])
+    AC_CHECK_LIB([selinux],[setexecfilecon],[
+      AC_DEFINE([HAVE_SETEXECFILECON],[1],[Define to 1 if SELinux setexecfilecon is present])])
+    LIBS="$save_LIBS"
   ],[
     AC_MSG_ERROR([--with-selinux given, but selinux/selinux.h not found])
   ])
+
+  AC_CHECK_HEADER([selinux/label.h],[
+    save_LIBS="$LIBS"
+    AC_CHECK_LIB([selinux],[selabel_close],[],[
+      AC_MSG_ERROR([--with-selinux given, but selabel_close not found in libselinux])])
+    AC_CHECK_LIB([selinux],[selabel_lookup_raw],[],[
+      AC_MSG_ERROR([--with-selinux given, but selabel_lookup_raw not found in libselinux])])
+    AC_CHECK_LIB([selinux],[selabel_open],[],[
+      AC_MSG_ERROR([--with-selinux given, but selabel_open not found in libselinux])])
+    LIBS="$save_LIBS"
+  ],[
+    AC_MSG_ERROR([--with-selinux given, but selinux/label.h not found])
+  ])
 ])
 
 AS_IF([test "$with_selinux" = yes],[
@@ -655,8 +872,94 @@ AS_IF([test "$with_selinux" = yes],[
   WITH_SELINUX_LIB="-lselinux"
 ])
 AC_SUBST(WITH_SELINUX_LIB)
+AC_SUBST(WITH_SEMANAGE_LIB)
 AM_CONDITIONAL(SELINUX,[test "$with_selinux" = yes])
 
+
+WITH_MSM_LIB=
+AC_ARG_WITH(msm, [AS_HELP_STRING([--with-msm],[build with msm support])],
+[case "$with_msm" in
+yes|no) ;;
+*) AC_MSG_ERROR([invalid argument to --with-msm])
+  ;;
+esac],
+[with_msm=no])
+
+AS_IF([test "$with_msm" = yes],[
+    save_LIBS="$LIBS"
+    AC_CHECK_LIB([xml2],[xmlReaderForMemory],[],[
+      AC_MSG_ERROR([--with-msm given, but xmlReaderForMemory not found in libxml2])])
+    LIBS="$save_LIBS"
+  AC_CHECK_HEADER([sys/capability.h],[
+    save_LIBS="$LIBS"
+    AC_CHECK_LIB([cap],[cap_set_file],[],[
+      AC_MSG_ERROR([--with-msm given, but cap_set_file not found in libcap])])
+    LIBS="$save_LIBS"
+  ],[
+    AC_MSG_ERROR([--with-msm given, but sys/capability.h not found])
+  ])
+
+  PKG_CHECK_MODULES(
+    [LIBXML2],
+    [libxml-2.0 >= 2.0],
+    [AC_DEFINE(WITH_LIBXML2, 1, [Build with libxml2 support])],
+    [AC_MSG_ERROR([--with-msm given, but libxml2 not found])]
+  )
+  AC_SUBST(LIBXML2_CFLAGS)
+  AC_SUBST(LIBXML2_LIBS)
+
+  AC_CHECK_HEADER([sys/xattr.h],[
+    save_LIBS="$LIBS"
+    AC_CHECK_LIB([attr],[setxattr],[],[
+      AC_MSG_ERROR([--with-msm given, but setxattr not found in libattr])])
+    LIBS="$save_LIBS"
+  ],[
+    AC_MSG_ERROR([--with-msm given, but sys/xattr.h not found])
+  ])
+  AC_CHECK_HEADER([uthash.h],[
+    save_LIBS="$LIBS"
+    LIBS="$save_LIBS"
+  ],[
+    AC_MSG_ERROR([--with-msm given, but uthash.h not found])
+  ])
+  AC_CHECK_HEADER([sys/smack.h],[
+     save_LIBS="$LIBS"
+    LIBS="$save_LIBS"
+   ],[
+     AC_MSG_ERROR([--with-msm given, but smack.h not found])
+   ])
+])
+
+AS_IF([test "$with_msm" = yes],[
+  AC_DEFINE(WITH_MSM, 1, [Build with msm support?])
+  WITH_MSM_LIB="`xml2-config --libs` -lcap -lattr -lsmack -lmagic"
+  WITH_MSM_INCLUDE="`xml2-config --cflags`"
+])
+AC_SUBST(WITH_MSM_LIB)
+AC_SUBST(WITH_MSM_INCLUDE)
+AM_CONDITIONAL(MSM,[test "$with_msm" = yes])
+
+
+# libimaevm
+with_iamevm=no
+AC_ARG_WITH(imaevm, [AS_HELP_STRING([--with-imaevm],[build with imaevm support])])
+if test "$with_imaevm" = yes ; then
+  AC_MSG_CHECKING([libimaevm >= 1.0])
+  AC_COMPILE_IFELSE(
+    [AC_LANG_PROGRAM(
+      [[#include <imaevm.h>]],
+      [[return sign_hash(NULL, NULL, 0, NULL, NULL, NULL);]]
+    )],
+    [AC_MSG_RESULT(yes)
+     AC_DEFINE(WITH_IMAEVM, 1, [Build with imaevm support?])
+     WITH_IMAEVM_LIB="-limaevm"
+    ],
+    [AC_MSG_ERROR([libimaevm not present or too old (< 1.0)])]
+  )
+fi
+AM_CONDITIONAL(WITH_IMAEVM,[test "$with_imaevm" = yes])
+AC_SUBST(WITH_IMAEVM_LIB)
+
 # libcap
 WITH_CAP_LIB=
 AC_ARG_WITH(cap, [AS_HELP_STRING([--with-cap],[build with capability support])],
@@ -716,28 +1019,41 @@ AS_IF([test "$with_acl" = yes],[
 AC_SUBST(WITH_ACL_LIB)
 AM_CONDITIONAL(ACL,[test "$with_acl" = yes])
 
-WITH_LUA_LIB=
-WITH_LUA_INCLUDE=
-AC_ARG_WITH(lua, [AS_HELP_STRING([--with-lua],[build with lua support])],,[with_lua=yes])
-AS_IF([test "$with_lua" = yes],[
-  AC_CHECK_HEADER([lua.h],[
-    AC_CHECK_LIB(lua,[luaL_openlibs],[with_lua=yes],[
-      AC_MSG_ERROR([--with-lua given, but liblua not found])
-    ], 
-    [-lm])
-  ],[
-      AC_MSG_ERROR([--with-lua given, but lua.h not found])
-  ])
+AC_ARG_WITH([lua], [AS_HELP_STRING([--with-lua], [build with lua support])],
+            [],
+            [with_lua=yes])
+
+AS_IF([test "$with_lua" != no],[
+  PKG_CHECK_MODULES([LUA],
+    [lua >= 5.1],
+    [AC_DEFINE(WITH_LUA, 1, [Build with lua support?])],
+    [AC_MSG_ERROR([lua not present (--without-lua to disable)])])
+  AC_SUBST(LUA_CFLAGS)
+  AC_SUBST(LUA_LIBS)
 ])
+AM_CONDITIONAL(WITH_LUA,[test "$with_lua" = yes])
 
-AS_IF([test "$with_lua" = yes],[
-  AC_DEFINE(WITH_LUA, 1, [Build with lua support?])
-  WITH_LUA_INCLUDE=
-  WITH_LUA_LIB="-llua -lm" 
+AC_ARG_ENABLE(plugins, [AS_HELP_STRING([--disable-plugins],[build without plugin support])],,[enable_plugins=yes])
+AS_IF([test "$enable_plugins" = yes],[
+  AC_DEFINE(ENABLE_PLUGINS, 1, [Build with plugin support?])
 ])
-AC_SUBST(WITH_LUA_LIB)
-AC_SUBST(WITH_LUA_INCLUDE)
-AM_CONDITIONAL(WITH_LUAEXT,[test "$with_lua" = yes])
+AM_CONDITIONAL(ENABLE_PLUGINS,[test "$enable_plugins" = yes])
+
+with_dbus=no
+AS_IF([test "$enable_plugins" != no],[
+  PKG_CHECK_MODULES([DBUS],
+    [dbus-1 >= 1.3],
+    [AC_DEFINE(DBUS, 1, [Build with dbus support?]) with_dbus=yes],
+    [with_dbus=no])
+  AC_SUBST(DBUS_CFLAGS)
+  AC_SUBST(DBUS_LIBS)
+])
+AM_CONDITIONAL(DBUS, [test "$with_dbus" = yes])
+
+AS_IF([test "$enable_plugins" != no],[
+  AC_CHECK_FUNCS(lsetxattr, [], [], [#include <sys/xattr.h>])
+])
+AM_CONDITIONAL(IMA, [test "x$ac_cv_func_lsetxattr" = xyes])
 
 with_dmalloc=no
 AC_ARG_WITH(dmalloc, [AS_HELP_STRING([--with-dmalloc],[build with dmalloc debugging support])])
@@ -746,76 +1062,10 @@ if test "$with_dmalloc" = yes ; then
   LIBS="$LIBS -ldmalloc"
 fi
 
-AC_CHECK_FUNCS(setlocale)
-
-AC_CHECK_FUNCS(getpassphrase)
-
-AC_CHECK_FUNC(getmntent, AC_DEFINE(HAVE_GETMNTENT, 1, [Define if you have the getmntent() function]), [
-  AC_CHECK_FUNC(mntctl, AC_DEFINE(HAVE_MNTCTL, 1, [Define as 1 if you have mntctl() (only aix?)]),[
-    AC_CHECK_FUNC(getmntinfo, AC_DEFINE(HAVE_GETMNTINFO, 1, [Define as 1 if you have getmntinfo() (Mac OS X)]), [
-      AC_CHECK_FUNC(getmntinfo_r, AC_DEFINE(HAVE_GETMNTINFO_R, 1, [Define as 1 if you have getmntinfo_r() (only osf?)]), [
-        AC_CHECK_LIB(c_r, getmntinfo_r, [LIBS="$LIBS -lc_r"; 
-                                       AC_DEFINE(HAVE_GETMNTINFO_R, 1, [Define as 1 if you have getmntinfo_r() (only osf?)])], [
-                AC_DEFINE([USE_GETMNTENT], 1, [Defined if getmntent replacement is used])
-                 AC_LIBOBJ(getmntent)])
-      ])
-    ])
-  ])
-])
-
-AC_CHECK_FUNC(lchown,
-   [__CHOWN_RHF="%{__chown} -Rhf"
-    __CHGRP_RHF="%{__chgrp} -Rhf"
-    AC_DEFINE(HAVE_LCHOWN, 1, [Define as 1 if you have lchown()])],
-   [__CHOWN_RHF="%{__chown} -Rf"
-    __CHGRP_RHF="%{__chgrp} -Rf"
-    dnl Does chown() follow symlinks? This should be a good enough test.
-    AC_MSG_CHECKING(whether chown() follows symlinks)
-    AC_ARG_ENABLE([broken-chown],
-            [AS_HELP_STRING([--enable-broken-chown],[this system's chown follows symbolic links])], 
-           result=$enableval, result=unknown)
-    if echo "$build" | ${EGREP} "(aix)|(hpux)|(linux)" > /dev/null ; then
-       result=yes
-    elif echo "$build" | ${EGREP} "(nextstep)" > /dev/null ; then
-       result=no
-    fi
-    if test $result = unknown; then
-       if test `${__ID} | cut -f2 -d\= | cut -f1 -d\(` = 0; then
-           rm -f foo bar
-           touch foo
-           ln -s foo bar
-           ${__CHOWN} 10 bar
-           if test `ls -l foo | awk '{print $3}'` != "root"; then
-               result=yes
-           else
-               result=no
-           fi
-           ${__RM} -f foo bar
-       else
-           AC_MSG_CHECKING((cannot check by non-root user))
-           result=no
-       fi
-    fi
-
-    AC_MSG_RESULT($result)
-    if test $result = yes; then
-           AC_DEFINE(CHOWN_FOLLOWS_SYMLINK, 1, [Define as 1 if chown() follows symlinks and you don't have lchown()])
-    fi])
-AC_SUBST(__CHOWN_RHF)
-AC_SUBST(__CHGRP_RHF)
-
-if echo "$host_os" | grep sco > /dev/null; then
-       echo "hacking things up for sco"
-       AC_DEFINE(NEED_STRINGS_H, 1, [Define as one if we need to include <strings.h> (along with <string.h>)])
-       AC_DEFINE(HAVE_STRUCT_MNTTAB, 1,
-       [Define as 1 if you have "struct mnttab" (only sco?)])
-elif echo "$host_os" | grep sunos > /dev/null; then
-       echo "hacking things up for sunos"
-       CFLAGS="$CFLAGS -D__USE_FIXED_PROTOTYPES__"
-       AC_DEFINE(NEED_STRINGS_H, 1, [Define as one if we need to include <strings.h> (along with <string.h>)])
-       AC_DEFINE(NEED_MYREALLOC, 1, [Define as 1 if we need myrealloc])
-       AC_LIBOBJ(myrealloc)
-fi
+user_with_uid0=$(awk -F: '$3==0 {print $1;exit}' /etc/passwd)
+group_with_gid0=$(awk -F: '$3==0 {print $1;exit}' /etc/group)
+AC_DEFINE_UNQUOTED([UID_0_USER],["$user_with_uid0"],[Get the user name having userid 0])
+AC_DEFINE_UNQUOTED([GID_0_GROUP],["$group_with_gid0"],[Get the group name having groupid 0])
 
 #
 # get rid of the 4-th tuple, if config.guess returned "linux-gnu" for host_os
@@ -824,6 +1074,10 @@ host_os_gnu=-gnu
 if echo "$host_os" | grep '.*-gnulibc1' > /dev/null ; then
        host_os=`echo "${host_os}" | sed 's/-gnulibc1$//'`
 fi
+if echo "$host_os" | grep '.*-gnueabihf' > /dev/null ; then
+       host_os=`echo "${host_os}" | sed 's/-gnueabihf$//'`
+       host_os_gnu=-gnueabihf
+fi
 if echo "$host_os" | grep '.*-gnueabi' > /dev/null ; then
        host_os=`echo "${host_os}" | sed 's/-gnueabi$//'`
        host_os_gnu=-gnueabi
@@ -831,6 +1085,9 @@ fi
 if echo "$host_os" | grep '.*-gnu' > /dev/null ; then
        host_os=`echo "${host_os}" | sed 's/-gnu$//'`
 fi
+if echo "$host_os" | grep '.*-uclibc' > /dev/null ; then
+  host_os=`echo "${host_os}" | sed 's/-uclibc$//'`
+fi
 
 changequote(<, >)
 host_os_exact="${host_os}"
@@ -838,88 +1095,50 @@ host_os_major=`echo "${host_os}" | sed 's/\..*$//'`
 host_os_noversion=`echo "${host_os}" | sed 's/[0-9]*\..*$//'`
 changequote([, ])
 
-rm -f ./find-provides
-if test -f ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.prov ; then
-       echo "using ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.prov for automatic provides generation"
-    ln -s ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.prov ./find-provides
-elif test -f ${srcdir}/autodeps/${host_os_exact}.prov ; then
-       echo "using ${srcdir}/autodeps/${host_os_exact}.prov for automatic provides generation"
-    ln -s ${srcdir}/autodeps/${host_os_exact}.prov ./find-provides
-elif test -f ${srcdir}/autodeps/${host_os_major}.prov ; then
-       echo "using ${srcdir}/autodeps/${host_os_major}.prov for automatic provides generation"
-    ln -s ${srcdir}/autodeps/${host_os_major}.prov ./find-provides
-elif test -f ${srcdir}/autodeps/${host_os_noversion}.prov ; then
-       echo "using ${srcdir}/autodeps/${host_os_noversion}.prov for automatic provides generation"
-    ln -s ${srcdir}/autodeps/${host_os_noversion}.prov ./find-provides
-else
-    echo "*** no default provides information is available for ${host_os_noversion}"
-    ln -s ${srcdir}/autodeps/none ./find-provides
-fi
-
-rm -f ./find-requires
-if test -f ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.req ; then
-       echo "using ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.req for automatic requires generation"
-    ln -s ${srcdir}/autodeps/${host_cpu}-${host_os_exact}.req ./find-requires
-elif test -f ${srcdir}/autodeps/${host_os_exact}.req ; then
-       echo "using ${srcdir}/autodeps/${host_os_exact}.req for automatic requires generation"
-    ln -s ${srcdir}/autodeps/${host_os_exact}.req ./find-requires
-elif test -f ${srcdir}/autodeps/${host_os_major}.req ; then
-       echo "using ${srcdir}/autodeps/${host_os_major}.req for automatic requires generation"
-    ln -s ${srcdir}/autodeps/${host_os_major}.req ./find-requires
-elif test -f ${srcdir}/autodeps/${host_os_noversion}.req ; then
-       echo "using ${srcdir}/autodeps/${host_os_noversion}.req for automatic requires generation"
-    ln -s ${srcdir}/autodeps/${host_os_noversion}.req ./find-requires
-else
-    echo "*** no default requires information is available for ${host_os_noversion}"
-    ln -s ${srcdir}/autodeps/none ./find-requires
-fi
+for provscript in ${host_cpu}-${host_os_exact}.prov ${host_os_exact}.prov ${host_os_major}.prov ${host_os_noversion}.prov none ; do {
+    if test -f ${srcdir}/autodeps/${provscript} ; then
+       if [[ ${provscript} == none ]] ; then
+           echo "*** no default provides information is available for ${host_os_noversion}"
+       else
+           echo "using ${srcdir}/autodeps/${provscript} for automatic provides generation"
+       fi
+       ln -sf ${provscript} ${srcdir}/autodeps/find-provides
+       break
+    fi
+}; done
+
+
+for reqscript in ${host_cpu}-${host_os_exact}.req ${host_os_exact}.req ${host_os_major}.req ${host_os_noversion}.req none ; do {
+    if test -f ${srcdir}/autodeps/${reqscript} ; then
+       if [[ ${reqscript} == none ]] ; then
+           echo "*** no default requires information is available for ${host_os_noversion}"
+       else
+         echo "using ${srcdir}/autodeps/${reqscript} for automatic requires generation"
+       fi
+       ln -sf ${reqscript} ./autodeps/find-requires
+       break
+    fi
+} done
 
-dnl Determine the canonical arch-vendor-os for the host machine
-case "${host_cpu}" in
-*86)           RPMCANONCOLOR=0; RPMCANONARCH=i386 ;;
-ia32e*)                RPMCANONCOLOR=3; RPMCANONARCH=ia32e ;;
-amd64*)                RPMCANONCOLOR=3; RPMCANONARCH=amd64 ;;
-x86_64*)       RPMCANONCOLOR=3; RPMCANONARCH=x86_64 ;;
-alpha*)                RPMCANONCOLOR=0; RPMCANONARCH=alpha ;;
-sparc64*)      RPMCANONCOLOR=3; RPMCANONARCH=sparc64 ;;
-sparc*)                RPMCANONCOLOR=3; RPMCANONARCH=sparc ;;
-ia64*)         RPMCANONCOLOR=2; RPMCANONARCH=ia64 ;;
-s390x*)                RPMCANONCOLOR=3; RPMCANONARCH=s390x ;;
-s390*)         RPMCANONCOLOR=0; RPMCANONARCH=s390 ;;
-powerpc64*|ppc64*)     RPMCANONCOLOR=3; RPMCANONARCH=ppc64 ;;
-powerpc*|ppc*) RPMCANONCOLOR=0; RPMCANONARCH=ppc ;;
-arm*)          RPMCANONCOLOR=0; RPMCANONARCH=arm ;;
-mipsel*)       RPMCANONCOLOR=0; RPMCANONARCH=mipsel ;;
-mips*)         RPMCANONCOLOR=0; RPMCANONARCH=mips ;;
-m68k*)         RPMCANONCOLOR=0; RPMCANONARCH=m68k ;;
-sh3*)          RPMCANONCOLOR=0; RPMCANONARCH=sh3 ;;
-sh4*)          RPMCANONCOLOR=0; RPMCANONARCH=sh4 ;;
-*)             RPMCANONCOLOR=0; RPMCANONARCH=unknown ;;
-esac
-case "${host_os_noversion}" in
-mint)          RPMCANONARCH=m68kmint ;;
-esac
+dnl permit overriding build_vendor for "canonical rpm vendor"
 RPMCANONVENDOR="$build_vendor"
-case "${build_vendor}" in
-unknown|pc|ibm|redhat|pld|mandrake|conectiva|lvr|yellowdog|caos|suse)
-       test -f /etc/redhat-release &&          RPMCANONVENDOR=redhat
-       test -f /etc/SuSE-release &&            RPMCANONVENDOR=suse
-       test -f /etc/pld-release &&             RPMCANONVENDOR=pld
-       test -f /etc/mandrake-release &&        RPMCANONVENDOR=mandrake
-       test -f /etc/conectiva-release &&       RPMCANONVENDOR=conectiva
-       test -f /etc/lvr-release &&             RPMCANONVENDOR=lvr
-       test -f /etc/yellowdog-release &&       RPMCANONVENDOR=yellowdog
-       test -f /etc/caos-release &&            RPMCANONVENDOR=caos
-       ;;
-esac
+AC_ARG_WITH([vendor], 
+  AS_HELP_STRING([--with-vendor=VENDOR], [specify rpm vendor name]),
+  [RPMCANONVENDOR=$withval])
+AC_DEFINE_UNQUOTED([RPMCANONVENDOR],["${RPMCANONVENDOR}"],[canonical vendor])
+          
 RPMCANONOS="$host_os_noversion"
 RPMCANONGNU="$host_os_gnu"
-AC_SUBST(RPMCANONCOLOR)
-AC_SUBST(RPMCANONARCH)
 AC_SUBST(RPMCANONVENDOR)
 AC_SUBST(RPMCANONOS)
 AC_SUBST(RPMCANONGNU)
-AC_DEFINE_UNQUOTED([RPMCANONVENDOR],["${RPMCANONVENDOR}"],[canonical vendor])
+
+RUNDIR="/run"
+AC_ARG_WITH([rundir], 
+  AS_HELP_STRING([--with-rundir=RUNDIR], [specify run-time variable directory]),
+  [RUNDIR=$withval])
+AC_DEFINE_UNQUOTED([RUNDIR],["${RUNDIR}"],[run-time variable directory])
+AC_SUBST(RUNDIR)
 
 if test X"$prefix" = XNONE ; then
     usrprefix="$ac_default_prefix"
@@ -927,7 +1146,13 @@ else
     usrprefix=$prefix
 fi
 
-RPMCONFIGDIR="`echo ${usrprefix}/lib/rpm`"
+RPMCONFIGDIR=
+AC_ARG_WITH([rpmconfigdir],
+            [AS_HELP_STRING([--with-rpmconfigdir],
+              [Set up rpm config not into /usr/lib/rpm @<:@default=check@:>@])],
+            [RPMCONFIGDIR=$withval],
+            [RPMCONFIGDIR="`echo ${usrprefix}/lib/rpm`"])
+
 AC_SUBST(RPMCONFIGDIR)
 
 AC_SUBST(OBJDUMP)
@@ -942,19 +1167,17 @@ AM_CONDITIONAL([HACKINGDOCS],[test "$with_hackingdocs" = yes])
 
 AC_PATH_PROG(AUTOM4TE,autom4te,:)
 
-AS_IF([test "$ac_cv_header_stdint_h" = "yes"],[
-AC_DEFINE([__RPM_USES_STDINT_H__],[1],[if rpm uses stdint.h])
-])
-
 AC_SUBST([dirstamp],[\${am__leading_dot}dirstamp])
 
 AC_CONFIG_FILES([Makefile
-       rpmio/Makefile lib/Makefile build/Makefile
-       po/Makefile.in scripts/Makefile 
+       rpmio/Makefile lib/Makefile build/Makefile sign/Makefile
+       po/Makefile.in scripts/Makefile fileattrs/Makefile
        misc/Makefile 
        doc/Makefile
        python/Makefile
        luaext/Makefile
        tests/Makefile
+       plugins/Makefile
+       python/setup.py
   ])
 AC_OUTPUT