1 ###############################################################################
3 AC_INIT([wimlib], m4_esyscmd_s([tools/get-version-number]),
4 [https://wimlib.net/forums/])
5 AC_CONFIG_SRCDIR([src/wim.c])
6 AC_CONFIG_MACRO_DIR([m4])
7 AC_CONFIG_AUX_DIR([build-aux])
8 AM_INIT_AUTOMAKE([-Wall -Werror subdir-objects foreign])
11 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
14 AC_CONFIG_HEADERS([config.h])
15 AC_CONFIG_FILES([Makefile] [doc/Doxyfile] [wimlib.pc])
16 AC_CONFIG_FILES([programs/mkwinpeimg], [chmod +x programs/mkwinpeimg])
18 PKGCONFIG_PRIVATE_REQUIRES=""
19 PKGCONFIG_PRIVATE_LIBS=""
21 ###############################################################################
22 # General platform features #
23 ###############################################################################
29 WINDOWS_NATIVE_BUILD="no"
31 PLATFORM_CFLAGS="-fvisibility=hidden"
37 WINDOWS_NATIVE_BUILD="yes"
38 # -D__MINGW_USE_VC2005_COMPAT: make time_t 64-bit on 32-bit Windows.
39 PLATFORM_CPPFLAGS="-D_POSIX -D_POSIX_THREAD_SAFE_FUNCTIONS -DUNICODE -D_UNICODE -D_CRT_NON_CONFORMING_SWPRINTFS -D__MINGW_USE_VC2005_COMPAT"
40 PLATFORM_CFLAGS="-municode -mno-ms-bitfields"
41 PLATFORM_LDFLAGS="-no-undefined"
42 WITH_NTFS_3G_DEFAULT="no"
43 WITH_FUSE_DEFAULT="no"
47 WITH_NTFS_3G_DEFAULT="yes"
48 WITH_FUSE_DEFAULT="yes"
52 WITH_NTFS_3G_DEFAULT="yes"
53 WITH_FUSE_DEFAULT="no"
57 AC_SUBST([PLATFORM_CPPFLAGS], [$PLATFORM_CPPFLAGS])
58 AC_SUBST([PLATFORM_CFLAGS], [$PLATFORM_CFLAGS])
59 AC_SUBST([PLATFORM_LDFLAGS], [$PLATFORM_LDFLAGS])
60 AM_CONDITIONAL([WINDOWS_NATIVE_BUILD], [test "$WINDOWS_NATIVE_BUILD" = "yes"])
62 # Useful functions which we can do without.
63 AC_CHECK_FUNCS([futimens utimensat flock mempcpy \
64 openat fstatat readlinkat fdopendir posix_fallocate \
65 llistxattr lgetxattr fsetxattr lsetxattr getopt_long_only])
67 # Header checks, most of which are only here to satisfy conditional includes
68 # made by the libntfs-3g headers.
69 AC_CHECK_HEADERS([alloca.h \
88 # Does stat() support nanosecond-precision timestamps? (This is relevant on
89 # UNIX but not on Windows.)
90 AC_CHECK_MEMBER([struct stat.st_mtim],
91 [AC_DEFINE([HAVE_STAT_NANOSECOND_PRECISION], [1],
92 [Define to 1 if stat() supports nanosecond precision
95 [#include <sys/stat.h>])
97 # Check for possible support for the Linux getrandom() system call
98 AC_CHECK_DECL([__NR_getrandom],
99 [AC_DEFINE([HAVE_NR_GETRANDOM], [1], [Define to 1 if the system
100 headers define a system call number for getrandom()])],
102 [#include <sys/syscall.h>])
104 ###############################################################################
105 # Required libraries #
106 ###############################################################################
108 # ------------------------------ pthreads -------------------------------------
109 AX_PTHREAD([], [AC_MSG_ERROR(["cannot find pthreads library"])])
111 # ------------------------------ libxml2 --------------------------------------
112 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
113 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libxml-2.0"
115 ###############################################################################
116 # Configuration options #
117 ###############################################################################
119 # ------------------------- ntfs-3g support -----------------------------------
121 AC_MSG_CHECKING([whether to include support for ntfs-3g])
122 AC_ARG_WITH([ntfs-3g],
123 [AS_HELP_STRING([--without-ntfs-3g],
124 [build without libntfs-3g. This will disable the
125 ability to capture or apply a WIM image directly
126 from/to an unmounted NTFS volume.])],
127 [WITH_NTFS_3G=$withval],
128 [WITH_NTFS_3G=$WITH_NTFS_3G_DEFAULT])
129 AC_MSG_RESULT([$WITH_NTFS_3G])
131 if test "$WITH_NTFS_3G" = "yes"; then
132 PKG_CHECK_MODULES([LIBNTFS_3G], [libntfs-3g >= 2011.4.12], [],
133 [AC_MSG_ERROR([Cannot find libntfs-3g version 2011-4-12 or
134 later! Without libntfs-3g, wimlib cannot include support for
135 capturing or applying a WIM image directly from/to an unmounted
136 NTFS volume while preserving NTFS-specific data such as
137 security descriptors and named data streams. Either install
138 libntfs-3g, or configure --without-ntfs-3g to disable this
140 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libntfs-3g"
141 AC_DEFINE([WITH_NTFS_3G], [1], [Define to 1 if using NTFS-3G support])
143 AM_CONDITIONAL([WITH_NTFS_3G], [test "$WITH_NTFS_3G" = "yes"])
145 # ------------------------ FUSE mount support ---------------------------------
147 AC_MSG_CHECKING([whether to include support for mounting WIMs])
149 [AS_HELP_STRING([--without-fuse],
150 [build without libfuse. This will disable the
151 ability to mount WIM images.])],
152 [WITH_FUSE=$withval],
153 [WITH_FUSE=$WITH_FUSE_DEFAULT])
154 AC_MSG_RESULT([$WITH_FUSE])
156 if test "$WITH_FUSE" = "yes"; then
158 PKG_CHECK_MODULES([LIBFUSE], [fuse], [],
159 [AC_MSG_ERROR([Cannot find libfuse!
160 Without libfuse, wimlib cannot include support for mounting WIM
161 images. Either install libfuse, or configure --without-fuse to
162 disable this feature.])])
163 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES fuse"
164 AC_DEFINE([WITH_FUSE], [1], [Define to 1 if using FUSE support])
166 AC_CHECK_LIB([rt], [mq_open], [],
167 [AC_MSG_ERROR([Cannot find librt (the POSIX.1b Realtime
168 Extensions Library)! wimlib needs this for the POSIX message queue
169 functions, which are used in the code for mounting WIM images. Recent
170 versions of glibc include this library. Either install this library, or
171 configure --without-fuse to disable support for mounting WIM images.])])
173 PKGCONFIG_PRIVATE_LIBS="$PKGCONFIG_PRIVATE_LIBS -lrt"
174 AC_SUBST([LIBRT_LIBS], [-lrt])
176 AM_CONDITIONAL([WITH_FUSE], [test "$WITH_FUSE" = "yes"])
178 # ----------------------------- Other options ---------------------------------
180 AC_ARG_WITH(pkgconfigdir,
181 [ --with-pkgconfigdir=DIR pkgconfig file in DIR @<:@LIBDIR/pkgconfig@:>@],
182 [pkgconfigdir=$withval],
183 [pkgconfigdir='${libdir}/pkgconfig'])
184 AC_SUBST(pkgconfigdir)
186 AC_MSG_CHECKING([whether to enable supporting code for tests])
187 AC_ARG_ENABLE([test-support],
188 [AS_HELP_STRING([--enable-test-support],
189 [Enable supporting code for tests (developers only)])],
190 [ENABLE_TEST_SUPPORT=$enableval],
191 [ENABLE_TEST_SUPPORT=no])
192 AC_MSG_RESULT([$ENABLE_TEST_SUPPORT])
193 if test "$ENABLE_TEST_SUPPORT" = "yes" ; then
194 AC_DEFINE([ENABLE_TEST_SUPPORT], [1],
195 [Define to 1 to enable supporting code for tests])
197 AM_CONDITIONAL([ENABLE_TEST_SUPPORT], [test "$ENABLE_TEST_SUPPORT" = "yes"])
199 ###############################################################################
201 AC_SUBST([PKGCONFIG_PRIVATE_REQUIRES], [$PKGCONFIG_PRIVATE_REQUIRES])
202 AC_SUBST([PKGCONFIG_PRIVATE_LIBS], [$PKGCONFIG_PRIVATE_LIBS])