1 AC_INIT([wimlib], [1.5.1], [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])
10 PKGCONFIG_PRIVATE_REQUIRES=""
11 PKGCONFIG_PRIVATE_LIBS=""
13 AC_ARG_WITH(imagex-progname,
14 [AS_HELP_STRING([--with-imagex-progname=NAME],
15 [Set the name of installed ImageX program (default: wimlib-imagex)])],
16 [IMAGEX_PROGNAME=$withval],
17 [IMAGEX_PROGNAME="wimlib-imagex"])
19 AC_SUBST([IMAGEX_PROGNAME], [$IMAGEX_PROGNAME])
20 AC_DEFINE_UNQUOTED([IMAGEX_PROGNAME], ["$IMAGEX_PROGNAME"],
21 [Binary name for the implementation of ImageX distributed with wimlib])
23 AC_CONFIG_HEADERS([config.h])
24 AC_CONFIG_FILES([Makefile]
27 [doc/"$IMAGEX_PROGNAME".1:doc/imagex.1.in]
28 [doc/"$IMAGEX_PROGNAME"-append.1:doc/imagex-append.1.in]
29 [doc/"$IMAGEX_PROGNAME"-apply.1:doc/imagex-apply.1.in]
30 [doc/"$IMAGEX_PROGNAME"-capture.1:doc/imagex-capture.1.in]
31 [doc/"$IMAGEX_PROGNAME"-delete.1:doc/imagex-delete.1.in]
32 [doc/"$IMAGEX_PROGNAME"-dir.1:doc/imagex-dir.1.in]
33 [doc/"$IMAGEX_PROGNAME"-export.1:doc/imagex-export.1.in]
34 [doc/"$IMAGEX_PROGNAME"-extract.1:doc/imagex-extract.1.in]
35 [doc/"$IMAGEX_PROGNAME"-info.1:doc/imagex-info.1.in]
36 [doc/"$IMAGEX_PROGNAME"-join.1:doc/imagex-join.1.in]
37 [doc/"$IMAGEX_PROGNAME"-mount.1:doc/imagex-mount.1.in]
38 [doc/"$IMAGEX_PROGNAME"-mountrw.1:doc/imagex-mountrw.1.in]
39 [doc/"$IMAGEX_PROGNAME"-optimize.1:doc/imagex-optimize.1.in]
40 [doc/"$IMAGEX_PROGNAME"-split.1:doc/imagex-split.1.in]
41 [doc/"$IMAGEX_PROGNAME"-unmount.1:doc/imagex-unmount.1.in]
42 [doc/"$IMAGEX_PROGNAME"-update.1:doc/imagex-update.1.in]
45 AC_CONFIG_FILES([programs/mkwinpeimg], [chmod +x programs/mkwinpeimg])
51 AC_CHECK_FUNCS([utimensat lutimes utime flock mempcpy])
53 # Note: some of the following header checks are only to define the appropriate
54 # HAVE_*_H macro so that the NTFS-3g headers don't get confused and try to skip
55 # including certain headers.
56 AC_CHECK_HEADERS([alloca.h \
73 AC_CHECK_MEMBER([struct stat.st_mtim],
74 [AC_DEFINE([HAVE_STAT_NANOSECOND_PRECISION], [1],
75 [Define to 1 if nanosecond precision timestamps are
78 [[#include <sys/stat.h>]])
81 AC_ARG_WITH(pkgconfigdir,
82 [ --with-pkgconfigdir=DIR pkgconfig file in DIR @<:@LIBDIR/pkgconfig@:>@],
83 [pkgconfigdir=$withval],
84 [pkgconfigdir='${libdir}/pkgconfig'])
85 AC_SUBST(pkgconfigdir)
87 AC_CHECK_LIB([xml2], [xmlParseFile], [have_libxml=true],
88 [AC_MSG_ERROR(["cannot find libxml2"])])
89 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
90 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libxml-2.0"
92 AC_MSG_CHECKING([whether to include debugging messages])
93 AC_ARG_ENABLE([debug],
94 AS_HELP_STRING([--enable-debug], [include lots of debugging messages]),
95 [ENABLE_DEBUG=$enableval],
98 AC_MSG_RESULT([$ENABLE_DEBUG])
99 if test "x$ENABLE_DEBUG" = "xyes"; then
100 AC_DEFINE([ENABLE_DEBUG], [1],
101 [Define to 1 if including lots of debug messages.])
104 AC_MSG_CHECKING([whether to include more debugging messages])
105 AC_ARG_ENABLE([more_debug],
106 AS_HELP_STRING([--enable-more-debug],
107 [include even more debugging messages]),
108 [ENABLE_MORE_DEBUG=$enableval],
109 [ENABLE_MORE_DEBUG=no]
111 AC_MSG_RESULT([$ENABLE_MORE_DEBUG])
112 if test "x$ENABLE_MORE_DEBUG" = "xyes"; then
113 AC_DEFINE([ENABLE_MORE_DEBUG], [1],
114 [Define to 1 if including even more debug messages.])
117 AC_MSG_CHECKING([whether to include error messages])
118 AC_ARG_ENABLE([error_messages],
119 AS_HELP_STRING([--disable-error-messages],
120 [do not compile in error messsages]),
121 [ENABLE_ERROR_MESSAGES=$enableval],
122 [ENABLE_ERROR_MESSAGES=yes]
124 AC_MSG_RESULT([$ENABLE_ERROR_MESSAGES])
125 if test "x$ENABLE_ERROR_MESSAGES" = "xyes"; then
126 AC_DEFINE([ENABLE_ERROR_MESSAGES], [1],
127 [Define to 1 if including error messages])
130 AC_MSG_CHECKING([whether to support custom memory allocation functions])
131 AC_ARG_ENABLE([custom_memory_allocator],
132 AS_HELP_STRING([--disable-custom-memory-allocator],
133 [do not support the use of custom memory allocation
135 [ENABLE_CUSTOM_MEMORY_ALLOCATOR=$enableval],
136 [ENABLE_CUSTOM_MEMORY_ALLOCATOR=yes]
138 AC_MSG_RESULT([$ENABLE_CUSTOM_MEMORY_ALLOCATOR])
139 if test "x$ENABLE_CUSTOM_MEMORY_ALLOCATOR" = "xyes"; then
140 AC_DEFINE([ENABLE_CUSTOM_MEMORY_ALLOCATOR], [1],
141 [Define to 1 if supporting custom memory allocation functions])
144 AC_MSG_CHECKING([whether to include assertions])
145 AC_ARG_ENABLE([assertions],
146 AS_HELP_STRING([--disable-assertions], [do not include assertions]),
147 [ENABLE_ASSERTIONS=$enableval],
148 [ENABLE_ASSERTIONS=yes]
150 AC_MSG_RESULT([$ENABLE_ASSERTIONS])
151 if test "x$ENABLE_ASSERTIONS" = "xyes"; then
152 AC_DEFINE([ENABLE_ASSERTIONS], [1], [Define to 1 if including assertions.])
155 AC_MSG_CHECKING([whether to include more assertions])
156 AC_ARG_ENABLE([more-assertions],
157 AS_HELP_STRING([--enable-more-assertions], [include even more assertions]),
158 [ENABLE_MORE_ASSERTIONS=$enableval],
159 [ENABLE_MORE_ASSERTIONS=no]
161 AC_MSG_RESULT([$ENABLE_MORE_ASSERTIONS])
162 if test "x$ENABLE_MORE_ASSERTIONS" = "xyes"; then
163 AC_DEFINE([ENABLE_MORE_ASSERTIONS], [1], [Define to 1 if including more assertions.])
167 AC_MSG_CHECKING([whether to include compression verification])
168 AC_ARG_ENABLE([verify_compression],
169 AS_HELP_STRING([--enable-verify-compression], [always
170 check if blocks we compress can be correctly
172 [ENABLE_VERIFY_COMPRESSION=$enableval],
173 [ENABLE_VERIFY_COMPRESSION=no]
175 AC_MSG_RESULT([$ENABLE_VERIFY_COMPRESSION])
176 if test "x$ENABLE_VERIFY_COMPRESSION" = "xyes"; then
177 AC_DEFINE([ENABLE_VERIFY_COMPRESSION], [1], [Define to 1 to verify
181 AC_MSG_CHECKING([whether to include support for multi-threaded compression])
182 AC_ARG_ENABLE([multithreaded-compression],
183 AS_HELP_STRING([--disable-multithreaded-compression],
184 [do not compile in the code for multi-threaded compression]),
185 [ENABLE_MULTITHREADED_COMPRESSION=$enableval],
186 [ENABLE_MULTITHREADED_COMPRESSION=yes]
188 AC_MSG_RESULT([$ENABLE_MULTITHREADED_COMPRESSION])
189 if test "x$ENABLE_MULTITHREADED_COMPRESSION" = "xyes"; then
190 AC_DEFINE([ENABLE_MULTITHREADED_COMPRESSION], [1],
191 [Define to 1 if including support for multithreaded
195 PTHREAD_LDADD="-lpthread"
196 AC_SUBST([PTHREAD_LDADD], [$PTHREAD_LDADD])
198 WITH_NTFS_3G_DEFAULT="yes"
199 WITH_FUSE_DEFAULT="yes"
200 WINDOWS_NATIVE_BUILD="no"
201 VISIBILITY_CFLAGS="-fvisibility=hidden"
206 ENABLE_XATTR_DEFAULT="autodetect"
211 WITH_NTFS_3G_DEFAULT="no"
212 WITH_FUSE_DEFAULT="no"
213 WINDOWS_NATIVE_BUILD="yes"
215 WINDOWS_CFLAGS="-municode"
216 WINDOWS_CPPFLAGS="-D_POSIX -DUNICODE -D_UNICODE -D_CRT_NON_CONFORMING_SWPRINTFS"
217 WINDOWS_LDFLAGS="-no-undefined"
218 WINDOWS_LDADD="-lshlwapi"
219 ENABLE_XATTR_DEFAULT="no"
222 # Cygwin (WARNING: not well supported)
223 AC_MSG_WARN([wimlib has not been tested with Cygwin! Please do
224 a Windows-native build with MinGW-w64 instead])
225 WITH_NTFS_3G_DEFAULT="no"
226 WITH_FUSE_DEFAULT="no"
235 AS_HELP_STRING([--without-ntdll], [Windows only: do not try to
236 use functions from ntdll. By default, in some parts
237 of its code, wimlib uses Windows NT system calls to
238 work around flaws in the Win32 API. This support
239 can be omitted if needed, but some annoying bugs
240 will surface (e.g. permission denied errors even
241 when running as the Administrator).]),
242 [WITH_NTDLL=$withval],
245 if test "x$WINDOWS_NATIVE_BUILD" = "xyes"; then
246 if test "x$WITH_NTDLL" = "xyes"; then
247 WINDOWS_LDADD="$WINDOWS_LDADD"
248 AC_DEFINE([WITH_NTDLL], [1], [Define to 1 to try to use ntdll
253 AC_SUBST([VISIBILITY_CFLAGS], [$VISIBILITY_CFLAGS])
254 AC_SUBST([WINDOWS_LDFLAGS], [$WINDOWS_LDFLAGS])
255 AC_SUBST([WINDOWS_LDADD], [$WINDOWS_LDADD])
256 AC_SUBST([WINDOWS_CPPFLAGS], [$WINDOWS_CPPFLAGS])
257 AC_SUBST([WINDOWS_CFLAGS], [$WINDOWS_CFLAGS])
258 AM_CONDITIONAL([WINDOWS_NATIVE_BUILD], [test "x$WINDOWS_NATIVE_BUILD" = "xyes"])
260 AC_MSG_CHECKING([whether to include support for ntfs-3g])
261 AC_ARG_WITH([ntfs-3g],
262 AS_HELP_STRING([--without-ntfs-3g], [build without NTFS-3g.
263 On UNIX, this will disable the ability to use NTFS-specific
264 information when capturing or applying WIMs to a
266 [WITH_NTFS_3G=$withval],
267 [WITH_NTFS_3G=$WITH_NTFS_3G_DEFAULT]
269 AC_MSG_RESULT([$WITH_NTFS_3G])
270 if test "x$WITH_NTFS_3G" = "xyes"; then
271 AC_DEFINE([WITH_NTFS_3G], [1], [On UNIX, define to 1 to enable support
272 for NTFS-specific information])
274 dnl This effectively checks for NTFS-3g 2011.4.12 or later
275 AC_CHECK_LIB([ntfs-3g], [ntfs_xattr_system_setxattr], [],
276 [AC_MSG_ERROR([Cannot find libntfs-3g version 2011-4-12
277 or later. Without libntfs-3g, wimlib cannot include support for
278 capturing and applying WIMs on NTFS filesystems while preserving
279 NTFS-specific data such as security descriptors and alternate data
280 streams. You should either install libntfs-3g, or configure with
281 --without-ntfs-3g to disable support for these NTFS-specific
284 PKG_CHECK_MODULES([LIBNTFS_3G], [libntfs-3g])
285 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libntfs-3g"
287 dnl This checks for a NTFS-3g interface that was changed in the
288 dnl 2013.1.13 release
289 AC_CHECK_DECL([NTFS_MNT_RDONLY],
290 [AC_DEFINE([HAVE_NTFS_MNT_RDONLY],
292 [Define to 1 if ntfs_mount() takes the flag NTFS_MNT_RDONLY])],
294 [#include <ntfs-3g/volume.h>])
296 AM_CONDITIONAL([WITH_NTFS_3G], [test "x$WITH_NTFS_3G" = "xyes"])
299 if test "x$am_cv_func_iconv" != "xyes"; then
300 AC_MSG_ERROR([Cannot find the iconv() function.
301 iconv() is used to convert between encodings of WIM filenames and XML data.
302 wimlib cannot be compiled without it. iconv() is available in the latest
303 version of glibc and sometimes in other libraries.])
306 AC_MSG_CHECKING([whether to include support for mounting WIMs])
308 AS_HELP_STRING([--without-fuse], [build without libfuse.
309 This will disable the ability to mount
311 [WITH_FUSE=$withval],
312 [WITH_FUSE=$WITH_FUSE_DEFAULT]
314 AC_MSG_RESULT([$WITH_FUSE])
315 if test "x$WITH_FUSE" = "xyes"; then
316 AC_DEFINE([WITH_FUSE], [1], [Define to 1 if using FUSE.])
319 AC_CHECK_LIB([fuse], [fuse_main_real], [have_fuse=true],
320 [AC_MSG_ERROR([Cannot find libfuse.
321 Without libfuse, wimlib cannot include support for mounting WIMs. You
322 should either install libfuse, or configure with --without-fuse to
323 disable support for mounting WIMs.])
325 AC_CHECK_LIB([rt], [mq_open], [have_posix_mq=true],
326 [AC_MSG_ERROR([Cannot find librt for POSIX message queue
327 functions. Without these functions, wimlib cannot include support for
328 mounting WIMs. You should either update your C library to a recent
329 version of glibc, or configure with --without-fuse to disable support
332 PKG_CHECK_MODULES([LIBFUSE], [fuse])
333 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES fuse"
334 PKGCONFIG_PRIVATE_LIBS="$PKGCONFIG_PRIVATE_LIBS -lrt"
335 AC_SUBST([LIBRT_LIBS], [-lrt])
337 AM_CONDITIONAL([WITH_FUSE], [test "x$WITH_FUSE" = "xyes"])
340 AC_ARG_ENABLE([xattr],
341 [AS_HELP_STRING([--enable-xattr], [Enable the xattr interface to access WIM
342 alternate data streams (default: autodetect)])],
343 [ENABLE_XATTR=$enableval],
344 [if test "x$ENABLE_XATTR_DEFAULT" = "xautodetect"; then
345 AC_CHECK_FUNC([setxattr],
346 [AC_CHECK_HEADER([attr/xattr.h],
348 [AC_MSG_WARN([Cannot find the "attr/xattr.h" header. You will not be
349 able to use the xattr interface to access WIM alternate data
351 [AC_MSG_WARN([Cannot find the setxattr() function. You will not be
352 able to use the xattr interface to access WIM alternate data
356 if test "x$ENABLE_XATTR" = "xyes"; then
357 AC_DEFINE([ENABLE_XATTR], [1], [Define to 1 if using the xattr
358 interface to WIM alternate data streams])
361 AC_MSG_CHECKING([whether to use SSSE3-accelerated SHA1 ])
362 AC_ARG_ENABLE([ssse3-sha1],
363 AS_HELP_STRING([--enable-ssse3-sha1], [use assembly language implementation
364 of SHA1 from Intel, accelerated with vector
365 instructions (SSSE3-enabled CPU required)]),
366 [ENABLE_SSSE3_SHA1=$enableval],
367 [ENABLE_SSSE3_SHA1=no]
370 AC_MSG_RESULT([$ENABLE_SSSE3_SHA1])
371 if test "x$ENABLE_SSSE3_SHA1" = "xyes"; then
372 AC_DEFINE([ENABLE_SSSE3_SHA1], [1],
373 [Define to 1 if using vectorized implementation of SHA1])
374 SSSE3_SHA1_OBJ=sha1-ssse3.lo
376 AC_SUBST([NASM], [$nasm])
380 AC_SUBST([SSSE3_SHA1_OBJ], [$SSSE3_SHA1_OBJ])
382 if test "x$ENABLE_SSSE3_SHA1" = "xyes"; then
385 AC_ARG_WITH([libcrypto],
386 AS_HELP_STRING([--without-libcrypto], [build in the SHA1 algorithm,
387 rather than use external libcrypto from
388 OpenSSL (default is autodetect)]),
389 [WITH_LIBCRYPTO=$withval],
390 [AC_CHECK_LIB([crypto], [SHA1],
391 [WITH_LIBCRYPTO=yes],
392 [AC_MSG_WARN([Cannot find libcrypto: using stand-alone SHA1 code instead of OpenSSL])
396 AC_MSG_CHECKING([whether to use SHA1 function from system libcrypto])
397 AC_MSG_RESULT([$WITH_LIBCRYPTO])
399 if test "x$WITH_LIBCRYPTO" = "xyes" -a "x$ENABLE_SSSE3_SHA1" = "xno"; then
400 AC_DEFINE([WITH_LIBCRYPTO], [1], [Define to 1 if using libcrypto SHA1])
401 PKG_CHECK_MODULES([LIBCRYPTO], [libcrypto])
402 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libcrypto"
404 AC_SUBST([SHA1_SOURCES], [$SHA1_SOURCES])
406 AC_SUBST([PKGCONFIG_PRIVATE_REQUIRES], [$PKGCONFIG_PRIVATE_REQUIRES])
407 AC_SUBST([PKGCONFIG_PRIVATE_LIBS], [$PKGCONFIG_PRIVATE_LIBS])