]> wimlib.net Git - wimlib/blobdiff - configure.ac
compare_utf16le_names_case_insensitive(): Use _wcsnicmp()
[wimlib] / configure.ac
index c2156614ce12918fcd5e5482eaf77471bc831e10..26398a9864c23b1501194e9fd984cf3bb2c379cc 100644 (file)
@@ -1,4 +1,4 @@
-AC_INIT([wimlib], [1.0.0], [ebiggers3@gmail.com])
+AC_INIT([wimlib], [1.4.0], [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,39 +6,74 @@ 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
+
+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
-               rpm/wimlib.spec
-               archlinux/PKGBUILD
-               ])
+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 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])
+
+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>]])
 
 
-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_ARG_WITH(pkgconfigdir,
             [  --with-pkgconfigdir=DIR      pkgconfig file in DIR @<:@LIBDIR/pkgconfig@:>@],
 
 AC_ARG_WITH(pkgconfigdir,
             [  --with-pkgconfigdir=DIR      pkgconfig file in DIR @<:@LIBDIR/pkgconfig@:>@],
@@ -54,46 +89,46 @@ AC_SUBST([LIBXML2_LDADD], [$LIBXML2_LDADD])
 AC_SUBST([LIBXML2_CFLAGS], [$LIBXML2_CFLAGS])
 
 AC_MSG_CHECKING([whether to include debugging messages])
 AC_SUBST([LIBXML2_CFLAGS], [$LIBXML2_CFLAGS])
 
 AC_MSG_CHECKING([whether to include debugging messages])
-AC_ARG_ENABLE([debug], 
+AC_ARG_ENABLE([debug],
        AS_HELP_STRING([--enable-debug], [include lots of debugging messages]),
        [ENABLE_DEBUG=$enableval],
        [ENABLE_DEBUG=no]
        )
 AC_MSG_RESULT([$ENABLE_DEBUG])
 if test "x$ENABLE_DEBUG" = "xyes"; then
        AS_HELP_STRING([--enable-debug], [include lots of debugging messages]),
        [ENABLE_DEBUG=$enableval],
        [ENABLE_DEBUG=no]
        )
 AC_MSG_RESULT([$ENABLE_DEBUG])
 if test "x$ENABLE_DEBUG" = "xyes"; then
-       AC_DEFINE([ENABLE_DEBUG], [1], 
+       AC_DEFINE([ENABLE_DEBUG], [1],
                        [Define to 1 if including lots of debug messages.])
 fi
 
 AC_MSG_CHECKING([whether to include more debugging messages])
                        [Define to 1 if including lots of debug messages.])
 fi
 
 AC_MSG_CHECKING([whether to include more debugging messages])
-AC_ARG_ENABLE([more_debug], 
-       AS_HELP_STRING([--enable-more-debug], 
+AC_ARG_ENABLE([more_debug],
+       AS_HELP_STRING([--enable-more-debug],
                        [include even more debugging messages]),
        [ENABLE_MORE_DEBUG=$enableval],
        [ENABLE_MORE_DEBUG=no]
        )
 AC_MSG_RESULT([$ENABLE_MORE_DEBUG])
 if test "x$ENABLE_MORE_DEBUG" = "xyes"; then
                        [include even more debugging messages]),
        [ENABLE_MORE_DEBUG=$enableval],
        [ENABLE_MORE_DEBUG=no]
        )
 AC_MSG_RESULT([$ENABLE_MORE_DEBUG])
 if test "x$ENABLE_MORE_DEBUG" = "xyes"; then
-       AC_DEFINE([ENABLE_MORE_DEBUG], [1], 
+       AC_DEFINE([ENABLE_MORE_DEBUG], [1],
                        [Define to 1 if including even more debug messages.])
 fi
 
 AC_MSG_CHECKING([whether to include error messages])
                        [Define to 1 if including even more debug messages.])
 fi
 
 AC_MSG_CHECKING([whether to include error messages])
-AC_ARG_ENABLE([error_messages], 
-       AS_HELP_STRING([--disable-error-messages], 
+AC_ARG_ENABLE([error_messages],
+       AS_HELP_STRING([--disable-error-messages],
                        [do not compile in error messsages]),
        [ENABLE_ERROR_MESSAGES=$enableval],
        [ENABLE_ERROR_MESSAGES=yes]
        )
 AC_MSG_RESULT([$ENABLE_ERROR_MESSAGES])
 if test "x$ENABLE_ERROR_MESSAGES" = "xyes"; then
                        [do not compile in error messsages]),
        [ENABLE_ERROR_MESSAGES=$enableval],
        [ENABLE_ERROR_MESSAGES=yes]
        )
 AC_MSG_RESULT([$ENABLE_ERROR_MESSAGES])
 if test "x$ENABLE_ERROR_MESSAGES" = "xyes"; then
-       AC_DEFINE([ENABLE_ERROR_MESSAGES], [1], 
+       AC_DEFINE([ENABLE_ERROR_MESSAGES], [1],
                        [Define to 1 if including error messages])
 fi
 
 AC_MSG_CHECKING([whether to support custom memory allocation functions])
                        [Define to 1 if including error messages])
 fi
 
 AC_MSG_CHECKING([whether to support custom memory allocation functions])
-AC_ARG_ENABLE([custom_memory_allocator], 
-       AS_HELP_STRING([--disable-custom-memory-allocator], 
+AC_ARG_ENABLE([custom_memory_allocator],
+       AS_HELP_STRING([--disable-custom-memory-allocator],
                       [do not support the use of custom memory allocation
                        functions]),
        [ENABLE_CUSTOM_MEMORY_ALLOCATOR=$enableval],
                       [do not support the use of custom memory allocation
                        functions]),
        [ENABLE_CUSTOM_MEMORY_ALLOCATOR=$enableval],
@@ -101,7 +136,7 @@ AC_ARG_ENABLE([custom_memory_allocator],
        )
 AC_MSG_RESULT([$ENABLE_CUSTOM_MEMORY_ALLOCATOR])
 if test "x$ENABLE_CUSTOM_MEMORY_ALLOCATOR" = "xyes"; then
        )
 AC_MSG_RESULT([$ENABLE_CUSTOM_MEMORY_ALLOCATOR])
 if test "x$ENABLE_CUSTOM_MEMORY_ALLOCATOR" = "xyes"; then
-       AC_DEFINE([ENABLE_CUSTOM_MEMORY_ALLOCATOR], [1], 
+       AC_DEFINE([ENABLE_CUSTOM_MEMORY_ALLOCATOR], [1],
                [Define to 1 if supporting custom memory allocation functions])
 fi
 
                [Define to 1 if supporting custom memory allocation functions])
 fi
 
@@ -116,14 +151,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
@@ -131,45 +177,125 @@ if test "x$ENABLE_VERIFY_COMPRESSION" = "xyes"; then
                   compressed data])
 fi
 
                   compressed data])
 fi
 
+AC_MSG_CHECKING([whether to include support for multi-threaded compression])
+AC_ARG_ENABLE([multithreaded-compression],
+       AS_HELP_STRING([--disable-multithreaded-compression],
+                       [do not compile in the code for multi-threaded compression]),
+       [ENABLE_MULTITHREADED_COMPRESSION=$enableval],
+       [ENABLE_MULTITHREADED_COMPRESSION=yes]
+       )
+AC_MSG_RESULT([$ENABLE_MULTITHREADED_COMPRESSION])
+if test "x$ENABLE_MULTITHREADED_COMPRESSION" = "xyes"; then
+       AC_DEFINE([ENABLE_MULTITHREADED_COMPRESSION], [1],
+                       [Define to 1 if including support for multithreaded
+                        compression])
+fi
+
+PTHREAD_LDADD="-lpthread"
+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_CHECK_LIB([ntfs-3g], [ntfs_set_file_security], [],
-                       [AC_MSG_ERROR([Cannot find libntfs-3g.
-       Without libntfs-3g, wimlib cannot include support for capturing and 
-       applying WIMs on NTFS filesystems while preserving NTFS-specific data
-       such as security descriptors and alternate data streams.  You should
-       either install libntfs-3g, or configure with --without-ntfs-3g to
-       disable support for these NTFS-specific features.])])
+       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
+       capturing and applying WIMs on NTFS filesystems while preserving
+       NTFS-specific data such as security descriptors and alternate data
+       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`"
        LIBNTFS_3G_LDADD="`pkg-config --libs libntfs-3g`"
        LIBNTFS_3G_CFLAGS="`pkg-config --cflags 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>])
 else
        LIBNTFS_3G_LDADD=
        LIBNTFS_3G_CFLAGS=
 else
        LIBNTFS_3G_LDADD=
        LIBNTFS_3G_CFLAGS=
+
 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])
 
 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],
-               AS_HELP_STRING([--without-fuse], [build without libfuse.  
-                                       This will disable the ability to mount 
+               AS_HELP_STRING([--without-fuse], [build without libfuse.
+                                       This will disable the ability to mount
                                        WIM files.]),
        [WITH_FUSE=$withval],
                                        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
@@ -177,7 +303,7 @@ if test "x$WITH_FUSE" = "xyes"; then
 
 
        AC_CHECK_LIB([fuse], [fuse_main_real], [have_fuse=true],
 
 
        AC_CHECK_LIB([fuse], [fuse_main_real], [have_fuse=true],
-                       [AC_MSG_ERROR([Cannot find libfuse.  
+                       [AC_MSG_ERROR([Cannot find libfuse.
        Without libfuse, wimlib cannot include support for mounting WIMs.  You
        should either install libfuse, or configure with --without-fuse to
        disable support for mounting WIMs.])
        Without libfuse, wimlib cannot include support for mounting WIMs.  You
        should either install libfuse, or configure with --without-fuse to
        disable support for mounting WIMs.])
@@ -195,6 +321,7 @@ else
        LIBFUSE_LDADD=
        LIBFUSE_CFLAGS=
 fi
        LIBFUSE_LDADD=
        LIBFUSE_CFLAGS=
 fi
+AM_CONDITIONAL([WITH_FUSE], [test "x$WITH_FUSE" = "xyes"])
 AC_SUBST([LIBFUSE_LDADD], [$LIBFUSE_LDADD])
 AC_SUBST([LIBFUSE_CFLAGS], [$LIBFUSE_CFLAGS])
 
 AC_SUBST([LIBFUSE_LDADD], [$LIBFUSE_LDADD])
 AC_SUBST([LIBFUSE_CFLAGS], [$LIBFUSE_CFLAGS])
 
@@ -203,15 +330,17 @@ AC_ARG_ENABLE([xattr],
        [AS_HELP_STRING([--enable-xattr], [Enable the xattr interface to access WIM
                        alternate data streams (default: autodetect)])],
        [ENABLE_XATTR=$enableval],
        [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
@@ -226,10 +355,10 @@ AC_ARG_ENABLE([ssse3-sha1],
        [ENABLE_SSSE3_SHA1=$enableval],
        [ENABLE_SSSE3_SHA1=no]
        )
        [ENABLE_SSSE3_SHA1=$enableval],
        [ENABLE_SSSE3_SHA1=no]
        )
-       
+
 AC_MSG_RESULT([$ENABLE_SSSE3_SHA1])
 if test "x$ENABLE_SSSE3_SHA1" = "xyes"; then
 AC_MSG_RESULT([$ENABLE_SSSE3_SHA1])
 if test "x$ENABLE_SSSE3_SHA1" = "xyes"; then
-       AC_DEFINE([ENABLE_SSSE3_SHA1], [1], 
+       AC_DEFINE([ENABLE_SSSE3_SHA1], [1],
                        [Define to 1 if using vectorized implementation of SHA1])
        SSSE3_SHA1_OBJ=sha1-ssse3.lo
        AX_PROG_NASM
                        [Define to 1 if using vectorized implementation of SHA1])
        SSSE3_SHA1_OBJ=sha1-ssse3.lo
        AX_PROG_NASM
@@ -247,7 +376,7 @@ else
                                        rather than use external libcrypto from
                                        OpenSSL (default is autodetect)]),
        [WITH_LIBCRYPTO=$withval],
                                        rather than use external libcrypto from
                                        OpenSSL (default is autodetect)]),
        [WITH_LIBCRYPTO=$withval],
-       [AC_CHECK_LIB([crypto], [SHA1], 
+       [AC_CHECK_LIB([crypto], [SHA1],
                     [WITH_LIBCRYPTO=yes],
                     [AC_MSG_WARN([Cannot find libcrypto: using stand-alone SHA1 code instead of OpenSSL])
                     WITH_LIBCRYPTO=no
                     [WITH_LIBCRYPTO=yes],
                     [AC_MSG_WARN([Cannot find libcrypto: using stand-alone SHA1 code instead of OpenSSL])
                     WITH_LIBCRYPTO=no