Whamcloud - gitweb
probe.c: When revalidating a filesystem in the blkid library,
[tools/e2fsprogs.git] / configure.in
index c191596..c462b7b 100644 (file)
@@ -1,4 +1,5 @@
 AC_INIT(version.h)
 AC_INIT(version.h)
+AC_PREREQ(2.12)
 MCONFIG=./MCONFIG
 AC_SUBST_FILE(MCONFIG)
 BINARY_TYPE=bin
 MCONFIG=./MCONFIG
 AC_SUBST_FILE(MCONFIG)
 BINARY_TYPE=bin
@@ -9,10 +10,13 @@ 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
        E2FSPROGS_YEAR=19$YEAR
 else
        E2FSPROGS_YEAR=20$YEAR
@@ -39,8 +43,22 @@ echo "Generating configuration file for e2fsprogs version $E2FSPROGS_VERSION"
 echo "Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}"
 AC_SUBST(E2FSPROGS_YEAR)
 AC_SUBST(E2FSPROGS_MONTH)
 echo "Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}"
 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])
+AC_CANONICAL_HOST
+dnl
+dnl Should we compile EVMS plugin or not.  Complicated logic, spread
+dnl over several different command-line options...
+dnl
+EVMS_CMT=
+dnl
+dnl Use diet libc
+dnl 
+AC_ARG_WITH([diet-libc],
+[  --with-diet-libc      Use diet libc],
+CC="diet cc -nostdinc"
+EVMS_CMT="#"
+AC_MSG_RESULT(CC=$CC))dnl
 dnl
 dnl set $(CC) from --with-cc=value
 dnl
 dnl
 dnl set $(CC) from --with-cc=value
 dnl
@@ -52,6 +70,7 @@ if test -z "$CC" ; then CC=cc; fi
 [AC_MSG_RESULT(CC defaults to $CC)])dnl
 export CC
 AC_SUBST([CC])
 [AC_MSG_RESULT(CC defaults to $CC)])dnl
 export CC
 AC_SUBST([CC])
+AC_PROG_CC
 dnl
 dnl set $(LD) from --with-linker=value
 dnl
 dnl
 dnl set $(LD) from --with-linker=value
 dnl
@@ -69,10 +88,18 @@ dnl
 AC_ARG_WITH([ccopts],
 [  --with-ccopts=CCOPTS    select compiler command line options],
 AC_MSG_RESULT(CCOPTS is $withval)
 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)
+CFLAGS=$withval,
+)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
+AC_CHECK_HEADER(linux/fs.h, [linux_headers=yes], [linux_headers=no])
+if test "$linux_headers" != yes; then
+  LINUX_INCLUDE='-I$(top_builddir)/include'
+fi
+AC_SUBST(LINUX_INCLUDE)
 dnl
 dnl Set default values for library extentions.  Will be dealt with after
 dnl parsing configuration opions, which may modify these
 dnl
 dnl Set default values for library extentions.  Will be dealt with after
 dnl parsing configuration opions, which may modify these
@@ -90,12 +117,106 @@ LDFLAGS=$withval,
 LDFLAGS=)dnl
 AC_SUBST(LDFLAGS)
 dnl
 LDFLAGS=)dnl
 AC_SUBST(LDFLAGS)
 dnl
-dnl Allow separate `usr_prefix' to be specified
+dnl Allow separate `root_prefix' to be specified
+dnl
+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-compression
+dnl
+AC_ARG_ENABLE([compression],
+[  --enable-compression          enable EXPERIMENTAL compression support],
+if test "$enableval" = "no"
+then
+       echo "Disabling compression support"
+else
+       AC_DEFINE(ENABLE_COMPRESSION)
+       echo "Enabling compression support"
+       echo "WARNING: Compression support is experimental"
+fi
+,
+echo "Disabling compression support by default"
+)
+dnl
+dnl handle --enable-htree
+dnl
+AC_ARG_ENABLE([htree],
+[  --enable-htree                enable EXPERIMENTAL htree directory support],
+if test "$enableval" = "no"
+then
+       HTREE_CMT=#
+       echo "Disabling htree directory support"
+else
+       HTREE_CMT=
+       AC_DEFINE(ENABLE_HTREE)
+       echo "Enabling htree directory support"
+fi
+,
+HTREE_CMT=
+AC_DEFINE(ENABLE_HTREE)
+echo "Enabling htree directory support by default"
+)
+AC_SUBST(HTREE_CMT)
+dnl
+dnl handle --enable-clear-htree
+dnl
+AC_ARG_ENABLE([htree-clear],
+[  --enable-htree-clear          clear htree because we don't trust e2fsck],
+if test "$enableval" = "no"
+then
+       HTREE_CLR_CMT=#
+       echo "Disabling htree clearing"
+else
+       HTREE_CLR_CMT=
+       AC_DEFINE(ENABLE_HTREE_CLEAR)
+       echo "Enabling htree clearing"
+fi
+,
+HTREE_CLR_CMT=#
+echo "Disabling htree clearing by default"
+)
+AC_SUBST(HTREE_CLR_CMT)
+dnl
+dnl handle --enable-evms
+dnl
+AC_ARG_ENABLE([evms],
+[  --disable-evms        don't build EVMS plugin],
+if test "$enableval" == "no"
+then
+       EVMS_CMT="#"
+       echo "Disabling EVMS plugin"
+fi
+)
+dnl
+dnl handle --enable-emvs-10
 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
+EVMS_ABI_CODE=120
+AC_ARG_ENABLE([evms-10],
+[  --enable-evms-10      use EVMS 1.0 ABI (instead of EVMS 1.2)],
+if test "$enableval" != "no"
+then
+       EVMS_ABI_CODE=100
+       echo "Enabling EVMS 1.0.0 ABI"
+fi
+)
+dnl
+dnl handle --enable-emvs-11
+dnl
+AC_ARG_ENABLE([evms-11],
+[  --enable-evms-11      use EVMS 1.1 ABI (instead of EVMS 1.2)],
+if test "$enableval" != "no"
+then
+       EVMS_ABI_CODE=110
+       echo "Enabling EVMS 1.1.0 ABI"
+fi
+)
+if test "$EVMS_ABI_CODE" = "120"
+then
+       echo "Using EVMS 1.2.0 ABI by default"
+fi
+AC_SUBST(EVMS_ABI_CODE)
 dnl
 dnl handle --enable-dll-shlibs
 dnl
 dnl
 dnl handle --enable-dll-shlibs
 dnl
@@ -133,6 +254,11 @@ then
 else
        ELF_CMT=
        MAKEFILE_ELF=$srcdir/lib/Makefile.elf-lib
 else
        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
        echo "Enabling ELF shared libraries"
        BINARY_TYPE=elfbin
        LIB_EXT=.so
        echo "Enabling ELF shared libraries"
@@ -158,6 +284,12 @@ else
        BSDLIB_CMT=
        MAKEFILE_BSDLIB=$srcdir/lib/Makefile.bsd-lib
        LIB_EXT=.so
        BSDLIB_CMT=
        MAKEFILE_BSDLIB=$srcdir/lib/Makefile.bsd-lib
        LIB_EXT=.so
+       [case "$host_os" in
+       darwin*)
+               MAKEFILE_BSDLIB=$srcdir/lib/Makefile.darwin-lib
+               LIB_EXT=.dylib
+       ;;
+       esac]
        echo "Enabling BSD shared libraries"
 fi
 ,
        echo "Enabling BSD shared libraries"
 fi
 ,
@@ -219,23 +351,127 @@ AC_SUBST(LIB_EXT)
 AC_SUBST(STATIC_LIB_EXT)
 AC_SUBST(PROFILED_LIB_EXT)
 dnl
 AC_SUBST(STATIC_LIB_EXT)
 AC_SUBST(PROFILED_LIB_EXT)
 dnl
-dnl handle --enable-gcc-wall
+dnl handle --enable-jbd-debug
 dnl
 dnl
-AC_ARG_ENABLE([gcc-wall],
-[  --enable-gcc-wall     enable GCC anal warnings],
+AC_ARG_ENABLE([jbd-debug],
+[  --enable-jbd-debug            enable journal debugging],
 if test "$enableval" = "no"
 then
 if test "$enableval" = "no"
 then
-       W=#
-       echo "Disabling GCC warnings"
+       echo "Disabling journal debugging"
 else
 else
-       W=
-       echo "Enabling GCC warnings"
+       AC_DEFINE(CONFIG_JBD_DEBUG)
+       echo "Enabling journal debugging"
 fi
 ,
 fi
 ,
-W=#
-echo "Disabling GCC warnings by default"
+echo "Disabling journal debugging by default"
 )
 )
-AC_SUBST(W)
+dnl
+dnl handle --enable-blkid-debug
+dnl
+AC_ARG_ENABLE([blkid-debug],
+[  --enable-blkid-debug    enable blkid debugging],
+if test "$enableval" = "no"
+then
+       echo "Disabling blkid debugging"
+else
+       AC_DEFINE(CONFIG_BLKID_DEBUG)
+       echo "Enabling blkid debugging"
+fi
+,
+echo "Disabling blkid debugging by default"
+)
+dnl
+dnl handle --enable-testio-debug
+dnl
+AC_ARG_ENABLE([testio-debug],
+[  --enable-testio-debug   enable the use of the test I/O manager for debugging],
+if test "$enableval" = "no"
+then
+       echo "Disabling testio debugging"
+else
+       AC_DEFINE(CONFIG_TESTIO_DEBUG)
+       echo "Enabling testio debugging"
+fi
+,
+echo "Disabling testio debugging by default"
+)
+dnl
+dnl handle --enable-swapfs
+dnl
+AC_ARG_ENABLE([swapfs],
+[  --disable-swapfs              disable support of legacy byte-swapped filesystems],
+if test "$enableval" = "no"
+then
+       SWAPFS_CMT=#
+       echo "Disabling swapfs support"
+else
+       SWAPFS_CMT=
+       AC_DEFINE(ENABLE_SWAPFS)
+       echo "Enabling swapfs support"
+fi
+,
+SWAPFS_CMT=
+echo "Enabling swapfs support by default"
+AC_DEFINE(ENABLE_SWAPFS)
+)
+AC_SUBST(SWAPFS_CMT)
+dnl
+dnl handle --enable-debugfs
+dnl
+AC_ARG_ENABLE([debugfs],
+[  --disable-debugfs             disable support of debugfs program],
+if test "$enableval" = "no"
+then
+       echo "Disabling debugfs support"
+       DEBUGFS_CMT="#"
+else
+       DEBUGFS_CMT=
+       echo "Enabling debugfs support"
+fi
+,
+echo "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
+       echo "Disabling e2image support"
+       IMAGER_CMT="#"
+else
+       IMAGER_CMT=
+       echo "Enabling e2image support"
+fi
+,
+echo "Enabling e2image support by default"
+IMAGER_CMT=
+)
+AC_SUBST(IMAGER_CMT)
+dnl
+dnl handle --enable-resizer
+dnl
+AC_ARG_ENABLE([resizer],
+[  --disable-resizer             disable support of e2resize program],
+if test "$enableval" = "no"
+then
+       echo "Disabling e2resize support"
+       RESIZER_CMT="#"
+else
+       RESIZER_CMT=
+       echo "Enabling e2resize support"
+fi
+,
+echo "Enabling e2resize support by default"
+RESIZER_CMT=
+)
+AC_SUBST(RESIZER_CMT)
+dnl
+dnl handle --enable-dynamic-e2fsck
+dnl
 AC_ARG_ENABLE([dynamic-e2fsck],
 [  --enable-dynamic-e2fsck build e2fsck dynamically],
 if test "$enableval" = "no"
 AC_ARG_ENABLE([dynamic-e2fsck],
 [  --enable-dynamic-e2fsck build e2fsck dynamically],
 if test "$enableval" = "no"
@@ -266,7 +502,7 @@ else
 fi]
 ,
 [case "$host_os" in
 fi]
 ,
 [case "$host_os" in
-  gnu*)
+  gnu* | k*bsd*-gnu)
     FSCK_PROG='' FSCK_MAN=''
     echo "Not building fsck wrapper by default"
     ;;
     FSCK_PROG='' FSCK_MAN=''
     echo "Not building fsck wrapper by default"
     ;;
@@ -297,6 +533,17 @@ fi
 echo "Using standard bitmask operations by default"
 )
 dnl
 echo "Using standard bitmask operations by default"
 )
 dnl
+dnl Add internationalization support, using gettext.
+dnl
+PACKAGE=e2fsprogs
+VERSION="$E2FSPROGS_VERSION"
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
+AC_SUBST(PACKAGE)
+AC_SUBST(VERSION)
+
+AM_GNU_GETTEXT
+dnl
 dnl End of configuration options
 dnl
 AC_SUBST(BINARY_TYPE)
 dnl End of configuration options
 dnl
 AC_SUBST(BINARY_TYPE)
@@ -309,30 +556,81 @@ AC_PATH_PROG(RM, rm, rm)
 AC_PATH_PROG(CHMOD, chmod, :)
 AC_PATH_PROG(AWK, awk, awk)
 AC_PATH_PROG(SED, sed, sed)
 AC_PATH_PROG(CHMOD, chmod, :)
 AC_PATH_PROG(AWK, awk, awk)
 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_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 net/if.h netinet/in.h)
+# 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
+AC_CHECK_HEADERS(stdlib.h unistd.h stdarg.h errno.h malloc.h mntent.h paths.h dirent.h getopt.h setjmp.h signal.h termios.h linux/fd.h linux/major.h sys/disklabel.h sys/ioctl.h sys/mkdev.h sys/mount.h sys/sockio.h sys/socket.h sys/sysmacros.h sys/time.h sys/stat.h sys/types.h sys/wait.h sys/resource.h net/if.h netinet/in.h)
 AC_FUNC_VPRINTF
 AC_FUNC_VPRINTF
+dnl Check to see if dirent has member d_reclen. On cygwin those d_reclen
+dnl is not decleared.
+AC_MSG_CHECKING(whether d_reclen declared in dirent)
+AC_CACHE_VAL(e2fsprogs_cv_have_d_reclen_dirent,
+       AC_TRY_COMPILE(
+[#include <dirent.h>], [struct dirent de; de.d_reclen = 0; ],
+       [e2fsprogs_cv_have_d_reclen_dirent=yes],
+       [e2fsprogs_cv_have_d_reclen_dirent=no]))
+AC_MSG_RESULT($e2fsprogs_cv_have_d_reclen_dirent)
+if test "$e2fsprogs_cv_have_d_reclen_dirent" = yes; then
+   AC_DEFINE(HAVE_RECLEN_DIRENT)
+fi
+dnl Check to see if ssize_t was decleared
+AC_MSG_CHECKING(whether ssize_t declared)
+AC_CACHE_VAL(e2fsprogs_cv_have_ssize_t,
+       AC_TRY_COMPILE(
+[#include <sys/types.h>], [ssize_t a = 0; ],
+       [e2fsprogs_cv_have_ssize_t=yes],
+       [e2fsprogs_cv_have_ssize_t=no]))
+AC_MSG_RESULT($e2fsprogs_cv_have_ssize_t)
+if test "$e2fsprogs_cv_have_ssize_t" = yes; then
+   AC_DEFINE(HAVE_TYPE_SSIZE_T)
+fi
+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 Warning!  Use of --enable-gcc-wall may throw off this test.
 dnl
 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
 dnl
-AC_MSG_CHECKING(whether struct dirent has a d_namlen field)
-AC_CACHE_VAL(e2fsprogs_cv_struct_d_namlen,
+AC_MSG_CHECKING(whether llseek declared in unistd.h)
+AC_CACHE_VAL(e2fsprogs_cv_have_llseek_prototype,
        AC_TRY_COMPILE(
        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)
+[#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
+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
+AC_MSG_CHECKING(whether lseek64 declared in unistd.h)
+AC_CACHE_VAL(e2fsprogs_cv_have_lseek64_prototype,
+       AC_TRY_COMPILE(
+[#define _LARGEFILE_SOURCE
+#define _LARGEFILE64_SOURCE
+#include <unistd.h>], [extern int lseek64(int);],
+       [e2fsprogs_cv_have_lseek64_prototype=no],
+       [e2fsprogs_cv_have_lseek64_prototype=yes]))
+AC_MSG_RESULT($e2fsprogs_cv_have_lseek64_prototype)
+if test "$e2fsprogs_cv_have_lseek64_prototype" = yes; then
+   AC_DEFINE(HAVE_LSEEK64_PROTOTYPE)
 fi
 dnl
 dnl Word sizes...
 fi
 dnl
 dnl Word sizes...
@@ -342,8 +640,8 @@ if test "$cross_compiling" = yes -a "$ac_cv_sizeof_long" = ""; then
   ac_cv_sizeof_short=2
   ac_cv_sizeof_int=4
   ac_cv_sizeof_long=4
   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])
+  ac_cv_sizeof_long_long=8
+  AC_MSG_WARN([Cross-compiling, so cannot check type sizes; assuming short=2, int=4, long=4, long long=8])
 fi
 AC_CHECK_SIZEOF(short)
 AC_CHECK_SIZEOF(int)
 fi
 AC_CHECK_SIZEOF(short)
 AC_CHECK_SIZEOF(int)
@@ -357,6 +655,7 @@ 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
 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().
@@ -369,40 +668,18 @@ 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)
-fi
-AC_CHECK_FUNCS(chflags getrusage llseek strdup getmntinfo strcasecmp srandom fchown)
-dnl
-dnl Check to see if ino_t is defined
-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
-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
-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"
+  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)
+  fi
 fi
 fi
-AC_SUBST(LINUX_INCLUDE)
+AC_CHECK_FUNCS(chflags getrusage llseek lseek64 open64 getmntinfo strtoull strcasecmp srandom fchown mallinfo fdatasync strnlen strptime sysconf pathconf posix_memalign memalign 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
@@ -411,6 +688,14 @@ 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 libdl exists for the sake of dlopen
+dnl
+DLOPEN_LIB=''
+AC_CHECK_LIB(dl, dlopen, 
+[DLOPEN_LIB=-ldl
+AC_DEFINE(HAVE_DLOPEN)])
+AC_SUBST(DLOPEN_LIB)
+dnl
 dnl See if optreset exists
 dnl
 AC_MSG_CHECKING(for optreset)
 dnl See if optreset exists
 dnl
 AC_MSG_CHECKING(for optreset)
@@ -422,59 +707,121 @@ if test $ac_cv_have_optreset = yes; then
   AC_DEFINE(HAVE_OPTRESET)
 fi
 dnl
   AC_DEFINE(HAVE_OPTRESET)
 fi
 dnl
-dnl See if using the EXT2 ioctls causes a compile-time barf (as on the hurd).
+dnl We use the EXT2 ioctls only under Linux
 dnl
 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)
-fi
+case "$host_os" in
+linux*)
+       AC_DEFINE(HAVE_EXT2_IOCTLS)
+       ;;
+esac
 dnl
 dnl
-dnl Linux uses a separate usr_prefix by default
+dnl OS-specific uncomment control
 dnl
 dnl
+LINUX_CMT="#"
+CYGWIN_CMT="#"
+UNIX_CMT=
 case "$host_os" in
 linux*)
 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"
+       LINUX_CMT=
+       ;;
+cygwin)
+       CYGWIN_CMT=
+       UNIX_CMT="#"
+       EVMS_CMT="#"
+       ;;
+*)
+       EVMS_CMT="#"
+esac
+AC_SUBST(LINUX_CMT)
+AC_SUBST(CYGWIN_CMT)
+AC_SUBST(UNIX_CMT)
+AC_SUBST([EVMS_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="";
+               echo "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";
+               echo "On $host_os systems, prefix defaults to /usr"
+               if test "$mandir" = '${prefix}/man' ; then
+                       echo "...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
+AC_SUBST(root_prefix)
+AC_SUBST(root_bindir)
+AC_SUBST(root_sbindir)
+AC_SUBST(root_libdir)
+AC_SUBST(root_sysconfdir)
 dnl
 dnl See if -static works.
 dnl
 dnl See if -static works.
-dnl XXX for now, assume that only Linux/hurd systems support -static
 dnl
 dnl
-AC_REQUIRE([AC_CANONICAL_HOST])
-LDFLAG_STATIC=
+AC_MSG_CHECKING([whether linker accepts -static])
+AC_CACHE_VAL(ac_cv_e2fsprogs_use_static,
+[SAVE_LDFLAGS=$LDFLAGS; LDFLAGS="$LDFLAGS -static"
+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
 case "$host_os" in
-linux* | gnu*)
-       LDFLAG_STATIC=-static
-       echo "On $host_os systems, assume -static works"
+solaris2.*)
+       ac_cv_e2fsprogs_use_static=no   
 ;;
 esac
 ;;
 esac
+AC_MSG_RESULT($ac_cv_e2fsprogs_use_static)
+LDFLAG_STATIC=
+if test $ac_cv_e2fsprogs_use_static = yes; then
+       LDFLAG_STATIC=-static
+fi
 AC_SUBST(LDFLAG_STATIC)
 dnl
 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*)
+       echo "Using Apple Darwin / GNU libintl workaround"
+       AC_DEFINE(_INTL_REDIRECT_MACROS)
+       ;;
+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`
@@ -491,10 +838,13 @@ else
 fi
 AC_SUBST(DO_TEST_SUITE)
 dnl
 fi
 AC_SUBST(DO_TEST_SUITE)
 dnl
-dnl
-dnl
-DO_SUBSTITUTE_SCRIPT=$srcdir/lib/do_substitute
-AC_SUBST_FILE(DO_SUBSTITUTE_SCRIPT)
+dnl Only include the intl include files if we're building with them
+dnl 
+INTL_FLAGS=
+if test "$USE_INCLUDED_LIBINTL" = "yes" ; then
+       INTL_FLAGS='-I$(top_builddir)/intl -I$(top_srcdir)/intl'
+fi
+AC_SUBST(INTL_FLAGS)
 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
@@ -502,7 +852,17 @@ 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
-AC_OUTPUT(MCONFIG lib/substitute_sh Makefile 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 doc/Makefile)
+test -d include/asm || mkdir include/asm
+for i in MCONFIG Makefile e2fsprogs.spec \
+       util/Makefile util/subst.conf util/gen-tarball \
+       lib/et/Makefile lib/ss/Makefile lib/ext2fs/Makefile lib/e2p/Makefile \
+       lib/uuid/Makefile lib/uuid/uuid_types.h \
+       lib/blkid/Makefile lib/blkid/blkid_types.h \
+       lib/evms/Makefile misc/Makefile ext2ed/Makefile e2fsck/Makefile \
+       debugfs/Makefile tests/Makefile tests/progs/Makefile \
+       resize/Makefile doc/Makefile intl/Makefile po/Makefile.in ; do
+       if test -d `dirname ${srcdir}/$i` ; then
+               outlist="$outlist $i"
+       fi
+done
+AC_OUTPUT($outlist)