1 ###############################################################################
3 AC_INIT([wimlib], m4_esyscmd_s([tools/get-version-number]),
4 [https://wimlib.net/forums/])
5 AC_CONFIG_SRCDIR([src/wim.c])
6 AC_CONFIG_MACRO_DIR([m4])
7 AC_CONFIG_AUX_DIR([build-aux])
8 AM_INIT_AUTOMAKE([-Wall -Werror subdir-objects foreign])
11 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
14 AC_CONFIG_HEADERS([config.h])
15 AC_CONFIG_FILES([Makefile] [doc/Doxyfile] [wimlib.pc])
16 AC_CONFIG_FILES([programs/mkwinpeimg], [chmod +x programs/mkwinpeimg])
18 PKGCONFIG_PRIVATE_REQUIRES=""
19 PKGCONFIG_PRIVATE_LIBS=""
21 ###############################################################################
22 # General platform features #
23 ###############################################################################
29 WINDOWS_NATIVE_BUILD="no"
31 PLATFORM_CFLAGS="-fvisibility=hidden"
37 WINDOWS_NATIVE_BUILD="yes"
38 # -D__MINGW_USE_VC2005_COMPAT: make time_t 64-bit on 32-bit Windows.
39 PLATFORM_CPPFLAGS="-D_POSIX -D_POSIX_THREAD_SAFE_FUNCTIONS -DUNICODE -D_UNICODE -D_CRT_NON_CONFORMING_SWPRINTFS -D__MINGW_USE_VC2005_COMPAT"
40 PLATFORM_CFLAGS="-municode -mno-ms-bitfields"
41 PLATFORM_LDFLAGS="-no-undefined"
42 WITH_NTFS_3G_DEFAULT="no"
43 WITH_FUSE_DEFAULT="no"
47 WITH_NTFS_3G_DEFAULT="yes"
48 WITH_FUSE_DEFAULT="yes"
52 WITH_NTFS_3G_DEFAULT="yes"
53 WITH_FUSE_DEFAULT="no"
57 AC_SUBST([PLATFORM_CPPFLAGS], [$PLATFORM_CPPFLAGS])
58 AC_SUBST([PLATFORM_CFLAGS], [$PLATFORM_CFLAGS])
59 AC_SUBST([PLATFORM_LDFLAGS], [$PLATFORM_LDFLAGS])
60 AM_CONDITIONAL([WINDOWS_NATIVE_BUILD], [test "$WINDOWS_NATIVE_BUILD" = "yes"])
62 # Useful functions which we can do without.
63 AC_CHECK_FUNCS([futimens utimensat flock mempcpy \
64 openat fstatat readlinkat fdopendir posix_fallocate \
65 llistxattr lgetxattr fsetxattr lsetxattr getopt_long_only])
67 # Header checks, most of which are only here to satisfy conditional includes
68 # made by the libntfs-3g headers.
69 AC_CHECK_HEADERS([alloca.h \
88 # Does stat() support nanosecond-precision timestamps? (This is relevant on
89 # UNIX but not on Windows.)
90 AC_CHECK_MEMBER([struct stat.st_mtim],
91 [AC_DEFINE([HAVE_STAT_NANOSECOND_PRECISION], [1],
92 [Define to 1 if stat() supports nanosecond precision
95 [#include <sys/stat.h>])
97 # Check for possible support for the Linux getrandom() system call
98 AC_CHECK_DECL([__NR_getrandom],
99 [AC_DEFINE([HAVE_NR_GETRANDOM], [1], [Define to 1 if the system
100 headers define a system call number for getrandom()])],
102 [#include <sys/syscall.h>])
104 ###############################################################################
105 # Required libraries #
106 ###############################################################################
108 # ------------------------------ pthreads -------------------------------------
109 AX_PTHREAD([], [AC_MSG_ERROR(["cannot find pthreads library"])])
111 # ------------------------------ libxml2 --------------------------------------
112 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
113 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libxml-2.0"
115 ###############################################################################
116 # Configuration options #
117 ###############################################################################
119 # ------------------------- ntfs-3g support -----------------------------------
121 AC_MSG_CHECKING([whether to include support for ntfs-3g])
122 AC_ARG_WITH([ntfs-3g],
123 [AS_HELP_STRING([--without-ntfs-3g],
124 [build without libntfs-3g. This will disable the
125 ability to capture or apply a WIM image directly
126 from/to an unmounted NTFS volume.])],
127 [WITH_NTFS_3G=$withval],
128 [WITH_NTFS_3G=$WITH_NTFS_3G_DEFAULT])
129 AC_MSG_RESULT([$WITH_NTFS_3G])
131 if test "$WITH_NTFS_3G" = "yes"; then
132 PKG_CHECK_MODULES([LIBNTFS_3G], [libntfs-3g >= 2011.4.12], [],
133 [AC_MSG_ERROR([Cannot find libntfs-3g version 2011-4-12 or
134 later! Without libntfs-3g, wimlib cannot include support for
135 capturing or applying a WIM image directly from/to an unmounted
136 NTFS volume while preserving NTFS-specific data such as
137 security descriptors and named data streams. Either install
138 libntfs-3g, or configure --without-ntfs-3g to disable this
140 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libntfs-3g"
141 AC_DEFINE([WITH_NTFS_3G], [1], [Define to 1 if using NTFS-3G support])
143 AM_CONDITIONAL([WITH_NTFS_3G], [test "$WITH_NTFS_3G" = "yes"])
145 # ------------------------ FUSE mount support ---------------------------------
147 AC_MSG_CHECKING([whether to include support for mounting WIMs])
149 [AS_HELP_STRING([--without-fuse],
150 [build without libfuse. This will disable the
151 ability to mount WIM images.])],
152 [WITH_FUSE=$withval],
153 [WITH_FUSE=$WITH_FUSE_DEFAULT])
154 AC_MSG_RESULT([$WITH_FUSE])
156 if test "$WITH_FUSE" = "yes"; then
158 PKG_CHECK_MODULES([LIBFUSE], [fuse], [],
159 [AC_MSG_ERROR([Cannot find libfuse!
160 Without libfuse, wimlib cannot include support for mounting WIM
161 images. Either install libfuse, or configure --without-fuse to
162 disable this feature.])])
163 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES fuse"
164 AC_DEFINE([WITH_FUSE], [1], [Define to 1 if using FUSE support])
166 AC_CHECK_LIB([rt], [mq_open], [],
167 [AC_MSG_ERROR([Cannot find librt (the POSIX.1b Realtime
168 Extensions Library)! wimlib needs this for the POSIX message queue
169 functions, which are used in the code for mounting WIM images. Recent
170 versions of glibc include this library. Either install this library, or
171 configure --without-fuse to disable support for mounting WIM images.])])
173 PKGCONFIG_PRIVATE_LIBS="$PKGCONFIG_PRIVATE_LIBS -lrt"
174 AC_SUBST([LIBRT_LIBS], [-lrt])
176 AM_CONDITIONAL([WITH_FUSE], [test "$WITH_FUSE" = "yes"])
178 # ------------------------ SHA-1 implementation ---------------------------------
180 AC_MSG_CHECKING([whether to use SSSE3-accelerated SHA-1])
181 AC_ARG_ENABLE([ssse3-sha1],
182 [AS_HELP_STRING([--enable-ssse3-sha1],
183 [Include SSSE3-accelerated SHA-1 implementation by
184 Intel. This implies --without-libcrypto.])],
185 [ENABLE_SSSE3_SHA1=$enableval],
186 [ENABLE_SSSE3_SHA1=no])
187 AC_MSG_RESULT([$ENABLE_SSSE3_SHA1])
189 if test "$ENABLE_SSSE3_SHA1" = "yes" ; then
190 AC_DEFINE([ENABLE_SSSE3_SHA1], [1],
191 [Define to 1 if using SSSE3 implementation of SHA-1])
193 NASM_SYMBOL_PREFIX=""
194 NASM_PLATFORM_FLAGS=""
195 if test "$WINDOWS_NATIVE_BUILD" = "yes"; then
196 NASM_PLATFORM_FLAGS="-DWIN_ABI"
199 darwin* | rhapsody* | nextstep* | openstep* | macos*)
200 NASM_SYMBOL_PREFIX="_"
203 AC_SUBST([NASM_PLATFORM_FLAGS], [$NASM_PLATFORM_FLAGS])
204 AC_SUBST([NASM_SYMBOL_PREFIX], [$NASM_SYMBOL_PREFIX])
206 AC_MSG_CHECKING([whether to use SHA-1 implementation from system libcrypto])
207 AC_ARG_WITH([libcrypto],
208 [AS_HELP_STRING([--without-libcrypto],
209 [build in the SHA-1 algorithm, rather than
210 use external libcrypto from OpenSSL
211 (default is autodetect)])],
212 [WITH_LIBCRYPTO=$withval],
213 [WITH_LIBCRYPTO=auto])
214 AC_MSG_RESULT([$WITH_LIBCRYPTO])
215 if test "$WITH_LIBCRYPTO" != "no"; then
216 PKG_CHECK_MODULES([LIBCRYPTO], [libcrypto], [
217 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libcrypto"
218 AC_DEFINE([WITH_LIBCRYPTO], [1],
219 [Define to 1 if using libcrypto SHA-1])
220 ], [AC_MSG_WARN([Cannot find libcrypto: using stand-alone SHA-1 code instead])])
223 AM_CONDITIONAL([ENABLE_SSSE3_SHA1], [test "$ENABLE_SSSE3_SHA1" = "yes"])
225 # ----------------------------- Other options ---------------------------------
227 AC_ARG_WITH(pkgconfigdir,
228 [ --with-pkgconfigdir=DIR pkgconfig file in DIR @<:@LIBDIR/pkgconfig@:>@],
229 [pkgconfigdir=$withval],
230 [pkgconfigdir='${libdir}/pkgconfig'])
231 AC_SUBST(pkgconfigdir)
233 AC_MSG_CHECKING([whether to enable supporting code for tests])
234 AC_ARG_ENABLE([test-support],
235 [AS_HELP_STRING([--enable-test-support],
236 [Enable supporting code for tests (developers only)])],
237 [ENABLE_TEST_SUPPORT=$enableval],
238 [ENABLE_TEST_SUPPORT=no])
239 AC_MSG_RESULT([$ENABLE_TEST_SUPPORT])
240 if test "$ENABLE_TEST_SUPPORT" = "yes" ; then
241 AC_DEFINE([ENABLE_TEST_SUPPORT], [1],
242 [Define to 1 to enable supporting code for tests])
244 AM_CONDITIONAL([ENABLE_TEST_SUPPORT], [test "$ENABLE_TEST_SUPPORT" = "yes"])
246 ###############################################################################
248 AC_SUBST([PKGCONFIG_PRIVATE_REQUIRES], [$PKGCONFIG_PRIVATE_REQUIRES])
249 AC_SUBST([PKGCONFIG_PRIVATE_LIBS], [$PKGCONFIG_PRIVATE_LIBS])