| # -*- Autoconf -*- |
| # Process this file with autoconf to produce a configure script. |
| |
| AC_PREREQ([2.69]) |
| |
| m4_define([erofs_utils_version], m4_esyscmd_s([scripts/get-version-number])) |
| m4_define([erofs_utils_date], m4_esyscmd([sed -n '2p' VERSION | tr -d '\n'])) |
| |
| AC_INIT([erofs-utils], [erofs_utils_version], [linux-erofs@lists.ozlabs.org]) |
| AC_CONFIG_SRCDIR([config.h.in]) |
| AC_CONFIG_HEADERS([config.h]) |
| AC_CONFIG_MACRO_DIR([m4]) |
| AC_CONFIG_AUX_DIR(config) |
| AM_INIT_AUTOMAKE([foreign -Wall -Werror]) |
| |
| # Checks for programs. |
| AM_PROG_AR |
| AC_PROG_CC |
| AC_PROG_INSTALL |
| |
| LT_INIT |
| |
| # Test presence of pkg-config |
| AC_MSG_CHECKING([pkg-config m4 macros]) |
| if test m4_ifdef([PKG_CHECK_MODULES], [yes], [no]) = "yes"; then |
| AC_MSG_RESULT([yes]); |
| else |
| AC_MSG_RESULT([no]); |
| AC_MSG_ERROR([pkg-config is required. See pkg-config.freedesktop.org]) |
| fi |
| |
| dnl EROFS_UTILS_PARSE_DIRECTORY |
| dnl Input: $1 = a string to a relative or absolute directory |
| dnl Output: $2 = the variable to set with the absolute directory |
| AC_DEFUN([EROFS_UTILS_PARSE_DIRECTORY], |
| [ |
| dnl Check if argument is a directory |
| if test -d $1 ; then |
| dnl Get the absolute path of the directory |
| dnl in case of relative directory. |
| dnl If realpath is not a valid command, |
| dnl an error is produced and we keep the given path. |
| local_tmp=`realpath $1 2>/dev/null` |
| if test "$local_tmp" != "" ; then |
| if test -d "$local_tmp" ; then |
| $2="$local_tmp" |
| else |
| $2=$1 |
| fi |
| else |
| $2=$1 |
| fi |
| dnl Check for space in the directory |
| if test `echo $1|cut -d' ' -f1` != $1 ; then |
| AC_MSG_ERROR($1 directory shall not contain any space.) |
| fi |
| else |
| AC_MSG_ERROR($1 shall be a valid directory) |
| fi |
| ]) |
| |
| AC_ARG_ENABLE([debug], |
| [AS_HELP_STRING([--enable-debug], |
| [enable debugging mode @<:@default=no@:>@])], |
| [enable_debug="$enableval"], |
| [enable_debug="no"]) |
| |
| AC_ARG_ENABLE(lz4, |
| [AS_HELP_STRING([--disable-lz4], [disable LZ4 compression support @<:@default=enabled@:>@])], |
| [enable_lz4="$enableval"], [enable_lz4="yes"]) |
| |
| AC_ARG_ENABLE(lzma, |
| [AS_HELP_STRING([--enable-lzma], [enable LZMA compression support @<:@default=no@:>@])], |
| [enable_lzma="$enableval"], [enable_lzma="no"]) |
| |
| AC_ARG_ENABLE(fuse, |
| [AS_HELP_STRING([--enable-fuse], [enable erofsfuse @<:@default=no@:>@])], |
| [enable_fuse="$enableval"], [enable_fuse="no"]) |
| |
| AC_ARG_WITH(uuid, |
| [AS_HELP_STRING([--without-uuid], |
| [Ignore presence of libuuid and disable uuid support @<:@default=enabled@:>@])]) |
| |
| AC_ARG_WITH(selinux, |
| [AS_HELP_STRING([--with-selinux], |
| [enable and build with selinux support @<:@default=no@:>@])], |
| [case "$with_selinux" in |
| yes|no) ;; |
| *) AC_MSG_ERROR([invalid argument to --with-selinux]) |
| ;; |
| esac], [with_selinux=no]) |
| |
| # Checks for libraries. |
| # Use customized LZ4 library path when specified. |
| AC_ARG_WITH(lz4-incdir, |
| [AS_HELP_STRING([--with-lz4-incdir=DIR], [LZ4 include directory])], [ |
| EROFS_UTILS_PARSE_DIRECTORY(["$withval"],[withval])]) |
| |
| AC_ARG_WITH(lz4-libdir, |
| [AS_HELP_STRING([--with-lz4-libdir=DIR], [LZ4 lib directory])], [ |
| EROFS_UTILS_PARSE_DIRECTORY(["$withval"],[withval])]) |
| |
| AC_ARG_VAR([LZ4_CFLAGS], [C compiler flags for lz4]) |
| AC_ARG_VAR([LZ4_LIBS], [linker flags for lz4]) |
| |
| AC_ARG_WITH(liblzma-incdir, |
| [AS_HELP_STRING([--with-liblzma-incdir=DIR], [liblzma include directory])], [ |
| EROFS_UTILS_PARSE_DIRECTORY(["$withval"],[withval])]) |
| |
| AC_ARG_WITH(liblzma-libdir, |
| [AS_HELP_STRING([--with-liblzma-libdir=DIR], [liblzma lib directory])], [ |
| EROFS_UTILS_PARSE_DIRECTORY(["$withval"],[withval])]) |
| |
| # Checks for header files. |
| AC_CHECK_HEADERS(m4_flatten([ |
| dirent.h |
| execinfo.h |
| fcntl.h |
| getopt.h |
| inttypes.h |
| linux/falloc.h |
| linux/fs.h |
| linux/types.h |
| linux/xattr.h |
| limits.h |
| stddef.h |
| stdint.h |
| stdlib.h |
| string.h |
| sys/ioctl.h |
| sys/stat.h |
| sys/sysmacros.h |
| sys/time.h |
| unistd.h |
| ])) |
| |
| # Checks for typedefs, structures, and compiler characteristics. |
| AC_C_INLINE |
| AC_TYPE_INT64_T |
| AC_TYPE_SIZE_T |
| AC_TYPE_SSIZE_T |
| AC_CHECK_MEMBERS([struct stat.st_rdev]) |
| AC_CHECK_MEMBERS([struct stat.st_atim]) |
| AC_CHECK_MEMBERS([struct stat.st_atimensec]) |
| AC_TYPE_UINT64_T |
| |
| # |
| # Check to see if llseek() is declared in unistd.h. On some libc's |
| # it is, and on others it isn't..... Thank you glibc developers.... |
| # |
| AC_CHECK_DECL(llseek, |
| [AC_DEFINE(HAVE_LLSEEK_PROTOTYPE, 1, |
| [Define to 1 if llseek declared in unistd.h])],, |
| [#include <unistd.h>]) |
| |
| # |
| # Check to see if lseek64() is declared in unistd.h. Glibc's header files |
| # are so convoluted that I can't tell whether it will always be defined, |
| # and if it isn't defined while lseek64 is defined in the library, |
| # disaster will strike. |
| # |
| # Warning! Use of --enable-gcc-wall may throw off this test. |
| # |
| 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>]) |
| |
| # Checks for library functions. |
| AC_CHECK_FUNCS(m4_flatten([ |
| backtrace |
| copy_file_range |
| fallocate |
| gettimeofday |
| lgetxattr |
| llistxattr |
| memset |
| realpath |
| pread64 |
| pwrite64 |
| strdup |
| strerror |
| strrchr |
| strtoull |
| tmpfile64 |
| utimensat])) |
| |
| # Configure debug mode |
| AS_IF([test "x$enable_debug" != "xno"], [], [ |
| dnl Turn off all assert checking. |
| CPPFLAGS="$CPPFLAGS -DNDEBUG" |
| ]) |
| |
| # Configure libuuid |
| AS_IF([test "x$with_uuid" != "xno"], [ |
| PKG_CHECK_MODULES([libuuid], [uuid]) |
| # Paranoia: don't trust the result reported by pkgconfig before trying out |
| saved_LIBS="$LIBS" |
| saved_CPPFLAGS=${CPPFLAGS} |
| CPPFLAGS="${libuuid_CFLAGS} ${CPPFLAGS}" |
| LIBS="${libuuid_LIBS} $LIBS" |
| AC_MSG_CHECKING([libuuid usability]) |
| AC_TRY_LINK([ |
| #include <uuid.h> |
| ], [ |
| uuid_t tmp; |
| |
| uuid_generate(tmp); |
| return 0; |
| ], [have_uuid="yes" |
| AC_MSG_RESULT([yes])], [ |
| have_uuid="no" |
| AC_MSG_RESULT([no]) |
| AC_MSG_ERROR([libuuid doesn't work properly])]) |
| LIBS="${saved_LIBS}" |
| CPPFLAGS="${saved_CPPFLAGS}"], [have_uuid="no"]) |
| |
| # Configure selinux |
| AS_IF([test "x$with_selinux" != "xno"], [ |
| PKG_CHECK_MODULES([libselinux], [libselinux]) |
| # Paranoia: don't trust the result reported by pkgconfig before trying out |
| saved_LIBS="$LIBS" |
| saved_CPPFLAGS=${CPPFLAGS} |
| CPPFLAGS="${libselinux_CFLAGS} ${CPPFLAGS}" |
| LIBS="${libselinux_LIBS} $LIBS" |
| AC_CHECK_LIB(selinux, selabel_lookup, [ |
| have_selinux="yes" ], [ |
| AC_MSG_ERROR([libselinux doesn't work properly])]) |
| LIBS="${saved_LIBS}" |
| CPPFLAGS="${saved_CPPFLAGS}"], [have_selinux="no"]) |
| |
| # Configure fuse |
| AS_IF([test "x$enable_fuse" != "xno"], [ |
| PKG_CHECK_MODULES([libfuse], [fuse >= 2.6]) |
| # Paranoia: don't trust the result reported by pkgconfig before trying out |
| saved_LIBS="$LIBS" |
| saved_CPPFLAGS=${CPPFLAGS} |
| CPPFLAGS="${libfuse_CFLAGS} ${CPPFLAGS}" |
| LIBS="${libfuse_LIBS} $LIBS" |
| AC_CHECK_LIB(fuse, fuse_main, [ |
| have_fuse="yes" ], [ |
| AC_MSG_ERROR([libfuse (>= 2.6) doesn't work properly])]) |
| LIBS="${saved_LIBS}" |
| CPPFLAGS="${saved_CPPFLAGS}"], [have_fuse="no"]) |
| |
| # Configure lz4 |
| test -z $LZ4_LIBS && LZ4_LIBS='-llz4' |
| |
| if test "x$enable_lz4" = "xyes"; then |
| test -z "${with_lz4_incdir}" || LZ4_CFLAGS="-I$with_lz4_incdir $LZ4_CFLAGS" |
| |
| saved_CPPFLAGS=${CPPFLAGS} |
| CPPFLAGS="${LZ4_CFLAGS} ${CPPFLAGS}" |
| |
| AC_CHECK_HEADERS([lz4.h],[have_lz4h="yes"], []) |
| |
| if test "x${have_lz4h}" = "xyes" ; then |
| saved_LIBS="$LIBS" |
| saved_LDFLAGS=${LDFLAGS} |
| test -z "${with_lz4_libdir}" || LDFLAGS="-L$with_lz4_libdir ${LDFLAGS}" |
| AC_CHECK_LIB(lz4, LZ4_compress_destSize, [ |
| have_lz4="yes" |
| have_lz4hc="yes" |
| AC_CHECK_LIB(lz4, LZ4_compress_HC_destSize, [], [ |
| AC_CHECK_DECL(LZ4_compress_HC_destSize, [lz4_force_static="yes"], |
| [have_lz4hc="no"], [[ |
| #define LZ4_HC_STATIC_LINKING_ONLY (1) |
| #include <lz4hc.h> |
| ]]) |
| ]) |
| ], [AC_MSG_ERROR([Cannot find proper lz4 version (>= 1.8.0)])]) |
| LDFLAGS=${saved_LDFLAGS} |
| LIBS="${saved_LIBS}" |
| fi |
| CPPFLAGS=${saved_CPPFLAGS} |
| fi |
| |
| if test "x$enable_lzma" = "xyes"; then |
| saved_CPPFLAGS=${CPPFLAGS} |
| test -z "${with_liblzma_incdir}" || |
| CPPFLAGS="-I$with_liblzma_incdir $CPPFLAGS" |
| AC_CHECK_HEADERS([lzma.h],[have_lzmah="yes"], []) |
| |
| if test "x${have_lzmah}" = "xyes" ; then |
| saved_LIBS="$LIBS" |
| saved_LDFLAGS="$LDFLAGS" |
| |
| test -z "${with_liblzma_libdir}" || |
| LDFLAGS="-L$with_liblzma_libdir ${LDFLAGS}" |
| AC_CHECK_LIB(lzma, lzma_microlzma_encoder, [], |
| [AC_MSG_ERROR([Cannot find proper liblzma])]) |
| |
| AC_CHECK_DECL(lzma_microlzma_encoder, [have_liblzma="yes"], |
| [AC_MSG_ERROR([Cannot find proper liblzma])], [[ |
| #include <lzma.h> |
| ]]) |
| LDFLAGS="${saved_LDFLAGS}" |
| LIBS="${saved_LIBS}" |
| fi |
| CPPFLAGS="${saved_CPPFLAGS}" |
| fi |
| |
| # Set up needed symbols, conditionals and compiler/linker flags |
| AM_CONDITIONAL([ENABLE_LZ4], [test "x${have_lz4}" = "xyes"]) |
| AM_CONDITIONAL([ENABLE_LZ4HC], [test "x${have_lz4hc}" = "xyes"]) |
| AM_CONDITIONAL([ENABLE_FUSE], [test "x${have_fuse}" = "xyes"]) |
| AM_CONDITIONAL([ENABLE_LIBLZMA], [test "x${have_liblzma}" = "xyes"]) |
| |
| if test "x$have_uuid" = "xyes"; then |
| AC_DEFINE([HAVE_LIBUUID], 1, [Define to 1 if libuuid is found]) |
| fi |
| |
| if test "x$have_selinux" = "xyes"; then |
| AC_DEFINE([HAVE_LIBSELINUX], 1, [Define to 1 if libselinux is found]) |
| fi |
| |
| if test "x${have_lz4}" = "xyes"; then |
| AC_DEFINE([LZ4_ENABLED], [1], [Define to 1 if lz4 is enabled.]) |
| |
| if test "x${have_lz4hc}" = "xyes"; then |
| AC_DEFINE([LZ4HC_ENABLED], [1], [Define to 1 if lz4hc is enabled.]) |
| fi |
| |
| if test "x${lz4_force_static}" = "xyes"; then |
| LZ4_LIBS="-Wl,-Bstatic -Wl,-whole-archive -Xlinker ${LZ4_LIBS} -Wl,-no-whole-archive -Wl,-Bdynamic" |
| test -z "${with_lz4_libdir}" || LZ4_LIBS="-L${with_lz4_libdir} $LZ4_LIBS" |
| else |
| test -z "${with_lz4_libdir}" || LZ4_LIBS="-L${with_lz4_libdir} -R${with_lz4_libdir} $LZ4_LIBS" |
| fi |
| liblz4_LIBS="${LZ4_LIBS}" |
| fi |
| AC_SUBST([liblz4_LIBS]) |
| |
| if test "x${have_liblzma}" = "xyes"; then |
| AC_DEFINE([HAVE_LIBLZMA], [1], [Define to 1 if liblzma is enabled.]) |
| liblzma_LIBS="-llzma" |
| test -z "${with_liblzma_libdir}" || |
| liblzma_LIBS="-L${with_liblzma_libdir} $liblzma_LIBS" |
| test -z "${with_liblzma_incdir}" || |
| liblzma_CFLAGS="-I${with_liblzma_incdir}" |
| AC_SUBST([liblzma_LIBS]) |
| AC_SUBST([liblzma_CFLAGS]) |
| fi |
| |
| AC_CONFIG_FILES([Makefile |
| man/Makefile |
| lib/Makefile |
| mkfs/Makefile |
| dump/Makefile |
| fuse/Makefile |
| fsck/Makefile]) |
| AC_OUTPUT |