]> wimlib.net Git - wimlib/blobdiff - configure.ac
Update version to 1.4.2
[wimlib] / configure.ac
index 5c4ad6b7031240477dd28a1d833b4484dfa09452..bfff95bb1beb0965f4cc5bc11f70fe333ecc1b7f 100644 (file)
@@ -1,4 +1,4 @@
-AC_INIT([wimlib], [1.1.0], [ebiggers3@gmail.com])
+AC_INIT([wimlib], [1.4.2], [ebiggers3@gmail.com])
 AC_CONFIG_SRCDIR([src/wim.c])
 AC_CONFIG_MACRO_DIR([m4])
 AC_CONFIG_AUX_DIR([build-aux])
 AC_CONFIG_SRCDIR([src/wim.c])
 AC_CONFIG_MACRO_DIR([m4])
 AC_CONFIG_AUX_DIR([build-aux])
@@ -6,42 +6,76 @@ AM_INIT_AUTOMAKE([-Wall -Werror subdir-objects])
 AC_C_BIGENDIAN
 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
 LT_INIT
 AC_C_BIGENDIAN
 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
 LT_INIT
+
+PKGCONFIG_PRIVATE_REQUIRES=""
+PKGCONFIG_PRIVATE_LIBS=""
+
+AC_ARG_WITH(imagex-progname,
+            [AS_HELP_STRING([--with-imagex-progname=NAME],
+                           [Set the name of installed ImageX program (default: wimlib-imagex)])],
+            [IMAGEX_PROGNAME=$withval],
+            [IMAGEX_PROGNAME="wimlib-imagex"])
+
+AC_SUBST([IMAGEX_PROGNAME], [$IMAGEX_PROGNAME])
+AC_DEFINE_UNQUOTED([IMAGEX_PROGNAME], ["$IMAGEX_PROGNAME"],
+                  [Binary name for the implementation of ImageX distributed with wimlib])
+
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_HEADERS([config.h])
-AC_CONFIG_FILES([Makefile
-               doc/Doxyfile
-               wimlib.pc
-               doc/imagex.1
-               doc/imagex-append.1
-               doc/imagex-apply.1
-               doc/imagex-capture.1
-               doc/imagex-delete.1
-               doc/imagex-dir.1
-               doc/imagex-export.1
-               doc/imagex-info.1
-               doc/imagex-join.1
-               doc/imagex-mount.1
-               doc/imagex-mountrw.1
-               doc/imagex-split.1
-               doc/imagex-unmount.1
-               doc/mkwinpeimg.1
-               ])
+AC_CONFIG_FILES([Makefile]
+               [doc/Doxyfile]
+               [wimlib.pc]
+               [doc/"$IMAGEX_PROGNAME".1:doc/imagex.1.in]
+               [doc/"$IMAGEX_PROGNAME"-append.1:doc/imagex-append.1.in]
+               [doc/"$IMAGEX_PROGNAME"-apply.1:doc/imagex-apply.1.in]
+               [doc/"$IMAGEX_PROGNAME"-capture.1:doc/imagex-capture.1.in]
+               [doc/"$IMAGEX_PROGNAME"-delete.1:doc/imagex-delete.1.in]
+               [doc/"$IMAGEX_PROGNAME"-dir.1:doc/imagex-dir.1.in]
+               [doc/"$IMAGEX_PROGNAME"-export.1:doc/imagex-export.1.in]
+               [doc/"$IMAGEX_PROGNAME"-extract.1:doc/imagex-extract.1.in]
+               [doc/"$IMAGEX_PROGNAME"-info.1:doc/imagex-info.1.in]
+               [doc/"$IMAGEX_PROGNAME"-join.1:doc/imagex-join.1.in]
+               [doc/"$IMAGEX_PROGNAME"-mount.1:doc/imagex-mount.1.in]
+               [doc/"$IMAGEX_PROGNAME"-mountrw.1:doc/imagex-mountrw.1.in]
+               [doc/"$IMAGEX_PROGNAME"-optimize.1:doc/imagex-optimize.1.in]
+               [doc/"$IMAGEX_PROGNAME"-split.1:doc/imagex-split.1.in]
+               [doc/"$IMAGEX_PROGNAME"-unmount.1:doc/imagex-unmount.1.in]
+               [doc/"$IMAGEX_PROGNAME"-update.1:doc/imagex-update.1.in]
+               [doc/mkwinpeimg.1])
+
+AC_CONFIG_FILES([programs/mkwinpeimg], [chmod +x programs/mkwinpeimg])
+
 AC_PROG_CC
 AM_PROG_CC_C_O
 AC_PROG_CC
 AM_PROG_CC_C_O
+AC_CANONICAL_HOST
 
 
-AC_CHECK_FUNCS([utimensat lutimes utime])
-AC_CHECK_HEADERS([endian.h byteswap.h sys/byteorder.h sys/endian.h \
-                 sys/param.h machine/endian.h alloca.h stdlib.h stdarg.h \
-                 errno.h attr/xattr.h utime.h])
+AC_CHECK_FUNCS([utimensat lutimes utime flock])
 
 
+# Note: some of the following header checks are only to define the appropriate
+# HAVE_*_H macro so that the NTFS-3g headers don't get confused and try to skip
+# including certain headers.
+AC_CHECK_HEADERS([alloca.h             \
+                 attr/xattr.h          \
+                 byteswap.h            \
+                 endian.h              \
+                 errno.h               \
+                 glob.h                \
+                 machine/endian.h      \
+                 stdarg.h              \
+                 stdlib.h              \
+                 sys/byteorder.h       \
+                 sys/endian.h          \
+                 sys/file.h            \
+                 sys/param.h           \
+                 sys/times.h           \
+                 time.h                \
+                 utime.h])
 
 
-AM_ICONV
-if test "x$am_cv_func_iconv" != "xyes"; then
-       AC_MSG_ERROR([Cannot find the iconv() function.
-       iconv() is used to convert between UTF-8 and UTF-16 encodings of WIM
-       filenames and XML data.  Wimlib cannot be compiled without it.  iconv()
-       is available in the latest version of glibc and sometimes in other
-       libraries.])
-fi
+AC_CHECK_MEMBER([struct stat.st_mtim],
+               [AC_DEFINE([HAVE_STAT_NANOSECOND_PRECISION], [1],
+                         [Define to 1 if nanosecond precision timestamps are
+                          supported])],
+               [],
+               [[#include <sys/stat.h>]])
 
 
 AC_ARG_WITH(pkgconfigdir,
 
 
 AC_ARG_WITH(pkgconfigdir,
@@ -52,10 +86,8 @@ AC_SUBST(pkgconfigdir)
 
 AC_CHECK_LIB([xml2], [xmlParseFile], [have_libxml=true],
             [AC_MSG_ERROR(["cannot find libxml2"])])
 
 AC_CHECK_LIB([xml2], [xmlParseFile], [have_libxml=true],
             [AC_MSG_ERROR(["cannot find libxml2"])])
-LIBXML2_LDADD=`pkg-config libxml-2.0 --libs`
-LIBXML2_CFLAGS=`pkg-config libxml-2.0 --cflags`
-AC_SUBST([LIBXML2_LDADD], [$LIBXML2_LDADD])
-AC_SUBST([LIBXML2_CFLAGS], [$LIBXML2_CFLAGS])
+PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
+PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libxml-2.0"
 
 AC_MSG_CHECKING([whether to include debugging messages])
 AC_ARG_ENABLE([debug],
 
 AC_MSG_CHECKING([whether to include debugging messages])
 AC_ARG_ENABLE([debug],
@@ -120,14 +152,25 @@ if test "x$ENABLE_ASSERTIONS" = "xyes"; then
        AC_DEFINE([ENABLE_ASSERTIONS], [1], [Define to 1 if including assertions.])
 fi
 
        AC_DEFINE([ENABLE_ASSERTIONS], [1], [Define to 1 if including assertions.])
 fi
 
+AC_MSG_CHECKING([whether to include more assertions])
+AC_ARG_ENABLE([more-assertions],
+       AS_HELP_STRING([--enable-more-assertions], [include even more assertions]),
+       [ENABLE_MORE_ASSERTIONS=$enableval],
+       [ENABLE_MORE_ASSERTIONS=no]
+       )
+AC_MSG_RESULT([$ENABLE_MORE_ASSERTIONS])
+if test "x$ENABLE_MORE_ASSERTIONS" = "xyes"; then
+       AC_DEFINE([ENABLE_MORE_ASSERTIONS], [1], [Define to 1 if including more assertions.])
+fi
+
 
 AC_MSG_CHECKING([whether to include compression verification])
 AC_ARG_ENABLE([verify_compression],
 
 AC_MSG_CHECKING([whether to include compression verification])
 AC_ARG_ENABLE([verify_compression],
-             AS_HELP_STRING([--disable-verify-compression], [disable
-                               checking if blocks we compress can be correctly
+             AS_HELP_STRING([--enable-verify-compression], [always
+                               check if blocks we compress can be correctly
                                decompressed]),
        [ENABLE_VERIFY_COMPRESSION=$enableval],
                                decompressed]),
        [ENABLE_VERIFY_COMPRESSION=$enableval],
-       [ENABLE_VERIFY_COMPRESSION=yes]
+       [ENABLE_VERIFY_COMPRESSION=no]
        )
 AC_MSG_RESULT([$ENABLE_VERIFY_COMPRESSION])
 if test "x$ENABLE_VERIFY_COMPRESSION" = "xyes"; then
        )
 AC_MSG_RESULT([$ENABLE_VERIFY_COMPRESSION])
 if test "x$ENABLE_VERIFY_COMPRESSION" = "xyes"; then
@@ -147,26 +190,69 @@ if test "x$ENABLE_MULTITHREADED_COMPRESSION" = "xyes"; then
        AC_DEFINE([ENABLE_MULTITHREADED_COMPRESSION], [1],
                        [Define to 1 if including support for multithreaded
                         compression])
        AC_DEFINE([ENABLE_MULTITHREADED_COMPRESSION], [1],
                        [Define to 1 if including support for multithreaded
                         compression])
-       PTHREAD_LDADD="-lpthread"
-else
-       PTHREAD_LDADD=""
 fi
 fi
+
+PTHREAD_LDADD="-lpthread"
 AC_SUBST([PTHREAD_LDADD], [$PTHREAD_LDADD])
 
 AC_SUBST([PTHREAD_LDADD], [$PTHREAD_LDADD])
 
+WITH_NTFS_3G_DEFAULT="yes"
+WITH_FUSE_DEFAULT="yes"
+WINDOWS_NATIVE_BUILD="no"
+VISIBILITY_CFLAGS="-fvisibility=hidden"
+WINDOWS_CFLAGS=""
+WINDOWS_CPPFLAGS=""
+WINDOWS_LDFLAGS=""
+WINDOWS_LDADD=""
+ENABLE_XATTR_DEFAULT="autodetect"
+
+case "$host" in
+       *-*-mingw*)
+               # Native Windows
+               WITH_NTFS_3G_DEFAULT="no"
+               WITH_FUSE_DEFAULT="no"
+               WINDOWS_NATIVE_BUILD="yes"
+               VISIBILITY_CFLAGS=""
+               WINDOWS_CFLAGS="-municode"
+               WINDOWS_CPPFLAGS="-D_POSIX -DUNICODE -D_UNICODE"
+               WINDOWS_LDFLAGS="-no-undefined"
+               WINDOWS_LDADD="-lshlwapi"
+               ENABLE_XATTR_DEFAULT="no"
+               ;;
+       *-*-cygwin*)
+               # Cygwin (WARNING: not well supported)
+               AC_MSG_WARN([wimlib has not been tested with Cygwin!  Please do
+                            a Windows-native build with MinGW-w64 instead])
+               WITH_NTFS_3G_DEFAULT="no"
+               WITH_FUSE_DEFAULT="no"
+               VISIBILITY_CFLAGS=""
+               ;;
+       *)
+               # UNIX / other
+               ;;
+esac
+
+AC_SUBST([VISIBILITY_CFLAGS], [$VISIBILITY_CFLAGS])
+AC_SUBST([WINDOWS_LDFLAGS], [$WINDOWS_LDFLAGS])
+AC_SUBST([WINDOWS_LDADD], [$WINDOWS_LDADD])
+AC_SUBST([WINDOWS_CPPFLAGS], [$WINDOWS_CPPFLAGS])
+AC_SUBST([WINDOWS_CFLAGS], [$WINDOWS_CFLAGS])
+AM_CONDITIONAL([WINDOWS_NATIVE_BUILD], [test "x$WINDOWS_NATIVE_BUILD" = "xyes"])
+
 AC_MSG_CHECKING([whether to include support for ntfs-3g])
 AC_ARG_WITH([ntfs-3g],
              AS_HELP_STRING([--without-ntfs-3g], [build without NTFS-3g.
 AC_MSG_CHECKING([whether to include support for ntfs-3g])
 AC_ARG_WITH([ntfs-3g],
              AS_HELP_STRING([--without-ntfs-3g], [build without NTFS-3g.
-                             This will disable the ability to use NTFS-specific
+                             On UNIX, this will disable the ability to use NTFS-specific
                              information when capturing or applying WIMs to a
                              NTFS filesystem.]),
        [WITH_NTFS_3G=$withval],
                              information when capturing or applying WIMs to a
                              NTFS filesystem.]),
        [WITH_NTFS_3G=$withval],
-       [WITH_NTFS_3G=yes]
+       [WITH_NTFS_3G=$WITH_NTFS_3G_DEFAULT]
        )
 AC_MSG_RESULT([$WITH_NTFS_3G])
 if test "x$WITH_NTFS_3G" = "xyes"; then
        )
 AC_MSG_RESULT([$WITH_NTFS_3G])
 if test "x$WITH_NTFS_3G" = "xyes"; then
-       AC_DEFINE([WITH_NTFS_3G], [1], [Define to 1 to enable support for
-                  NTFS-specific information])
+       AC_DEFINE([WITH_NTFS_3G], [1], [On UNIX, define to 1 to enable support
+                  for NTFS-specific information])
 
 
+       dnl This effectively checks for NTFS-3g 2011.4.12 or later
        AC_CHECK_LIB([ntfs-3g], [ntfs_xattr_system_setxattr], [],
                        [AC_MSG_ERROR([Cannot find libntfs-3g version 2011-4-12
        or later. Without libntfs-3g, wimlib cannot include support for
        AC_CHECK_LIB([ntfs-3g], [ntfs_xattr_system_setxattr], [],
                        [AC_MSG_ERROR([Cannot find libntfs-3g version 2011-4-12
        or later. Without libntfs-3g, wimlib cannot include support for
@@ -175,16 +261,28 @@ if test "x$WITH_NTFS_3G" = "xyes"; then
        streams.  You should either install libntfs-3g, or configure with
        --without-ntfs-3g to disable support for these NTFS-specific
        features.])])
        streams.  You should either install libntfs-3g, or configure with
        --without-ntfs-3g to disable support for these NTFS-specific
        features.])])
-       LIBNTFS_3G_LDADD="`pkg-config --libs libntfs-3g`"
-       LIBNTFS_3G_CFLAGS="`pkg-config --cflags libntfs-3g`"
-else
-       LIBNTFS_3G_LDADD=
-       LIBNTFS_3G_CFLAGS=
+
+       PKG_CHECK_MODULES([LIBNTFS_3G], [libntfs-3g])
+       PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libntfs-3g"
+
+       dnl This checks for a NTFS-3g interface that was changed in the
+       dnl 2013.1.13 release
+       AC_CHECK_DECL([NTFS_MNT_RDONLY],
+                     [AC_DEFINE([HAVE_NTFS_MNT_RDONLY],
+                                [1],
+                                [Define to 1 if ntfs_mount() takes the flag NTFS_MNT_RDONLY])],
+                     [],
+                     ,[#include <ntfs-3g/volume.h>])
 fi
 AM_CONDITIONAL([WITH_NTFS_3G], [test "x$WITH_NTFS_3G" = "xyes"])
 
 fi
 AM_CONDITIONAL([WITH_NTFS_3G], [test "x$WITH_NTFS_3G" = "xyes"])
 
-AC_SUBST([LIBNTFS_3G_LDADD], [$LIBNTFS_3G_LDADD])
-AC_SUBST([LIBNTFS_3G_CFLAGS], [$LIBNTFS_3G_CFLAGS])
+AM_ICONV
+if test "x$am_cv_func_iconv" != "xyes"; then
+       AC_MSG_ERROR([Cannot find the iconv() function.
+       iconv() is used to convert between encodings of WIM filenames and XML data.
+       wimlib cannot be compiled without it.  iconv() is available in the latest
+       version of glibc and sometimes in other libraries.])
+fi
 
 AC_MSG_CHECKING([whether to include support for mounting WIMs])
 AC_ARG_WITH([fuse],
 
 AC_MSG_CHECKING([whether to include support for mounting WIMs])
 AC_ARG_WITH([fuse],
@@ -192,7 +290,7 @@ AC_ARG_WITH([fuse],
                                        This will disable the ability to mount
                                        WIM files.]),
        [WITH_FUSE=$withval],
                                        This will disable the ability to mount
                                        WIM files.]),
        [WITH_FUSE=$withval],
-       [WITH_FUSE=yes]
+       [WITH_FUSE=$WITH_FUSE_DEFAULT]
        )
 AC_MSG_RESULT([$WITH_FUSE])
 if test "x$WITH_FUSE" = "xyes"; then
        )
 AC_MSG_RESULT([$WITH_FUSE])
 if test "x$WITH_FUSE" = "xyes"; then
@@ -212,30 +310,29 @@ if test "x$WITH_FUSE" = "xyes"; then
        version of glibc, or configure with --without-fuse to disable support
        for mounting WIMs.])
        ])
        version of glibc, or configure with --without-fuse to disable support
        for mounting WIMs.])
        ])
-       LIBFUSE_LDADD="`pkg-config --libs fuse` -lrt"
-       LIBFUSE_CFLAGS="`pkg-config --cflags fuse`"
-else
-       LIBFUSE_LDADD=
-       LIBFUSE_CFLAGS=
+       PKG_CHECK_MODULES([LIBFUSE], [fuse])
+       PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES fuse"
+       PKGCONFIG_PRIVATE_LIBS="$PKGCONFIG_PRIVATE_LIBS -lrt"
+       AC_SUBST([LIBRT_LIBS], [-lrt])
 fi
 AM_CONDITIONAL([WITH_FUSE], [test "x$WITH_FUSE" = "xyes"])
 fi
 AM_CONDITIONAL([WITH_FUSE], [test "x$WITH_FUSE" = "xyes"])
-AC_SUBST([LIBFUSE_LDADD], [$LIBFUSE_LDADD])
-AC_SUBST([LIBFUSE_CFLAGS], [$LIBFUSE_CFLAGS])
 
 ENABLE_XATTR=no
 AC_ARG_ENABLE([xattr],
        [AS_HELP_STRING([--enable-xattr], [Enable the xattr interface to access WIM
                        alternate data streams (default: autodetect)])],
        [ENABLE_XATTR=$enableval],
 
 ENABLE_XATTR=no
 AC_ARG_ENABLE([xattr],
        [AS_HELP_STRING([--enable-xattr], [Enable the xattr interface to access WIM
                        alternate data streams (default: autodetect)])],
        [ENABLE_XATTR=$enableval],
-       [AC_CHECK_FUNC([setxattr],
-               [AC_CHECK_HEADER([attr/xattr.h],
-                       [ENABLE_XATTR=yes],
-                       [AC_MSG_WARN([Cannot find the "attr/xattr.h" header.  You will not be
+       [if test "x$ENABLE_XATTR_DEFAULT" = "xautodetect"; then
+               AC_CHECK_FUNC([setxattr],
+                       [AC_CHECK_HEADER([attr/xattr.h],
+                               [ENABLE_XATTR=yes],
+                               [AC_MSG_WARN([Cannot find the "attr/xattr.h" header.  You will not be
+                                able to use the xattr interface to access WIM alternate data
+                                streams.])])],
+                       [AC_MSG_WARN([Cannot find the setxattr() function.  You will not be
                         able to use the xattr interface to access WIM alternate data
                         able to use the xattr interface to access WIM alternate data
-                        streams.])])],
-               [AC_MSG_WARN([Cannot find the setxattr() function.  You will not be
-                able to use the xattr interface to access WIM alternate data
-                streams.])])])
+                        streams.])])
+       fi])
 
 if test "x$ENABLE_XATTR" = "xyes"; then
        AC_DEFINE([ENABLE_XATTR], [1], [Define to 1 if using the xattr
 
 if test "x$ENABLE_XATTR" = "xyes"; then
        AC_DEFINE([ENABLE_XATTR], [1], [Define to 1 if using the xattr
@@ -282,17 +379,12 @@ AC_MSG_RESULT([$WITH_LIBCRYPTO])
 
 if test "x$WITH_LIBCRYPTO" = "xyes" -a "x$ENABLE_SSSE3_SHA1" = "xno"; then
        AC_DEFINE([WITH_LIBCRYPTO], [1], [Define to 1 if using libcrypto SHA1])
 
 if test "x$WITH_LIBCRYPTO" = "xyes" -a "x$ENABLE_SSSE3_SHA1" = "xno"; then
        AC_DEFINE([WITH_LIBCRYPTO], [1], [Define to 1 if using libcrypto SHA1])
-       LIBCRYPTO_LDADD=`pkg-config --libs libcrypto 2>/dev/null`
-       if test $? -ne 0; then
-               LIBCRYPTO_LDADD=-lcrypto;
-       fi
-       LIBCRYPTO_CFLAGS=`pkg-config --cflags libcrypto 2>/dev/null`
-else
-       LIBCRYPTO_LDADD=
-       LIBCRYPTO_CFLAGS=
+       PKG_CHECK_MODULES([LIBCRYPTO], [libcrypto])
+       PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libcrypto"
 fi
 fi
-AC_SUBST([LIBCRYPTO_LDADD], [$LIBCRYPTO_LDADD])
-AC_SUBST([LIBCRYPTO_CFLAGS], [$LIBCRYPTO_CFLAGS])
 AC_SUBST([SHA1_SOURCES], [$SHA1_SOURCES])
 
 AC_SUBST([SHA1_SOURCES], [$SHA1_SOURCES])
 
+AC_SUBST([PKGCONFIG_PRIVATE_REQUIRES], [$PKGCONFIG_PRIVATE_REQUIRES])
+AC_SUBST([PKGCONFIG_PRIVATE_LIBS], [$PKGCONFIG_PRIVATE_LIBS])
+
 AC_OUTPUT
 AC_OUTPUT