1 AC_INIT([wimlib], [1.7.1-BETA], [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 foreign])
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/man1/"$IMAGEX_PROGNAME".1:doc/man1/imagex.1.in]
28 [doc/man1/"$IMAGEX_PROGNAME"-append.1:doc/man1/imagex-append.1.in]
29 [doc/man1/"$IMAGEX_PROGNAME"-apply.1:doc/man1/imagex-apply.1.in]
30 [doc/man1/"$IMAGEX_PROGNAME"-capture.1:doc/man1/imagex-capture.1.in]
31 [doc/man1/"$IMAGEX_PROGNAME"-delete.1:doc/man1/imagex-delete.1.in]
32 [doc/man1/"$IMAGEX_PROGNAME"-dir.1:doc/man1/imagex-dir.1.in]
33 [doc/man1/"$IMAGEX_PROGNAME"-export.1:doc/man1/imagex-export.1.in]
34 [doc/man1/"$IMAGEX_PROGNAME"-extract.1:doc/man1/imagex-extract.1.in]
35 [doc/man1/"$IMAGEX_PROGNAME"-info.1:doc/man1/imagex-info.1.in]
36 [doc/man1/"$IMAGEX_PROGNAME"-join.1:doc/man1/imagex-join.1.in]
37 [doc/man1/"$IMAGEX_PROGNAME"-mount.1:doc/man1/imagex-mount.1.in]
38 [doc/man1/"$IMAGEX_PROGNAME"-mountrw.1:doc/man1/imagex-mountrw.1.in]
39 [doc/man1/"$IMAGEX_PROGNAME"-optimize.1:doc/man1/imagex-optimize.1.in]
40 [doc/man1/"$IMAGEX_PROGNAME"-split.1:doc/man1/imagex-split.1.in]
41 [doc/man1/"$IMAGEX_PROGNAME"-unmount.1:doc/man1/imagex-unmount.1.in]
42 [doc/man1/"$IMAGEX_PROGNAME"-update.1:doc/man1/imagex-update.1.in]
43 [doc/man1/"$IMAGEX_PROGNAME"-verify.1:doc/man1/imagex-verify.1.in]
44 [doc/man1/mkwinpeimg.1])
46 AC_CONFIG_FILES([programs/mkwinpeimg], [chmod +x programs/mkwinpeimg])
52 AC_CHECK_FUNCS([futimens utimensat utime flock mempcpy \
53 openat fstatat readlinkat fdopendir])
55 # Note: some of the following header checks are only to define the appropriate
56 # HAVE_*_H macro so that the NTFS-3g headers don't get confused and try to skip
57 # including certain headers.
58 AC_CHECK_HEADERS([alloca.h \
76 AC_CHECK_MEMBER([struct stat.st_mtim],
77 [AC_DEFINE([HAVE_STAT_NANOSECOND_PRECISION], [1],
78 [Define to 1 if nanosecond precision timestamps are
81 [[#include <sys/stat.h>]])
84 AC_ARG_WITH(pkgconfigdir,
85 [ --with-pkgconfigdir=DIR pkgconfig file in DIR @<:@LIBDIR/pkgconfig@:>@],
86 [pkgconfigdir=$withval],
87 [pkgconfigdir='${libdir}/pkgconfig'])
88 AC_SUBST(pkgconfigdir)
90 AC_CHECK_LIB([xml2], [xmlParseFile], [have_libxml=true],
91 [AC_MSG_ERROR(["cannot find libxml2"])])
92 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
93 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libxml-2.0"
95 AC_MSG_CHECKING([whether to include debugging messages])
96 AC_ARG_ENABLE([debug],
97 AS_HELP_STRING([--enable-debug], [include lots of debugging messages]),
98 [ENABLE_DEBUG=$enableval],
101 AC_MSG_RESULT([$ENABLE_DEBUG])
102 if test "x$ENABLE_DEBUG" = "xyes"; then
103 AC_DEFINE([ENABLE_DEBUG], [1],
104 [Define to 1 if including lots of debug messages.])
107 AC_MSG_CHECKING([whether to include error messages])
108 AC_ARG_ENABLE([error_messages],
109 AS_HELP_STRING([--disable-error-messages],
110 [do not compile in error messsages]),
111 [ENABLE_ERROR_MESSAGES=$enableval],
112 [ENABLE_ERROR_MESSAGES=yes]
114 AC_MSG_RESULT([$ENABLE_ERROR_MESSAGES])
115 if test "x$ENABLE_ERROR_MESSAGES" = "xyes"; then
116 AC_DEFINE([ENABLE_ERROR_MESSAGES], [1],
117 [Define to 1 if including error messages])
120 AC_MSG_CHECKING([whether to include assertions])
121 AC_ARG_ENABLE([assertions],
122 AS_HELP_STRING([--disable-assertions], [do not include assertions]),
123 [ENABLE_ASSERTIONS=$enableval],
124 [ENABLE_ASSERTIONS=yes]
126 AC_MSG_RESULT([$ENABLE_ASSERTIONS])
127 if test "x$ENABLE_ASSERTIONS" = "xyes"; then
128 AC_DEFINE([ENABLE_ASSERTIONS], [1], [Define to 1 if including assertions.])
131 AC_MSG_CHECKING([whether to include more assertions])
132 AC_ARG_ENABLE([more-assertions],
133 AS_HELP_STRING([--enable-more-assertions], [include even more assertions]),
134 [ENABLE_MORE_ASSERTIONS=$enableval],
135 [ENABLE_MORE_ASSERTIONS=no]
137 AC_MSG_RESULT([$ENABLE_MORE_ASSERTIONS])
138 if test "x$ENABLE_MORE_ASSERTIONS" = "xyes"; then
139 AC_DEFINE([ENABLE_MORE_ASSERTIONS], [1], [Define to 1 if including more assertions.])
143 AC_MSG_CHECKING([whether to include compression verification])
144 AC_ARG_ENABLE([verify_compression],
145 AS_HELP_STRING([--enable-verify-compression], [always
146 check if blocks we compress can be correctly
148 [ENABLE_VERIFY_COMPRESSION=$enableval],
149 [ENABLE_VERIFY_COMPRESSION=no]
151 AC_MSG_RESULT([$ENABLE_VERIFY_COMPRESSION])
152 if test "x$ENABLE_VERIFY_COMPRESSION" = "xyes"; then
153 AC_DEFINE([ENABLE_VERIFY_COMPRESSION], [1], [Define to 1 to verify
157 AC_MSG_CHECKING([whether to include support for multi-threaded compression])
158 AC_ARG_ENABLE([multithreaded-compression],
159 AS_HELP_STRING([--disable-multithreaded-compression],
160 [do not compile in the code for multi-threaded compression]),
161 [ENABLE_MULTITHREADED_COMPRESSION=$enableval],
162 [ENABLE_MULTITHREADED_COMPRESSION=yes]
164 AC_MSG_RESULT([$ENABLE_MULTITHREADED_COMPRESSION])
165 if test "x$ENABLE_MULTITHREADED_COMPRESSION" = "xyes"; then
166 AC_DEFINE([ENABLE_MULTITHREADED_COMPRESSION], [1],
167 [Define to 1 if including support for multithreaded
171 PTHREAD_LDADD="-lpthread"
172 AC_SUBST([PTHREAD_LDADD], [$PTHREAD_LDADD])
174 WITH_NTFS_3G_DEFAULT="yes"
175 WITH_FUSE_DEFAULT="yes"
176 WINDOWS_NATIVE_BUILD="no"
177 VISIBILITY_CFLAGS="-fvisibility=hidden"
186 WITH_NTFS_3G_DEFAULT="no"
187 WITH_FUSE_DEFAULT="no"
188 WINDOWS_NATIVE_BUILD="yes"
190 WINDOWS_CFLAGS="-municode"
191 WINDOWS_CPPFLAGS="-D_POSIX -DUNICODE -D_UNICODE -D_CRT_NON_CONFORMING_SWPRINTFS"
192 WINDOWS_LDFLAGS="-no-undefined"
193 WINDOWS_LDADD="-lshlwapi"
200 AC_SUBST([VISIBILITY_CFLAGS], [$VISIBILITY_CFLAGS])
201 AC_SUBST([WINDOWS_LDFLAGS], [$WINDOWS_LDFLAGS])
202 AC_SUBST([WINDOWS_LDADD], [$WINDOWS_LDADD])
203 AC_SUBST([WINDOWS_CPPFLAGS], [$WINDOWS_CPPFLAGS])
204 AC_SUBST([WINDOWS_CFLAGS], [$WINDOWS_CFLAGS])
205 AM_CONDITIONAL([WINDOWS_NATIVE_BUILD], [test "x$WINDOWS_NATIVE_BUILD" = "xyes"])
207 AC_MSG_CHECKING([whether to include support for ntfs-3g])
208 AC_ARG_WITH([ntfs-3g],
209 AS_HELP_STRING([--without-ntfs-3g], [build without NTFS-3g.
210 On UNIX, this will disable the ability to use NTFS-specific
211 information when capturing or applying WIMs to a
213 [WITH_NTFS_3G=$withval],
214 [WITH_NTFS_3G=$WITH_NTFS_3G_DEFAULT]
216 AC_MSG_RESULT([$WITH_NTFS_3G])
217 if test "x$WITH_NTFS_3G" = "xyes"; then
218 AC_DEFINE([WITH_NTFS_3G], [1], [On UNIX, define to 1 to enable support
219 for NTFS-specific information])
221 dnl This effectively checks for NTFS-3g 2011.4.12 or later
222 AC_CHECK_LIB([ntfs-3g], [ntfs_xattr_system_setxattr], [],
223 [AC_MSG_ERROR([Cannot find libntfs-3g version 2011-4-12
224 or later. Without libntfs-3g, wimlib cannot include support for
225 capturing and applying WIMs on NTFS filesystems while preserving
226 NTFS-specific data such as security descriptors and alternate data
227 streams. You should either install libntfs-3g, or configure with
228 --without-ntfs-3g to disable support for these NTFS-specific
231 PKG_CHECK_MODULES([LIBNTFS_3G], [libntfs-3g])
232 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libntfs-3g"
234 dnl This checks for an NTFS-3g interface that was changed in the
235 dnl 2013.1.13 release
236 AC_CHECK_DECL([NTFS_MNT_RDONLY],
237 [AC_DEFINE([HAVE_NTFS_MNT_RDONLY],
239 [Define to 1 if ntfs_mount() takes the flag NTFS_MNT_RDONLY])],
241 [#include <ntfs-3g/volume.h>])
243 AM_CONDITIONAL([WITH_NTFS_3G], [test "x$WITH_NTFS_3G" = "xyes"])
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 PKG_CHECK_MODULES([LIBFUSE], [fuse])
280 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES fuse"
281 PKGCONFIG_PRIVATE_LIBS="$PKGCONFIG_PRIVATE_LIBS -lrt"
282 AC_SUBST([LIBRT_LIBS], [-lrt])
284 AM_CONDITIONAL([WITH_FUSE], [test "x$WITH_FUSE" = "xyes"])
286 AC_MSG_CHECKING([whether to use SSSE3-accelerated SHA1 ])
287 AC_ARG_ENABLE([ssse3-sha1],
288 AS_HELP_STRING([--enable-ssse3-sha1], [use assembly language implementation
289 of SHA1 from Intel, accelerated with vector
290 instructions (SSSE3-enabled CPU required)]),
291 [ENABLE_SSSE3_SHA1=$enableval],
292 [ENABLE_SSSE3_SHA1=no]
295 AC_MSG_RESULT([$ENABLE_SSSE3_SHA1])
296 if test "x$ENABLE_SSSE3_SHA1" = "xyes"; then
297 AC_DEFINE([ENABLE_SSSE3_SHA1], [1],
298 [Define to 1 if using vectorized implementation of SHA1])
299 SSSE3_SHA1_OBJ=src/sha1-ssse3.lo
301 NASM_SYMBOL_PREFIX=""
303 if test "x$WINDOWS_NATIVE_BUILD" = "xyes"; then
304 NASM_WINDOWS_FLAGS="-DWIN_ABI"
307 darwin* | rhapsody* | nextstep* | openstep* | macos*)
308 NASM_SYMBOL_PREFIX="_"
311 AC_SUBST([NASM_WINDOWS_FLAGS], $NASM_WINDOWS_FLAGS)
312 AC_SUBST([NASM_SYMBOL_PREFIX], $NASM_SYMBOL_PREFIX)
316 AC_SUBST([SSSE3_SHA1_OBJ], [$SSSE3_SHA1_OBJ])
318 if test "x$ENABLE_SSSE3_SHA1" = "xyes"; then
321 AC_ARG_WITH([libcrypto],
322 AS_HELP_STRING([--without-libcrypto], [build in the SHA1 algorithm,
323 rather than use external libcrypto from
324 OpenSSL (default is autodetect)]),
325 [WITH_LIBCRYPTO=$withval],
326 [AC_CHECK_LIB([crypto], [SHA1],
327 [WITH_LIBCRYPTO=yes],
328 [AC_MSG_WARN([Cannot find libcrypto: using stand-alone SHA1 code instead of OpenSSL])
332 AC_MSG_CHECKING([whether to use SHA1 function from system libcrypto])
333 AC_MSG_RESULT([$WITH_LIBCRYPTO])
335 if test "x$WITH_LIBCRYPTO" = "xyes" -a "x$ENABLE_SSSE3_SHA1" = "xno"; then
336 AC_DEFINE([WITH_LIBCRYPTO], [1], [Define to 1 if using libcrypto SHA1])
337 PKG_CHECK_MODULES([LIBCRYPTO], [libcrypto])
338 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libcrypto"
340 AC_SUBST([SHA1_SOURCES], [$SHA1_SOURCES])
342 AC_SUBST([PKGCONFIG_PRIVATE_REQUIRES], [$PKGCONFIG_PRIVATE_REQUIRES])
343 AC_SUBST([PKGCONFIG_PRIVATE_LIBS], [$PKGCONFIG_PRIVATE_LIBS])