1 ###############################################################################
3 AC_INIT([wimlib], [1.11.0-BETA1], [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 posix_fallocate])
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 # Check for possible support for the Linux getrandom() system call
95 AC_CHECK_DECL([__NR_getrandom],
96 [AC_DEFINE([HAVE_NR_GETRANDOM], [1], [Define to 1 if the system
97 headers define a system call number for getrandom()])],
99 [#include <sys/syscall.h>])
101 ###############################################################################
102 # Required libraries #
103 ###############################################################################
105 # ------------------------------ pthreads -------------------------------------
106 AX_PTHREAD([], [AC_MSG_ERROR(["cannot find pthreads library"])])
108 # ------------------------------ libxml2 --------------------------------------
109 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
110 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libxml-2.0"
112 ###############################################################################
113 # Configuration options #
114 ###############################################################################
116 # ------------------------- ntfs-3g support -----------------------------------
118 AC_MSG_CHECKING([whether to include support for ntfs-3g])
119 AC_ARG_WITH([ntfs-3g],
120 [AS_HELP_STRING([--without-ntfs-3g],
121 [build without libntfs-3g. This will disable the
122 ability to capture or apply a WIM image directly
123 from/to an unmounted NTFS volume.])],
124 [WITH_NTFS_3G=$withval],
125 [WITH_NTFS_3G=$WITH_NTFS_3G_DEFAULT])
126 AC_MSG_RESULT([$WITH_NTFS_3G])
128 if test "$WITH_NTFS_3G" = "yes"; then
129 PKG_CHECK_MODULES([LIBNTFS_3G], [libntfs-3g >= 2011.4.12], [],
130 [AC_MSG_ERROR([Cannot find libntfs-3g version 2011-4-12 or
131 later! Without libntfs-3g, wimlib cannot include support for
132 capturing or applying a WIM image directly from/to an unmounted
133 NTFS volume while preserving NTFS-specific data such as
134 security descriptors and named data streams. Either install
135 libntfs-3g, or configure --without-ntfs-3g to disable this
137 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libntfs-3g"
138 AC_DEFINE([WITH_NTFS_3G], [1], [Define to 1 if using NTFS-3G support])
140 AM_CONDITIONAL([WITH_NTFS_3G], [test "$WITH_NTFS_3G" = "yes"])
142 # ------------------------ FUSE mount support ---------------------------------
144 AC_MSG_CHECKING([whether to include support for mounting WIMs])
146 [AS_HELP_STRING([--without-fuse],
147 [build without libfuse. This will disable the
148 ability to mount WIM images.])],
149 [WITH_FUSE=$withval],
150 [WITH_FUSE=$WITH_FUSE_DEFAULT])
151 AC_MSG_RESULT([$WITH_FUSE])
153 if test "$WITH_FUSE" = "yes"; then
155 PKG_CHECK_MODULES([LIBFUSE], [fuse], [],
156 [AC_MSG_ERROR([Cannot find libfuse!
157 Without libfuse, wimlib cannot include support for mounting WIM
158 images. Either install libfuse, or configure --without-fuse to
159 disable this feature.])])
160 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES fuse"
161 AC_DEFINE([WITH_FUSE], [1], [Define to 1 if using FUSE support])
163 AC_CHECK_LIB([rt], [mq_open], [],
164 [AC_MSG_ERROR([Cannot find librt (the POSIX.1b Realtime
165 Extensions Library)! wimlib needs this for the POSIX message queue
166 functions, which are used in the code for mounting WIM images. Recent
167 versions of glibc include this library. Either install this library, or
168 configure --without-fuse to disable support for mounting WIM images.])])
170 PKGCONFIG_PRIVATE_LIBS="$PKGCONFIG_PRIVATE_LIBS -lrt"
171 AC_SUBST([LIBRT_LIBS], [-lrt])
173 AM_CONDITIONAL([WITH_FUSE], [test "$WITH_FUSE" = "yes"])
175 # ------------------------ SHA-1 implementation ---------------------------------
177 AC_MSG_CHECKING([whether to use SSSE3-accelerated SHA-1])
178 AC_ARG_ENABLE([ssse3-sha1],
179 [AS_HELP_STRING([--enable-ssse3-sha1],
180 [Include SSSE3-accelerated SHA-1 implementation by
181 Intel. This implies --without-libcrypto.])],
182 [ENABLE_SSSE3_SHA1=$enableval],
183 [ENABLE_SSSE3_SHA1=no])
184 AC_MSG_RESULT([$ENABLE_SSSE3_SHA1])
186 if test "$ENABLE_SSSE3_SHA1" = "yes" ; then
187 AC_DEFINE([ENABLE_SSSE3_SHA1], [1],
188 [Define to 1 if using SSSE3 implementation of SHA-1])
190 NASM_SYMBOL_PREFIX=""
191 NASM_PLATFORM_FLAGS=""
192 if test "$WINDOWS_NATIVE_BUILD" = "yes"; then
193 NASM_PLATFORM_FLAGS="-DWIN_ABI"
196 darwin* | rhapsody* | nextstep* | openstep* | macos*)
197 NASM_SYMBOL_PREFIX="_"
200 AC_SUBST([NASM_PLATFORM_FLAGS], [$NASM_PLATFORM_FLAGS])
201 AC_SUBST([NASM_SYMBOL_PREFIX], [$NASM_SYMBOL_PREFIX])
203 AC_MSG_CHECKING([whether to use SHA-1 implementation from system libcrypto])
204 AC_ARG_WITH([libcrypto],
205 [AS_HELP_STRING([--without-libcrypto],
206 [build in the SHA-1 algorithm, rather than
207 use external libcrypto from OpenSSL
208 (default is autodetect)])],
209 [WITH_LIBCRYPTO=$withval],
210 [WITH_LIBCRYPTO=auto])
211 AC_MSG_RESULT([$WITH_LIBCRYPTO])
212 if test "$WITH_LIBCRYPTO" != "no"; then
213 PKG_CHECK_MODULES([LIBCRYPTO], [libcrypto], [
214 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libcrypto"
215 AC_DEFINE([WITH_LIBCRYPTO], [1],
216 [Define to 1 if using libcrypto SHA-1])
217 ], [AC_MSG_WARN([Cannot find libcrypto: using stand-alone SHA-1 code instead])])
220 AM_CONDITIONAL([ENABLE_SSSE3_SHA1], [test "$ENABLE_SSSE3_SHA1" = "yes"])
222 # ----------------------------- Other options ---------------------------------
224 AC_MSG_CHECKING([whether to include error messages])
225 AC_ARG_ENABLE([error_messages],
226 AS_HELP_STRING([--disable-error-messages], [do not compile in error messsages]),
227 [ENABLE_ERROR_MESSAGES=$enableval],
228 [ENABLE_ERROR_MESSAGES=yes])
229 AC_MSG_RESULT([$ENABLE_ERROR_MESSAGES])
230 if test "$ENABLE_ERROR_MESSAGES" = "yes"; then
231 AC_DEFINE([ENABLE_ERROR_MESSAGES], [1], [Define to 1 if including error messages])
234 AC_MSG_CHECKING([whether to include assertions])
235 AC_ARG_ENABLE([assertions],
236 AS_HELP_STRING([--disable-assertions], [do not include assertions]),
237 [ENABLE_ASSERTIONS=$enableval],
238 [ENABLE_ASSERTIONS=yes])
239 AC_MSG_RESULT([$ENABLE_ASSERTIONS])
240 if test "$ENABLE_ASSERTIONS" = "yes"; then
241 AC_DEFINE([ENABLE_ASSERTIONS], [1], [Define to 1 if including assertions])
244 AC_MSG_CHECKING([whether to include support for multi-threaded compression])
245 AC_ARG_ENABLE([multithreaded-compression],
246 AS_HELP_STRING([--disable-multithreaded-compression],
247 [disable support for multithreaded compression]),
248 [ENABLE_MULTITHREADED_COMPRESSION=$enableval],
249 [ENABLE_MULTITHREADED_COMPRESSION=yes])
250 AC_MSG_RESULT([$ENABLE_MULTITHREADED_COMPRESSION])
251 if test "$ENABLE_MULTITHREADED_COMPRESSION" = "yes"; then
252 AC_DEFINE([ENABLE_MULTITHREADED_COMPRESSION], [1],
253 [Define to 1 to support multithreaded compression])
256 AC_ARG_WITH(pkgconfigdir,
257 [ --with-pkgconfigdir=DIR pkgconfig file in DIR @<:@LIBDIR/pkgconfig@:>@],
258 [pkgconfigdir=$withval],
259 [pkgconfigdir='${libdir}/pkgconfig'])
260 AC_SUBST(pkgconfigdir)
262 AC_MSG_CHECKING([whether to enable supporting code for tests])
263 AC_ARG_ENABLE([test-support],
264 [AS_HELP_STRING([--enable-test-support],
265 [Enable supporting code for tests (developers only)])],
266 [ENABLE_TEST_SUPPORT=$enableval],
267 [ENABLE_TEST_SUPPORT=no])
268 AC_MSG_RESULT([$ENABLE_TEST_SUPPORT])
269 if test "$ENABLE_TEST_SUPPORT" = "yes" ; then
270 AC_DEFINE([ENABLE_TEST_SUPPORT], [1],
271 [Define to 1 to enable supporting code for tests])
273 AM_CONDITIONAL([ENABLE_TEST_SUPPORT], [test "$ENABLE_TEST_SUPPORT" = "yes"])
275 ###############################################################################
277 AC_SUBST([PKGCONFIG_PRIVATE_REQUIRES], [$PKGCONFIG_PRIVATE_REQUIRES])
278 AC_SUBST([PKGCONFIG_PRIVATE_LIBS], [$PKGCONFIG_PRIVATE_LIBS])