README, configure.ac: Updates regarding building wimlib
[wimlib] / configure.ac
1 AC_INIT([wimlib], [1.7.2-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/"$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 automatic 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="no"
175 WITH_FUSE_DEFAULT="no"
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                 WINDOWS_NATIVE_BUILD="yes"
187                 VISIBILITY_CFLAGS=""
188                 WINDOWS_CFLAGS="-municode"
189                 WINDOWS_CPPFLAGS="-D_POSIX -DUNICODE -D_UNICODE -D_CRT_NON_CONFORMING_SWPRINTFS"
190                 WINDOWS_LDFLAGS="-no-undefined"
191                 WINDOWS_LDADD="-lshlwapi"
192                 ;;
193         linux*)
194                 # Linux
195                 WITH_FUSE_DEFAULT="yes"
196                 WITH_NTFS_3G_DEFAULT="yes"
197                 ;;
198         *)
199                 # Other UNIX
200                 WITH_NTFS_3G_DEFAULT="yes"
201                 ;;
202 esac
203
204 AC_SUBST([VISIBILITY_CFLAGS], [$VISIBILITY_CFLAGS])
205 AC_SUBST([WINDOWS_LDFLAGS], [$WINDOWS_LDFLAGS])
206 AC_SUBST([WINDOWS_LDADD], [$WINDOWS_LDADD])
207 AC_SUBST([WINDOWS_CPPFLAGS], [$WINDOWS_CPPFLAGS])
208 AC_SUBST([WINDOWS_CFLAGS], [$WINDOWS_CFLAGS])
209 AM_CONDITIONAL([WINDOWS_NATIVE_BUILD], [test "x$WINDOWS_NATIVE_BUILD" = "xyes"])
210
211
212 AM_ICONV
213 if test "x$am_cv_func_iconv" != "xyes"; then
214         AC_MSG_ERROR([Cannot find the iconv() function.  iconv() is used to
215                       convert between encodings of WIM filenames and XML data.
216                       wimlib cannot be compiled without it.  iconv() is
217                       available in the latest version of glibc and sometimes in
218                       other libraries.])
219 fi
220
221 AC_MSG_CHECKING([whether to include support for ntfs-3g])
222 AC_ARG_WITH([ntfs-3g],
223             [AS_HELP_STRING([--without-ntfs-3g],
224                             [build without libntfs-3g.  This will disable the
225                              ability to capture or apply a WIM image directly
226                              from/to an unmounted NTFS volume.])],
227             [WITH_NTFS_3G=$withval],
228             [WITH_NTFS_3G=$WITH_NTFS_3G_DEFAULT])
229
230 AC_MSG_RESULT([$WITH_NTFS_3G])
231 if test "x$WITH_NTFS_3G" = "xyes"; then
232         AC_DEFINE([WITH_NTFS_3G], [1], [Define to 1 to enable NTFS-3g support.])
233
234         dnl This effectively checks for NTFS-3g 2011.4.12 or later
235         AC_CHECK_LIB([ntfs-3g], [ntfs_xattr_system_setxattr], [],
236                         [AC_MSG_ERROR([Cannot find libntfs-3g version 2011-4-12
237         or later!  Without libntfs-3g, wimlib cannot include support for
238         capturing or applying a WIM image directly from/to an unmounted NTFS
239         volume while preserving NTFS-specific data such as security descriptors
240         and named data streams.  Either install libntfs-3g, or configure
241         --without-ntfs-3g to disable this feature.])])
242
243         PKG_CHECK_MODULES([LIBNTFS_3G], [libntfs-3g])
244         PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libntfs-3g"
245
246         dnl This checks for an NTFS-3g interface that was changed in the
247         dnl 2013.1.13 release
248         AC_CHECK_DECL([NTFS_MNT_RDONLY],
249                       [AC_DEFINE([HAVE_NTFS_MNT_RDONLY],
250                                  [1],
251                                  [Define to 1 if ntfs_mount() takes the flag NTFS_MNT_RDONLY])],
252                       [],
253                       [#include <ntfs-3g/volume.h>])
254 fi
255 AM_CONDITIONAL([WITH_NTFS_3G], [test "x$WITH_NTFS_3G" = "xyes"])
256
257 AC_MSG_CHECKING([whether to include support for mounting WIMs])
258 AC_ARG_WITH([fuse],
259         [AS_HELP_STRING([--without-fuse],
260                         [build without libfuse.  This will disable the ability
261                          to mount WIM images.])],
262         [WITH_FUSE=$withval],
263         [WITH_FUSE=$WITH_FUSE_DEFAULT])
264
265 AC_MSG_RESULT([$WITH_FUSE])
266 if test "x$WITH_FUSE" = "xyes"; then
267         AC_DEFINE([WITH_FUSE], [1], [Define to 1 if using FUSE.])
268
269         AC_CHECK_LIB([fuse], [fuse_main_real], [],
270                         [AC_MSG_ERROR([Cannot find libfuse!
271         Without libfuse, wimlib cannot include support for mounting WIM images.
272         Either install libfuse, or configure --without-fuse to disable this
273         feature.])])
274
275         AC_CHECK_LIB([rt], [mq_open], [],
276                      [AC_MSG_ERROR([Cannot find librt (the POSIX.1b Realtime
277         Extensions Library)!  wimlib needs this for the POSIX message queue
278         functions, which are used in the code for mounting WIM images.  Recent
279         versions of glibc include this library.  Either install this library, or
280         configure --without-fuse to disable support for mounting WIM images.])])
281
282         AC_CHECK_LIB([attr], [getxattr], [],
283                      [AC_MSG_ERROR([Cannot find libattr!
284         wimlib needs this for the extended attribute functions, which are used
285         in the code for mounting WIM images.  Either install this library, or
286         configure --without-fuse to disable support for mounting WIM images.])])
287
288         PKG_CHECK_MODULES([LIBFUSE], [fuse])
289         PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES fuse"
290         PKGCONFIG_PRIVATE_LIBS="$PKGCONFIG_PRIVATE_LIBS -lrt"
291         AC_SUBST([LIBRT_LIBS], [-lrt])
292 fi
293 AM_CONDITIONAL([WITH_FUSE], [test "x$WITH_FUSE" = "xyes"])
294
295 AC_MSG_CHECKING([whether to use SSSE3-accelerated SHA-1])
296 AC_ARG_ENABLE([ssse3-sha1],
297               [AS_HELP_STRING([--enable-ssse3-sha1],
298                               [Include SSSE3-accelerated SHA-1 implementation by
299                                Intel.  This implies --without-libcrypto.])],
300               [ENABLE_SSSE3_SHA1=$enableval],
301               [ENABLE_SSSE3_SHA1=no])
302
303 AC_MSG_RESULT([$ENABLE_SSSE3_SHA1])
304 if test "x$ENABLE_SSSE3_SHA1" = "xyes"; then
305         AC_DEFINE([ENABLE_SSSE3_SHA1], [1],
306                   [Define to 1 if using SSSE3 implementation of SHA-1])
307         SSSE3_SHA1_OBJ=src/sha1-ssse3.lo
308         AC_PROG_NASM
309         NASM_SYMBOL_PREFIX=""
310         NASM_WINDOWS_FLAGS=
311         if test "x$WINDOWS_NATIVE_BUILD" = "xyes"; then
312                 NASM_WINDOWS_FLAGS="-DWIN_ABI"
313         fi
314         case "$host_os" in
315                 darwin* | rhapsody* | nextstep* | openstep* | macos*)
316                         NASM_SYMBOL_PREFIX="_"
317                         ;;
318         esac
319         AC_SUBST([NASM_WINDOWS_FLAGS], $NASM_WINDOWS_FLAGS)
320         AC_SUBST([NASM_SYMBOL_PREFIX], $NASM_SYMBOL_PREFIX)
321 else
322         SSSE3_SHA1_OBJ=
323 fi
324 AC_SUBST([SSSE3_SHA1_OBJ], [$SSSE3_SHA1_OBJ])
325
326 if test "x$ENABLE_SSSE3_SHA1" = "xyes"; then
327         WITH_LIBCRYPTO=no
328 else
329         AC_ARG_WITH([libcrypto],
330                     [AS_HELP_STRING([--without-libcrypto],
331                                     [build in the SHA-1 algorithm, rather than
332                                      use external libcrypto from OpenSSL
333                                      (default is autodetect)])],
334         [WITH_LIBCRYPTO=$withval],
335         [AC_CHECK_LIB([crypto],
336                       [SHA1],
337                       [WITH_LIBCRYPTO=yes],
338                       [AC_MSG_WARN([Cannot find libcrypto: using stand-alone
339                                     SHA-1 code instead of OpenSSL])
340                        WITH_LIBCRYPTO=no])])
341 fi
342 AC_MSG_CHECKING([whether to use SHA-1 implementation from system libcrypto])
343 AC_MSG_RESULT([$WITH_LIBCRYPTO])
344
345 if test "x$WITH_LIBCRYPTO" = "xyes" -a "x$ENABLE_SSSE3_SHA1" = "xno"; then
346         AC_DEFINE([WITH_LIBCRYPTO], [1], [Define to 1 if using libcrypto SHA-1])
347         PKG_CHECK_MODULES([LIBCRYPTO], [libcrypto])
348         PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libcrypto"
349 fi
350 AC_SUBST([SHA1_SOURCES], [$SHA1_SOURCES])
351
352 AC_SUBST([PKGCONFIG_PRIVATE_REQUIRES], [$PKGCONFIG_PRIVATE_REQUIRES])
353 AC_SUBST([PKGCONFIG_PRIVATE_LIBS], [$PKGCONFIG_PRIVATE_LIBS])
354
355 AC_OUTPUT