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