v1.7.1
[wimlib] / configure.ac
1 AC_INIT([wimlib], [1.7.1], [ebiggers3@gmail.com])
2 AC_CONFIG_SRCDIR([src/wim.c])
3 AC_CONFIG_MACRO_DIR([m4])
4 AC_CONFIG_AUX_DIR([build-aux])
5 AM_INIT_AUTOMAKE([-Wall -Werror subdir-objects foreign])
6 AC_C_BIGENDIAN
7 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
8 LT_INIT
9
10 PKGCONFIG_PRIVATE_REQUIRES=""
11 PKGCONFIG_PRIVATE_LIBS=""
12
13 AC_ARG_WITH(imagex-progname,
14             [AS_HELP_STRING([--with-imagex-progname=NAME],
15                             [Set the name of installed ImageX program (default: wimlib-imagex)])],
16             [IMAGEX_PROGNAME=$withval],
17             [IMAGEX_PROGNAME="wimlib-imagex"])
18
19 AC_SUBST([IMAGEX_PROGNAME], [$IMAGEX_PROGNAME])
20 AC_DEFINE_UNQUOTED([IMAGEX_PROGNAME], ["$IMAGEX_PROGNAME"],
21                    [Binary name for the implementation of ImageX distributed with wimlib])
22
23 AC_CONFIG_HEADERS([config.h])
24 AC_CONFIG_FILES([Makefile]
25                 [doc/Doxyfile]
26                 [wimlib.pc]
27                 [doc/man1/"$IMAGEX_PROGNAME".1:doc/man1/imagex.1.in]
28                 [doc/man1/"$IMAGEX_PROGNAME"-append.1:doc/man1/imagex-append.1.in]
29                 [doc/man1/"$IMAGEX_PROGNAME"-apply.1:doc/man1/imagex-apply.1.in]
30                 [doc/man1/"$IMAGEX_PROGNAME"-capture.1:doc/man1/imagex-capture.1.in]
31                 [doc/man1/"$IMAGEX_PROGNAME"-delete.1:doc/man1/imagex-delete.1.in]
32                 [doc/man1/"$IMAGEX_PROGNAME"-dir.1:doc/man1/imagex-dir.1.in]
33                 [doc/man1/"$IMAGEX_PROGNAME"-export.1:doc/man1/imagex-export.1.in]
34                 [doc/man1/"$IMAGEX_PROGNAME"-extract.1:doc/man1/imagex-extract.1.in]
35                 [doc/man1/"$IMAGEX_PROGNAME"-info.1:doc/man1/imagex-info.1.in]
36                 [doc/man1/"$IMAGEX_PROGNAME"-join.1:doc/man1/imagex-join.1.in]
37                 [doc/man1/"$IMAGEX_PROGNAME"-mount.1:doc/man1/imagex-mount.1.in]
38                 [doc/man1/"$IMAGEX_PROGNAME"-mountrw.1:doc/man1/imagex-mountrw.1.in]
39                 [doc/man1/"$IMAGEX_PROGNAME"-optimize.1:doc/man1/imagex-optimize.1.in]
40                 [doc/man1/"$IMAGEX_PROGNAME"-split.1:doc/man1/imagex-split.1.in]
41                 [doc/man1/"$IMAGEX_PROGNAME"-unmount.1:doc/man1/imagex-unmount.1.in]
42                 [doc/man1/"$IMAGEX_PROGNAME"-update.1:doc/man1/imagex-update.1.in]
43                 [doc/man1/"$IMAGEX_PROGNAME"-verify.1:doc/man1/imagex-verify.1.in]
44                 [doc/man1/mkwinpeimg.1])
45
46 AC_CONFIG_FILES([programs/mkwinpeimg], [chmod +x programs/mkwinpeimg])
47
48 AC_PROG_CC
49 AM_PROG_CC_C_O
50 AC_CANONICAL_HOST
51
52 AC_CHECK_FUNCS([futimens utimensat utime flock mempcpy  \
53                 openat fstatat readlinkat fdopendir])
54
55 # Note: some of the following header checks are only to define the appropriate
56 # HAVE_*_H macro so that the NTFS-3g headers don't get confused and try to skip
57 # including certain headers.
58 AC_CHECK_HEADERS([alloca.h              \
59                   byteswap.h            \
60                   endian.h              \
61                   errno.h               \
62                   glob.h                \
63                   machine/endian.h      \
64                   stdarg.h              \
65                   stddef.h              \
66                   stdlib.h              \
67                   sys/byteorder.h       \
68                   sys/endian.h          \
69                   sys/file.h            \
70                   sys/param.h           \
71                   sys/sysctl.h          \
72                   sys/times.h           \
73                   time.h                \
74                   utime.h])
75
76 AC_CHECK_MEMBER([struct stat.st_mtim],
77                 [AC_DEFINE([HAVE_STAT_NANOSECOND_PRECISION], [1],
78                           [Define to 1 if nanosecond precision timestamps are
79                            supported])],
80                 [],
81                 [[#include <sys/stat.h>]])
82
83
84 AC_ARG_WITH(pkgconfigdir,
85             [  --with-pkgconfigdir=DIR      pkgconfig file in DIR @<:@LIBDIR/pkgconfig@:>@],
86             [pkgconfigdir=$withval],
87             [pkgconfigdir='${libdir}/pkgconfig'])
88 AC_SUBST(pkgconfigdir)
89
90 AC_CHECK_LIB([xml2], [xmlParseFile], [have_libxml=true],
91              [AC_MSG_ERROR(["cannot find libxml2"])])
92 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
93 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libxml-2.0"
94
95 AC_MSG_CHECKING([whether to include debugging messages])
96 AC_ARG_ENABLE([debug],
97         AS_HELP_STRING([--enable-debug], [include lots of debugging messages]),
98         [ENABLE_DEBUG=$enableval],
99         [ENABLE_DEBUG=no]
100         )
101 AC_MSG_RESULT([$ENABLE_DEBUG])
102 if test "x$ENABLE_DEBUG" = "xyes"; then
103         AC_DEFINE([ENABLE_DEBUG], [1],
104                         [Define to 1 if including lots of debug messages.])
105 fi
106
107 AC_MSG_CHECKING([whether to include error messages])
108 AC_ARG_ENABLE([error_messages],
109         AS_HELP_STRING([--disable-error-messages],
110                         [do not compile in error messsages]),
111         [ENABLE_ERROR_MESSAGES=$enableval],
112         [ENABLE_ERROR_MESSAGES=yes]
113         )
114 AC_MSG_RESULT([$ENABLE_ERROR_MESSAGES])
115 if test "x$ENABLE_ERROR_MESSAGES" = "xyes"; then
116         AC_DEFINE([ENABLE_ERROR_MESSAGES], [1],
117                         [Define to 1 if including error messages])
118 fi
119
120 AC_MSG_CHECKING([whether to include assertions])
121 AC_ARG_ENABLE([assertions],
122         AS_HELP_STRING([--disable-assertions], [do not include assertions]),
123         [ENABLE_ASSERTIONS=$enableval],
124         [ENABLE_ASSERTIONS=yes]
125         )
126 AC_MSG_RESULT([$ENABLE_ASSERTIONS])
127 if test "x$ENABLE_ASSERTIONS" = "xyes"; then
128         AC_DEFINE([ENABLE_ASSERTIONS], [1], [Define to 1 if including assertions.])
129 fi
130
131 AC_MSG_CHECKING([whether to include more assertions])
132 AC_ARG_ENABLE([more-assertions],
133         AS_HELP_STRING([--enable-more-assertions], [include even more assertions]),
134         [ENABLE_MORE_ASSERTIONS=$enableval],
135         [ENABLE_MORE_ASSERTIONS=no]
136         )
137 AC_MSG_RESULT([$ENABLE_MORE_ASSERTIONS])
138 if test "x$ENABLE_MORE_ASSERTIONS" = "xyes"; then
139         AC_DEFINE([ENABLE_MORE_ASSERTIONS], [1], [Define to 1 if including more assertions.])
140 fi
141
142
143 AC_MSG_CHECKING([whether to include compression verification])
144 AC_ARG_ENABLE([verify_compression],
145               AS_HELP_STRING([--enable-verify-compression], [always
146                                 check if blocks we compress can be correctly
147                                 decompressed]),
148         [ENABLE_VERIFY_COMPRESSION=$enableval],
149         [ENABLE_VERIFY_COMPRESSION=no]
150         )
151 AC_MSG_RESULT([$ENABLE_VERIFY_COMPRESSION])
152 if test "x$ENABLE_VERIFY_COMPRESSION" = "xyes"; then
153         AC_DEFINE([ENABLE_VERIFY_COMPRESSION], [1], [Define to 1 to verify
154                    compressed data])
155 fi
156
157 AC_MSG_CHECKING([whether to include support for multi-threaded compression])
158 AC_ARG_ENABLE([multithreaded-compression],
159         AS_HELP_STRING([--disable-multithreaded-compression],
160                         [do not compile in the code for multi-threaded compression]),
161         [ENABLE_MULTITHREADED_COMPRESSION=$enableval],
162         [ENABLE_MULTITHREADED_COMPRESSION=yes]
163         )
164 AC_MSG_RESULT([$ENABLE_MULTITHREADED_COMPRESSION])
165 if test "x$ENABLE_MULTITHREADED_COMPRESSION" = "xyes"; then
166         AC_DEFINE([ENABLE_MULTITHREADED_COMPRESSION], [1],
167                         [Define to 1 if including support for multithreaded
168                          compression])
169 fi
170
171 PTHREAD_LDADD="-lpthread"
172 AC_SUBST([PTHREAD_LDADD], [$PTHREAD_LDADD])
173
174 WITH_NTFS_3G_DEFAULT="yes"
175 WITH_FUSE_DEFAULT="yes"
176 WINDOWS_NATIVE_BUILD="no"
177 VISIBILITY_CFLAGS="-fvisibility=hidden"
178 WINDOWS_CFLAGS=""
179 WINDOWS_CPPFLAGS=""
180 WINDOWS_LDFLAGS=""
181 WINDOWS_LDADD=""
182
183 case "$host_os" in
184         mingw*)
185                 # Native Windows
186                 WITH_NTFS_3G_DEFAULT="no"
187                 WITH_FUSE_DEFAULT="no"
188                 WINDOWS_NATIVE_BUILD="yes"
189                 VISIBILITY_CFLAGS=""
190                 WINDOWS_CFLAGS="-municode"
191                 WINDOWS_CPPFLAGS="-D_POSIX -DUNICODE -D_UNICODE -D_CRT_NON_CONFORMING_SWPRINTFS"
192                 WINDOWS_LDFLAGS="-no-undefined"
193                 WINDOWS_LDADD="-lshlwapi"
194                 ;;
195         *)
196                 # UNIX / other
197                 ;;
198 esac
199
200 AC_SUBST([VISIBILITY_CFLAGS], [$VISIBILITY_CFLAGS])
201 AC_SUBST([WINDOWS_LDFLAGS], [$WINDOWS_LDFLAGS])
202 AC_SUBST([WINDOWS_LDADD], [$WINDOWS_LDADD])
203 AC_SUBST([WINDOWS_CPPFLAGS], [$WINDOWS_CPPFLAGS])
204 AC_SUBST([WINDOWS_CFLAGS], [$WINDOWS_CFLAGS])
205 AM_CONDITIONAL([WINDOWS_NATIVE_BUILD], [test "x$WINDOWS_NATIVE_BUILD" = "xyes"])
206
207 AC_MSG_CHECKING([whether to include support for ntfs-3g])
208 AC_ARG_WITH([ntfs-3g],
209               AS_HELP_STRING([--without-ntfs-3g], [build without NTFS-3g.
210                               On UNIX, this will disable the ability to use NTFS-specific
211                               information when capturing or applying WIMs to a
212                               NTFS filesystem.]),
213         [WITH_NTFS_3G=$withval],
214         [WITH_NTFS_3G=$WITH_NTFS_3G_DEFAULT]
215         )
216 AC_MSG_RESULT([$WITH_NTFS_3G])
217 if test "x$WITH_NTFS_3G" = "xyes"; then
218         AC_DEFINE([WITH_NTFS_3G], [1], [On UNIX, define to 1 to enable support
219                    for NTFS-specific information])
220
221         dnl This effectively checks for NTFS-3g 2011.4.12 or later
222         AC_CHECK_LIB([ntfs-3g], [ntfs_xattr_system_setxattr], [],
223                         [AC_MSG_ERROR([Cannot find libntfs-3g version 2011-4-12
224         or later. Without libntfs-3g, wimlib cannot include support for
225         capturing and applying WIMs on NTFS filesystems while preserving
226         NTFS-specific data such as security descriptors and alternate data
227         streams.  You should either install libntfs-3g, or configure with
228         --without-ntfs-3g to disable support for these NTFS-specific
229         features.])])
230
231         PKG_CHECK_MODULES([LIBNTFS_3G], [libntfs-3g])
232         PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libntfs-3g"
233
234         dnl This checks for an NTFS-3g interface that was changed in the
235         dnl 2013.1.13 release
236         AC_CHECK_DECL([NTFS_MNT_RDONLY],
237                       [AC_DEFINE([HAVE_NTFS_MNT_RDONLY],
238                                  [1],
239                                  [Define to 1 if ntfs_mount() takes the flag NTFS_MNT_RDONLY])],
240                       [],
241                       [#include <ntfs-3g/volume.h>])
242 fi
243 AM_CONDITIONAL([WITH_NTFS_3G], [test "x$WITH_NTFS_3G" = "xyes"])
244
245 AM_ICONV
246 if test "x$am_cv_func_iconv" != "xyes"; then
247         AC_MSG_ERROR([Cannot find the iconv() function.
248         iconv() is used to convert between encodings of WIM filenames and XML data.
249         wimlib cannot be compiled without it.  iconv() is available in the latest
250         version of glibc and sometimes in other libraries.])
251 fi
252
253 AC_MSG_CHECKING([whether to include support for mounting WIMs])
254 AC_ARG_WITH([fuse],
255                 AS_HELP_STRING([--without-fuse], [build without libfuse.
256                                         This will disable the ability to mount
257                                         WIM files.]),
258         [WITH_FUSE=$withval],
259         [WITH_FUSE=$WITH_FUSE_DEFAULT]
260         )
261 AC_MSG_RESULT([$WITH_FUSE])
262 if test "x$WITH_FUSE" = "xyes"; then
263         AC_DEFINE([WITH_FUSE], [1], [Define to 1 if using FUSE.])
264
265
266         AC_CHECK_LIB([fuse], [fuse_main_real], [have_fuse=true],
267                         [AC_MSG_ERROR([Cannot find libfuse.
268         Without libfuse, wimlib cannot include support for mounting WIMs.  You
269         should either install libfuse, or configure with --without-fuse to
270         disable support for mounting WIMs.])
271         ])
272         AC_CHECK_LIB([rt], [mq_open], [have_posix_mq=true],
273                      [AC_MSG_ERROR([Cannot find librt for POSIX message queue
274         functions.  Without these functions, wimlib cannot include support for
275         mounting WIMs.  You should either update your C library to a recent
276         version of glibc, or configure with --without-fuse to disable support
277         for mounting WIMs.])
278         ])
279         PKG_CHECK_MODULES([LIBFUSE], [fuse])
280         PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES fuse"
281         PKGCONFIG_PRIVATE_LIBS="$PKGCONFIG_PRIVATE_LIBS -lrt"
282         AC_SUBST([LIBRT_LIBS], [-lrt])
283 fi
284 AM_CONDITIONAL([WITH_FUSE], [test "x$WITH_FUSE" = "xyes"])
285
286 AC_MSG_CHECKING([whether to use SSSE3-accelerated SHA1 ])
287 AC_ARG_ENABLE([ssse3-sha1],
288             AS_HELP_STRING([--enable-ssse3-sha1], [use assembly language implementation
289                                 of SHA1 from Intel, accelerated with vector
290                                 instructions (SSSE3-enabled CPU required)]),
291         [ENABLE_SSSE3_SHA1=$enableval],
292         [ENABLE_SSSE3_SHA1=no]
293         )
294
295 AC_MSG_RESULT([$ENABLE_SSSE3_SHA1])
296 if test "x$ENABLE_SSSE3_SHA1" = "xyes"; then
297         AC_DEFINE([ENABLE_SSSE3_SHA1], [1],
298                         [Define to 1 if using vectorized implementation of SHA1])
299         SSSE3_SHA1_OBJ=src/sha1-ssse3.lo
300         AC_PROG_NASM
301         NASM_SYMBOL_PREFIX=""
302         NASM_WINDOWS_FLAGS=
303         if test "x$WINDOWS_NATIVE_BUILD" = "xyes"; then
304                 NASM_WINDOWS_FLAGS="-DWIN_ABI"
305         fi
306         case "$host_os" in
307                 darwin* | rhapsody* | nextstep* | openstep* | macos*)
308                         NASM_SYMBOL_PREFIX="_"
309                         ;;
310         esac
311         AC_SUBST([NASM_WINDOWS_FLAGS], $NASM_WINDOWS_FLAGS)
312         AC_SUBST([NASM_SYMBOL_PREFIX], $NASM_SYMBOL_PREFIX)
313 else
314         SSSE3_SHA1_OBJ=
315 fi
316 AC_SUBST([SSSE3_SHA1_OBJ], [$SSSE3_SHA1_OBJ])
317
318 if test "x$ENABLE_SSSE3_SHA1" = "xyes"; then
319         WITH_LIBCRYPTO=no
320 else
321         AC_ARG_WITH([libcrypto],
322             AS_HELP_STRING([--without-libcrypto], [build in the SHA1 algorithm,
323                                         rather than use external libcrypto from
324                                         OpenSSL (default is autodetect)]),
325         [WITH_LIBCRYPTO=$withval],
326         [AC_CHECK_LIB([crypto], [SHA1],
327                      [WITH_LIBCRYPTO=yes],
328                      [AC_MSG_WARN([Cannot find libcrypto: using stand-alone SHA1 code instead of OpenSSL])
329                      WITH_LIBCRYPTO=no
330                      ])])
331 fi
332 AC_MSG_CHECKING([whether to use SHA1 function from system libcrypto])
333 AC_MSG_RESULT([$WITH_LIBCRYPTO])
334
335 if test "x$WITH_LIBCRYPTO" = "xyes" -a "x$ENABLE_SSSE3_SHA1" = "xno"; then
336         AC_DEFINE([WITH_LIBCRYPTO], [1], [Define to 1 if using libcrypto SHA1])
337         PKG_CHECK_MODULES([LIBCRYPTO], [libcrypto])
338         PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libcrypto"
339 fi
340 AC_SUBST([SHA1_SOURCES], [$SHA1_SOURCES])
341
342 AC_SUBST([PKGCONFIG_PRIVATE_REQUIRES], [$PKGCONFIG_PRIVATE_REQUIRES])
343 AC_SUBST([PKGCONFIG_PRIVATE_LIBS], [$PKGCONFIG_PRIVATE_LIBS])
344
345 AC_OUTPUT