Whamcloud - gitweb
tests: verify directory optimize with dir_data
[tools/e2fsprogs.git] / configure.in
index 8b86b5d..9905742 100644 (file)
@@ -1,4 +1,8 @@
 AC_INIT(version.h)
 AC_INIT(version.h)
+AC_PREREQ(2.50)
+AC_CONFIG_AUX_DIR(config)
+AC_CONFIG_HEADERS([lib/config.h])
+AH_BOTTOM([#include "dirpaths.h"])
 MCONFIG=./MCONFIG
 AC_SUBST_FILE(MCONFIG)
 BINARY_TYPE=bin
 MCONFIG=./MCONFIG
 AC_SUBST_FILE(MCONFIG)
 BINARY_TYPE=bin
@@ -9,117 +13,318 @@ E2FSPROGS_VERSION=`grep E2FSPROGS_VERSION ${srcdir}/version.h  \
        | awk '{print $3}' | tr \" " " | awk '{print $1}'`
 DATE=`grep E2FSPROGS_DATE ${srcdir}/version.h | awk '{print $3}' \
        | tr \" " "`
        | awk '{print $3}' | tr \" " " | awk '{print $1}'`
 DATE=`grep E2FSPROGS_DATE ${srcdir}/version.h | awk '{print $3}' \
        | tr \" " "`
+E2FSPROGS_DAY=`echo $DATE | awk -F- '{print $1}'`
 MONTH=`echo $DATE | awk -F- '{print $2}'`
 YEAR=`echo $DATE | awk -F- '{print $3}'`
 
 MONTH=`echo $DATE | awk -F- '{print $2}'`
 YEAR=`echo $DATE | awk -F- '{print $3}'`
 
-if expr $YEAR ">" 90 >/dev/null ; then
+if expr $YEAR ">" 1900 > /dev/null ; then
+       E2FSPROGS_YEAR=$YEAR
+elif expr $YEAR ">" 90 >/dev/null ; then
        E2FSPROGS_YEAR=19$YEAR
 else
        E2FSPROGS_YEAR=20$YEAR
 fi
 
 case $MONTH in
        E2FSPROGS_YEAR=19$YEAR
 else
        E2FSPROGS_YEAR=20$YEAR
 fi
 
 case $MONTH in
-Jan)   E2FSPROGS_MONTH="January" ;;
-Feb)   E2FSPROGS_MONTH="February" ;;
-Mar)   E2FSPROGS_MONTH="March" ;;
-Apr)   E2FSPROGS_MONTH="April" ;;
-May)   E2FSPROGS_MONTH="May" ;;
-Jun)   E2FSPROGS_MONTH="June" ;;
-Jul)   E2FSPROGS_MONTH="July" ;;
-Aug)   E2FSPROGS_MONTH="August" ;;
-Sep)   E2FSPROGS_MONTH="September" ;;
-Oct)   E2FSPROGS_MONTH="October" ;;
-Nov)   E2FSPROGS_MONTH="November" ;;
-Dec)   E2FSPROGS_MONTH="December" ;;
-*)     echo "Unknown month $MONTH??" ;;
+Jan)   MONTH_NUM=01; E2FSPROGS_MONTH="January" ;;
+Feb)   MONTH_NUM=02; E2FSPROGS_MONTH="February" ;;
+Mar)   MONTH_NUM=03; E2FSPROGS_MONTH="March" ;;
+Apr)   MONTH_NUM=04; E2FSPROGS_MONTH="April" ;;
+May)   MONTH_NUM=05; E2FSPROGS_MONTH="May" ;;
+Jun)   MONTH_NUM=06; E2FSPROGS_MONTH="June" ;;
+Jul)   MONTH_NUM=07; E2FSPROGS_MONTH="July" ;;
+Aug)   MONTH_NUM=08; E2FSPROGS_MONTH="August" ;;
+Sep)   MONTH_NUM=09; E2FSPROGS_MONTH="September" ;;
+Oct)   MONTH_NUM=10; E2FSPROGS_MONTH="October" ;;
+Nov)   MONTH_NUM=11; E2FSPROGS_MONTH="November" ;;
+Dec)   MONTH_NUM=12; E2FSPROGS_MONTH="December" ;;
+*)     AC_MSG_WARN([Unknown month $MONTH??]) ;;
 esac
 
 esac
 
-unset DATE MONTH YEAR
-echo "Generating configuration file for e2fsprogs version $E2FSPROGS_VERSION"
-echo "Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}"
+base_ver=`echo $E2FSPROGS_VERSION | \
+              sed -e 's/-WIP//' -e 's/pre-//' -e 's/-PLUS//'`
+
+date_spec=${E2FSPROGS_YEAR}.${MONTH_NUM}.${E2FSPROGS_DAY}
+
+case $E2FSPROGS_VERSION in
+*-WIP|pre-*)
+       E2FSPROGS_PKGVER="$base_ver~WIP-$E2FSPROGS_YEAR-$MONTH_NUM-$E2FSPROGS_DAY"
+       ;;
+*)
+       E2FSPROGS_PKGVER="$base_ver"
+       ;;
+esac
+
+unset DATE MONTH YEAR base_ver pre_vers date_spec
+AC_MSG_RESULT([Generating configuration file for e2fsprogs version $E2FSPROGS_VERSION])
+AC_MSG_RESULT([Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}])
 AC_SUBST(E2FSPROGS_YEAR)
 AC_SUBST(E2FSPROGS_MONTH)
 AC_SUBST(E2FSPROGS_YEAR)
 AC_SUBST(E2FSPROGS_MONTH)
+AC_SUBST(E2FSPROGS_DAY)
 AC_SUBST(E2FSPROGS_VERSION)
 AC_SUBST(E2FSPROGS_VERSION)
-AC_REQUIRE([AC_CANONICAL_HOST])
-dnl
-dnl set $(CC) from --with-cc=value
+AC_SUBST(E2FSPROGS_PKGVER)
+AC_CANONICAL_HOST
+dnl
+dnl Check to see if libdl exists for the sake of dlopen
+dnl
+DLOPEN_LIB=''
+AC_CHECK_LIB(dl, dlopen, 
+[DLOPEN_LIB=-ldl
+AC_DEFINE(HAVE_DLOPEN, 1, [Define to 1 if dlopen/libdl exists])])
+AC_SUBST(DLOPEN_LIB)
+dnl
+dnl Use diet libc
+dnl 
+WITH_DIET_LIBC=
+AC_ARG_WITH([diet-libc],
+[  --with-diet-libc        use diet libc],
+CC="diet cc -nostdinc"
+WITH_DIET_LIBC=yes
+AC_MSG_RESULT(CC=$CC))dnl
 dnl
 AC_ARG_WITH([cc],
 dnl
 AC_ARG_WITH([cc],
-[  --with-cc=COMPILER      select compiler to use],
-AC_MSG_RESULT(CC=$withval)
-CC=$withval,
-if test -z "$CC" ; then CC=cc; fi
-[AC_MSG_RESULT(CC defaults to $CC)])dnl
-export CC
-AC_SUBST([CC])
-dnl
-dnl set $(LD) from --with-linker=value
-dnl
-AC_ARG_WITH([linker],
-[  --with-linker=LINKER    select linker to use],
-AC_MSG_RESULT(LD=$withval)
-LD=$withval,
-if test -z "$LD" ; then LD=$CC; fi
-[AC_MSG_RESULT(LD defaults to $LD)])dnl
-export LD
-AC_SUBST([LD])
-dnl
-dnl set $(CCOPTS) from --with-ccopts=value
+AC_HELP_STRING([--with-cc],[no longer supported, use CC= instead]),
+AC_MSG_ERROR([--with-cc no longer supported; use CC= instead]))
 dnl
 AC_ARG_WITH([ccopts],
 dnl
 AC_ARG_WITH([ccopts],
-[  --with-ccopts=CCOPTS    select compiler command line options],
-AC_MSG_RESULT(CCOPTS is $withval)
-CCOPTS=$withval
-CFLAGS="$CFLAGS $withval",
-CCOPTS=)dnl
-AC_SUBST(CCOPTS)
+AC_HELP_STRING([--with-ccopts],[no longer supported, use CFLAGS= instead]),
+AC_MSG_ERROR([--with-ccopts no longer supported; use CFLAGS= instead]))
+dnl
+AC_ARG_WITH([ldopts],
+AC_HELP_STRING([--with-ldopts],[no longer supported, use LDFLAGS= instead]),
+AC_MSG_ERROR([--with-ldopts no longer supported; use LDFLAGS= instead]))
+dnl
+AC_PROG_CC
+if test "$GCC" = yes; then
+   RDYNAMIC="-rdynamic"
+   AC_SUBST(RDYNAMIC)
+fi
+AC_PROG_CPP
+dnl
+dnl Alpha computers use fast and imprecise floating point code that may
+dnl miss exceptions by default. Force sane options if we're using GCC.
+AC_MSG_CHECKING(for additional special compiler flags)
+if test "$GCC" = yes
+then
+    case "$host_cpu" in
+       alpha)          addcflags="-mieee" ;;
+    esac
+fi
+if test "x$addcflags" != x
+then
+    AC_MSG_RESULT($addcflags)
+    CFLAGS="$addcflags $CFLAGS"
+else
+    AC_MSG_RESULT([[(none)]])
+fi
 dnl
 dnl Set default values for library extentions.  Will be dealt with after
 dnl parsing configuration opions, which may modify these
 dnl
 LIB_EXT=.a
 STATIC_LIB_EXT=.a
 dnl
 dnl Set default values for library extentions.  Will be dealt with after
 dnl parsing configuration opions, which may modify these
 dnl
 LIB_EXT=.a
 STATIC_LIB_EXT=.a
-PROFILE_LIB_EXT=.a
+PROFILED_LIB_EXT=.a
 dnl
 dnl
-dnl set $(LDFLAGS) from --with-ldopts=value
+dnl Allow separate `root_prefix' to be specified
 dnl
 dnl
-AC_ARG_WITH([ldopts],
-[  --with-ldopts=LDOPTS    select linker command line options],
-AC_MSG_RESULT(LDFLAGS is $withval)
-LDFLAGS=$withval,
-LDFLAGS=)dnl
-AC_SUBST(LDFLAGS)
+AC_ARG_WITH([root-prefix],
+[  --with-root-prefix=PREFIX override prefix variable for files to be placed in the root],
+root_prefix=$withval,
+root_prefix=NONE)dnl
+dnl
+dnl handle --enable-maintainer-mode
+dnl
+AC_ARG_ENABLE([maintainer-mode],
+[  --enable-maintainer-mode enable makefile rules useful for maintainers],
+if test "$enableval" = "no"
+then
+       MAINTAINER_CMT=#
+       AC_MSG_RESULT([Disabling maintainer mode])
+else
+       MAINTAINER_CMT=
+       AC_MSG_RESULT([Enabling maintainer mode])
+fi
+,
+MAINTAINER_CMT=#
+AC_MSG_RESULT([Disabling maintainer mode by default])
+)
+AC_SUBST(MAINTAINER_CMT)
+dnl
+dnl handle --enable-symlink-install
+dnl
+AC_ARG_ENABLE([symlink-install],
+[  --enable-symlink-install use symlinks when installing instead of hard links],
+if test "$enableval" = "no"
+then
+       LINK_INSTALL_FLAGS=-f
+       AC_MSG_RESULT([Disabling symlinks for install])
+else
+       LINK_INSTALL_FLAGS=-sf
+       AC_MSG_RESULT([Enabling symlinks for install])
+fi
+,
+LINK_INSTALL_FLAGS=-f
+AC_MSG_RESULT([Disabling symlinks for install by default])
+)
+AC_SUBST(LINK_INSTALL_FLAGS)
+dnl
+dnl handle --enable-relative-symlinks
+dnl
+AC_ARG_ENABLE([symlink-relative-symlinks],
+[  --enable-relative-symlinks use relative symlinks when installing],
+if test "$enableval" = "no"
+then
+       SYMLINK_RELATIVE=
+       AC_MSG_RESULT([Disabling relative symlinks for install])
+else
+       SYMLINK_RELATIVE=--relative
+       AC_MSG_RESULT([Enabling symlinks for install])
+fi
+,
+       SYMLINK_RELATIVE=
+AC_MSG_RESULT([Disabling relative symlinks for install by default])
+)
+AC_SUBST(SYMLINK_RELATIVE)
+dnl
+dnl handle --enable-symlink-build
+dnl
+AC_ARG_ENABLE([symlink-build],
+[  --enable-symlink-build  use symlinks while building instead of hard links],
+if test "$enableval" = "no"
+then
+       LINK_BUILD_FLAGS=
+       AC_MSG_RESULT([Disabling symlinks for build])
+else
+       LINK_BUILD_FLAGS=-s
+       AC_MSG_RESULT([Enabling symlinks for build])
+fi
+,
+LINK_BUILD_FLAGS=
+AC_MSG_RESULT([Disabling symlinks for build by default])
+)
+AC_SUBST(LINK_BUILD_FLAGS)
+dnl
+dnl handle --enable-verbose-makecmds
+dnl
+AC_ARG_ENABLE([verbose-makecmds],
+[  --enable-verbose-makecmds enable verbose make command output],
+if test "$enableval" = "no"
+then
+       AC_MSG_RESULT([Disabling verbose make commands])
+       E=@echo
+       Q=@
+else
+       AC_MSG_RESULT([Enabling verbose make commands])
+       E=@\\#
+       Q= 
+fi
+,
+AC_MSG_RESULT([Disabling verbose make commands])
+E=@echo
+Q=@
+)
+AC_SUBST(E)
+AC_SUBST(Q)
 dnl
 dnl
-dnl Allow separate `usr_prefix' to be specified
+dnl handle --enable-lfsck
 dnl
 dnl
-AC_ARG_WITH([usr-prefix],
-[  --with-usr-prefx=PREFIX specify a prefix corresponding to /usr (default ${prefix})],
-usr_prefix=$withval,
-usr_prefix=NONE)dnl
+AC_ARG_ENABLE([lfsck],
+[  --disable-lfsck               disable EXPERIMENTAL Lustre lfsck support],
+if test "$enableval" = "no"
+then
+       LFSCK_CMT=#
+       LFSCK_MAN=.\"
+       ENABLE_LFSCK="--disable-lfsck"
+       echo "Disabling Lustre lfsck support"
+else
+       LFSCK_CMT=
+       LFSCK_MAN=
+       ENABLE_LFSCK="--enable-lfsck"
+       AC_DEFINE(HAVE_LFSCK, 1, [Define to 1 if Lustre lfsck is enabled])
+       echo "Enabling Lustre lfsck support"
+fi
+,
+LFSCK_CMT=
+LFSCK_MAN=
+ENABLE_LFSCK=
+AC_DEFINE(HAVE_LFSCK, 1, [Define to 1 if Lustre lfsck is enabled])
+echo "Enabling Lustre lfsck support by default"
+)
+AC_SUBST(LFSCK_CMT)
+AC_SUBST(LFSCK_MAN)
+AC_SUBST(ENABLE_LFSCK)
+dnl
+dnl set lustre include path and build lfsck
+dnl
+AC_ARG_WITH([lustre],
+[  --with-lustre=LUSTRE path to Lustre sources for lfsck (default=/usr for RPM)],
+AC_MSG_RESULT(LUSTRE is in $withval)
+       LUSTRE="$withval"
+       WITH_LUSTRE="--with-lustre=$withval",
+       LUSTRE="/usr"
+       WITH_LUSTRE=
+)dnl
+AC_SUBST(LUSTRE)
+AC_SUBST(WITH_LUSTRE)
+dnl
+AS_IF([test "x$enable_lfsck" != "xno"],
+[
+       AC_CHECK_FILE($LUSTRE/include/lustre/liblustreapi.h,,
+               AC_CHECK_FILE($LUSTRE/lustre/include/lustre/liblustreapi.h,,
+                       AC_MSG_ERROR([No lustre includes found.]))
+       )
+dnl    # Disable for old autoconf that doesn't check header usability.
+dnl    # Supposed to check if lustre_idl.h is buildable from userspace.
+dnl    AC_CHECK_HEADER($LUSTRE/lustre/include/lustre/lustre_idl.h,
+dnl                    AC_DEFINE(HAVE_LUSTRE_LUSTRE_IDL_H),
+dnl            AC_CHECK_HEADER($LUSTRE/include/lustre/lustre_idl.h,
+dnl                            AC_DEFINE(HAVE_LUSTRE_LUSTRE_IDL_H),)
+dnl    )
+])
+dnl
+dnl handle --enable-compression
+dnl
+AC_ARG_ENABLE([compression],
+[  --enable-compression          enable EXPERIMENTAL compression support],
+if test "$enableval" = "no"
+then
+       AC_MSG_RESULT([Disabling compression support])
+else
+       AC_DEFINE(ENABLE_COMPRESSION, 1,
+               [Define to 1 if ext2 compression enabled])
+       AC_MSG_RESULT([Enabling compression support])
+       AC_MSG_WARN([Compression support is experimental])
+fi
+,
+AC_MSG_RESULT([Disabling compression support by default])
+)
 dnl
 dnl
-dnl handle --enable-dll-shlibs
+dnl handle --enable-htree
 dnl
 dnl
-AC_ARG_ENABLE([dll-shlibs],
-[  --enable-dll-shlibs   select DLL libraries],
+AH_TEMPLATE([ENABLE_HTREE], [Define to 1 if ext3/4 htree support enabled])
+AC_ARG_ENABLE([htree],
+[  --enable-htree                enable EXPERIMENTAL htree directory support],
 if test "$enableval" = "no"
 then
 if test "$enableval" = "no"
 then
-       DLL_CMT=#
-       MAKEFILE_DLL=/dev/null
-       echo "Disabling DLL shared libraries"
+       HTREE_CMT=#
+       AC_MSG_RESULT([Disabling htree directory support])
 else
 else
-       DLL_CMT=
-       MAKEFILE_DLL=$srcdir/lib/Makefile.dll-lib
-       BINARY_TYPE=dllbin
-       LIB_EXT=.sa
-       echo "Enabling DLL shared libraries"
+       HTREE_CMT=
+       AC_DEFINE(ENABLE_HTREE, 1)
+       AC_MSG_RESULT([Enabling htree directory support])
 fi
 ,
 fi
 ,
-MAKEFILE_DLL=/dev/null
-DLL_CMT=#
-echo "Disabling DLL shared libraries by default"
+HTREE_CMT=
+AC_DEFINE(ENABLE_HTREE, 1)
+AC_MSG_RESULT([Enabling htree directory support by default])
 )
 )
-AC_SUBST(DLL_CMT)
-AC_SUBST_FILE(MAKEFILE_DLL)
+AC_SUBST(HTREE_CMT)
+dnl
+dnl This needs to be before all of the --enable-*-shlibs options
+dnl
+E2_PKG_CONFIG_STATIC=--static
+LDFLAG_DYNAMIC=
+PRIVATE_LIBS_CMT=
 dnl
 dnl handle --enable-elf-shlibs
 dnl
 dnl
 dnl handle --enable-elf-shlibs
 dnl
@@ -129,18 +334,26 @@ if test "$enableval" = "no"
 then
        ELF_CMT=#
        MAKEFILE_ELF=/dev/null
 then
        ELF_CMT=#
        MAKEFILE_ELF=/dev/null
-       echo "Disabling ELF shared libraries"
+       AC_MSG_RESULT([Disabling ELF shared libraries])
 else
 else
+       E2_PKG_CONFIG_STATIC=
        ELF_CMT=
        MAKEFILE_ELF=$srcdir/lib/Makefile.elf-lib
        ELF_CMT=
        MAKEFILE_ELF=$srcdir/lib/Makefile.elf-lib
+       [case "$host_os" in
+       solaris2.*)
+               MAKEFILE_ELF=$srcdir/lib/Makefile.solaris-lib
+       ;;
+       esac]
        BINARY_TYPE=elfbin
        LIB_EXT=.so
        BINARY_TYPE=elfbin
        LIB_EXT=.so
-       echo "Enabling ELF shared libraries"
+       PRIVATE_LIBS_CMT=#
+       LDFLAG_DYNAMIC=['-Wl,-rpath-link,$(top_builddir)/lib']
+       AC_MSG_RESULT([Enabling ELF shared libraries])
 fi
 ,
 MAKEFILE_ELF=/dev/null
 ELF_CMT=#
 fi
 ,
 MAKEFILE_ELF=/dev/null
 ELF_CMT=#
-echo "Disabling ELF shared libraries by default"
+AC_MSG_RESULT([Disabling ELF shared libraries by default])
 )
 AC_SUBST(ELF_CMT)
 AC_SUBST_FILE(MAKEFILE_ELF)
 )
 AC_SUBST(ELF_CMT)
 AC_SUBST_FILE(MAKEFILE_ELF)
@@ -153,17 +366,24 @@ if test "$enableval" = "no"
 then
        BSDLIB_CMT=#
        MAKEFILE_BSDLIB=/dev/null
 then
        BSDLIB_CMT=#
        MAKEFILE_BSDLIB=/dev/null
-       echo "Disabling BSD shared libraries"
+       AC_MSG_RESULT([Disabling BSD shared libraries])
 else
 else
+       E2_PKG_CONFIG_STATIC=
        BSDLIB_CMT=
        MAKEFILE_BSDLIB=$srcdir/lib/Makefile.bsd-lib
        LIB_EXT=.so
        BSDLIB_CMT=
        MAKEFILE_BSDLIB=$srcdir/lib/Makefile.bsd-lib
        LIB_EXT=.so
-       echo "Enabling BSD shared libraries"
+       [case "$host_os" in
+       darwin*)
+               MAKEFILE_BSDLIB=$srcdir/lib/Makefile.darwin-lib
+               LIB_EXT=.dylib
+       ;;
+       esac]
+       AC_MSG_RESULT([Enabling BSD shared libraries])
 fi
 ,
 MAKEFILE_BSDLIB=/dev/null
 BSDLIB_CMT=#
 fi
 ,
 MAKEFILE_BSDLIB=/dev/null
 BSDLIB_CMT=#
-echo "Disabling BSD shared libraries by default"
+AC_MSG_RESULT([Disabling BSD shared libraries by default])
 )
 AC_SUBST(BSDLIB_CMT)
 AC_SUBST_FILE(MAKEFILE_BSDLIB)
 )
 AC_SUBST(BSDLIB_CMT)
 AC_SUBST_FILE(MAKEFILE_BSDLIB)
@@ -176,17 +396,17 @@ if test "$enableval" = "no"
 then
        PROFILE_CMT=#
        MAKEFILE_PROFILE=/dev/null
 then
        PROFILE_CMT=#
        MAKEFILE_PROFILE=/dev/null
-       echo "Disabling profiling libraries"
+       AC_MSG_RESULT([Disabling profiling libraries])
 else
        PROFILE_CMT=
        MAKEFILE_PROFILE=$srcdir/lib/Makefile.profile
        PROFILED_LIB_EXT=_p.a
 else
        PROFILE_CMT=
        MAKEFILE_PROFILE=$srcdir/lib/Makefile.profile
        PROFILED_LIB_EXT=_p.a
-       echo "Building profiling libraries"
+       AC_MSG_RESULT([Building profiling libraries])
 fi
 ,
 PROFILE_CMT=#
 MAKEFILE_PROFILE=/dev/null
 fi
 ,
 PROFILE_CMT=#
 MAKEFILE_PROFILE=/dev/null
-echo "Disabling profiling libraries by default"
+AC_MSG_RESULT([Disabling profiling libraries by default])
 )
 AC_SUBST(PROFILE_CMT)
 AC_SUBST_FILE(MAKEFILE_PROFILE)
 )
 AC_SUBST(PROFILE_CMT)
 AC_SUBST_FILE(MAKEFILE_PROFILE)
@@ -199,16 +419,16 @@ if test "$enableval" = "no"
 then
        CHECKER_CMT=#
        MAKEFILE_CHECKER=/dev/null
 then
        CHECKER_CMT=#
        MAKEFILE_CHECKER=/dev/null
-       echo "Disabling checker libraries"
+       AC_MSG_RESULT([Disabling checker libraries])
 else
        CHECKER_CMT=
        MAKEFILE_CHECKER=$srcdir/lib/Makefile.checker
 else
        CHECKER_CMT=
        MAKEFILE_CHECKER=$srcdir/lib/Makefile.checker
-       echo "Building checker libraries"
+       AC_MSG_RESULT([Building checker libraries])
 fi
 ,
 CHECKER_CMT=#
 MAKEFILE_CHECKER=/dev/null
 fi
 ,
 CHECKER_CMT=#
 MAKEFILE_CHECKER=/dev/null
-echo "Disabling checker libraries by default"
+AC_MSG_RESULT([Disabling checker libraries by default])
 )
 AC_SUBST(CHECKER_CMT)
 AC_SUBST_FILE(MAKEFILE_CHECKER)
 )
 AC_SUBST(CHECKER_CMT)
 AC_SUBST_FILE(MAKEFILE_CHECKER)
@@ -218,39 +438,272 @@ dnl
 AC_SUBST(LIB_EXT)
 AC_SUBST(STATIC_LIB_EXT)
 AC_SUBST(PROFILED_LIB_EXT)
 AC_SUBST(LIB_EXT)
 AC_SUBST(STATIC_LIB_EXT)
 AC_SUBST(PROFILED_LIB_EXT)
+AC_SUBST(LDFLAG_DYNAMIC)
+AC_SUBST(PRIVATE_LIBS_CMT)
+dnl
+dnl handle --enable-jbd-debug
+dnl
+AC_ARG_ENABLE([jbd-debug],
+[  --enable-jbd-debug            enable journal debugging],
+if test "$enableval" = "no"
+then
+       AC_MSG_RESULT([Disabling journal debugging])
+else
+       AC_DEFINE(CONFIG_JBD_DEBUG, 1,
+               [Define to 1 if debugging ext3/4 journal code])
+       AC_MSG_RESULT([Enabling journal debugging])
+fi
+,
+AC_MSG_RESULT([Disabling journal debugging by default])
+)
+dnl
+dnl handle --enable-blkid-debug
+dnl
+AC_ARG_ENABLE([blkid-debug],
+[  --enable-blkid-debug    enable blkid debugging],
+if test "$enableval" = "no"
+then
+       AC_MSG_RESULT([Disabling blkid debugging])
+else
+       AC_DEFINE(CONFIG_BLKID_DEBUG, 1,
+               [Define to 1 if debugging the blkid library])
+       AC_MSG_RESULT([Enabling blkid debugging])
+fi
+,
+AC_MSG_RESULT([Disabling blkid debugging by default])
+)
+dnl
+dnl handle --enable-testio-debug
+dnl
+AC_ARG_ENABLE([testio-debug],
+[  --disable-testio-debug  disable the use of the test I/O manager for debugging],
+AH_TEMPLATE([CONFIG_TESTIO_DEBUG],
+       [Define to 1 if the testio I/O manager should be enabled])
+if test "$enableval" = "no"
+then
+       AC_MSG_RESULT([Disabling testio debugging])
+       TEST_IO_CMT="#"
+else
+       TEST_IO_CMT=
+       AC_DEFINE(CONFIG_TESTIO_DEBUG, 1)
+       AC_MSG_RESULT([Enabling testio debugging])
+fi
+,
+AC_MSG_RESULT([Enabling testio debugging by default])
+AC_DEFINE(CONFIG_TESTIO_DEBUG, 1)
+TEST_IO_CMT=
+)
+AC_SUBST(TEST_IO_CMT)
+dnl
+dnl handle --disable-libuuid
+dnl
+PKG_PROG_PKG_CONFIG
+LIBUUID=
+DEPLIBUUID=
+STATIC_LIBUUID=
+DEPSTATIC_LIBUUID=
+PROFILED_LIBUUID=
+DEPPROFILED_LIBUUID=
+UUID_CMT=
+AC_ARG_ENABLE([libuuid],
+[  --disable-libuuid     do not build private uuid library],
+if test "$enableval" = "no"
+then
+       if test -z "$PKG_CONFIG"; then
+               AC_MSG_ERROR([pkg-config not installed; please install it.])
+       fi
+
+       AC_CHECK_LIB(uuid, uuid_generate,
+               [LIBUUID=`$PKG_CONFIG --libs uuid`;
+                STATIC_LIBUUID=`$PKG_CONFIG --static --libs uuid`],
+               [AC_MSG_ERROR([external uuid library not found])],
+               [$LIBUUID])
+       UUID_CMT=#
+       AC_MSG_RESULT([Disabling private uuid library])
+else
+       LIBUUID='$(LIB)/libuuid'$LIB_EXT
+       DEPLIBUUID=$LIBUUID
+       STATIC_LIBUUID='$(LIB)/libuuid'$STATIC_LIB_EXT
+       DEPSTATIC_LIBUUID=$STATIC_LIBUUID
+       PROFILED_LIBUUID='$(LIB)/libuuid'$PROFILED_LIB_EXT
+       DEPPROFILED_LIBUUID=$PROFILED_LIBUUID
+       AC_MSG_RESULT([Enabling private uuid library])
+fi
+,
+LIBUUID='$(LIB)/libuuid'$LIB_EXT
+DEPLIBUUID=$LIBUUID
+STATIC_LIBUUID='$(LIB)/libuuid'$STATIC_LIB_EXT
+DEPSTATIC_LIBUUID=$STATIC_LIBUUID
+PROFILED_LIBUUID='$(LIB)/libuuid'$PROFILED_LIB_EXT
+DEPPROFILED_LIBUUID=$PROFILED_LIBUUID
+AC_MSG_RESULT([Enabling private uuid library by default])
+)
+AC_SUBST(LIBUUID)
+AC_SUBST(DEPLIBUUID)
+AC_SUBST(STATIC_LIBUUID)
+AC_SUBST(DEPSTATIC_LIBUUID)
+AC_SUBST(PROFILED_LIBUUID)
+AC_SUBST(DEPPROFILED_LIBUUID)
+AC_SUBST(UUID_CMT)
+dnl
+dnl handle --disable-libblkid
+dnl
+PKG_PROG_PKG_CONFIG
+LIBBLKID=
+DEPLIBBLKID=
+STATIC_LIBBLKID=
+DEPSTATIC_LIBBLKID=
+PROFILED_LIBBLKID=
+DEPPROFILED_LIBBLKID=
+BLKID_CMT=
+AH_TEMPLATE([CONFIG_BUILD_FINDFS], [Define to 1 to compile findfs])
+AC_ARG_ENABLE([libblkid],
+[  --disable-libblkid    do not build private blkid library],
+if test "$enableval" = "no"
+then
+       if test -z "$PKG_CONFIG"; then
+               AC_MSG_ERROR([pkg-config not installed; please install it.])
+       fi
+
+       AC_CHECK_LIB(blkid, blkid_get_cache,
+               [LIBBLKID=`$PKG_CONFIG --libs blkid`;
+                STATIC_LIBBLKID=`$PKG_CONFIG --static --libs blkid`],
+               [AC_MSG_ERROR([external blkid library not found])],
+               [$LIBBLKID])
+       BLKID_CMT=#
+       AC_MSG_RESULT([Disabling private blkid library])
+else
+       LIBBLKID='$(LIB)/libblkid'$LIB_EXT
+       DEPLIBBLKID=$LIBBLKID
+       STATIC_LIBBLKID='$(LIB)/libblkid'$STATIC_LIB_EXT
+       DEPSTATIC_LIBBLKID=$STATIC_LIBBLKID
+       PROFILED_LIBBLKID='$(LIB)/libblkid'$PROFILED_LIB_EXT
+       DEPPROFILED_LIBBLKID=$PROFILED_LIBBLKID
+       AC_DEFINE(CONFIG_BUILD_FINDFS, 1)
+       AC_MSG_RESULT([Enabling private blkid library])
+fi
+,
+LIBBLKID='$(LIB)/libblkid'$LIB_EXT
+DEPLIBBLKID=$LIBBLKID
+STATIC_LIBBLKID='$(LIB)/libblkid'$STATIC_LIB_EXT
+DEPSTATIC_LIBBLKID=$STATIC_LIBBLKID
+PROFILED_LIBBLKID='$(LIB)/libblkid'$PROFILED_LIB_EXT
+DEPPROFILED_LIBBLKID=$PROFILED_LIBBLKID
+AC_DEFINE(CONFIG_BUILD_FINDFS, 1)
+AC_MSG_RESULT([Enabling private blkid library by default])
+)
+AC_SUBST(LIBBLKID)
+AC_SUBST(DEPLIBBLKID)
+AC_SUBST(STATIC_LIBBLKID)
+AC_SUBST(DEPSTATIC_LIBBLKID)
+AC_SUBST(PROFILED_LIBBLKID)
+AC_SUBST(DEPPROFILED_LIBBLKID)
+AC_SUBST(BLKID_CMT)
+dnl
+dnl handle --enable-quota
+dnl
+PKG_PROG_PKG_CONFIG
+AH_TEMPLATE([CONFIG_QUOTA], [Define to 1 to enable quota support])
+AC_ARG_ENABLE([quota],
+[  --enable-libquota     enable quota support],
+if test "$enableval" = "no"
+then
+       AC_MSG_RESULT([Disabling quota support])
+else
+       AC_DEFINE(CONFIG_QUOTA, 1)
+       AC_MSG_RESULT([Enabling quota support])
+fi
+,
+AC_MSG_RESULT([Disabling quota support by default])
+)
+dnl
+dnl Define stuff expected for quota library
+dnl
+LIBQUOTA='$(LIB)/libquota'$LIB_EXT
+DEPLIBQUOTA=$LIBQUOTA
+STATIC_LIBQUOTA='$(LIB)/libquota'$STATIC_LIB_EXT
+DEPSTATIC_LIBQUOTA=$STATIC_LIBQUOTA
+PROFILED_LIBQUOTA='$(LIB)/libquota'$PROFILED_LIB_EXT
+DEPPROFILED_LIBQUOTA=$PROFILED_LIBQUOTA
+AC_SUBST(LIBQUOTA)
+AC_SUBST(DEPLIBQUOTA)
+AC_SUBST(STATIC_LIBQUOTA)
+AC_SUBST(DEPSTATIC_LIBQUOTA)
+AC_SUBST(PROFILED_LIBQUOTA)
+AC_SUBST(DEPPROFILED_LIBQUOTA)
+AC_SUBST(QUOTA_CMT)
+dnl
+dnl handle --enable-debugfs
+dnl
+AC_ARG_ENABLE([debugfs],
+[  --disable-debugfs             disable support of debugfs program],
+if test "$enableval" = "no"
+then
+       AC_MSG_RESULT([Disabling debugfs support])
+       DEBUGFS_CMT="#"
+else
+       DEBUGFS_CMT=
+       AC_MSG_RESULT([Enabling debugfs support])
+fi
+,
+AC_MSG_RESULT([Enabling debugfs support by default])
+DEBUGFS_CMT=
+)
+AC_SUBST(DEBUGFS_CMT)
+dnl
+dnl handle --enable-imager
+dnl
+AC_ARG_ENABLE([imager],
+[  --disable-imager      disable support of e2image program],
+if test "$enableval" = "no"
+then
+       AC_MSG_RESULT([Disabling e2image support])
+       IMAGER_CMT="#"
+else
+       IMAGER_CMT=
+       AC_MSG_RESULT([Enabling e2image support])
+fi
+,
+AC_MSG_RESULT([Enabling e2image support by default])
+IMAGER_CMT=
+)
+AC_SUBST(IMAGER_CMT)
 dnl
 dnl
-dnl handle --enable-gcc-wall
+dnl handle --enable-resizer
 dnl
 dnl
-AC_ARG_ENABLE([gcc-wall],
-[  --enable-gcc-wall     enable GCC anal warnings (DON'T USE IN PRODUCTION)],
+AC_ARG_ENABLE([resizer],
+[  --disable-resizer             disable support of e2resize program],
 if test "$enableval" = "no"
 then
 if test "$enableval" = "no"
 then
-       W=#
-       echo "Disabling GCC warnings"
+       AC_MSG_RESULT([Disabling e2resize support])
+       RESIZER_CMT="#"
 else
 else
-       W=
-       echo "Enabling GCC warnings"
+       RESIZER_CMT=
+       AC_MSG_RESULT([Enabling e2resize support])
 fi
 ,
 fi
 ,
-W=#
-echo "Disabling GCC warnings by default"
+AC_MSG_RESULT([Enabling e2resize support by default])
+RESIZER_CMT=
 )
 )
-AC_SUBST(W)
-AC_ARG_ENABLE([dynamic-e2fsck],
-[  --enable-dynamic-e2fsck build e2fsck dynamically],
+AC_SUBST(RESIZER_CMT)
+dnl
+dnl handle --enable-defrag
+dnl
+AC_ARG_ENABLE([defrag],
+[  --disable-defrag      disable support of e4defrag program],
 if test "$enableval" = "no"
 then
 if test "$enableval" = "no"
 then
-       E2FSCK_TYPE=static
-       echo "Building e2fsck statically"
+       AC_MSG_RESULT([Disabling e4defrag support])
+       DEFRAG_CMT="#"
 else
 else
-       E2FSCK_TYPE=shared
-       echo "Building e2fsck dynamically"
+       DEFRAG_CMT=
+       AC_MSG_RESULT([Enabling e4defrag support])
 fi
 ,
 fi
 ,
-E2FSCK_TYPE=static
-echo "Building e2fsck statically by default"
+AC_MSG_RESULT([Enabling e4defrag support by default])
+DEFRAG_CMT=
 )
 )
-AC_SUBST(E2FSCK_TYPE)
+AC_SUBST(DEFRAG_CMT)
 dnl
 dnl See whether to install the `fsck' wrapper program (that calls e2fsck)
 dnl
 dnl
 dnl See whether to install the `fsck' wrapper program (that calls e2fsck)
 dnl
@@ -259,109 +712,246 @@ AC_ARG_ENABLE([fsck],
 [if test "$enableval" = "no"
 then
        FSCK_PROG='' FSCK_MAN=''
 [if test "$enableval" = "no"
 then
        FSCK_PROG='' FSCK_MAN=''
-       echo "Not building fsck wrapper"
+       AC_MSG_RESULT([Not building fsck wrapper])
 else
        FSCK_PROG=fsck FSCK_MAN=fsck.8
 else
        FSCK_PROG=fsck FSCK_MAN=fsck.8
-       echo "Building fsck wrapper"
+       AC_MSG_RESULT([Building fsck wrapper])
 fi]
 ,
 [case "$host_os" in
   gnu*)
     FSCK_PROG='' FSCK_MAN=''
 fi]
 ,
 [case "$host_os" in
   gnu*)
     FSCK_PROG='' FSCK_MAN=''
-    echo "Not building fsck wrapper by default"
+    AC_MSG_RESULT([Not building fsck wrapper by default])
     ;;
   *)
     FSCK_PROG=fsck FSCK_MAN=fsck.8
     ;;
   *)
     FSCK_PROG=fsck FSCK_MAN=fsck.8
-    echo "Building fsck wrapper by default"
+    AC_MSG_RESULT([Building fsck wrapper by default])
 esac]
 )
 AC_SUBST(FSCK_PROG)
 AC_SUBST(FSCK_MAN)
 dnl
 esac]
 )
 AC_SUBST(FSCK_PROG)
 AC_SUBST(FSCK_MAN)
 dnl
+dnl See whether to install the `e2initrd-helper' program
 dnl
 dnl
-MAKEFILE_LIBRARY=$srcdir/lib/Makefile.library
-AC_SUBST_FILE(MAKEFILE_LIBRARY)
+AC_ARG_ENABLE([e2initrd-helper],
+[  --enable-e2initrd-helper build e2initrd-helper program],
+[if test "$enableval" = "no"
+then
+       E2INITRD_PROG='' E2INITRD_MAN=''
+       AC_MSG_RESULT([Not building e2initrd helper])
+else
+       E2INITRD_PROG=e2initrd_helper E2INITRD_MAN=e2initrd_helper.8
+       AC_MSG_RESULT([Building e2initrd helper])
+fi]
+,
+E2INITRD_PROG=e2initrd_helper E2INITRD_MAN=e2initrd_helper.8
+AC_MSG_RESULT([Building e2initrd helper by default])
+)
+AC_SUBST(E2INITRD_PROG)
+AC_SUBST(E2INITRD_MAN)
 dnl
 dnl
 dnl
 dnl
-AC_ARG_ENABLE([old-bitops],
-[  --enable-old-bitops   Use old (non-standard but native) bitmask operations],
-if test "$enableval" = "no"
+dnl
+AC_ARG_ENABLE([tls],
+[  --disable-tls           disable use of thread local support],
+[if test "$enableval" = "no"
 then
 then
-       echo "Using new (standard) bitmask operations"
+       try_tls=""
+       AC_MSG_RESULT([Disabling thread local support])
 else
 else
-       AC_DEFINE(EXT2_OLD_BITOPS)
-       echo "Using old (native) bitmask operations"
-
+       try_tls="yes"
+       AC_MSG_RESULT([Enabling thread local support])
+fi]
+,
+if test -n "$WITH_DIET_LIBC"
+then
+       try_tls=""
+       AC_MSG_RESULT([Diet libc does not support thread local support])
+else
+       try_tls="yes"
+       AC_MSG_RESULT([Try using thread local support by default])
 fi
 fi
+)
+if test "$try_tls" = "yes"
+then
+AX_TLS
+fi
+dnl
+dnl
+dnl
+AH_TEMPLATE([USE_UUIDD], [Define to 1 to build uuidd])
+AC_ARG_ENABLE([uuidd],
+[  --disable-uuidd         disable building the uuid daemon],
+[if test "$enableval" = "no"
+then
+       AC_MSG_RESULT([Not building uuidd])
+       UUIDD_CMT="#"
+else
+       AC_DEFINE(USE_UUIDD, 1)
+       UUIDD_CMT=""
+       AC_MSG_RESULT([Building uuidd])
+fi]
 ,
 ,
-echo "Using standard bitmask operations by default"
+AC_DEFINE(USE_UUIDD, 1)
+UUIDD_CMT=""
+AC_MSG_RESULT([Building uuidd by default])
 )
 )
+AC_SUBST(UUIDD_CMT)
+dnl
+dnl
+dnl
+MAKEFILE_LIBRARY=$srcdir/lib/Makefile.library
+AC_SUBST_FILE(MAKEFILE_LIBRARY)
+dnl
+dnl Add internationalization support, using gettext.
+dnl
+GETTEXT_PACKAGE=e2fsprogs
+PACKAGE=e2fsprogs
+VERSION="$E2FSPROGS_VERSION"
+VERSION=0.14.1
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [package name for gettext])
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [version for gettext])
+AC_SUBST(GETTEXT_PACKAGE)
+AC_SUBST(PACKAGE)
+AC_SUBST(VERSION)
+
+AM_GNU_GETTEXT
 dnl
 dnl End of configuration options
 dnl
 AC_SUBST(BINARY_TYPE)
 AC_PROG_MAKE_SET
 dnl
 dnl End of configuration options
 dnl
 AC_SUBST(BINARY_TYPE)
 AC_PROG_MAKE_SET
+CHECK_GNU_MAKE
 AC_PATH_PROG(LN, ln, ln)
 AC_PROG_LN_S
 AC_PATH_PROG(MV, mv, mv)
 AC_PATH_PROG(CP, cp, cp)
 AC_PATH_PROG(RM, rm, rm)
 AC_PATH_PROG(CHMOD, chmod, :)
 AC_PATH_PROG(LN, ln, ln)
 AC_PROG_LN_S
 AC_PATH_PROG(MV, mv, mv)
 AC_PATH_PROG(CP, cp, cp)
 AC_PATH_PROG(RM, rm, rm)
 AC_PATH_PROG(CHMOD, chmod, :)
-AC_PATH_PROG(AWK, awk, awk)
+AC_PROG_AWK
+AC_PROG_EGREP
 AC_PATH_PROG(SED, sed, sed)
 AC_PATH_PROG(SED, sed, sed)
+AC_PATH_PROG(PERL, perl, perl)
+AC_PATH_PROG(LDCONFIG, ldconfig, :)
 AC_CHECK_TOOL(AR, ar, ar)
 AC_CHECK_TOOL(RANLIB, ranlib, :)
 AC_CHECK_TOOL(STRIP, strip, :)
 AC_CHECK_TOOL(AR, ar, ar)
 AC_CHECK_TOOL(RANLIB, ranlib, :)
 AC_CHECK_TOOL(STRIP, strip, :)
-AC_PROG_CC
+AC_CHECK_PROG(MAKEINFO, makeinfo, makeinfo, )
+if test "_$MAKEINFO" = "_"; then
+    MAKEINFO="@echo Makeinfo is missing. Info documentation will not be built.;true"
+else
+    case "$MAKEINFO" in
+      */missing.*)
+        AC_MSG_WARN([
+*** Makeinfo is missing. Info documentation will not be built.])
+        ;;
+      *)
+        ;;
+    esac
+fi
+AC_SUBST(MAKEINFO)
 AC_PROG_INSTALL
 AC_PROG_INSTALL
-AC_C_CROSS
-AC_CHECK_HEADERS(stdlib.h unistd.h stdarg.h errno.h mntent.h dirent.h getopt.h linux/fd.h linux/major.h sys/disklabel.h sys/sockio.h sys/time.h sys/stat.h sys/types.h net/if.h netinet/in.h)
-AC_FUNC_VPRINTF
-dnl
-dnl See if struct dirent has a d_namlen field (like bsd systems), implying
-dnl that the actual length of the structure may be grater than the declared
-dnl length. 
-dnl
-AC_MSG_CHECKING(whether struct dirent has a d_namlen field)
-AC_CACHE_VAL(e2fsprogs_cv_struct_d_namlen,
-       AC_TRY_COMPILE(
-[#include <sys/types.h>
-#include <dirent.h>],
-               [struct dirent de; de.d_namlen = 0;],
-               [e2fsprogs_cv_struct_d_namlen=yes],
-               [e2fsprogs_cv_struct_d_namlen=no]))
-AC_MSG_RESULT($e2fsprogs_cv_struct_d_namlen)
-if test "$e2fsprogs_cv_struct_d_namlen" = yes; then
-  AC_DEFINE(HAVE_DIRENT_NAMLEN)
+# See if we need a separate native compiler.
+if test $cross_compiling = no; then
+  BUILD_CC="$CC"
+  AC_SUBST(BUILD_CC)
+else
+  AC_CHECK_PROGS(BUILD_CC, gcc cc)
 fi
 fi
+AC_CHECK_HEADERS(m4_flatten([
+       attr/xattr.h
+       dirent.h
+       errno.h
+       execinfo.h
+       getopt.h
+       malloc.h
+       mntent.h
+       paths.h
+       semaphore.h
+       setjmp.h
+       signal.h
+       stdarg.h
+       stdint.h
+       stdlib.h
+       termios.h
+       termio.h
+       unistd.h
+       utime.h
+       linux/falloc.h
+       linux/fd.h
+       linux/major.h
+       net/if_dl.h
+       netinet/in.h
+       sys/disklabel.h
+       sys/file.h
+       sys/ioctl.h
+       sys/mkdev.h
+       sys/mman.h
+       sys/prctl.h
+       sys/queue.h
+       sys/resource.h
+       sys/select.h
+       sys/socket.h
+       sys/sockio.h
+       sys/stat.h
+       sys/syscall.h
+       sys/sysmacros.h
+       sys/time.h
+       sys/types.h
+       sys/un.h
+       sys/wait.h
+       sys/xattr.h
+]))
+AC_CHECK_HEADERS(sys/disk.h sys/mount.h,,,
+[[
+#if HAVE_SYS_QUEUE_H
+#include <sys/queue.h>
+#endif
+]])
+AC_CHECK_HEADERS(net/if.h,,,
+[[
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#if HAVE_SYS_SOCKET
+#include <sys/socket.h>
+#endif
+]])
+AC_CHECK_HEADERS(db.h)
+AC_FUNC_VPRINTF
+dnl Check to see if dirent has member d_reclen. On cygwin those d_reclen
+dnl is not decleared.
+AC_CHECK_MEMBER(struct dirent.d_reclen,[AC_DEFINE(HAVE_RECLEN_DIRENT, 1,
+                      [Define to 1 if dirent has d_reclen])],,
+               [#include <dirent.h>])
+dnl Check to see if ssize_t was declared
+AC_CHECK_TYPE(ssize_t,[AC_DEFINE(HAVE_TYPE_SSIZE_T, 1,
+               [Define to 1 if ssize_t declared])],,
+             [#include <sys/types.h>])
 dnl
 dnl Check to see if llseek() is declared in unistd.h.  On some libc's 
 dnl it is, and on others it isn't..... Thank you glibc developers....
 dnl
 dnl
 dnl Check to see if llseek() is declared in unistd.h.  On some libc's 
 dnl it is, and on others it isn't..... Thank you glibc developers....
 dnl
+AC_CHECK_DECL(llseek,[AC_DEFINE(HAVE_LLSEEK_PROTOTYPE, 1,
+                       [Define to 1 if llseek declared in unistd.h])],,
+             [#include <unistd.h>])
+dnl
+dnl Check to see if lseek64() is declared in unistd.h.  Glibc's header files
+dnl are so convoluted that I can't tell whether it will always be defined,
+dnl and if it isn't defined while lseek64 is defined in the library, 
+dnl disaster will strike.  
+dnl
 dnl Warning!  Use of --enable-gcc-wall may throw off this test.
 dnl
 dnl
 dnl Warning!  Use of --enable-gcc-wall may throw off this test.
 dnl
 dnl
-AC_MSG_CHECKING(whether llseek declared in unistd.h)
-AC_CACHE_VAL(e2fsprogs_cv_have_llseek_prototype,
-       AC_TRY_COMPILE(
-[#include <unistd.h>], [extern int llseek(int);],
-       [e2fsprogs_cv_have_llseek_prototype=no],
-       [e2fsprogs_cv_have_llseek_prototype=yes]))
-AC_MSG_RESULT($e2fsprogs_cv_have_llseek_prototype)
-if test "$e2fsprogs_cv_have_llseek_prototype" = yes; then
-   AC_DEFINE(HAVE_LLSEEK_PROTOTYPE)
-fi
+AC_CHECK_DECL(lseek64,[AC_DEFINE(HAVE_LSEEK64_PROTOTYPE, 1,
+                       [Define to 1 if lseek64 declared in unistd.h])],,
+               [#define _LARGEFILE_SOURCE
+                #define _LARGEFILE64_SOURCE
+                #include <unistd.h>])
 dnl
 dnl Word sizes...
 dnl
 dnl
 dnl Word sizes...
 dnl
-if test "$cross_compiling" = yes -a "$ac_cv_sizeof_long" = ""; then
-  # if cross-compiling, with no cached values, just assume something common. 
-  ac_cv_sizeof_short=2
-  ac_cv_sizeof_int=4
-  ac_cv_sizeof_long=4
-  ac_cv_sizeof_long_long=0
-  AC_MSG_WARN([Cross-compiling, so cannot check type sizes; assuming short=2, int=4, long=4])
-fi
 AC_CHECK_SIZEOF(short)
 AC_CHECK_SIZEOF(int)
 AC_CHECK_SIZEOF(long)
 AC_CHECK_SIZEOF(short)
 AC_CHECK_SIZEOF(int)
 AC_CHECK_SIZEOF(long)
@@ -374,6 +964,34 @@ AC_SUBST(SIZEOF_SHORT)
 AC_SUBST(SIZEOF_INT)
 AC_SUBST(SIZEOF_LONG)
 AC_SUBST(SIZEOF_LONG_LONG)
 AC_SUBST(SIZEOF_INT)
 AC_SUBST(SIZEOF_LONG)
 AC_SUBST(SIZEOF_LONG_LONG)
+AC_C_BIGENDIAN
+BUILD_CC="$BUILD_CC" CPP="$CPP" /bin/sh $ac_aux_dir/parse-types.sh
+ASM_TYPES_HEADER=./asm_types.h
+AC_SUBST_FILE(ASM_TYPES_HEADER)
+dnl
+dnl Save the configuration #defines needed for the public ext2fs.h
+dnl header file
+dnl
+echo "/* These defines are needed for the public ext2fs.h header file */" \
+     > public_config.h
+if grep HAVE_SYS_TYPES_H confdefs.h > tmp_config.$$; then
+  uniq tmp_config.$$ >> public_config.h
+else
+  echo "#undef HAVE_SYS_TYPES_H" >> public_config.h
+fi
+if grep WORDS_BIGENDIAN confdefs.h > tmp_config.$$; then
+  uniq tmp_config.$$ >> public_config.h
+else
+  echo "#undef WORDS_BIGENDIAN" >> public_config.h
+fi
+rm -f tmp_config.$$
+PUBLIC_CONFIG_HEADER=./public_config.h
+AC_SUBST_FILE(PUBLIC_CONFIG_HEADER)
+dnl
+dnl See if we have inttypes.h and if intptr_t is defined
+dnl
+AC_CHECK_HEADERS([inttypes.h])
+AC_CHECK_TYPES(intptr_t)
 dnl
 dnl See if struct stat has a st_flags field, in which case we can get file
 dnl flags somewhat portably.  Also check for the analogous setter, chflags().
 dnl
 dnl See if struct stat has a st_flags field, in which case we can get file
 dnl flags somewhat portably.  Also check for the analogous setter, chflags().
@@ -386,40 +1004,79 @@ AC_CACHE_VAL(e2fsprogs_cv_struct_st_flags,
                [e2fsprogs_cv_struct_st_flags=no]))
 AC_MSG_RESULT($e2fsprogs_cv_struct_st_flags)
 if test "$e2fsprogs_cv_struct_st_flags" = yes; then
                [e2fsprogs_cv_struct_st_flags=no]))
 AC_MSG_RESULT($e2fsprogs_cv_struct_st_flags)
 if test "$e2fsprogs_cv_struct_st_flags" = yes; then
-  AC_DEFINE(HAVE_STAT_FLAGS)
+  AC_MSG_CHECKING(whether st_flags field is useful)
+  AC_CACHE_VAL(e2fsprogs_cv_struct_st_flags_immut,
+       AC_TRY_COMPILE([#include <sys/stat.h>],
+               [struct stat stat; stat.st_flags |= UF_IMMUTABLE;],
+               [e2fsprogs_cv_struct_st_flags_immut=yes],
+               [e2fsprogs_cv_struct_st_flags_immut=no]))
+  AC_MSG_RESULT($e2fsprogs_cv_struct_st_flags_immut)
+  if test "$e2fsprogs_cv_struct_st_flags_immut" = yes; then
+         AC_DEFINE(HAVE_STAT_FLAGS, 1,
+               [Define to 1 if struct stat has st_flags])
+  fi
 fi
 fi
-AC_CHECK_FUNCS(chflags getrusage llseek strdup getmntinfo strcasecmp srandom fchown)
 dnl
 dnl
-dnl Check to see if ino_t is defined
+dnl Check for the presence of SA_LEN
 dnl
 dnl
-AC_MSG_CHECKING(ino_t defined by sys/types.h)
-AC_CACHE_VAL(e2fsprogs_cv_ino_t,
-       AC_TRY_COMPILE([#include <sys/types.h>],
-       [ino_t ino; ino = 0;],
-       [e2fsprogs_cv_ino_t=yes],
-       [e2fsprogs_cv_ino_t=no]))
-AC_MSG_RESULT($e2fsprogs_cv_ino_t)
-if test "$e2fsprogs_cv_ino_t" = yes; then
-   AC_DEFINE(HAVE_INO_T)
-fi
+AC_CHECK_MEMBER(struct sockaddr.sa_len,
+               AC_DEFINE_UNQUOTED(HAVE_SA_LEN,1,
+                       [Define to 1 if if struct sockaddr contains sa_len]),,
+       [#include <sys/types.h>
+        #include <sys/socket.h>])
 dnl
 dnl
-dnl On systems without linux header files, we add an extra include directory
-dnl that holds enough to fake it (hopefully).  Note that the $(top_srcdir) here
-dnl is quoted so that it gets expanded by make, not by configure.
+dnl This will add -lblkid to the AC_CHECK_FUNCS search if we are using
+dnl the system-provided blkid library
 dnl
 dnl
-AC_CHECK_HEADER(linux/fs.h, [linux_headers=yes], [linux_headers=no])
-AC_SUBST(EXTRA_PROGS)
-if test "$linux_headers" = yes; then
-  AC_DEFINE(HAVE_LINUX_FS_H)
-  # These are some programs that depend on having linux headers around, and
-  # won't work otherwise.  So we only compile them if we can.
-  EXTRA_PROGS="$EXTRA_PROGS flushb"
-else
-  LINUX_INCLUDE='-I$(top_srcdir)/include -I$(top_builddir)/include'
-  # Use this include directory with test compiles in the configure script too.
-  CPPFLAGS="$CPPFLAGS -I$srcdir/include -I./include"
+if test -n "$BLKID_CMT"; then
+  AC_SEARCH_LIBS([blkid_probe_all], [blkid])
 fi
 fi
-AC_SUBST(LINUX_INCLUDE)
+dnl
+AC_CHECK_FUNCS(m4_flatten([
+       __secure_getenv
+       backtrace
+       blkid_probe_get_topology
+       chflags
+       fallocate
+       fallocate64
+       fchown
+       fdatasync
+       fstat64
+       ftruncate64
+       getdtablesize
+       getmntinfo
+       getpwuid_r
+       getrlimit
+       getrusage
+       jrand48
+       llseek
+       lseek64
+       mallinfo
+       mbstowcs
+       memalign
+       mmap
+       msync
+       nanosleep
+       open64
+       pathconf
+       posix_fadvise
+       posix_memalign
+       prctl
+       setmntent
+       setresgid
+       setresuid
+       srandom
+       strcasecmp
+       strdup
+       strnlen
+       strptime
+       strtoull
+       sync_file_range
+       sysconf
+       usleep
+       utime
+       valloc
+]))
 dnl
 dnl Check to see if -lsocket is required (solaris) to make something
 dnl that uses socket() to compile; this is needed for the UUID library
 dnl
 dnl Check to see if -lsocket is required (solaris) to make something
 dnl that uses socket() to compile; this is needed for the UUID library
@@ -428,6 +1085,38 @@ SOCKET_LIB=''
 AC_CHECK_LIB(socket, socket, [SOCKET_LIB=-lsocket])
 AC_SUBST(SOCKET_LIB)
 dnl
 AC_CHECK_LIB(socket, socket, [SOCKET_LIB=-lsocket])
 AC_SUBST(SOCKET_LIB)
 dnl
+dnl Check to see if libdb exists for the sake of lfsck
+dnl
+AC_CHECK_LIB(db-4.1, db_env_create,
+       [DB4VERSION=4.1
+       AC_DEFINE(HAVE_DB4, 1, [Define to 1 if DB4 library is present])
+])
+AC_CHECK_LIB(db-4.2, db_env_create,
+       [DB4VERSION=4.2
+       AC_DEFINE(HAVE_DB4, 1, [Define to 1 if DB4 library is present])
+])
+AC_CHECK_LIB(db-4.3, db_env_create,
+       [DB4VERSION=4.3
+       AC_DEFINE(HAVE_DB4, 1, [Define to 1 if DB4 library is present])
+])
+AC_CHECK_LIB(db-4.5, db_env_create,
+       [DB4VERSION=4.5
+       AC_DEFINE(HAVE_DB4, 1, [Define to 1 if DB4 library is present])
+])
+AC_CHECK_LIB(db-4.6, db_env_create,
+       [DB4VERSION=4.6
+       AC_DEFINE(HAVE_DB4, 1, [Define to 1 if DB4 library is present])
+])
+AC_CHECK_LIB(db-4.7, db_env_create,
+       [DB4VERSION=4.7
+       AC_DEFINE(HAVE_DB4, 1, [Define to 1 if DB4 library is present])
+])
+AC_CHECK_LIB(db-4.8, db_env_create,
+       [DB4VERSION=4.8
+       AC_DEFINE(HAVE_DB4, 1, [Define to 1 if DB4 library is present])
+])
+AC_SUBST(DB4VERSION)
+dnl
 dnl See if optreset exists
 dnl
 AC_MSG_CHECKING(for optreset)
 dnl See if optreset exists
 dnl
 AC_MSG_CHECKING(for optreset)
@@ -436,48 +1125,132 @@ AC_CACHE_VAL(ac_cv_have_optreset,
   ac_cv_have_optreset=yes, ac_cv_have_optreset=no)])dnl
 AC_MSG_RESULT($ac_cv_have_optreset)
 if test $ac_cv_have_optreset = yes; then
   ac_cv_have_optreset=yes, ac_cv_have_optreset=no)])dnl
 AC_MSG_RESULT($ac_cv_have_optreset)
 if test $ac_cv_have_optreset = yes; then
-  AC_DEFINE(HAVE_OPTRESET)
+  AC_DEFINE(HAVE_OPTRESET, 1, [Define to 1 if optreset for getopt is present])
 fi
 dnl
 fi
 dnl
-dnl See if using the EXT2 ioctls causes a compile-time barf (as on the hurd).
-dnl
-AC_MSG_CHECKING(whether the ext2 ioctls compile)
-AC_CACHE_VAL(e2fsprogs_cv_ioctl_ext2,
-       AC_TRY_COMPILE([#include <linux/ext2_fs.h>
-#include <sys/ioctl.h>],
-               [ioctl (0, EXT2_IOC_SETVERSION, 0);],
-               [e2fsprogs_cv_ioctl_ext2=yes],
-               [e2fsprogs_cv_ioctl_ext2=no]))
-AC_MSG_RESULT($e2fsprogs_cv_ioctl_ext2)
-if test "$e2fsprogs_cv_ioctl_ext2" = yes; then
-  AC_DEFINE(HAVE_EXT2_IOCTLS)
+dnl Test for sem_init, and which library it might require:
+dnl
+AH_TEMPLATE([HAVE_SEM_INIT], [Define to 1 if sem_init() exists])
+SEM_INIT_LIB=''
+AC_CHECK_FUNC(sem_init, ,
+  AC_CHECK_LIB(pthread, sem_init,
+       AC_DEFINE(HAVE_SEM_INIT, 1)
+       SEM_INIT_LIB=-lpthread,
+  AC_CHECK_LIB(rt, sem_init,
+       AC_DEFINE(HAVE_SEM_INIT, 1)
+       SEM_INIT_LIB=-lrt,
+  AC_CHECK_LIB(posix4, sem_init,
+       AC_DEFINE(HAVE_SEM_INIT, 1)
+       SEM_INIT_LIB=-lposix4))))dnl
+AC_SUBST(SEM_INIT_LIB)
+dnl
+dnl Check for unified diff
+dnl
+AC_MSG_CHECKING(for unified diff option)
+if diff -u $0 $0 > /dev/null 2>&1 ; then
+   UNI_DIFF_OPTS=-u
+else
+   UNI_DIFF_OPTS=-c
 fi
 fi
+AC_MSG_RESULT($UNI_DIFF_OPTS)
+AC_SUBST(UNI_DIFF_OPTS)
 dnl
 dnl
-dnl Linux uses a separate usr_prefix by default
+dnl We use the EXT2 ioctls only under Linux
 dnl
 case "$host_os" in
 linux*)
 dnl
 case "$host_os" in
 linux*)
-       if test "$prefix" = NONE ; then
-               usr_prefix="\${prefix}/usr";
-               echo "On $host_os systems, usr_prefix defaults to $usr_prefix"
+       AC_DEFINE(HAVE_EXT2_IOCTLS, 1, [Define to 1 if Ext2 ioctls present])
+       ;;
+esac
+dnl
+dnl OS-specific uncomment control
+dnl
+LINUX_CMT="#"
+CYGWIN_CMT="#"
+UNIX_CMT=
+case "$host_os" in
+linux*)
+       LINUX_CMT=
+       ;;
+cygwin)
+       CYGWIN_CMT=
+       UNIX_CMT="#"
+       ;;
+esac
+AC_SUBST(LINUX_CMT)
+AC_SUBST(CYGWIN_CMT)
+AC_SUBST(UNIX_CMT)
+dnl
+dnl Linux and Hurd places root files in the / by default
+dnl
+case "$host_os" in
+linux* | gnu* | k*bsd*-gnu)
+       if test "$prefix" = NONE -a "$root_prefix" = NONE ; then
+               root_prefix="";
+               AC_MSG_RESULT([On $host_os systems, root_prefix defaults to ''])
        fi
        ;;
 esac
        fi
        ;;
 esac
-if test "$usr_prefix" = NONE ; then
-       usr_prefix="\${prefix}"
-fi
-AC_SUBST(usr_prefix)
 dnl
 dnl
-dnl On Linux/hurd, force the prefix to be ''
+dnl On Linux/hurd, force the prefix to be /usr
 dnl
 case "$host_os" in
 dnl
 case "$host_os" in
-linux* | gnu*)
+linux* | gnu* | k*bsd*-gnu)
        if test "$prefix" = NONE ; then
        if test "$prefix" = NONE ; then
-               prefix='';
-               echo "On $host_os systems, prefix defaults to ''"
+               prefix="/usr";
+               AC_MSG_RESULT([On $host_os systems, prefix defaults to /usr])
+               if test "$mandir" = '${prefix}/man' ; then
+                       AC_MSG_RESULT([...and mandir defaults to /usr/share/man])
+                       mandir=/usr/share/man
+               fi
        fi
 ;;
 esac
        fi
 ;;
 esac
+if test "$root_prefix" = NONE ; then
+       if test "$prefix" = NONE ; then
+               root_prefix="$ac_default_prefix"
+       else
+               root_prefix="$prefix"
+       fi
+       root_bindir=$bindir
+       root_sbindir=$sbindir
+       root_libdir=$libdir
+       root_sysconfdir=$sysconfdir
+else
+       root_bindir='${root_prefix}/bin'
+       root_sbindir='${root_prefix}/sbin'
+       root_libdir='${root_prefix}/lib'
+       root_sysconfdir='${root_prefix}/etc'
+fi
+if test "$bindir" != '${exec_prefix}/bin'; then
+    root_bindir=$bindir
+    AC_MSG_RESULT([Setting root_bindir to $root_bindir])
+fi
+if test "$sbindir" != '${exec_prefix}/sbin'; then
+    root_sbindir=$sbindir
+    AC_MSG_RESULT([Setting root_sbindir to $root_sbindir])
+fi
+if test "$libdir" != '${exec_prefix}/lib'; then
+    root_libdir=$libdir
+    AC_MSG_RESULT([Setting root_libdir to $root_libdir])
+fi
+if test "$sysconfdir" != '${prefix}/etc'; then
+    root_sysconfdir=$sysconfdir
+    AC_MSG_RESULT([Setting root_sysconfdir to $root_sysconfdir])
+fi
+AC_SUBST(root_prefix)
+AC_SUBST(root_bindir)
+AC_SUBST(root_sbindir)
+AC_SUBST(root_libdir)
+AC_SUBST(root_sysconfdir)
+dnl
+dnl Allow specification of the multiarch arch
+dnl
+AC_ARG_WITH([multiarch],
+[  --with-multiarch=ARCH specify the multiarch triplet],
+libdir=$libdir/$withval
+root_libdir=$root_libdir/$withval
+)dnl
 dnl
 dnl See if -static works.
 dnl
 dnl
 dnl See if -static works.
 dnl
@@ -487,6 +1260,18 @@ AC_CACHE_VAL(ac_cv_e2fsprogs_use_static,
 AC_TRY_LINK([#include <stdio.h>],[fflush(stdout);],
  ac_cv_e2fsprogs_use_static=yes, ac_cv_e2fsprogs_use_static=no)
 LDFLAGS=$SAVE_LDFLAGS])
 AC_TRY_LINK([#include <stdio.h>],[fflush(stdout);],
  ac_cv_e2fsprogs_use_static=yes, ac_cv_e2fsprogs_use_static=no)
 LDFLAGS=$SAVE_LDFLAGS])
+dnl
+dnl Regardless of how the test turns out, Solaris doesn't handle -static
+dnl This is caused by the socket library requiring the nsl library, which
+dnl requires the -dl library, which only works for dynamically linked 
+dnl programs.  It basically means you can't have statically linked programs
+dnl which use the network under Solaris.  
+dnl
+case "$host_os" in
+solaris2.*)
+       ac_cv_e2fsprogs_use_static=no   
+;;
+esac
 AC_MSG_RESULT($ac_cv_e2fsprogs_use_static)
 LDFLAG_STATIC=
 if test $ac_cv_e2fsprogs_use_static = yes; then
 AC_MSG_RESULT($ac_cv_e2fsprogs_use_static)
 LDFLAG_STATIC=
 if test $ac_cv_e2fsprogs_use_static = yes; then
@@ -494,6 +1279,18 @@ if test $ac_cv_e2fsprogs_use_static = yes; then
 fi
 AC_SUBST(LDFLAG_STATIC)
 dnl
 fi
 AC_SUBST(LDFLAG_STATIC)
 dnl
+dnl Work around mysterious Darwin / GNU libintl problem
+dnl (__asm__ redirection doesn't work for some mysterious reason.  Looks like
+dnl Apple hacked gcc somehow?)
+dnl
+case "$host_os" in
+darwin*)
+       AC_MSG_RESULT([Using Apple Darwin / GNU libintl workaround])
+       AC_DEFINE(_INTL_REDIRECT_MACROS, 1,
+               [Define to 1 if Apple Darwin libintl workaround is needed])
+       ;;
+esac
+dnl
 dnl Make the ss and et directories work correctly.
 dnl
 SS_DIR=`cd ${srcdir}/lib/ss; pwd`
 dnl Make the ss and et directories work correctly.
 dnl
 SS_DIR=`cd ${srcdir}/lib/ss; pwd`
@@ -510,10 +1307,28 @@ else
 fi
 AC_SUBST(DO_TEST_SUITE)
 dnl
 fi
 AC_SUBST(DO_TEST_SUITE)
 dnl
+dnl Only include the intl include files if we're building with them
 dnl
 dnl
+INCLUDES='-I. -I$(top_builddir)/lib -I$(top_srcdir)/lib'
+if test -n "$CPPFLAGS" ; then
+       INCLUDES="$INCLUDES $CPPFLAGS"
+fi
+if test "$USE_INCLUDED_LIBINTL" = "yes" ; then
+       INCLUDES=$INCLUDES' -I$(top_builddir)/intl -I$(top_srcdir)/intl'
+fi
+AC_SUBST(INCLUDES)
 dnl
 dnl
-DO_SUBSTITUTE_SCRIPT=$srcdir/lib/do_substitute
-AC_SUBST_FILE(DO_SUBSTITUTE_SCRIPT)
+dnl Build CFLAGS
+dnl
+if test $cross_compiling = no; then
+   BUILD_CFLAGS="$CFLAGS"
+   BUILD_LDFLAGS="$LDFLAGS"
+else
+   BUILD_CFLAGS=
+   BUILD_LDFLAGS=
+fi
+AC_SUBST(BUILD_CFLAGS)
+AC_SUBST(BUILD_LDFLAGS)
 dnl
 dnl Make our output files, being sure that we create the some miscellaneous 
 dnl directories
 dnl
 dnl Make our output files, being sure that we create the some miscellaneous 
 dnl directories
@@ -521,11 +1336,24 @@ dnl
 test -d lib || mkdir lib
 test -d include || mkdir include
 test -d include/linux || mkdir include/linux
 test -d lib || mkdir lib
 test -d include || mkdir include
 test -d include/linux || mkdir include/linux
-rmakefile=
-if test -d ${srcdir}/resize ; then
-   rmakefile=resize/Makefile
-fi
-AC_OUTPUT(MCONFIG Makefile util/Makefile util/subst.conf lib/et/Makefile 
-       lib/ss/Makefile lib/ext2fs/Makefile lib/e2p/Makefile lib/uuid/Makefile
-       misc/Makefile e2fsck/Makefile debugfs/Makefile tests/Makefile 
-       tests/progs/Makefile $rmakefile doc/Makefile)
+test -d include/asm || mkdir include/asm
+for i in MCONFIG Makefile e2fsprogs.spec \
+       e2fsprogs-RHEL-6.spec \
+       e2fsprogs-SUSE_LINUX-11.spec \
+       util/Makefile util/subst.conf util/gen-tarball util/install-symlink \
+       lib/et/Makefile lib/ss/Makefile lib/e2p/Makefile \
+       lib/ext2fs/Makefile lib/ext2fs/ext2_types.h \
+       lib/uuid/Makefile lib/uuid/uuid_types.h \
+       lib/blkid/Makefile lib/blkid/blkid_types.h lib/quota/Makefile \
+       lib/ss/ss.pc lib/uuid/uuid.pc lib/et/com_err.pc \
+       lib/e2p/e2p.pc lib/blkid/blkid.pc lib/ext2fs/ext2fs.pc \
+       misc/Makefile ext2ed/Makefile e2fsck/Makefile \
+       debugfs/Makefile tests/Makefile tests/progs/Makefile \
+       resize/Makefile doc/Makefile intl/Makefile \
+       intl/libgnuintl.h po/Makefile.in ; do
+       if test -d `dirname ${srcdir}/$i` ; then
+               outlist="$outlist $i"
+       fi
+done
+AC_OUTPUT($outlist)
+if test -f util/gen-tarball; then chmod +x util/gen-tarball; fi