1 ###############################################################################
3 AC_INIT([wimlib], [1.9.2], [ebiggers3@gmail.com])
4 AC_CONFIG_SRCDIR([src/wim.c])
5 AC_CONFIG_MACRO_DIR([m4])
6 AC_CONFIG_AUX_DIR([build-aux])
7 AM_INIT_AUTOMAKE([-Wall -Werror subdir-objects foreign])
10 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
13 AC_CONFIG_HEADERS([config.h])
14 AC_CONFIG_FILES([Makefile] [doc/Doxyfile] [wimlib.pc])
15 AC_CONFIG_FILES([programs/mkwinpeimg], [chmod +x programs/mkwinpeimg])
17 PKGCONFIG_PRIVATE_REQUIRES=""
18 PKGCONFIG_PRIVATE_LIBS=""
20 ###############################################################################
21 # General platform features #
22 ###############################################################################
28 WINDOWS_NATIVE_BUILD="no"
30 PLATFORM_CFLAGS="-fvisibility=hidden"
36 WINDOWS_NATIVE_BUILD="yes"
37 PLATFORM_CPPFLAGS="-D_POSIX -D_POSIX_THREAD_SAFE_FUNCTIONS -DUNICODE -D_UNICODE -D_CRT_NON_CONFORMING_SWPRINTFS"
38 PLATFORM_CFLAGS="-municode -mno-ms-bitfields"
39 PLATFORM_LDFLAGS="-no-undefined"
40 WITH_NTFS_3G_DEFAULT="no"
41 WITH_FUSE_DEFAULT="no"
45 WITH_NTFS_3G_DEFAULT="yes"
46 WITH_FUSE_DEFAULT="yes"
50 WITH_NTFS_3G_DEFAULT="yes"
51 WITH_FUSE_DEFAULT="no"
55 AC_SUBST([PLATFORM_CPPFLAGS], [$PLATFORM_CPPFLAGS])
56 AC_SUBST([PLATFORM_CFLAGS], [$PLATFORM_CFLAGS])
57 AC_SUBST([PLATFORM_LDFLAGS], [$PLATFORM_LDFLAGS])
58 AM_CONDITIONAL([WINDOWS_NATIVE_BUILD], [test "$WINDOWS_NATIVE_BUILD" = "yes"])
60 # Useful functions which we can do without.
61 AC_CHECK_FUNCS([futimens utimensat flock mempcpy \
62 openat fstatat readlinkat fdopendir])
64 # Header checks, most of which are only here to satisfy conditional includes
65 # made by the libntfs-3g headers.
66 AC_CHECK_HEADERS([alloca.h \
85 # Does stat() support nanosecond-precision timestamps? (This is relevant on
86 # UNIX but not on Windows.)
87 AC_CHECK_MEMBER([struct stat.st_mtim],
88 [AC_DEFINE([HAVE_STAT_NANOSECOND_PRECISION], [1],
89 [Define to 1 if stat() supports nanosecond precision
92 [#include <sys/stat.h>])
94 ###############################################################################
95 # Required libraries #
96 ###############################################################################
98 # ------------------------------ pthreads -------------------------------------
99 AX_PTHREAD([], [AC_MSG_ERROR(["cannot find pthreads library"])])
101 # ------------------------------ libxml2 --------------------------------------
102 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
103 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libxml-2.0"
105 ###############################################################################
106 # Configuration options #
107 ###############################################################################
109 # ------------------------- ntfs-3g support -----------------------------------
111 AC_MSG_CHECKING([whether to include support for ntfs-3g])
112 AC_ARG_WITH([ntfs-3g],
113 [AS_HELP_STRING([--without-ntfs-3g],
114 [build without libntfs-3g. This will disable the
115 ability to capture or apply a WIM image directly
116 from/to an unmounted NTFS volume.])],
117 [WITH_NTFS_3G=$withval],
118 [WITH_NTFS_3G=$WITH_NTFS_3G_DEFAULT])
119 AC_MSG_RESULT([$WITH_NTFS_3G])
121 if test "$WITH_NTFS_3G" = "yes"; then
122 PKG_CHECK_MODULES([LIBNTFS_3G], [libntfs-3g >= 2011.4.12], [],
123 [AC_MSG_ERROR([Cannot find libntfs-3g version 2011-4-12 or
124 later! Without libntfs-3g, wimlib cannot include support for
125 capturing or applying a WIM image directly from/to an unmounted
126 NTFS volume while preserving NTFS-specific data such as
127 security descriptors and named data streams. Either install
128 libntfs-3g, or configure --without-ntfs-3g to disable this
130 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libntfs-3g"
131 AC_DEFINE([WITH_NTFS_3G], [1], [Define to 1 if using NTFS-3G support])
133 AM_CONDITIONAL([WITH_NTFS_3G], [test "$WITH_NTFS_3G" = "yes"])
135 # ------------------------ FUSE mount support ---------------------------------
137 AC_MSG_CHECKING([whether to include support for mounting WIMs])
139 [AS_HELP_STRING([--without-fuse],
140 [build without libfuse. This will disable the
141 ability to mount WIM images.])],
142 [WITH_FUSE=$withval],
143 [WITH_FUSE=$WITH_FUSE_DEFAULT])
144 AC_MSG_RESULT([$WITH_FUSE])
146 if test "$WITH_FUSE" = "yes"; then
148 PKG_CHECK_MODULES([LIBFUSE], [fuse], [],
149 [AC_MSG_ERROR([Cannot find libfuse!
150 Without libfuse, wimlib cannot include support for mounting WIM
151 images. Either install libfuse, or configure --without-fuse to
152 disable this feature.])])
153 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES fuse"
154 AC_DEFINE([WITH_FUSE], [1], [Define to 1 if using FUSE support])
156 AC_CHECK_LIB([rt], [mq_open], [],
157 [AC_MSG_ERROR([Cannot find librt (the POSIX.1b Realtime
158 Extensions Library)! wimlib needs this for the POSIX message queue
159 functions, which are used in the code for mounting WIM images. Recent
160 versions of glibc include this library. Either install this library, or
161 configure --without-fuse to disable support for mounting WIM images.])])
163 AC_CHECK_LIB([attr], [getxattr], [],
164 [AC_MSG_ERROR([Cannot find libattr!
165 wimlib needs this for the extended attribute functions, which are used
166 in the code for mounting WIM images. Either install this library, or
167 configure --without-fuse to disable support for mounting WIM images.])])
169 PKGCONFIG_PRIVATE_LIBS="$PKGCONFIG_PRIVATE_LIBS -lrt"
170 AC_SUBST([LIBRT_LIBS], [-lrt])
172 AM_CONDITIONAL([WITH_FUSE], [test "$WITH_FUSE" = "yes"])
174 # ------------------------ SHA-1 implementation ---------------------------------
176 AC_MSG_CHECKING([whether to use SSSE3-accelerated SHA-1])
177 AC_ARG_ENABLE([ssse3-sha1],
178 [AS_HELP_STRING([--enable-ssse3-sha1],
179 [Include SSSE3-accelerated SHA-1 implementation by
180 Intel. This implies --without-libcrypto.])],
181 [ENABLE_SSSE3_SHA1=$enableval],
182 [ENABLE_SSSE3_SHA1=no])
183 AC_MSG_RESULT([$ENABLE_SSSE3_SHA1])
185 if test "$ENABLE_SSSE3_SHA1" = "yes" ; then
186 AC_DEFINE([ENABLE_SSSE3_SHA1], [1],
187 [Define to 1 if using SSSE3 implementation of SHA-1])
189 NASM_SYMBOL_PREFIX=""
190 NASM_PLATFORM_FLAGS=""
191 if test "$WINDOWS_NATIVE_BUILD" = "yes"; then
192 NASM_PLATFORM_FLAGS="-DWIN_ABI"
195 darwin* | rhapsody* | nextstep* | openstep* | macos*)
196 NASM_SYMBOL_PREFIX="_"
199 AC_SUBST([NASM_PLATFORM_FLAGS], [$NASM_PLATFORM_FLAGS])
200 AC_SUBST([NASM_SYMBOL_PREFIX], [$NASM_SYMBOL_PREFIX])
202 AC_MSG_CHECKING([whether to use SHA-1 implementation from system libcrypto])
203 AC_ARG_WITH([libcrypto],
204 [AS_HELP_STRING([--without-libcrypto],
205 [build in the SHA-1 algorithm, rather than
206 use external libcrypto from OpenSSL
207 (default is autodetect)])],
208 [WITH_LIBCRYPTO=$withval],
209 [WITH_LIBCRYPTO=auto])
210 AC_MSG_RESULT([$WITH_LIBCRYPTO])
211 if test "$WITH_LIBCRYPTO" != "no"; then
212 PKG_CHECK_MODULES([LIBCRYPTO], [libcrypto], [
213 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libcrypto"
214 AC_DEFINE([WITH_LIBCRYPTO], [1],
215 [Define to 1 if using libcrypto SHA-1])
216 ], [AC_MSG_WARN([Cannot find libcrypto: using stand-alone SHA-1 code instead])])
219 AM_CONDITIONAL([ENABLE_SSSE3_SHA1], [test "$ENABLE_SSSE3_SHA1" = "yes"])
221 # ----------------------------- Other options ---------------------------------
223 AC_MSG_CHECKING([whether to include error messages])
224 AC_ARG_ENABLE([error_messages],
225 AS_HELP_STRING([--disable-error-messages], [do not compile in error messsages]),
226 [ENABLE_ERROR_MESSAGES=$enableval],
227 [ENABLE_ERROR_MESSAGES=yes])
228 AC_MSG_RESULT([$ENABLE_ERROR_MESSAGES])
229 if test "$ENABLE_ERROR_MESSAGES" = "yes"; then
230 AC_DEFINE([ENABLE_ERROR_MESSAGES], [1], [Define to 1 if including error messages])
233 AC_MSG_CHECKING([whether to include assertions])
234 AC_ARG_ENABLE([assertions],
235 AS_HELP_STRING([--disable-assertions], [do not include assertions]),
236 [ENABLE_ASSERTIONS=$enableval],
237 [ENABLE_ASSERTIONS=yes])
238 AC_MSG_RESULT([$ENABLE_ASSERTIONS])
239 if test "$ENABLE_ASSERTIONS" = "yes"; then
240 AC_DEFINE([ENABLE_ASSERTIONS], [1], [Define to 1 if including assertions])
243 AC_MSG_CHECKING([whether to include support for multi-threaded compression])
244 AC_ARG_ENABLE([multithreaded-compression],
245 AS_HELP_STRING([--disable-multithreaded-compression],
246 [disable support for multithreaded compression]),
247 [ENABLE_MULTITHREADED_COMPRESSION=$enableval],
248 [ENABLE_MULTITHREADED_COMPRESSION=yes])
249 AC_MSG_RESULT([$ENABLE_MULTITHREADED_COMPRESSION])
250 if test "$ENABLE_MULTITHREADED_COMPRESSION" = "yes"; then
251 AC_DEFINE([ENABLE_MULTITHREADED_COMPRESSION], [1],
252 [Define to 1 to support multithreaded compression])
255 AC_ARG_WITH(pkgconfigdir,
256 [ --with-pkgconfigdir=DIR pkgconfig file in DIR @<:@LIBDIR/pkgconfig@:>@],
257 [pkgconfigdir=$withval],
258 [pkgconfigdir='${libdir}/pkgconfig'])
259 AC_SUBST(pkgconfigdir)
261 AC_MSG_CHECKING([whether to enable supporting code for tests])
262 AC_ARG_ENABLE([test-support],
263 [AS_HELP_STRING([--enable-test-support],
264 [Enable supporting code for tests (developers only)])],
265 [ENABLE_TEST_SUPPORT=$enableval],
266 [ENABLE_TEST_SUPPORT=no])
267 AC_MSG_RESULT([$ENABLE_TEST_SUPPORT])
268 if test "$ENABLE_TEST_SUPPORT" = "yes" ; then
269 AC_DEFINE([ENABLE_TEST_SUPPORT], [1],
270 [Define to 1 to enable supporting code for tests])
272 AM_CONDITIONAL([ENABLE_TEST_SUPPORT], [test "$ENABLE_TEST_SUPPORT" = "yes"])
274 ###############################################################################
276 AC_SUBST([PKGCONFIG_PRIVATE_REQUIRES], [$PKGCONFIG_PRIVATE_REQUIRES])
277 AC_SUBST([PKGCONFIG_PRIVATE_LIBS], [$PKGCONFIG_PRIVATE_LIBS])