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