X-Git-Url: https://git.whamcloud.com/?p=tools%2Fe2fsprogs.git;a=blobdiff_plain;f=configure.ac;h=78f71fd8ea37d3ad004aa73e334915d77587d46c;hp=33da6e38ab56d224e42621565169b116cd55f187;hb=HEAD;hpb=5ce368f07cb2e53d8b6d5aaeaa3ca47029c8a1d6 diff --git a/configure.ac b/configure.ac index 33da6e3..e00e8d0 100644 --- a/configure.ac +++ b/configure.ac @@ -1,19 +1,19 @@ -AC_INIT(version.h) -AC_PREREQ(2.54) +AC_INIT +AC_CONFIG_SRCDIR([version.h]) +AC_PREREQ([2.71]) AC_CONFIG_AUX_DIR(config) AC_CONFIG_HEADERS([lib/config.h]) AH_BOTTOM([#include ]) +AC_USE_SYSTEM_EXTENSIONS 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}'` -E2FSPROGS_DATE=`grep E2FSPROGS_DATE ${srcdir}/version.h | awk '{print $3}' \ - | tr \" " " | awk '{print $1}'` -E2FSPROGS_DAY=$(echo $E2FSPROGS_DATE | awk -F- '{print $1}' | sed -e '/^[[1-9]]$/s/^/0/') +E2FSPROGS_VERSION=`awk -F\" '/E2FSPROGS_VERS/ { print $2 }' ${srcdir}/version.h` +E2FSPROGS_DATE=`awk -F\" '/E2FSPROGS_DATE/ { print $2 }' ${srcdir}/version.h` +E2FSPROGS_DAY=$(echo $E2FSPROGS_DATE | awk -F- '{ printf "%02d", $1 }') MONTH=`echo $E2FSPROGS_DATE | awk -F- '{print $2}'` YEAR=`echo $E2FSPROGS_DATE | awk -F- '{print $3}'` @@ -41,27 +41,31 @@ 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//'` +base_ver=`echo $E2FSPROGS_VERSION | sed -e 's/pre-//' -e 's/-.*//'` +base_rel=`echo $E2FSPROGS_VERSION | awk -F- '{ print $2 }'` date_spec=${E2FSPROGS_YEAR}.${MONTH_NUM}.${E2FSPROGS_DAY} case $E2FSPROGS_VERSION in *-WIP|pre-*) - E2FSPROGS_PKGVER="$base_ver~WIP.$date_spec" + E2FSPROGS_PKGVER="$base_ver" + E2FSPROGS_PKGREL="WIP.$date_spec" ;; *) E2FSPROGS_PKGVER="$base_ver" + E2FSPROGS_PKGREL="$base_rel" ;; 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([Package version ${E2FSPROGS_PKGVER} release ${E2FSPROGS_PKGREL}]) 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_PKGREL) AC_SUBST(E2FSPROGS_PKGVER) AC_SUBST(E2FSPROGS_DATE) dnl @@ -69,7 +73,7 @@ dnl Use diet libc dnl WITH_DIET_LIBC= AC_ARG_WITH([diet-libc], -[ --with-diet-libc use diet libc], +AS_HELP_STRING([--with-diet-libc],[use diet libc]), CC="diet cc -nostdinc" WITH_DIET_LIBC=yes if test -z "$LIBS" @@ -89,15 +93,15 @@ AC_CHECK_LIB(dl, dlopen,DLOPEN_LIB=-ldl) AC_SUBST(DLOPEN_LIB) dnl AC_ARG_WITH([cc], -AC_HELP_STRING([--with-cc],[no longer supported, use CC= instead]), +AS_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]), +AS_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]), +AS_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 @@ -123,7 +127,6 @@ then else AC_MSG_RESULT([[(none)]]) fi -AC_USE_SYSTEM_EXTENSIONS dnl dnl Set default values for library extensions. Will be dealt with after dnl parsing configuration options, which may modify these @@ -135,14 +138,14 @@ 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], +AS_HELP_STRING([--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], +AS_HELP_STRING([--enable-maintainer-mode],[enable makefile rules useful for maintainers]), if test "$enableval" = "no" then MAINTAINER_CMT=# @@ -160,7 +163,7 @@ dnl dnl handle --enable-symlink-install dnl AC_ARG_ENABLE([symlink-install], -[ --enable-symlink-install use symlinks when installing instead of hard links], +AS_HELP_STRING([--enable-symlink-install],[use symlinks when installing instead of hard links]), if test "$enableval" = "no" then LINK_INSTALL_FLAGS=-f @@ -179,7 +182,7 @@ dnl handle --enable-relative-symlinks dnl relative_symlink_defined= AC_ARG_ENABLE([relative-symlinks], -[ --enable-relative-symlinks use relative symlinks when installing], +AS_HELP_STRING([--enable-relative-symlinks],[use relative symlinks when installing]), if test "$enableval" = "no" then SYMLINK_RELATIVE= @@ -211,7 +214,7 @@ dnl dnl handle --enable-symlink-build dnl AC_ARG_ENABLE([symlink-build], -[ --enable-symlink-build use symlinks while building instead of hard links], +AS_HELP_STRING([--enable-symlink-build],[use symlinks while building instead of hard links]), if test "$enableval" = "no" then LINK_BUILD_FLAGS= @@ -229,7 +232,7 @@ dnl dnl handle --enable-verbose-makecmds dnl AC_ARG_ENABLE([verbose-makecmds], -[ --enable-verbose-makecmds enable verbose make command output], +AS_HELP_STRING([--enable-verbose-makecmds],[enable verbose make command output]), if test "$enableval" = "no" then AC_MSG_RESULT([Disabling verbose make commands]) @@ -261,7 +264,7 @@ dnl dnl handle --enable-elf-shlibs dnl AC_ARG_ENABLE([elf-shlibs], -[ --enable-elf-shlibs select ELF shared libraries], +AS_HELP_STRING([--enable-elf-shlibs],[select ELF shared libraries]), if test "$enableval" = "no" then ELF_CMT=# @@ -293,7 +296,7 @@ dnl dnl handle --enable-bsd-shlibs dnl AC_ARG_ENABLE([bsd-shlibs], -[ --enable-bsd-shlibs select BSD shared libraries], +AS_HELP_STRING([--enable-bsd-shlibs],[select BSD shared libraries]), if test "$enableval" = "no" then BSDLIB_CMT=# @@ -323,7 +326,7 @@ dnl dnl handle --enable-profile dnl AC_ARG_ENABLE([profile], -[ --enable-profile build profiling libraries], +AS_HELP_STRING([--enable-profile],[build profiling libraries]), if test "$enableval" = "no" then PROFILE_CMT=# @@ -346,7 +349,7 @@ dnl dnl handle --enable-gcov dnl AC_ARG_ENABLE([gcov], -[ --enable-gcov build for coverage testing using gcov], +AS_HELP_STRING([--enable-gcov],[build for coverage testing using gcov]), if test "$enableval" = "yes" then CFLAGS="-g -fprofile-arcs -ftest-coverage" @@ -362,10 +365,10 @@ CFLAGS_STLIB="${CFLAGS_STLIB:-$CFLAGS}" LDFLAGS_SHLIB=${LDFLAGS_SHLIB:-$LDFLAGS} LDFLAGS_STATIC=${LDFLAGS_STATIC:-$LDFLAGS} AC_ARG_ENABLE([hardening], -[ --enable-hardening build for coverage testing using gcov], +AS_HELP_STRING([--enable-hardening],[build with hardening flags such as fortify]), if test "$enableval" = "yes" then - HARDEN_CFLAGS="-D_FORTIFY_SOURCE=2 -fstack-protector-strong" + HARDEN_CFLAGS="-D_FORTIFY_SOURCE=3 -fstack-protector-strong" HARDEN_LDFLAGS=["-Wl,-z,relro -Wl,-z,now"] CFLAGS="$CFLAGS $HARDEN_CFLAGS -fPIE" CFLAGS_SHLIB="$CFLAGS_SHLIB $HARDEN_CFLAGS" @@ -388,7 +391,7 @@ dnl dnl handle --enable-jbd-debug dnl AC_ARG_ENABLE([jbd-debug], -[ --enable-jbd-debug enable journal debugging], +AS_HELP_STRING([--enable-jbd-debug],[enable journal debugging]), if test "$enableval" = "no" then AC_MSG_RESULT([Disabling journal debugging]) @@ -404,7 +407,7 @@ dnl dnl handle --enable-blkid-debug dnl AC_ARG_ENABLE([blkid-debug], -[ --enable-blkid-debug enable blkid debugging], +AS_HELP_STRING([--enable-blkid-debug],[enable blkid debugging]), if test "$enableval" = "no" then AC_MSG_RESULT([Disabling blkid debugging]) @@ -420,7 +423,7 @@ 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], +AS_HELP_STRING([--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" @@ -439,6 +442,27 @@ TEST_IO_CMT= ) AC_SUBST(TEST_IO_CMT) dnl +dnl handle --enable-developer-features +dnl +AC_ARG_ENABLE([developer-features], +AS_HELP_STRING([--enable-developer-features],[enable features for use by ext4 developers]), +AH_TEMPLATE([CONFIG_DEVELOPER_FEATURES], + [Define to 1 for features for use by ext4 developers]) +if test "$enableval" = "yes" +then + DEV_FEATURES_CMT= + AC_DEFINE(CONFIG_DEVELOPER_FEATURES, 1) + AC_MSG_RESULT([Enabling ext4 developer features]) +else + AC_MSG_RESULT([Disabling ext4 developer features]) + DEV_FEATURES_CMT="#" +fi +, +AC_MSG_RESULT([Disabling ext4 developer features by default]) +DEV_FEATURES_CMT= +) +AC_SUBST(DEV_FEATURES_CMT) +dnl dnl handle --disable-libuuid dnl PKG_PROG_PKG_CONFIG @@ -450,7 +474,7 @@ PROFILED_LIBUUID= DEPPROFILED_LIBUUID= UUID_CMT= AC_ARG_ENABLE([libuuid], -[ --enable-libuuid build and use private uuid library], +AS_HELP_STRING([--enable-libuuid],[build and use private uuid library]), if test "$enableval" = "no" then if test -z "$PKG_CONFIG"; then @@ -513,7 +537,7 @@ DEPPROFILED_LIBBLKID= BLKID_CMT= AH_TEMPLATE([CONFIG_BUILD_FINDFS], [Define to 1 to compile findfs]) AC_ARG_ENABLE([libblkid], -[ --enable-libblkid build and use private blkid library], +AS_HELP_STRING([--enable-libblkid],[build and use private blkid library]), if test "$enableval" = "no" then if test -z "$PKG_CONFIG"; then @@ -566,11 +590,29 @@ AC_SUBST(PROFILED_LIBBLKID) AC_SUBST(DEPPROFILED_LIBBLKID) AC_SUBST(BLKID_CMT) dnl +dnl handle --enable-subset +dnl +ALL_CMT= +SUBSET_CMT= +AC_ARG_ENABLE([subset], +AS_HELP_STRING([--enable-subset],[enable subset-only build]), +if test "$enableval" = "no" +then + SUBSET_CMT=# + AC_MSG_RESULT([Disabling subset-only build]) +else + ALL_CMT=# + AC_MSG_RESULT([Enabling subset-only-build]) +fi +,) +AC_SUBST(ALL_CMT) +AC_SUBST(SUBSET_CMT) +dnl dnl handle --disable-backtrace dnl AH_TEMPLATE([DISABLE_BACKTRACE], [Define to 1 to disable use of backtrace]) AC_ARG_ENABLE([backtrace], -[ --disable-backtrace disable use backtrace], +AS_HELP_STRING([--disable-backtrace],[disable use backtrace]), if test "$enableval" = "no" then AC_MSG_RESULT([Disabling use of backtrace]) @@ -585,7 +627,7 @@ dnl dnl handle --enable-debugfs dnl AC_ARG_ENABLE([debugfs], -[ --disable-debugfs disable support of debugfs program], +AS_HELP_STRING([--disable-debugfs],[disable support of debugfs program]), if test "$enableval" = "no" then AC_MSG_RESULT([Disabling debugfs support]) @@ -603,7 +645,7 @@ dnl dnl handle --enable-imager dnl AC_ARG_ENABLE([imager], -[ --disable-imager disable support of e2image program], +AS_HELP_STRING([--disable-imager],[disable support of e2image program]), if test "$enableval" = "no" then AC_MSG_RESULT([Disabling e2image support]) @@ -621,7 +663,7 @@ dnl dnl handle --enable-resizer dnl AC_ARG_ENABLE([resizer], -[ --disable-resizer disable support of e2resize program], +AS_HELP_STRING([--disable-resizer],[disable support of e2resize program]), if test "$enableval" = "no" then AC_MSG_RESULT([Disabling e2resize support]) @@ -639,7 +681,7 @@ dnl dnl handle --enable-defrag dnl AC_ARG_ENABLE([defrag], -[ --disable-defrag disable support of e4defrag program], +AS_HELP_STRING([--disable-defrag],[disable support of e4defrag program]), if test "$enableval" = "no" then AC_MSG_RESULT([Disabling e4defrag support]) @@ -663,7 +705,7 @@ dnl dnl See whether to install the `fsck' wrapper program (that calls e2fsck) dnl AC_ARG_ENABLE([fsck], -[ --enable-fsck build fsck wrapper program], +AS_HELP_STRING([--enable-fsck],[build fsck wrapper program]), [if test "$enableval" = "no" then FSCK_PROG='' FSCK_MAN='' @@ -689,7 +731,7 @@ dnl dnl See whether to install the `e2initrd-helper' program dnl AC_ARG_ENABLE([e2initrd-helper], -[ --enable-e2initrd-helper build e2initrd-helper program], +AS_HELP_STRING([--enable-e2initrd-helper],[build e2initrd-helper program]), [if test "$enableval" = "no" then E2INITRD_PROG='' E2INITRD_MAN='' @@ -708,7 +750,7 @@ dnl dnl dnl AC_ARG_ENABLE([tls], -[ --disable-tls disable use of thread local support], +AS_HELP_STRING([--disable-tls],[disable use of thread local support]), [if test "$enableval" = "no" then try_tls="" @@ -734,9 +776,33 @@ fi dnl dnl dnl +AC_ARG_WITH([pthread], +AS_HELP_STRING([--without-pthread],[disable use of pthread support]), +[if test "$withval" = "no" +then + try_pthread="" + AC_MSG_RESULT([Disabling pthread support]) +else + try_pthread="yes" + AC_MSG_RESULT([Testing for pthread support]) +fi] +, +try_pthread="yes" +AC_MSG_RESULT([Try testing for pthread support by default]) +) +if test "$try_pthread" = "yes" +then +AX_PTHREAD +else +test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" +AC_SUBST([PTHREAD_CC]) +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], +AS_HELP_STRING([--disable-uuidd],[disable building the uuid daemon]), [if test "$enableval" = "no" then AC_MSG_RESULT([Not building uuidd]) @@ -763,7 +829,7 @@ dnl handle --disable-mmp dnl AH_TEMPLATE([CONFIG_MMP], [Define to 1 to enable mmp support]) AC_ARG_ENABLE([mmp], -[ --disable-mmp disable support mmp, Multi Mount Protection], +AS_HELP_STRING([--disable-mmp],[disable support mmp, Multi Mount Protection]), if test "$enableval" = "no" then AC_MSG_RESULT([Disabling mmp support]) @@ -780,24 +846,40 @@ dnl handle --disable-tdb dnl AH_TEMPLATE([CONFIG_TDB], [Define to 1 to enable tdb support]) AC_ARG_ENABLE([tdb], -[ --disable-tdb disable tdb support], +AS_HELP_STRING([--disable-tdb],[disable tdb support]), +[ if test "$enableval" = "no" then AC_MSG_RESULT([Disabling tdb support]) - TDB_CMT="#" - TDB_MAN_COMMENT='.\"' + CONFIG_TDB=0 else AC_MSG_RESULT([Enabling tdb support]) + CONFIG_TDB=1 +fi +] +, +[ +case "$host_os" in +mingw*) + AC_MSG_RESULT([Disabling tdb support by default]) + CONFIG_TDB=0 + ;; +*) + AC_MSG_RESULT([Enabling tdb support by default]) + CONFIG_TDB=1 + ;; +esac +] +) +if test "$CONFIG_TDB" = "1" +then AC_DEFINE(CONFIG_TDB, 1) TDB_CMT="" TDB_MAN_COMMENT="" +else + TDB_CMT="#" + TDB_MAN_COMMENT='.\"' fi -, -AC_MSG_RESULT([Enabling mmp support by default]) -AC_DEFINE(CONFIG_TDB, 1) -TDB_CMT="" -TDB_MAN_COMMENT="" -) AC_SUBST(TDB_CMT) AC_SUBST(TDB_MAN_COMMENT) dnl @@ -805,7 +887,7 @@ dnl handle --disable-bmap-stats dnl AH_TEMPLATE([ENABLE_BMAP_STATS], [Define to 1 to enable bitmap stats.]) AC_ARG_ENABLE([bmap-stats], -[ --disable-bmap-stats disable collection of bitmap stats.], +AS_HELP_STRING([--disable-bmap-stats],[disable collection of bitmap stats]), if test "$enableval" = "no" then AC_MSG_RESULT([Disabling bitmap statistics support]) @@ -822,7 +904,7 @@ dnl handle --enable-bmap-stats-ops dnl AH_TEMPLATE([ENABLE_BMAP_STATS_OPS], [Define to 1 to enable bitmap stats.]) AC_ARG_ENABLE([bmap-stats-ops], -[ --enable-bmap-stats-ops enable collection of additional bitmap stats], +AS_HELP_STRING([--enable-bmap-stats-ops],[enable collection of additional bitmap stats]), if test "$enableval" = "no" then AC_MSG_RESULT([Disabling additional bitmap statistics]) @@ -855,7 +937,7 @@ AC_SUBST(GETTEXT_PACKAGE) AC_SUBST(PACKAGE) AC_SUBST(VERSION) -AM_GNU_GETTEXT +AM_GNU_GETTEXT([external]) dnl dnl End of configuration options dnl @@ -863,6 +945,12 @@ AC_SUBST(BINARY_TYPE) AC_PROG_MAKE_SET CHECK_GNU_MAKE AC_PATH_PROG(LN, ln, ln) +AC_PROG_MKDIR_P +dnl +dnl @mkdir_p@ is used by po's Makefile.in +dnl +mkdir_p=$MKDIR_P +AC_SUBST(mkdir_p) AC_PROG_LN_S AC_PATH_PROG(MV, mv, mv) AC_PATH_PROG(CP, cp, cp) @@ -906,6 +994,7 @@ AC_CHECK_HEADERS(m4_flatten([ malloc.h mntent.h paths.h + pthread.h semaphore.h setjmp.h signal.h @@ -935,13 +1024,13 @@ AC_CHECK_HEADERS(m4_flatten([ sys/mman.h sys/mount.h sys/prctl.h + sys/random.h sys/resource.h sys/select.h sys/socket.h sys/sockio.h sys/stat.h sys/syscall.h - sys/sysctl.h sys/sysmacros.h sys/time.h sys/types.h @@ -949,6 +1038,17 @@ AC_CHECK_HEADERS(m4_flatten([ sys/wait.h sys/xattr.h ])) +case "$host_os" in +mingw*) + # The above checks only detect system headers, not the headers in + # ./include/mingw/, so explicitly define them to be available. + AC_DEFINE(HAVE_LINUX_TYPES_H, 1) + AC_DEFINE(HAVE_SYS_STAT_H, 1) + AC_DEFINE(HAVE_SYS_SYSMACROS_H, 1) + AC_DEFINE(HAVE_SYS_TYPES_H, 1) + AC_DEFINE(HAVE_UNISTD_H, 1) + ;; +esac dnl Check where to find a dd(1) that supports iflag=fullblock dnl and oflag=append AC_MSG_CHECKING([for a dd(1) program that supports iflag=fullblock]) @@ -1009,9 +1109,16 @@ AC_CHECK_DECL(lseek64,[AC_DEFINE(HAVE_LSEEK64_PROTOTYPE, 1, [#define _LARGEFILE_SOURCE #define _LARGEFILE64_SOURCE #include ]) + +dnl The Android NDK has , but it is missing the inline functions +dnl fsmap_sizeof() and fsmap_advance(). Check whether this is the case. +AC_CHECK_DECL(fsmap_sizeof,[AC_DEFINE(HAVE_FSMAP_SIZEOF, 1, + [Define to 1 if fsmap_sizeof() is declared in linux/fsmap.h])],, + [#include ]) dnl dnl Word sizes... dnl +AC_SYS_LARGEFILE AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) @@ -1068,18 +1175,12 @@ 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 ], - [struct stat stat; stat.st_flags = 0;], - [e2fsprogs_cv_struct_st_flags=yes], - [e2fsprogs_cv_struct_st_flags=no])) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[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 ], - [struct stat stat; stat.st_flags |= UF_IMMUTABLE;], - [e2fsprogs_cv_struct_st_flags_immut=yes], - [e2fsprogs_cv_struct_st_flags_immut=no])) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[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, @@ -1095,11 +1196,19 @@ AC_CHECK_MEMBER(struct sockaddr.sa_len, [#include #include ]) dnl -dnl This will add -lblkid to the AC_CHECK_FUNCS search if we are using -dnl the system-provided blkid library +dnl If we are using the system-provided blkid library, check for +dnl the functions added after migrating that library to util-linux dnl if test -n "$BLKID_CMT"; then - AC_SEARCH_LIBS([blkid_probe_all], [blkid]) + AC_CHECK_LIB(blkid, blkid_probe_get_topology, + AC_DEFINE(HAVE_BLKID_PROBE_GET_TOPOLOGY, 1, + [Define to 1 if blkid has blkid_probe_get_topology])) + AC_CHECK_LIB(blkid, blkid_topology_get_dax, + AC_DEFINE(HAVE_BLKID_TOPOLOGY_GET_DAX, 1, + [Define to 1 if blkid has blkid_topology_get_dax])) + AC_CHECK_LIB(blkid, blkid_probe_enable_partitions, + AC_DEFINE(HAVE_BLKID_PROBE_ENABLE_PARTITIONS, 1, + [Define to 1 if blkid has blkid_probe_enable_partitions])) fi dnl if test -n "$DLOPEN_LIB" ; then @@ -1109,8 +1218,6 @@ AC_CHECK_FUNCS(m4_flatten([ __secure_getenv add_key backtrace - blkid_probe_get_topology - blkid_probe_enable_partitions chflags dlopen fadvise64 @@ -1125,9 +1232,11 @@ AC_CHECK_FUNCS(m4_flatten([ futimes getcwd getdtablesize + getentropy gethostname getmntinfo getpwuid_r + getrandom getrlimit getrusage jrand48 @@ -1136,6 +1245,7 @@ AC_CHECK_FUNCS(m4_flatten([ llseek lseek64 mallinfo + mallinfo2 mbstowcs memalign mempcpy @@ -1152,6 +1262,7 @@ AC_CHECK_FUNCS(m4_flatten([ pwrite pread64 pwrite64 + qsort_r secure_getenv setmntent setresgid @@ -1188,44 +1299,90 @@ if test "$ac_cv_func_dlopen" = yes ; then fi AC_SUBST(MAGIC_LIB) dnl +dnl libarchive +dnl +AC_ARG_WITH([libarchive], +AS_HELP_STRING([--without-libarchive],[disable use of libarchive]), +[if test "$withval" = "no" +then + try_libarchive="" + AC_MSG_RESULT([Disabling libarchive support]) +elif test "$withval" = "direct" +then + try_libarchive="direct" + AC_MSG_RESULT([Testing for libarchive support (forced direct link)]) +else + try_libarchive="yes" + AC_MSG_RESULT([Testing for libarchive support (with dlopen)]) +fi] +, +try_libarchive="yes" +AC_MSG_RESULT([Try testing for libarchive support (with dlopen) by default]) +) +ARCHIVE_LIB= +if test -n "$try_libarchive" +then + AC_CHECK_LIB(archive, archive_read_new, [ARCHIVE_LIB=-larchive + AC_CHECK_HEADERS([archive.h])]) + if test "$ac_cv_func_dlopen" = yes -a "$try_libarchive" != "direct"; then + ARCHIVE_LIB=$DLOPEN_LIB + AC_DEFINE(CONFIG_DLOPEN_LIBARCHIVE, 1, + [Define to 1 if using dlopen to access libarchive]) + + fi + if test "$ac_cv_header_archive_h" != "yes" + then + ARCHIVE_LIB= + fi +fi +AC_SUBST(ARCHIVE_LIB) +dnl dnl Check to see if librt is required for clock_gettime() (glibc < 2.17) dnl AC_CHECK_LIB(rt, clock_gettime, [CLOCK_GETTIME_LIB=-lrt]) AC_SUBST(CLOCK_GETTIME_LIB) dnl -dnl Check to see if the FUSE library is -lfuse or -losxfuse +dnl Check to see if the FUSE library is -lfuse3, -losxfuse, or -lfuse dnl FUSE_CMT= FUSE_LIB= dnl osxfuse.dylib supersedes fuselib.dylib AC_ARG_ENABLE([fuse2fs], -[ --disable-fuse2fs do not build fuse2fs], +AS_HELP_STRING([--disable-fuse2fs],[do not build fuse2fs]), if test "$enableval" = "no" then FUSE_CMT="#" AC_MSG_RESULT([Disabling fuse2fs]) else - AC_CHECK_HEADERS([pthread.h fuse.h], [], -[AC_MSG_FAILURE([Cannot find fuse2fs headers.])], -[#define _FILE_OFFSET_BITS 64 -#define FUSE_USE_VERSION 29]) - AC_PREPROC_IFELSE( -[AC_LANG_PROGRAM([[#define FUSE_USE_VERSION 29 -#ifdef __linux__ +[AC_LANG_PROGRAM([[#ifdef __linux__ #include #include #include #endif ]], [])], [], [AC_MSG_FAILURE([Cannot find fuse2fs Linux headers.])]) - AC_CHECK_LIB(osxfuse, fuse_main, [FUSE_LIB=-losxfuse], - [AC_CHECK_LIB(fuse, fuse_main, [FUSE_LIB=-lfuse], - [AC_MSG_FAILURE([Cannot find fuse library.])])]) + PKG_CHECK_MODULES([fuse3], [fuse3], + [ + FUSE_LIB=-lfuse3 + ], [ + AC_CHECK_HEADERS([pthread.h fuse.h], [], + [AC_MSG_FAILURE([Cannot find fuse2fs headers.])], +[#define _FILE_OFFSET_BITS 64 +#define FUSE_USE_VERSION 29]) + + AC_CHECK_LIB(osxfuse, fuse_main, [FUSE_LIB=-losxfuse], + [AC_CHECK_LIB(fuse, fuse_main, [FUSE_LIB=-lfuse], + [AC_MSG_FAILURE([Cannot find fuse library.])])]) + ]) AC_MSG_RESULT([Enabling fuse2fs]) fi , -AC_CHECK_HEADERS([pthread.h fuse.h], [], [FUSE_CMT="#"], +PKG_CHECK_MODULES([fuse3], [fuse3], + [ + FUSE_LIB=-lfuse3 + ], [ + AC_CHECK_HEADERS([pthread.h fuse.h], [], [FUSE_CMT="#"], [#define _FILE_OFFSET_BITS 64 #define FUSE_USE_VERSION 29 #ifdef __linux__ @@ -1233,11 +1390,13 @@ AC_CHECK_HEADERS([pthread.h fuse.h], [], [FUSE_CMT="#"], # include # include #endif]) -if test -z "$FUSE_CMT" -then - AC_CHECK_LIB(osxfuse, fuse_main, [FUSE_LIB=-losxfuse], -[AC_CHECK_LIB(fuse, fuse_main, [FUSE_LIB=-lfuse], [FUSE_CMT="#"])]) -fi + if test -z "$FUSE_CMT" + then + AC_CHECK_LIB(osxfuse, fuse_main, [FUSE_LIB=-losxfuse], + [AC_CHECK_LIB(fuse, fuse_main, [FUSE_LIB=-lfuse], + [FUSE_CMT="#"])]) + fi + ]) if test -z "$FUSE_CMT" then AC_MSG_RESULT([Enabling fuse2fs by default.]) @@ -1245,6 +1404,29 @@ fi ) AC_SUBST(FUSE_LIB) AC_SUBST(FUSE_CMT) +if test "$FUSE_LIB" = "-lfuse3" +then + FUSE_USE_VERSION=35 + CFLAGS="$CFLAGS $fuse3_CFLAGS" + LDFLAGS="$LDFLAGS $fuse3_LDFLAGS" + AC_CHECK_HEADERS([pthread.h fuse.h], [], + [AC_MSG_FAILURE([Cannot find fuse3 fuse2fs headers.])], +[#define _FILE_OFFSET_BITS 64 +#define FUSE_USE_VERSION 35 +#ifdef __linux__ +#include +#include +#include +#endif]) +elif test -n "$FUSE_LIB" +then + FUSE_USE_VERSION=29 +fi +if test -n "$FUSE_USE_VERSION" +then + AC_DEFINE_UNQUOTED(FUSE_USE_VERSION, $FUSE_USE_VERSION, + [Define to the version of FUSE to use]) +fi dnl dnl See if optreset exists dnl @@ -1277,6 +1459,33 @@ then fi AC_SUBST(SEM_INIT_LIB) dnl +dnl qsort_r detection +dnl +AS_IF([test "$ac_cv_func_qsort_r" != no], [ + AC_CACHE_CHECK(whether qsort_r is GNU version, e2_cv_gnu_qsort_r, + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +@%:@include +void (qsort_r)(void *base, size_t nmemb, size_t size, + int (*compar)(const void *, const void *, void *), + void *arg); +]], [[ ]])],[e2_cv_gnu_qsort_r=yes],[e2_cv_gnu_qsort_r=no]) + ]) + AC_CACHE_CHECK(whether qsort_r is BSD version, e2_cv_bsd_qsort_r, + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +@%:@include +void (qsort_r)(void *base, size_t nmemb, size_t size, + void *arg, int (*compar)(void *, const void *, const void *)); +]], [[ ]])],[e2_cv_bsd_qsort_r=yes],[e2_cv_bsd_qsort_r=no]) + ]) + AS_CASE("$e2_cv_gnu_qsort_r:$e2_cv_bsd_qsort_r", + [yes:no], [ + AC_DEFINE(HAVE_GNU_QSORT_R, 1, [ Define to 1 if you have the GNU-style 'qsort_r' function.]) + ], + [no:yes], [ + AC_DEFINE(HAVE_BSD_QSORT_R, 1, [ Define to 1 if you have the BSD-style 'qsort_r' function.]) + ]) +]) +dnl dnl Check for unified diff dnl AC_MSG_CHECKING(for unified diff option) @@ -1296,6 +1505,170 @@ linux*) ;; esac dnl +dnl Check the available mount options +dnl +AX_CHECK_MOUNT_OPT(nosuid) +AX_CHECK_MOUNT_OPT(nodev) +dnl Enable LTO for all packages +dnl +AC_ARG_ENABLE([lto], +AS_HELP_STRING([--enable-lto],[enable link time optimization]),, +enable_lto=no) +if test "$enable_lto" = "yes" || test "$enable_lto" = "probe"; then + AC_MSG_CHECKING([if C compiler supports LTO]) + OLD_CFLAGS="$CFLAGS" + OLD_LDFLAGS="$LDFLAGS" + LTO_FLAGS="-g -flto -ffat-lto-objects" + CFLAGS="$CFLAGS $LTO_FLAGS" + LDFLAGS="$LDFLAGS $LTO_FLAGS" + AC_LINK_IFELSE([AC_LANG_PROGRAM([])], + [AC_MSG_RESULT([yes])] + [lto_cflags=$LTO_FLAGS] + [lto_ldflags=$LTO_FLAGS] + [AC_PATH_PROG(gcc_ar, gcc-ar,,)] + [AC_PATH_PROG(gcc_ranlib, gcc-ranlib,,)], + [AC_MSG_RESULT([no])]) + if test -x "$gcc_ar" && test -x "$gcc_ranlib"; then + have_lto=yes + AR="${gcc_ar}" + RANLIB="${gcc_ranlib}" + fi + CFLAGS="${OLD_CFLAGS}" + LDFLAGS="${OLD_LDFLAGS}" + AC_SUBST(have_lto) + AC_SUBST(lto_cflags) + AC_SUBST(lto_ldflags) +fi +if test "$enable_lto" = "yes" && test "$have_lto" != "yes"; then + AC_MSG_ERROR([LTO not supported by compiler.]) +fi +dnl +dnl Enable UBSAN for all packages +dnl +AC_ARG_ENABLE([ubsan], +AS_HELP_STRING([--enable-ubsan],[enable undefined behavior sanitizer]),, +enable_ubsan=no) +if test "$enable_ubsan" = "yes" || test "$enable_ubsan" = "probe"; then + AC_MSG_CHECKING([if C compiler supports UBSAN]) + OLD_CFLAGS="$CFLAGS" + OLD_LDFLAGS="$LDFLAGS" + UBSAN_FLAGS="-fsanitize=undefined" + CFLAGS="$CFLAGS $UBSAN_FLAGS" + LDFLAGS="$LDFLAGS $UBSAN_FLAGS" + AC_LINK_IFELSE([AC_LANG_PROGRAM([])], + [AC_MSG_RESULT([yes])] + [ubsan_cflags=$UBSAN_FLAGS] + [ubsan_ldflags=$UBSAN_FLAGS] + [have_ubsan=yes], + [AC_MSG_RESULT([no])]) + CFLAGS="${OLD_CFLAGS}" + LDFLAGS="${OLD_LDFLAGS}" + AC_SUBST(have_ubsan) + AC_SUBST(ubsan_cflags) + AC_SUBST(ubsan_ldflags) +fi +if test "$enable_ubsan" = "yes" && test "$have_ubsan" != "yes"; then + AC_MSG_ERROR([UBSAN not supported by compiler.]) +fi +dnl +dnl Enable ADDRSAN for all packages +dnl +AC_ARG_ENABLE([addrsan], +AS_HELP_STRING([--enable-addrsan],[enable address sanitizer]),, +enable_addrsan=no) +if test "$enable_addrsan" = "yes" || test "$enable_addrsan" = "probe"; then + AC_MSG_CHECKING([if C compiler supports ADDRSAN]) + OLD_CFLAGS="$CFLAGS" + OLD_LDFLAGS="$LDFLAGS" + ADDRSAN_FLAGS="-fsanitize=address" + CFLAGS="$CFLAGS $ADDRSAN_FLAGS" + LDFLAGS="$LDFLAGS $ADDRSAN_FLAGS" + AC_LINK_IFELSE([AC_LANG_PROGRAM([])], + [AC_MSG_RESULT([yes])] + [addrsan_cflags=$ADDRSAN_FLAGS] + [addrsan_ldflags=$ADDRSAN_FLAGS] + [have_addrsan=yes], + [AC_MSG_RESULT([no])]) + CFLAGS="${OLD_CFLAGS}" + LDFLAGS="${OLD_LDFLAGS}" + AC_SUBST(have_addrsan) + AC_SUBST(addrsan_cflags) + AC_SUBST(addrsan_ldflags) +fi +if test "$enable_addrsan" = "yes" && test "$have_addrsan" != "yes"; then + AC_MSG_ERROR([ADDRSAN not supported by compiler.]) +fi +dnl +dnl Enable THREADSAN for all packages +dnl +AC_ARG_ENABLE([threadsan], +AS_HELP_STRING([--enable-threadsan],[enable thread sanitizer]),, +enable_threadsan=no) +if test "$enable_threadsan" = "yes" || test "$enable_threadsan" = "probe"; then + AC_MSG_CHECKING([if C compiler supports THREADSAN]) + OLD_CFLAGS="$CFLAGS" + OLD_LDFLAGS="$LDFLAGS" + THREADSAN_FLAGS="-fsanitize=thread" + CFLAGS="$CFLAGS $THREADSAN_FLAGS" + LDFLAGS="$LDFLAGS $THREADSAN_FLAGS" + AC_LINK_IFELSE([AC_LANG_PROGRAM([])], + [AC_MSG_RESULT([yes])] + [threadsan_cflags=$THREADSAN_FLAGS] + [threadsan_ldflags=$THREADSAN_FLAGS] + [have_threadsan=yes], + [AC_MSG_RESULT([no])]) + CFLAGS="${OLD_CFLAGS}" + LDFLAGS="${OLD_LDFLAGS}" + AC_SUBST(have_threadsan) + AC_SUBST(threadsan_cflags) + AC_SUBST(threadsan_ldflags) +fi +if test "$enable_threadsan" = "yes" && test "$have_threadsan" != "yes"; then + AC_MSG_ERROR([THREADSAN not supported by compiler.]) +fi +if test "$have_threadsan" = "yes" && test "$have_addrsan" = "yes"; then + AC_MSG_WARN([ADDRSAN and THREADSAN are not known to work together.]) +fi +dnl +dnl Enable the fuzzer sanitizer for all packages +dnl +FUZZING_CMT="#" +AC_ARG_ENABLE([fuzzing], +AS_HELP_STRING([--enable-fuzzing],[enable fuzzing sanitizer]),, +enable_fuzzing=no) +if test "$enable_fuzzing" = "yes" || test "$enable_fuzzing" = "probe"; then + AC_PROG_CXX + AC_MSG_CHECKING([if C compiler supports fuzzing sanitizer]) + AC_LANG_PUSH([C++]) + OLD_CXXFLAGS="$CXXFLAGS" + OLD_LDFLAGS="$LDFLAGS" + FUZZER_FLAGS="-fsanitize=fuzzer" + CXXFLAGS="$CXXFLAGS $FUZZER_FLAGS" + LDFLAGS="$LDFLAGS $FUZZER_FLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + #include + ]], + [ return 0; ])], + [AC_MSG_RESULT([yes])] + [fuzzer_cflags=$FUZZER_FLAGS] + [fuzzer_ldflags=$FUZZER_FLAGS] + [FUZZING_CMT=] + [have_fuzzer=yes], + [AC_MSG_RESULT([no])] + [AC_MSG_ERROR([fuzzing requested but not available])]) + CXXFLAGS="${OLD_CXXFLAGS}" + LDFLAGS="${OLD_LDFLAGS}" + AC_LANG_POP([C++]) + AC_SUBST(have_fuzzer) + AC_SUBST(fuzzer_cflags) + AC_SUBST(fuzzer_ldflags) +fi +if test "$enable_fuzzer" = "yes" && test "$have_fuzzer" != "yes"; then + AC_MSG_ERROR([Fuzzing not supported by compiler.]) +fi +AC_SUBST(FUZZING_CMT) +dnl dnl OS-specific uncomment control dnl LINUX_CMT="#" @@ -1385,7 +1758,7 @@ dnl dnl Allow specification of the multiarch arch dnl AC_ARG_WITH([multiarch], -[ --with-multiarch=ARCH specify the multiarch triplet], +AS_HELP_STRING([--with-multiarch=ARCH],[specify the multiarch triplet]), if test "$withval" = "lib64"; then libdir=/usr/lib64 root_libdir=/lib64 @@ -1393,7 +1766,8 @@ else libdir=$libdir/$withval root_libdir=$root_libdir/$withval fi -)dnl +) +dnl dnl dnl See if -static works. This could fail if the linker does not dnl support -static, or if required external libraries are not available @@ -1402,8 +1776,7 @@ dnl AC_MSG_CHECKING([whether we can link with -static]) AC_CACHE_VAL(ac_cv_e2fsprogs_use_static, [SAVE_LDFLAGS=$LDFLAGS; LDFLAGS="$LDFLAGS_STATIC -static" -AC_TRY_LINK([#include ],[fflush(stdout);], - ac_cv_e2fsprogs_use_static=yes, ac_cv_e2fsprogs_use_static=no) +AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[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 @@ -1456,8 +1829,12 @@ fi if test -n "$WITH_DIET_LIBC" ; then INCLUDES="$INCLUDES -D_REENTRANT" fi +case "$host_os" in +mingw*) + INCLUDES=$INCLUDES' -I$(top_srcdir)/include/mingw' + ;; +esac AC_SUBST(INCLUDES) -AM_MKINSTALLDIRS dnl dnl Build CFLAGS dnl @@ -1515,6 +1892,90 @@ AC_SUBST(have_udev) AC_SUBST(pkg_udev_rules_dir) dnl +dnl Where do cron jobs go? +dnl +AC_ARG_WITH([crond_dir], + [AS_HELP_STRING([--with-crond-dir@<:@=DIR@:>@], + [Install system crontabs into DIR.])], + [], + [with_crond_dir=yes]) +AS_IF([test "x${with_crond_dir}" != "xno"], + [ + AS_IF([test "x${with_crond_dir}" = "xyes"], + [ + AS_IF([test -d "/etc/cron.d"], + [with_crond_dir="/etc/cron.d"], + [have_crond="no"; with_crond_dir=""]) + ]) + AC_MSG_CHECKING([for system crontab dir]) + crond_dir="${with_crond_dir}" + AS_IF([test -n "${crond_dir}"], + [ + AC_MSG_RESULT(${crond_dir}) + have_crond="yes" + ], + [ + AC_MSG_RESULT(no) + have_crond="no" + ]) + ], + [ + have_crond="disabled" + ]) +AC_SUBST(have_crond) +AC_SUBST(crond_dir) + +dnl +dnl Where do systemd services go? +dnl +AC_ARG_WITH([systemd_unit_dir], + [AS_HELP_STRING([--with-systemd-unit-dir@<:@=DIR@:>@], + [Install systemd system units into DIR.])], + [], + [with_systemd_unit_dir=yes]) +AS_IF([test "x${with_systemd_unit_dir}" != "xno"], + [ + AS_IF([test "x${with_systemd_unit_dir}" = "xyes"], + [ + PKG_CHECK_MODULES([systemd], [systemd], + [ + with_systemd_unit_dir="$($PKG_CONFIG --variable=systemdsystemunitdir systemd)" + ], [ + with_systemd_unit_dir="" + ]) + m4_pattern_allow([^PKG_(MAJOR|MINOR|BUILD|REVISION)$]) + ]) + AC_MSG_CHECKING([for systemd system unit dir]) + systemd_system_unit_dir="${with_systemd_unit_dir}" + AS_IF([test -n "${systemd_system_unit_dir}"], + [ + AC_MSG_RESULT(${systemd_system_unit_dir}) + have_systemd="yes" + ], + [ + AC_MSG_RESULT(no) + have_systemd="no" + ]) + ], + [ + have_systemd="disabled" + ]) +AC_SUBST(have_systemd) +AC_SUBST(systemd_system_unit_dir) +dnl Adjust the compiled files if we are on windows vs everywhere else +dnl +OS_IO_FILE="" +[case "$host_os" in + mingw*) + OS_IO_FILE=windows_io + ;; + *) + OS_IO_FILE=unix_io + ;; +esac] +AC_SUBST(OS_IO_FILE) + +dnl dnl Make our output files, being sure that we create the some miscellaneous dnl directories dnl @@ -1530,7 +1991,7 @@ if test -z "$BLKID_CMT" ; then blkid_out_list="lib/blkid/Makefile lib/blkid/blkid.pc \ lib/blkid/blkid_types.h" fi -for i in MCONFIG Makefile e2fsprogs.spec \ +for i in MCONFIG Makefile \ 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 \ @@ -1538,11 +1999,12 @@ for i in MCONFIG Makefile e2fsprogs.spec \ lib/ss/ss.pc lib/et/com_err.pc lib/e2p/e2p.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 scrub/Makefile; do + tests/fuzz/Makefile resize/Makefile doc/Makefile \ + po/Makefile.in scrub/Makefile; do if test -d `dirname ${srcdir}/$i` ; then outlist="$outlist $i" fi done -AC_OUTPUT($outlist) +AC_CONFIG_FILES([$outlist]) +AC_OUTPUT if test -f util/gen-tarball; then chmod +x util/gen-tarball; fi