1 ###############################################################################
3 AC_INIT([wimlib], [1.8.1], [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])
9 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
12 AC_CONFIG_HEADERS([config.h])
13 AC_CONFIG_FILES([Makefile] [doc/Doxyfile] [wimlib.pc])
14 AC_CONFIG_FILES([programs/mkwinpeimg], [chmod +x programs/mkwinpeimg])
16 PKGCONFIG_PRIVATE_REQUIRES=""
17 PKGCONFIG_PRIVATE_LIBS=""
19 ###############################################################################
20 # General platform features #
21 ###############################################################################
27 WINDOWS_NATIVE_BUILD="no"
29 PLATFORM_CFLAGS="-fvisibility=hidden"
35 WINDOWS_NATIVE_BUILD="yes"
36 PLATFORM_CPPFLAGS="-D_POSIX -D_POSIX_THREAD_SAFE_FUNCTIONS -DUNICODE -D_UNICODE -D_CRT_NON_CONFORMING_SWPRINTFS"
37 PLATFORM_CFLAGS="-municode -mno-ms-bitfields"
38 PLATFORM_LDFLAGS="-no-undefined"
39 WITH_NTFS_3G_DEFAULT="no"
40 WITH_FUSE_DEFAULT="no"
44 WITH_NTFS_3G_DEFAULT="yes"
45 WITH_FUSE_DEFAULT="yes"
49 WITH_NTFS_3G_DEFAULT="yes"
50 WITH_FUSE_DEFAULT="no"
54 AC_SUBST([PLATFORM_CPPFLAGS], [$PLATFORM_CPPFLAGS])
55 AC_SUBST([PLATFORM_CFLAGS], [$PLATFORM_CFLAGS])
56 AC_SUBST([PLATFORM_LDFLAGS], [$PLATFORM_LDFLAGS])
57 AM_CONDITIONAL([WINDOWS_NATIVE_BUILD], [test "$WINDOWS_NATIVE_BUILD" = "yes"])
59 # Useful functions which we can do without.
60 AC_CHECK_FUNCS([futimens utimensat flock mempcpy \
61 openat fstatat readlinkat fdopendir])
63 # Header checks, most of which are only here to satisfy conditional includes
64 # made by the libntfs-3g headers.
65 AC_CHECK_HEADERS([alloca.h \
84 # Does stat() support nanosecond-precision timestamps? (This is relevant on
85 # UNIX but not on Windows.)
86 AC_CHECK_MEMBER([struct stat.st_mtim],
87 [AC_DEFINE([HAVE_STAT_NANOSECOND_PRECISION], [1],
88 [Define to 1 if stat() supports nanosecond precision
91 [#include <sys/stat.h>])
93 ###############################################################################
94 # Required libraries #
95 ###############################################################################
97 # ------------------------------ pthreads -------------------------------------
98 AX_PTHREAD([], [AC_MSG_ERROR(["cannot find pthreads library"])])
100 # ------------------------------ libxml2 --------------------------------------
101 AC_CHECK_LIB([xml2], [xmlReadMemory], [],
102 [AC_MSG_ERROR(["cannot find libxml2"])])
103 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
104 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libxml-2.0"
106 # ------------------------------ libiconv -------------------------------------
108 if test "$am_cv_func_iconv" != "yes"; then
109 AC_MSG_ERROR([Cannot find the iconv() function. iconv() is used to
110 convert between encodings of WIM filenames and XML data.
111 wimlib cannot be compiled without it. iconv() is
112 available in the latest version of glibc and sometimes in
116 ###############################################################################
117 # Configuration options #
118 ###############################################################################
120 # ------------------------- ntfs-3g support -----------------------------------
122 AC_MSG_CHECKING([whether to include support for ntfs-3g])
123 AC_ARG_WITH([ntfs-3g],
124 [AS_HELP_STRING([--without-ntfs-3g],
125 [build without libntfs-3g. This will disable the
126 ability to capture or apply a WIM image directly
127 from/to an unmounted NTFS volume.])],
128 [WITH_NTFS_3G=$withval],
129 [WITH_NTFS_3G=$WITH_NTFS_3G_DEFAULT])
130 AC_MSG_RESULT([$WITH_NTFS_3G])
132 if test "$WITH_NTFS_3G" = "yes"; then
133 # This effectively checks for NTFS-3g 2011.4.12 or later
134 AC_CHECK_LIB([ntfs-3g], [ntfs_xattr_system_setxattr], [],
135 [AC_MSG_ERROR([Cannot find libntfs-3g version 2011-4-12
136 or later! Without libntfs-3g, wimlib cannot include support for
137 capturing or applying a WIM image directly from/to an unmounted NTFS
138 volume while preserving NTFS-specific data such as security descriptors
139 and named data streams. Either install libntfs-3g, or configure
140 --without-ntfs-3g to disable this feature.])])
142 # This checks a definition that was changed in NTFS-3g 2013.1.13
143 AC_CHECK_DECL([NTFS_MNT_RDONLY],
144 [AC_DEFINE([HAVE_NTFS_MNT_RDONLY], [1],
145 [Define to 1 if ntfs_mount() takes the flag
148 [#include <ntfs-3g/volume.h>])
150 AC_DEFINE([WITH_NTFS_3G], [1], [Define to 1 if using NTFS-3g support])
151 PKG_CHECK_MODULES([LIBNTFS_3G], [libntfs-3g])
152 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libntfs-3g"
154 AM_CONDITIONAL([WITH_NTFS_3G], [test "$WITH_NTFS_3G" = "yes"])
156 # ------------------------ FUSE mount support ---------------------------------
158 AC_MSG_CHECKING([whether to include support for mounting WIMs])
160 [AS_HELP_STRING([--without-fuse],
161 [build without libfuse. This will disable the
162 ability to mount WIM images.])],
163 [WITH_FUSE=$withval],
164 [WITH_FUSE=$WITH_FUSE_DEFAULT])
165 AC_MSG_RESULT([$WITH_FUSE])
167 if test "$WITH_FUSE" = "yes"; then
168 AC_CHECK_LIB([fuse], [fuse_main_real], [],
169 [AC_MSG_ERROR([Cannot find libfuse!
170 Without libfuse, wimlib cannot include support for mounting WIM images.
171 Either install libfuse, or configure --without-fuse to disable this
174 AC_CHECK_LIB([rt], [mq_open], [],
175 [AC_MSG_ERROR([Cannot find librt (the POSIX.1b Realtime
176 Extensions Library)! wimlib needs this for the POSIX message queue
177 functions, which are used in the code for mounting WIM images. Recent
178 versions of glibc include this library. Either install this library, or
179 configure --without-fuse to disable support for mounting WIM images.])])
181 AC_CHECK_LIB([attr], [getxattr], [],
182 [AC_MSG_ERROR([Cannot find libattr!
183 wimlib needs this for the extended attribute functions, which are used
184 in the code for mounting WIM images. Either install this library, or
185 configure --without-fuse to disable support for mounting WIM images.])])
187 AC_DEFINE([WITH_FUSE], [1], [Define to 1 if using FUSE support])
188 PKG_CHECK_MODULES([LIBFUSE], [fuse])
189 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES fuse"
190 PKGCONFIG_PRIVATE_LIBS="$PKGCONFIG_PRIVATE_LIBS -lrt"
191 AC_SUBST([LIBRT_LIBS], [-lrt])
193 AM_CONDITIONAL([WITH_FUSE], [test "$WITH_FUSE" = "yes"])
195 # ------------------------ SHA-1 implementation ---------------------------------
197 AC_MSG_CHECKING([whether to use SSSE3-accelerated SHA-1])
198 AC_ARG_ENABLE([ssse3-sha1],
199 [AS_HELP_STRING([--enable-ssse3-sha1],
200 [Include SSSE3-accelerated SHA-1 implementation by
201 Intel. This implies --without-libcrypto.])],
202 [ENABLE_SSSE3_SHA1=$enableval],
203 [ENABLE_SSSE3_SHA1=no])
204 AC_MSG_RESULT([$ENABLE_SSSE3_SHA1])
206 if test "$ENABLE_SSSE3_SHA1" = "yes" ; then
207 AC_DEFINE([ENABLE_SSSE3_SHA1], [1],
208 [Define to 1 if using SSSE3 implementation of SHA-1])
210 NASM_SYMBOL_PREFIX=""
211 NASM_PLATFORM_FLAGS=""
212 if test "$WINDOWS_NATIVE_BUILD" = "yes"; then
213 NASM_PLATFORM_FLAGS="-DWIN_ABI"
216 darwin* | rhapsody* | nextstep* | openstep* | macos*)
217 NASM_SYMBOL_PREFIX="_"
220 AC_SUBST([NASM_PLATFORM_FLAGS], [$NASM_PLATFORM_FLAGS])
221 AC_SUBST([NASM_SYMBOL_PREFIX], [$NASM_SYMBOL_PREFIX])
223 AC_ARG_WITH([libcrypto],
224 [AS_HELP_STRING([--without-libcrypto],
225 [build in the SHA-1 algorithm, rather than
226 use external libcrypto from OpenSSL
227 (default is autodetect)])],
228 [WITH_LIBCRYPTO=$withval],
229 [AC_CHECK_LIB([crypto], [SHA1], [WITH_LIBCRYPTO=yes],
230 [AC_MSG_WARN([Cannot find libcrypto: using
231 stand-alone SHA-1 code instead of OpenSSL])
232 WITH_LIBCRYPTO=no])])
233 AC_MSG_CHECKING([whether to use SHA-1 implementation from system libcrypto])
234 AC_MSG_RESULT([$WITH_LIBCRYPTO])
235 if test "$WITH_LIBCRYPTO" = "yes"; then
236 AC_DEFINE([WITH_LIBCRYPTO], [1], [Define to 1 if using libcrypto SHA-1])
237 PKG_CHECK_MODULES([LIBCRYPTO], [libcrypto])
238 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libcrypto"
241 AM_CONDITIONAL([ENABLE_SSSE3_SHA1], [test "$ENABLE_SSSE3_SHA1" = "yes"])
243 # ----------------------------- Other options ---------------------------------
245 AC_MSG_CHECKING([whether to include error messages])
246 AC_ARG_ENABLE([error_messages],
247 AS_HELP_STRING([--disable-error-messages], [do not compile in error messsages]),
248 [ENABLE_ERROR_MESSAGES=$enableval],
249 [ENABLE_ERROR_MESSAGES=yes])
250 AC_MSG_RESULT([$ENABLE_ERROR_MESSAGES])
251 if test "$ENABLE_ERROR_MESSAGES" = "yes"; then
252 AC_DEFINE([ENABLE_ERROR_MESSAGES], [1], [Define to 1 if including error messages])
255 AC_MSG_CHECKING([whether to include assertions])
256 AC_ARG_ENABLE([assertions],
257 AS_HELP_STRING([--disable-assertions], [do not include assertions]),
258 [ENABLE_ASSERTIONS=$enableval],
259 [ENABLE_ASSERTIONS=yes])
260 AC_MSG_RESULT([$ENABLE_ASSERTIONS])
261 if test "$ENABLE_ASSERTIONS" = "yes"; then
262 AC_DEFINE([ENABLE_ASSERTIONS], [1], [Define to 1 if including assertions])
265 AC_MSG_CHECKING([whether to include support for multi-threaded compression])
266 AC_ARG_ENABLE([multithreaded-compression],
267 AS_HELP_STRING([--disable-multithreaded-compression],
268 [disable support for multithreaded compression]),
269 [ENABLE_MULTITHREADED_COMPRESSION=$enableval],
270 [ENABLE_MULTITHREADED_COMPRESSION=yes])
271 AC_MSG_RESULT([$ENABLE_MULTITHREADED_COMPRESSION])
272 if test "$ENABLE_MULTITHREADED_COMPRESSION" = "yes"; then
273 AC_DEFINE([ENABLE_MULTITHREADED_COMPRESSION], [1],
274 [Define to 1 to support multithreaded compression])
277 AC_ARG_WITH(pkgconfigdir,
278 [ --with-pkgconfigdir=DIR pkgconfig file in DIR @<:@LIBDIR/pkgconfig@:>@],
279 [pkgconfigdir=$withval],
280 [pkgconfigdir='${libdir}/pkgconfig'])
281 AC_SUBST(pkgconfigdir)
283 ###############################################################################
285 AC_SUBST([PKGCONFIG_PRIVATE_REQUIRES], [$PKGCONFIG_PRIVATE_REQUIRES])
286 AC_SUBST([PKGCONFIG_PRIVATE_LIBS], [$PKGCONFIG_PRIVATE_LIBS])