Improve random number generation
[wimlib] / configure.ac
1 ###############################################################################
2
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])
8 AM_SILENT_RULES([yes])
9 AC_C_BIGENDIAN
10 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
11 LT_INIT
12
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])
16
17 PKGCONFIG_PRIVATE_REQUIRES=""
18 PKGCONFIG_PRIVATE_LIBS=""
19
20 ###############################################################################
21 #                         General platform features                           #
22 ###############################################################################
23
24 AC_PROG_CC
25 AM_PROG_CC_C_O
26 AC_CANONICAL_HOST
27
28 WINDOWS_NATIVE_BUILD="no"
29 PLATFORM_CPPFLAGS=""
30 PLATFORM_CFLAGS="-fvisibility=hidden"
31 PLATFORM_LDFLAGS=""
32
33 case "$host_os" in
34 mingw*)
35         # Native Windows
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"
42         ;;
43 linux*)
44         # Linux
45         WITH_NTFS_3G_DEFAULT="yes"
46         WITH_FUSE_DEFAULT="yes"
47         ;;
48 *)
49         # Other UNIX
50         WITH_NTFS_3G_DEFAULT="yes"
51         WITH_FUSE_DEFAULT="no"
52         ;;
53 esac
54
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"])
59
60 # Useful functions which we can do without.
61 AC_CHECK_FUNCS([futimens utimensat flock mempcpy        \
62                 openat fstatat readlinkat fdopendir posix_fallocate])
63
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              \
67                   byteswap.h            \
68                   endian.h              \
69                   errno.h               \
70                   glob.h                \
71                   machine/endian.h      \
72                   stdarg.h              \
73                   stddef.h              \
74                   stdlib.h              \
75                   sys/byteorder.h       \
76                   sys/endian.h          \
77                   sys/file.h            \
78                   sys/syscall.h         \
79                   sys/sysctl.h          \
80                   sys/times.h           \
81                   sys/xattr.h           \
82                   time.h                \
83                   utime.h])
84
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
90                             timestamps])],
91                 [],
92                 [#include <sys/stat.h>])
93
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()])],
98               [],
99               [#include <sys/syscall.h>])
100
101 ###############################################################################
102 #                            Required libraries                               #
103 ###############################################################################
104
105 # ------------------------------ pthreads -------------------------------------
106 AX_PTHREAD([], [AC_MSG_ERROR(["cannot find pthreads library"])])
107
108 # ------------------------------ libxml2 --------------------------------------
109 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
110 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libxml-2.0"
111
112 ###############################################################################
113 #                         Configuration options                               #
114 ###############################################################################
115
116 # ------------------------- ntfs-3g support -----------------------------------
117
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])
127
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
136                  feature.])])
137         PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libntfs-3g"
138         AC_DEFINE([WITH_NTFS_3G], [1], [Define to 1 if using NTFS-3G support])
139 fi
140 AM_CONDITIONAL([WITH_NTFS_3G], [test "$WITH_NTFS_3G" = "yes"])
141
142 # ------------------------ FUSE mount support ---------------------------------
143
144 AC_MSG_CHECKING([whether to include support for mounting WIMs])
145 AC_ARG_WITH([fuse],
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])
152
153 if test "$WITH_FUSE" = "yes"; then
154
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])
162
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.])])
169
170         PKGCONFIG_PRIVATE_LIBS="$PKGCONFIG_PRIVATE_LIBS -lrt"
171         AC_SUBST([LIBRT_LIBS], [-lrt])
172 fi
173 AM_CONDITIONAL([WITH_FUSE], [test "$WITH_FUSE" = "yes"])
174
175 # ------------------------ SHA-1 implementation ---------------------------------
176
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])
185
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])
189         AC_PROG_NASM
190         NASM_SYMBOL_PREFIX=""
191         NASM_PLATFORM_FLAGS=""
192         if test "$WINDOWS_NATIVE_BUILD" = "yes"; then
193                 NASM_PLATFORM_FLAGS="-DWIN_ABI"
194         fi
195         case "$host_os" in
196         darwin* | rhapsody* | nextstep* | openstep* | macos*)
197                 NASM_SYMBOL_PREFIX="_"
198                 ;;
199         esac
200         AC_SUBST([NASM_PLATFORM_FLAGS], [$NASM_PLATFORM_FLAGS])
201         AC_SUBST([NASM_SYMBOL_PREFIX], [$NASM_SYMBOL_PREFIX])
202 else
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])])
218         fi
219 fi
220 AM_CONDITIONAL([ENABLE_SSSE3_SHA1], [test "$ENABLE_SSSE3_SHA1" = "yes"])
221
222 # ----------------------------- Other options ---------------------------------
223
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])
232 fi
233
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])
242 fi
243
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])
254 fi
255
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)
261
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])
272 fi
273 AM_CONDITIONAL([ENABLE_TEST_SUPPORT], [test "$ENABLE_TEST_SUPPORT" = "yes"])
274
275 ###############################################################################
276
277 AC_SUBST([PKGCONFIG_PRIVATE_REQUIRES], [$PKGCONFIG_PRIVATE_REQUIRES])
278 AC_SUBST([PKGCONFIG_PRIVATE_LIBS], [$PKGCONFIG_PRIVATE_LIBS])
279 AC_OUTPUT