1 AC_INIT([wimlib], [1.3.0], [ebiggers3@gmail.com])
2 AC_CONFIG_SRCDIR([src/wim.c])
3 AC_CONFIG_MACRO_DIR([m4])
4 AC_CONFIG_AUX_DIR([build-aux])
5 AM_INIT_AUTOMAKE([-Wall -Werror subdir-objects])
7 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
9 AC_CONFIG_HEADERS([config.h])
10 AC_CONFIG_FILES([Makefile
33 AC_CHECK_FUNCS([utimensat lutimes utime flock])
34 AC_CHECK_HEADERS([endian.h byteswap.h sys/byteorder.h sys/endian.h \
35 sys/param.h machine/endian.h alloca.h stdlib.h stdarg.h \
36 errno.h attr/xattr.h utime.h sys/file.h glob.h])
38 AC_CHECK_MEMBER([struct stat.st_mtim],
39 [AC_DEFINE([HAVE_STAT_NANOSECOND_PRECISION], [1],
40 [Define to 1 if nanosecond precision timestamps are
43 [[#include <sys/stat.h>]])
46 AC_ARG_WITH(pkgconfigdir,
47 [ --with-pkgconfigdir=DIR pkgconfig file in DIR @<:@LIBDIR/pkgconfig@:>@],
48 [pkgconfigdir=$withval],
49 [pkgconfigdir='${libdir}/pkgconfig'])
50 AC_SUBST(pkgconfigdir)
52 AC_CHECK_LIB([xml2], [xmlParseFile], [have_libxml=true],
53 [AC_MSG_ERROR(["cannot find libxml2"])])
54 LIBXML2_LDADD=`pkg-config libxml-2.0 --libs`
55 LIBXML2_CFLAGS=`pkg-config libxml-2.0 --cflags`
56 AC_SUBST([LIBXML2_LDADD], [$LIBXML2_LDADD])
57 AC_SUBST([LIBXML2_CFLAGS], [$LIBXML2_CFLAGS])
59 AC_MSG_CHECKING([whether to include debugging messages])
60 AC_ARG_ENABLE([debug],
61 AS_HELP_STRING([--enable-debug], [include lots of debugging messages]),
62 [ENABLE_DEBUG=$enableval],
65 AC_MSG_RESULT([$ENABLE_DEBUG])
66 if test "x$ENABLE_DEBUG" = "xyes"; then
67 AC_DEFINE([ENABLE_DEBUG], [1],
68 [Define to 1 if including lots of debug messages.])
71 AC_MSG_CHECKING([whether to include more debugging messages])
72 AC_ARG_ENABLE([more_debug],
73 AS_HELP_STRING([--enable-more-debug],
74 [include even more debugging messages]),
75 [ENABLE_MORE_DEBUG=$enableval],
76 [ENABLE_MORE_DEBUG=no]
78 AC_MSG_RESULT([$ENABLE_MORE_DEBUG])
79 if test "x$ENABLE_MORE_DEBUG" = "xyes"; then
80 AC_DEFINE([ENABLE_MORE_DEBUG], [1],
81 [Define to 1 if including even more debug messages.])
84 AC_MSG_CHECKING([whether to include error messages])
85 AC_ARG_ENABLE([error_messages],
86 AS_HELP_STRING([--disable-error-messages],
87 [do not compile in error messsages]),
88 [ENABLE_ERROR_MESSAGES=$enableval],
89 [ENABLE_ERROR_MESSAGES=yes]
91 AC_MSG_RESULT([$ENABLE_ERROR_MESSAGES])
92 if test "x$ENABLE_ERROR_MESSAGES" = "xyes"; then
93 AC_DEFINE([ENABLE_ERROR_MESSAGES], [1],
94 [Define to 1 if including error messages])
97 AC_MSG_CHECKING([whether to support custom memory allocation functions])
98 AC_ARG_ENABLE([custom_memory_allocator],
99 AS_HELP_STRING([--disable-custom-memory-allocator],
100 [do not support the use of custom memory allocation
102 [ENABLE_CUSTOM_MEMORY_ALLOCATOR=$enableval],
103 [ENABLE_CUSTOM_MEMORY_ALLOCATOR=yes]
105 AC_MSG_RESULT([$ENABLE_CUSTOM_MEMORY_ALLOCATOR])
106 if test "x$ENABLE_CUSTOM_MEMORY_ALLOCATOR" = "xyes"; then
107 AC_DEFINE([ENABLE_CUSTOM_MEMORY_ALLOCATOR], [1],
108 [Define to 1 if supporting custom memory allocation functions])
111 AC_MSG_CHECKING([whether to include assertions])
112 AC_ARG_ENABLE([assertions],
113 AS_HELP_STRING([--disable-assertions], [do not include assertions]),
114 [ENABLE_ASSERTIONS=$enableval],
115 [ENABLE_ASSERTIONS=yes]
117 AC_MSG_RESULT([$ENABLE_ASSERTIONS])
118 if test "x$ENABLE_ASSERTIONS" = "xyes"; then
119 AC_DEFINE([ENABLE_ASSERTIONS], [1], [Define to 1 if including assertions.])
122 AC_MSG_CHECKING([whether to include more assertions])
123 AC_ARG_ENABLE([more-assertions],
124 AS_HELP_STRING([--enable-more-assertions], [include even more assertions]),
125 [ENABLE_MORE_ASSERTIONS=$enableval],
126 [ENABLE_MORE_ASSERTIONS=no]
128 AC_MSG_RESULT([$ENABLE_MORE_ASSERTIONS])
129 if test "x$ENABLE_MORE_ASSERTIONS" = "xyes"; then
130 AC_DEFINE([ENABLE_MORE_ASSERTIONS], [1], [Define to 1 if including more assertions.])
134 AC_MSG_CHECKING([whether to include compression verification])
135 AC_ARG_ENABLE([verify_compression],
136 AS_HELP_STRING([--disable-verify-compression], [disable
137 checking if blocks we compress can be correctly
139 [ENABLE_VERIFY_COMPRESSION=$enableval],
140 [ENABLE_VERIFY_COMPRESSION=yes]
142 AC_MSG_RESULT([$ENABLE_VERIFY_COMPRESSION])
143 if test "x$ENABLE_VERIFY_COMPRESSION" = "xyes"; then
144 AC_DEFINE([ENABLE_VERIFY_COMPRESSION], [1], [Define to 1 to verify
148 AC_MSG_CHECKING([whether to include support for multi-threaded compression])
149 AC_ARG_ENABLE([multithreaded-compression],
150 AS_HELP_STRING([--disable-multithreaded-compression],
151 [do not compile in the code for multi-threaded compression]),
152 [ENABLE_MULTITHREADED_COMPRESSION=$enableval],
153 [ENABLE_MULTITHREADED_COMPRESSION=yes]
155 AC_MSG_RESULT([$ENABLE_MULTITHREADED_COMPRESSION])
156 if test "x$ENABLE_MULTITHREADED_COMPRESSION" = "xyes"; then
157 AC_DEFINE([ENABLE_MULTITHREADED_COMPRESSION], [1],
158 [Define to 1 if including support for multithreaded
160 PTHREAD_LDADD="-lpthread"
164 AC_SUBST([PTHREAD_LDADD], [$PTHREAD_LDADD])
166 WITH_NTFS_3G_DEFAULT="yes"
167 WITH_FUSE_DEFAULT="yes"
168 WINDOWS_NATIVE_BUILD="no"
169 VISIBILITY_CFLAGS="-fvisibility=hidden"
177 WITH_NTFS_3G_DEFAULT="no"
178 WITH_FUSE_DEFAULT="no"
179 WINDOWS_NATIVE_BUILD="yes"
181 WINDOWS_CPPFLAGS="-D_POSIX"
182 WINDOWS_LDFLAGS="-no-undefined"
183 WINDOWS_LDADD="-lshlwapi"
186 # Cygwin (WARNING: not well supported)
187 WITH_NTFS_3G_DEFAULT="no"
188 WITH_FUSE_DEFAULT="no"
196 AC_SUBST([VISIBILITY_CFLAGS], [$VISIBILITY_CFLAGS])
197 AC_SUBST([WINDOWS_LDFLAGS], [$WINDOWS_LDFLAGS])
198 AC_SUBST([WINDOWS_LDADD], [$WINDOWS_LDADD])
199 AC_SUBST([WINDOWS_CPPFLAGS], [$WINDOWS_CPPFLAGS])
200 AM_CONDITIONAL([WINDOWS_NATIVE_BUILD], [test "x$WINDOWS_NATIVE_BUILD" = "xyes"])
202 AC_MSG_CHECKING([whether to include support for ntfs-3g])
203 AC_ARG_WITH([ntfs-3g],
204 AS_HELP_STRING([--without-ntfs-3g], [build without NTFS-3g.
205 This will disable the ability to use NTFS-specific
206 information when capturing or applying WIMs to a
208 [WITH_NTFS_3G=$withval],
209 [WITH_NTFS_3G=$WITH_NTFS_3G_DEFAULT]
211 AC_MSG_RESULT([$WITH_NTFS_3G])
212 if test "x$WITH_NTFS_3G" = "xyes"; then
213 AC_DEFINE([WITH_NTFS_3G], [1], [Define to 1 to enable support for
214 NTFS-specific information])
216 dnl This effectively checks for NTFS-3g 2011.4.12 or later
217 AC_CHECK_LIB([ntfs-3g], [ntfs_xattr_system_setxattr], [],
218 [AC_MSG_ERROR([Cannot find libntfs-3g version 2011-4-12
219 or later. Without libntfs-3g, wimlib cannot include support for
220 capturing and applying WIMs on NTFS filesystems while preserving
221 NTFS-specific data such as security descriptors and alternate data
222 streams. You should either install libntfs-3g, or configure with
223 --without-ntfs-3g to disable support for these NTFS-specific
225 LIBNTFS_3G_LDADD="`pkg-config --libs libntfs-3g`"
226 LIBNTFS_3G_CFLAGS="`pkg-config --cflags libntfs-3g`"
228 dnl This checks for a NTFS-3g interface that was changed in the
229 dnl 2013.1.13 release
230 AC_CHECK_DECL([NTFS_MNT_RDONLY],
231 [AC_DEFINE([HAVE_NTFS_MNT_RDONLY],
233 [Define to 1 if ntfs_mount() takes the flag NTFS_MNT_RDONLY])],
235 [#include <ntfs-3g/volume.h>])
241 AM_CONDITIONAL([WITH_NTFS_3G], [test "x$WITH_NTFS_3G" = "xyes"])
243 AC_SUBST([LIBNTFS_3G_LDADD], [$LIBNTFS_3G_LDADD])
244 AC_SUBST([LIBNTFS_3G_CFLAGS], [$LIBNTFS_3G_CFLAGS])
247 if test "x$am_cv_func_iconv" != "xyes"; then
248 AC_MSG_ERROR([Cannot find the iconv() function.
249 iconv() is used to convert between encodings of WIM filenames and XML data.
250 wimlib cannot be compiled without it. iconv() is available in the latest
251 version of glibc and sometimes in other libraries.])
254 AC_MSG_CHECKING([whether to include support for mounting WIMs])
256 AS_HELP_STRING([--without-fuse], [build without libfuse.
257 This will disable the ability to mount
259 [WITH_FUSE=$withval],
260 [WITH_FUSE=$WITH_FUSE_DEFAULT]
262 AC_MSG_RESULT([$WITH_FUSE])
263 if test "x$WITH_FUSE" = "xyes"; then
264 AC_DEFINE([WITH_FUSE], [1], [Define to 1 if using FUSE.])
267 AC_CHECK_LIB([fuse], [fuse_main_real], [have_fuse=true],
268 [AC_MSG_ERROR([Cannot find libfuse.
269 Without libfuse, wimlib cannot include support for mounting WIMs. You
270 should either install libfuse, or configure with --without-fuse to
271 disable support for mounting WIMs.])
273 AC_CHECK_LIB([rt], [mq_open], [have_posix_mq=true],
274 [AC_MSG_ERROR([Cannot find librt for POSIX message queue
275 functions. Without these functions, wimlib cannot include support for
276 mounting WIMs. You should either update your C library to a recent
277 version of glibc, or configure with --without-fuse to disable support
280 LIBFUSE_LDADD="`pkg-config --libs fuse` -lrt"
281 LIBFUSE_CFLAGS="`pkg-config --cflags fuse`"
286 AM_CONDITIONAL([WITH_FUSE], [test "x$WITH_FUSE" = "xyes"])
287 AC_SUBST([LIBFUSE_LDADD], [$LIBFUSE_LDADD])
288 AC_SUBST([LIBFUSE_CFLAGS], [$LIBFUSE_CFLAGS])
291 AC_ARG_ENABLE([xattr],
292 [AS_HELP_STRING([--enable-xattr], [Enable the xattr interface to access WIM
293 alternate data streams (default: autodetect)])],
294 [ENABLE_XATTR=$enableval],
295 [AC_CHECK_FUNC([setxattr],
296 [AC_CHECK_HEADER([attr/xattr.h],
298 [AC_MSG_WARN([Cannot find the "attr/xattr.h" header. You will not be
299 able to use the xattr interface to access WIM alternate data
301 [AC_MSG_WARN([Cannot find the setxattr() function. You will not be
302 able to use the xattr interface to access WIM alternate data
305 if test "x$ENABLE_XATTR" = "xyes"; then
306 AC_DEFINE([ENABLE_XATTR], [1], [Define to 1 if using the xattr
307 interface to WIM alternate data streams])
310 AC_MSG_CHECKING([whether to use SSSE3-accelerated SHA1 ])
311 AC_ARG_ENABLE([ssse3-sha1],
312 AS_HELP_STRING([--enable-ssse3-sha1], [use assembly language implementation
313 of SHA1 from Intel, accelerated with vector
314 instructions (SSSE3-enabled CPU required)]),
315 [ENABLE_SSSE3_SHA1=$enableval],
316 [ENABLE_SSSE3_SHA1=no]
319 AC_MSG_RESULT([$ENABLE_SSSE3_SHA1])
320 if test "x$ENABLE_SSSE3_SHA1" = "xyes"; then
321 AC_DEFINE([ENABLE_SSSE3_SHA1], [1],
322 [Define to 1 if using vectorized implementation of SHA1])
323 SSSE3_SHA1_OBJ=sha1-ssse3.lo
325 AC_SUBST([NASM], [$nasm])
329 AC_SUBST([SSSE3_SHA1_OBJ], [$SSSE3_SHA1_OBJ])
331 if test "x$ENABLE_SSSE3_SHA1" = "xyes"; then
334 AC_ARG_WITH([libcrypto],
335 AS_HELP_STRING([--without-libcrypto], [build in the SHA1 algorithm,
336 rather than use external libcrypto from
337 OpenSSL (default is autodetect)]),
338 [WITH_LIBCRYPTO=$withval],
339 [AC_CHECK_LIB([crypto], [SHA1],
340 [WITH_LIBCRYPTO=yes],
341 [AC_MSG_WARN([Cannot find libcrypto: using stand-alone SHA1 code instead of OpenSSL])
345 AC_MSG_CHECKING([whether to use SHA1 function from system libcrypto])
346 AC_MSG_RESULT([$WITH_LIBCRYPTO])
348 if test "x$WITH_LIBCRYPTO" = "xyes" -a "x$ENABLE_SSSE3_SHA1" = "xno"; then
349 AC_DEFINE([WITH_LIBCRYPTO], [1], [Define to 1 if using libcrypto SHA1])
350 LIBCRYPTO_LDADD=`pkg-config --libs libcrypto 2>/dev/null`
351 if test $? -ne 0; then
352 LIBCRYPTO_LDADD=-lcrypto;
354 LIBCRYPTO_CFLAGS=`pkg-config --cflags libcrypto 2>/dev/null`
359 AC_SUBST([LIBCRYPTO_LDADD], [$LIBCRYPTO_LDADD])
360 AC_SUBST([LIBCRYPTO_CFLAGS], [$LIBCRYPTO_CFLAGS])
361 AC_SUBST([SHA1_SOURCES], [$SHA1_SOURCES])