]> wimlib.net Git - wimlib/blob - configure.ac
Simplify check for __NR_getrandom
[wimlib] / configure.ac
1 ###############################################################################
2
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])
9 AM_SILENT_RULES([yes])
10 AC_C_BIGENDIAN
11 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
12 LT_INIT
13
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])
17
18 PKGCONFIG_PRIVATE_REQUIRES=""
19 PKGCONFIG_PRIVATE_LIBS=""
20
21 ###############################################################################
22 #                         General platform features                           #
23 ###############################################################################
24
25 AC_PROG_CC
26 AM_PROG_CC_C_O
27 AC_CANONICAL_HOST
28
29 WINDOWS_NATIVE_BUILD="no"
30 PLATFORM_CPPFLAGS=""
31 PLATFORM_CFLAGS="-fvisibility=hidden"
32 PLATFORM_LDFLAGS=""
33
34 case "$host_os" in
35 mingw*)
36         # Native Windows
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 -D_WIN32_WINNT=0x0600"
40         PLATFORM_CFLAGS="-municode -mno-ms-bitfields"
41         PLATFORM_LDFLAGS="-no-undefined"
42         WITH_NTFS_3G_DEFAULT="no"
43         WITH_FUSE_DEFAULT="no"
44         ;;
45 linux*)
46         # Linux
47         WITH_NTFS_3G_DEFAULT="yes"
48         WITH_FUSE_DEFAULT="yes"
49         ;;
50 *)
51         # Other UNIX
52         WITH_NTFS_3G_DEFAULT="yes"
53         WITH_FUSE_DEFAULT="no"
54         ;;
55 esac
56
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"])
61
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])
66
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              \
70                   byteswap.h            \
71                   endian.h              \
72                   errno.h               \
73                   glob.h                \
74                   machine/endian.h      \
75                   stdarg.h              \
76                   stddef.h              \
77                   stdlib.h              \
78                   sys/byteorder.h       \
79                   sys/endian.h          \
80                   sys/file.h            \
81                   sys/syscall.h         \
82                   sys/sysctl.h          \
83                   sys/times.h           \
84                   sys/xattr.h           \
85                   time.h                \
86                   utime.h])
87
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
93                             timestamps])],
94                 [],
95                 [#include <sys/stat.h>])
96
97 ###############################################################################
98 #                            Required libraries                               #
99 ###############################################################################
100
101 # ------------------------------ pthreads -------------------------------------
102 if test "$WINDOWS_NATIVE_BUILD" != "yes"; then
103         AX_PTHREAD([], [AC_MSG_ERROR(["cannot find pthreads library"])])
104 fi
105
106 # ------------------------------ libxml2 --------------------------------------
107 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
108 PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libxml-2.0"
109
110 ###############################################################################
111 #                         Configuration options                               #
112 ###############################################################################
113
114 # ------------------------- ntfs-3g support -----------------------------------
115
116 AC_MSG_CHECKING([whether to include support for ntfs-3g])
117 AC_ARG_WITH([ntfs-3g],
118             [AS_HELP_STRING([--without-ntfs-3g],
119                             [build without libntfs-3g.  This will disable the
120                              ability to capture or apply a WIM image directly
121                              from/to an unmounted NTFS volume.])],
122             [WITH_NTFS_3G=$withval],
123             [WITH_NTFS_3G=$WITH_NTFS_3G_DEFAULT])
124 AC_MSG_RESULT([$WITH_NTFS_3G])
125
126 if test "$WITH_NTFS_3G" = "yes"; then
127         PKG_CHECK_MODULES([LIBNTFS_3G], [libntfs-3g >= 2011.4.12], [],
128                 [AC_MSG_ERROR([Cannot find libntfs-3g version 2011-4-12 or
129                  later!  Without libntfs-3g, wimlib cannot include support for
130                  capturing or applying a WIM image directly from/to an unmounted
131                  NTFS volume while preserving NTFS-specific data such as
132                  security descriptors and named data streams.  Either install
133                  libntfs-3g, or configure --without-ntfs-3g to disable this
134                  feature.])])
135         PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES libntfs-3g"
136         AC_DEFINE([WITH_NTFS_3G], [1], [Define to 1 if using NTFS-3G support])
137 fi
138 AM_CONDITIONAL([WITH_NTFS_3G], [test "$WITH_NTFS_3G" = "yes"])
139
140 # ------------------------ FUSE mount support ---------------------------------
141
142 AC_MSG_CHECKING([whether to include support for mounting WIMs])
143 AC_ARG_WITH([fuse],
144             [AS_HELP_STRING([--without-fuse],
145                             [build without libfuse.  This will disable the
146                              ability to mount WIM images.])],
147             [WITH_FUSE=$withval],
148             [WITH_FUSE=$WITH_FUSE_DEFAULT])
149 AC_MSG_RESULT([$WITH_FUSE])
150
151 if test "$WITH_FUSE" = "yes"; then
152
153         PKG_CHECK_MODULES([LIBFUSE], [fuse], [],
154                 [AC_MSG_ERROR([Cannot find libfuse!
155                 Without libfuse, wimlib cannot include support for mounting WIM
156                 images.  Either install libfuse, or configure --without-fuse to
157                 disable this feature.])])
158         PKGCONFIG_PRIVATE_REQUIRES="$PKGCONFIG_PRIVATE_REQUIRES fuse"
159         AC_DEFINE([WITH_FUSE], [1], [Define to 1 if using FUSE support])
160
161         AC_CHECK_LIB([rt], [mq_open], [],
162                      [AC_MSG_ERROR([Cannot find librt (the POSIX.1b Realtime
163         Extensions Library)!  wimlib needs this for the POSIX message queue
164         functions, which are used in the code for mounting WIM images.  Recent
165         versions of glibc include this library.  Either install this library, or
166         configure --without-fuse to disable support for mounting WIM images.])])
167
168         PKGCONFIG_PRIVATE_LIBS="$PKGCONFIG_PRIVATE_LIBS -lrt"
169         AC_SUBST([LIBRT_LIBS], [-lrt])
170 fi
171 AM_CONDITIONAL([WITH_FUSE], [test "$WITH_FUSE" = "yes"])
172
173 # ----------------------------- Other options ---------------------------------
174
175 AC_ARG_WITH(pkgconfigdir,
176             [  --with-pkgconfigdir=DIR      pkgconfig file in DIR @<:@LIBDIR/pkgconfig@:>@],
177             [pkgconfigdir=$withval],
178             [pkgconfigdir='${libdir}/pkgconfig'])
179 AC_SUBST(pkgconfigdir)
180
181 AC_MSG_CHECKING([whether to enable supporting code for tests])
182 AC_ARG_ENABLE([test-support],
183               [AS_HELP_STRING([--enable-test-support],
184                               [Enable supporting code for tests (developers only)])],
185               [ENABLE_TEST_SUPPORT=$enableval],
186               [ENABLE_TEST_SUPPORT=no])
187 AC_MSG_RESULT([$ENABLE_TEST_SUPPORT])
188 if test "$ENABLE_TEST_SUPPORT" = "yes" ; then
189         AC_DEFINE([ENABLE_TEST_SUPPORT], [1],
190                   [Define to 1 to enable supporting code for tests])
191 fi
192 AM_CONDITIONAL([ENABLE_TEST_SUPPORT], [test "$ENABLE_TEST_SUPPORT" = "yes"])
193
194 ###############################################################################
195
196 AC_SUBST([PKGCONFIG_PRIVATE_REQUIRES], [$PKGCONFIG_PRIVATE_REQUIRES])
197 AC_SUBST([PKGCONFIG_PRIVATE_LIBS], [$PKGCONFIG_PRIVATE_LIBS])
198 AC_OUTPUT