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