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
dnl
dnl This is to figure out the version number and the date....
dnl
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 \" " "`
E2FSPROGS_DAY=`echo $DATE | awk -F- '{print $1}'`
MONTH=`echo $DATE | awk -F- '{print $2}'`
YEAR=`echo $DATE | awk -F- '{print $3}'`

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
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

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_DAY)
AC_SUBST(E2FSPROGS_VERSION)
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],
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],
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
PROFILED_LIB_EXT=.a
dnl
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-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 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 handle --enable-htree
dnl
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
	HTREE_CMT=#
	AC_MSG_RESULT([Disabling htree directory support])
else
	HTREE_CMT=
	AC_DEFINE(ENABLE_HTREE, 1)
	AC_MSG_RESULT([Enabling htree directory support])
fi
,
HTREE_CMT=
AC_DEFINE(ENABLE_HTREE, 1)
AC_MSG_RESULT([Enabling htree directory support by default])
)
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
AC_ARG_ENABLE([elf-shlibs],
[  --enable-elf-shlibs	  select ELF shared libraries],
if test "$enableval" = "no"
then
	ELF_CMT=#
	MAKEFILE_ELF=/dev/null
	AC_MSG_RESULT([Disabling ELF shared libraries])
else
	E2_PKG_CONFIG_STATIC=
	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
	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=#
AC_MSG_RESULT([Disabling ELF shared libraries by default])
)
AC_SUBST(ELF_CMT)
AC_SUBST_FILE(MAKEFILE_ELF)
dnl
dnl handle --enable-bsd-shlibs
dnl
AC_ARG_ENABLE([bsd-shlibs],
[  --enable-bsd-shlibs	  select BSD shared libraries],
if test "$enableval" = "no"
then
	BSDLIB_CMT=#
	MAKEFILE_BSDLIB=/dev/null
	AC_MSG_RESULT([Disabling BSD shared libraries])
else
	E2_PKG_CONFIG_STATIC=
	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]
	AC_MSG_RESULT([Enabling BSD shared libraries])
fi
,
MAKEFILE_BSDLIB=/dev/null
BSDLIB_CMT=#
AC_MSG_RESULT([Disabling BSD shared libraries by default])
)
AC_SUBST(BSDLIB_CMT)
AC_SUBST_FILE(MAKEFILE_BSDLIB)
dnl
dnl handle --enable-profile
dnl
AC_ARG_ENABLE([profile],
[  --enable-profile	  build profiling libraries],
if test "$enableval" = "no"
then
	PROFILE_CMT=#
	MAKEFILE_PROFILE=/dev/null
	AC_MSG_RESULT([Disabling profiling libraries])
else
	PROFILE_CMT=
	MAKEFILE_PROFILE=$srcdir/lib/Makefile.profile
	PROFILED_LIB_EXT=_p.a
	AC_MSG_RESULT([Building profiling libraries])
fi
,
PROFILE_CMT=#
MAKEFILE_PROFILE=/dev/null
AC_MSG_RESULT([Disabling profiling libraries by default])
)
AC_SUBST(PROFILE_CMT)
AC_SUBST_FILE(MAKEFILE_PROFILE)
dnl
dnl handle --enable-checker
dnl
AC_ARG_ENABLE([checker],
[  --enable-checker	  build checker libraries],
if test "$enableval" = "no"
then
	CHECKER_CMT=#
	MAKEFILE_CHECKER=/dev/null
	AC_MSG_RESULT([Disabling checker libraries])
else
	CHECKER_CMT=
	MAKEFILE_CHECKER=$srcdir/lib/Makefile.checker
	AC_MSG_RESULT([Building checker libraries])
fi
,
CHECKER_CMT=#
MAKEFILE_CHECKER=/dev/null
AC_MSG_RESULT([Disabling checker libraries by default])
)
AC_SUBST(CHECKER_CMT)
AC_SUBST_FILE(MAKEFILE_CHECKER)
dnl
dnl Substitute library extensions
dnl
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 handle --enable-resizer
dnl
AC_ARG_ENABLE([resizer],
[  --disable-resizer   	  disable support of e2resize program],
if test "$enableval" = "no"
then
	AC_MSG_RESULT([Disabling e2resize support])
	RESIZER_CMT="#"
else
	RESIZER_CMT=
	AC_MSG_RESULT([Enabling e2resize support])
fi
,
AC_MSG_RESULT([Enabling e2resize support by default])
RESIZER_CMT=
)
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
	AC_MSG_RESULT([Disabling e4defrag support])
	DEFRAG_CMT="#"
else
	DEFRAG_CMT=
	AC_MSG_RESULT([Enabling e4defrag support])
fi
,
AC_MSG_RESULT([Enabling e4defrag support by default])
DEFRAG_CMT=
)
AC_SUBST(DEFRAG_CMT)
dnl
dnl See whether to install the `fsck' wrapper program (that calls e2fsck)
dnl
AC_ARG_ENABLE([fsck],
[  --enable-fsck           build fsck wrapper program],
[if test "$enableval" = "no"
then
	FSCK_PROG='' FSCK_MAN=''
	AC_MSG_RESULT([Not building fsck wrapper])
else
	FSCK_PROG=fsck FSCK_MAN=fsck.8
	AC_MSG_RESULT([Building fsck wrapper])
fi]
,
[case "$host_os" in
  gnu*)
    FSCK_PROG='' FSCK_MAN=''
    AC_MSG_RESULT([Not building fsck wrapper by default])
    ;;
  *)
    FSCK_PROG=fsck FSCK_MAN=fsck.8
    AC_MSG_RESULT([Building fsck wrapper by default])
esac]
)
AC_SUBST(FSCK_PROG)
AC_SUBST(FSCK_MAN)
dnl
dnl See whether to install the `e2initrd-helper' program
dnl
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
AC_ARG_ENABLE([tls],
[  --disable-tls           disable use of thread local support],
[if test "$enableval" = "no"
then
	try_tls=""
	AC_MSG_RESULT([Disabling thread local support])
else
	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
)
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]
,
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
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_PROG_AWK
AC_PROG_EGREP
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_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
# 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(m4_flatten([
	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
]))
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_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
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
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
AC_CHECK_SIZEOF(short)
AC_CHECK_SIZEOF(int)
AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(long long)
SIZEOF_SHORT=$ac_cv_sizeof_short
SIZEOF_INT=$ac_cv_sizeof_int
SIZEOF_LONG=$ac_cv_sizeof_long
SIZEOF_LONG_LONG=$ac_cv_sizeof_long_long
AC_SUBST(SIZEOF_SHORT)
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
AC_MSG_CHECKING(whether struct stat has a st_flags field)
AC_CACHE_VAL(e2fsprogs_cv_struct_st_flags,
	AC_TRY_COMPILE([#include <sys/stat.h>],
		[struct stat stat; stat.st_flags = 0;],
		[e2fsprogs_cv_struct_st_flags=yes],
		[e2fsprogs_cv_struct_st_flags=no]))
AC_MSG_RESULT($e2fsprogs_cv_struct_st_flags)
if test "$e2fsprogs_cv_struct_st_flags" = yes; then
  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
dnl
dnl Check for the presence of SA_LEN
dnl
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 This will add -lblkid to the AC_CHECK_FUNCS search if we are using
dnl the system-provided blkid library
dnl
if test -n "$BLKID_CMT"; then
  AC_SEARCH_LIBS([blkid_probe_all], [blkid])
fi
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
SOCKET_LIB=''
AC_CHECK_LIB(socket, socket, [SOCKET_LIB=-lsocket])
AC_SUBST(SOCKET_LIB)
dnl
dnl See if optreset exists
dnl
AC_MSG_CHECKING(for optreset)
AC_CACHE_VAL(ac_cv_have_optreset,
[AC_EGREP_HEADER(optreset, unistd.h,
  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, 1, [Define to 1 if optreset for getopt is present])
fi
dnl
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
AC_MSG_RESULT($UNI_DIFF_OPTS)
AC_SUBST(UNI_DIFF_OPTS)
dnl
dnl We use the EXT2 ioctls only under Linux
dnl
case "$host_os" in
linux*)
	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
dnl
dnl On Linux/hurd, force the prefix to be /usr
dnl
case "$host_os" in
linux* | gnu* | k*bsd*-gnu)
	if test "$prefix" = NONE ; then
		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
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
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
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
	LDFLAG_STATIC=-static
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`
ET_DIR=`cd ${srcdir}/lib/et; pwd`
AC_SUBST(SS_DIR)
AC_SUBST(ET_DIR)
dnl
dnl Only try to run the test suite if we're not cross compiling.
dnl
if test "$cross_compiling" = yes ; then
  DO_TEST_SUITE=
else
  DO_TEST_SUITE=check
fi
AC_SUBST(DO_TEST_SUITE)
dnl
dnl Only include the intl include files if we're building with them
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 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
test -d lib || mkdir lib
test -d include || mkdir include
test -d include/linux || mkdir include/linux
test -d include/asm || mkdir include/asm
for i in MCONFIG Makefile e2fsprogs.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
