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
162 PTHREAD_LDADD="-lpthread"
163 AC_SUBST([PTHREAD_LDADD], [$PTHREAD_LDADD])
165 WITH_NTFS_3G_DEFAULT="yes"
166 WITH_FUSE_DEFAULT="yes"
167 WINDOWS_NATIVE_BUILD="no"
168 VISIBILITY_CFLAGS="-fvisibility=hidden"
176 WITH_NTFS_3G_DEFAULT="no"
177 WITH_FUSE_DEFAULT="no"
178 WINDOWS_NATIVE_BUILD="yes"
180 WINDOWS_CPPFLAGS="-D_POSIX"
181 WINDOWS_LDFLAGS="-no-undefined"
182 WINDOWS_LDADD="-lshlwapi"
185 # Cygwin (WARNING: not well supported)
186 WITH_NTFS_3G_DEFAULT="no"
187 WITH_FUSE_DEFAULT="no"
195 AC_SUBST([VISIBILITY_CFLAGS], [$VISIBILITY_CFLAGS])
196 AC_SUBST([WINDOWS_LDFLAGS], [$WINDOWS_LDFLAGS])
197 AC_SUBST([WINDOWS_LDADD], [$WINDOWS_LDADD])
198 AC_SUBST([WINDOWS_CPPFLAGS], [$WINDOWS_CPPFLAGS])
199 AM_CONDITIONAL([WINDOWS_NATIVE_BUILD], [test "x$WINDOWS_NATIVE_BUILD" = "xyes"])
201 AC_MSG_CHECKING([whether to include support for ntfs-3g])
202 AC_ARG_WITH([ntfs-3g],
203 AS_HELP_STRING([--without-ntfs-3g], [build without NTFS-3g.
204 This will disable the ability to use NTFS-specific
205 information when capturing or applying WIMs to a
207 [WITH_NTFS_3G=$withval],
208 [WITH_NTFS_3G=$WITH_NTFS_3G_DEFAULT]
210 AC_MSG_RESULT([$WITH_NTFS_3G])
211 if test "x$WITH_NTFS_3G" = "xyes"; then
212 AC_DEFINE([WITH_NTFS_3G], [1], [Define to 1 to enable support for
213 NTFS-specific information])
215 dnl This effectively checks for NTFS-3g 2011.4.12 or later
216 AC_CHECK_LIB([ntfs-3g], [ntfs_xattr_system_setxattr], [],
217 [AC_MSG_ERROR([Cannot find libntfs-3g version 2011-4-12
218 or later. Without libntfs-3g, wimlib cannot include support for
219 capturing and applying WIMs on NTFS filesystems while preserving
220 NTFS-specific data such as security descriptors and alternate data
221 streams. You should either install libntfs-3g, or configure with
222 --without-ntfs-3g to disable support for these NTFS-specific
224 LIBNTFS_3G_LDADD="`pkg-config --libs libntfs-3g`"
225 LIBNTFS_3G_CFLAGS="`pkg-config --cflags libntfs-3g`"
227 dnl This checks for a NTFS-3g interface that was changed in the
228 dnl 2013.1.13 release
229 AC_CHECK_DECL([NTFS_MNT_RDONLY],
230 [AC_DEFINE([HAVE_NTFS_MNT_RDONLY],
232 [Define to 1 if ntfs_mount() takes the flag NTFS_MNT_RDONLY])],
234 [#include <ntfs-3g/volume.h>])
240 AM_CONDITIONAL([WITH_NTFS_3G], [test "x$WITH_NTFS_3G" = "xyes"])
242 AC_SUBST([LIBNTFS_3G_LDADD], [$LIBNTFS_3G_LDADD])
243 AC_SUBST([LIBNTFS_3G_CFLAGS], [$LIBNTFS_3G_CFLAGS])
246 if test "x$am_cv_func_iconv" != "xyes"; then
247 AC_MSG_ERROR([Cannot find the iconv() function.
248 iconv() is used to convert between encodings of WIM filenames and XML data.
249 wimlib cannot be compiled without it. iconv() is available in the latest
250 version of glibc and sometimes in other libraries.])
253 AC_MSG_CHECKING([whether to include support for mounting WIMs])
255 AS_HELP_STRING([--without-fuse], [build without libfuse.
256 This will disable the ability to mount
258 [WITH_FUSE=$withval],
259 [WITH_FUSE=$WITH_FUSE_DEFAULT]
261 AC_MSG_RESULT([$WITH_FUSE])
262 if test "x$WITH_FUSE" = "xyes"; then
263 AC_DEFINE([WITH_FUSE], [1], [Define to 1 if using FUSE.])
266 AC_CHECK_LIB([fuse], [fuse_main_real], [have_fuse=true],
267 [AC_MSG_ERROR([Cannot find libfuse.
268 Without libfuse, wimlib cannot include support for mounting WIMs. You
269 should either install libfuse, or configure with --without-fuse to
270 disable support for mounting WIMs.])
272 AC_CHECK_LIB([rt], [mq_open], [have_posix_mq=true],
273 [AC_MSG_ERROR([Cannot find librt for POSIX message queue
274 functions. Without these functions, wimlib cannot include support for
275 mounting WIMs. You should either update your C library to a recent
276 version of glibc, or configure with --without-fuse to disable support
279 LIBFUSE_LDADD="`pkg-config --libs fuse` -lrt"
280 LIBFUSE_CFLAGS="`pkg-config --cflags fuse`"
285 AM_CONDITIONAL([WITH_FUSE], [test "x$WITH_FUSE" = "xyes"])
286 AC_SUBST([LIBFUSE_LDADD], [$LIBFUSE_LDADD])
287 AC_SUBST([LIBFUSE_CFLAGS], [$LIBFUSE_CFLAGS])
290 AC_ARG_ENABLE([xattr],
291 [AS_HELP_STRING([--enable-xattr], [Enable the xattr interface to access WIM
292 alternate data streams (default: autodetect)])],
293 [ENABLE_XATTR=$enableval],
294 [AC_CHECK_FUNC([setxattr],
295 [AC_CHECK_HEADER([attr/xattr.h],
297 [AC_MSG_WARN([Cannot find the "attr/xattr.h" header. You will not be
298 able to use the xattr interface to access WIM alternate data
300 [AC_MSG_WARN([Cannot find the setxattr() function. You will not be
301 able to use the xattr interface to access WIM alternate data
304 if test "x$ENABLE_XATTR" = "xyes"; then
305 AC_DEFINE([ENABLE_XATTR], [1], [Define to 1 if using the xattr
306 interface to WIM alternate data streams])
309 AC_MSG_CHECKING([whether to use SSSE3-accelerated SHA1 ])
310 AC_ARG_ENABLE([ssse3-sha1],
311 AS_HELP_STRING([--enable-ssse3-sha1], [use assembly language implementation
312 of SHA1 from Intel, accelerated with vector
313 instructions (SSSE3-enabled CPU required)]),
314 [ENABLE_SSSE3_SHA1=$enableval],
315 [ENABLE_SSSE3_SHA1=no]
318 AC_MSG_RESULT([$ENABLE_SSSE3_SHA1])
319 if test "x$ENABLE_SSSE3_SHA1" = "xyes"; then
320 AC_DEFINE([ENABLE_SSSE3_SHA1], [1],
321 [Define to 1 if using vectorized implementation of SHA1])
322 SSSE3_SHA1_OBJ=sha1-ssse3.lo
324 AC_SUBST([NASM], [$nasm])
328 AC_SUBST([SSSE3_SHA1_OBJ], [$SSSE3_SHA1_OBJ])
330 if test "x$ENABLE_SSSE3_SHA1" = "xyes"; then
333 AC_ARG_WITH([libcrypto],
334 AS_HELP_STRING([--without-libcrypto], [build in the SHA1 algorithm,
335 rather than use external libcrypto from
336 OpenSSL (default is autodetect)]),
337 [WITH_LIBCRYPTO=$withval],
338 [AC_CHECK_LIB([crypto], [SHA1],
339 [WITH_LIBCRYPTO=yes],
340 [AC_MSG_WARN([Cannot find libcrypto: using stand-alone SHA1 code instead of OpenSSL])
344 AC_MSG_CHECKING([whether to use SHA1 function from system libcrypto])
345 AC_MSG_RESULT([$WITH_LIBCRYPTO])
347 if test "x$WITH_LIBCRYPTO" = "xyes" -a "x$ENABLE_SSSE3_SHA1" = "xno"; then
348 AC_DEFINE([WITH_LIBCRYPTO], [1], [Define to 1 if using libcrypto SHA1])
349 LIBCRYPTO_LDADD=`pkg-config --libs libcrypto 2>/dev/null`
350 if test $? -ne 0; then
351 LIBCRYPTO_LDADD=-lcrypto;
353 LIBCRYPTO_CFLAGS=`pkg-config --cflags libcrypto 2>/dev/null`
358 AC_SUBST([LIBCRYPTO_LDADD], [$LIBCRYPTO_LDADD])
359 AC_SUBST([LIBCRYPTO_CFLAGS], [$LIBCRYPTO_CFLAGS])
360 AC_SUBST([SHA1_SOURCES], [$SHA1_SOURCES])