xref: /aosp_15_r20/external/erofs-utils/configure.ac (revision 33b1fccf6a0fada2c2875d400ed01119b7676ee5)
1*33b1fccfSAndroid Build Coastguard Worker#                                               -*- Autoconf -*-
2*33b1fccfSAndroid Build Coastguard Worker# Process this file with autoconf to produce a configure script.
3*33b1fccfSAndroid Build Coastguard Worker
4*33b1fccfSAndroid Build Coastguard WorkerAC_PREREQ([2.69])
5*33b1fccfSAndroid Build Coastguard Worker
6*33b1fccfSAndroid Build Coastguard Workerm4_define([erofs_utils_version], m4_esyscmd_s([scripts/get-version-number]))
7*33b1fccfSAndroid Build Coastguard Workerm4_define([erofs_utils_date], m4_esyscmd([sed -n '2p' VERSION | tr -d '\n']))
8*33b1fccfSAndroid Build Coastguard Worker
9*33b1fccfSAndroid Build Coastguard WorkerAC_INIT([erofs-utils], [erofs_utils_version], [[email protected]])
10*33b1fccfSAndroid Build Coastguard WorkerAC_CONFIG_SRCDIR([config.h.in])
11*33b1fccfSAndroid Build Coastguard WorkerAC_CONFIG_HEADERS([config.h])
12*33b1fccfSAndroid Build Coastguard WorkerAC_CONFIG_MACRO_DIR([m4])
13*33b1fccfSAndroid Build Coastguard WorkerAC_CONFIG_AUX_DIR(config)
14*33b1fccfSAndroid Build Coastguard WorkerAM_INIT_AUTOMAKE([foreign -Wall])
15*33b1fccfSAndroid Build Coastguard Worker
16*33b1fccfSAndroid Build Coastguard Worker# Checks for programs.
17*33b1fccfSAndroid Build Coastguard WorkerAM_PROG_AR
18*33b1fccfSAndroid Build Coastguard WorkerAC_PROG_CC
19*33b1fccfSAndroid Build Coastguard WorkerAC_PROG_INSTALL
20*33b1fccfSAndroid Build Coastguard Worker
21*33b1fccfSAndroid Build Coastguard WorkerLT_INIT
22*33b1fccfSAndroid Build Coastguard Worker
23*33b1fccfSAndroid Build Coastguard Worker# Test presence of pkg-config
24*33b1fccfSAndroid Build Coastguard WorkerAC_MSG_CHECKING([pkg-config m4 macros])
25*33b1fccfSAndroid Build Coastguard Workerif test m4_ifdef([PKG_CHECK_MODULES], [yes], [no]) = "yes"; then
26*33b1fccfSAndroid Build Coastguard Worker  AC_MSG_RESULT([yes]);
27*33b1fccfSAndroid Build Coastguard Workerelse
28*33b1fccfSAndroid Build Coastguard Worker  AC_MSG_RESULT([no]);
29*33b1fccfSAndroid Build Coastguard Worker  AC_MSG_ERROR([pkg-config is required. See pkg-config.freedesktop.org])
30*33b1fccfSAndroid Build Coastguard Workerfi
31*33b1fccfSAndroid Build Coastguard Worker
32*33b1fccfSAndroid Build Coastguard Workerdnl Check if the flag is supported by compiler
33*33b1fccfSAndroid Build Coastguard Workerdnl CC_CHECK_CFLAGS_SILENT([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
34*33b1fccfSAndroid Build Coastguard WorkerAC_DEFUN([CC_CHECK_CFLAGS_SILENT], [
35*33b1fccfSAndroid Build Coastguard Worker  AC_CACHE_VAL(AS_TR_SH([cc_cv_cflags_$1]),
36*33b1fccfSAndroid Build Coastguard Worker    [ac_save_CFLAGS="$CFLAGS"
37*33b1fccfSAndroid Build Coastguard Worker     CFLAGS="$CFLAGS $1"
38*33b1fccfSAndroid Build Coastguard Worker     AC_LINK_IFELSE([AC_LANG_SOURCE([int main() { return 0; }])],
39*33b1fccfSAndroid Build Coastguard Worker       [eval "AS_TR_SH([cc_cv_cflags_$1])='yes'"],
40*33b1fccfSAndroid Build Coastguard Worker       [eval "AS_TR_SH([cc_cv_cflags_$1])='no'"])
41*33b1fccfSAndroid Build Coastguard Worker     CFLAGS="$ac_save_CFLAGS"
42*33b1fccfSAndroid Build Coastguard Worker    ])
43*33b1fccfSAndroid Build Coastguard Worker
44*33b1fccfSAndroid Build Coastguard Worker  AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes],
45*33b1fccfSAndroid Build Coastguard Worker    [$2], [$3])
46*33b1fccfSAndroid Build Coastguard Worker])
47*33b1fccfSAndroid Build Coastguard Worker
48*33b1fccfSAndroid Build Coastguard Workerdnl Check if the flag is supported by compiler (cacheable)
49*33b1fccfSAndroid Build Coastguard Workerdnl CC_CHECK_CFLAG([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
50*33b1fccfSAndroid Build Coastguard WorkerAC_DEFUN([CC_CHECK_CFLAG], [
51*33b1fccfSAndroid Build Coastguard Worker  AC_CACHE_CHECK([if $CC supports $1 flag],
52*33b1fccfSAndroid Build Coastguard Worker    AS_TR_SH([cc_cv_cflags_$1]),
53*33b1fccfSAndroid Build Coastguard Worker    CC_CHECK_CFLAGS_SILENT([$1]) dnl Don't execute actions here!
54*33b1fccfSAndroid Build Coastguard Worker  )
55*33b1fccfSAndroid Build Coastguard Worker
56*33b1fccfSAndroid Build Coastguard Worker  AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes],
57*33b1fccfSAndroid Build Coastguard Worker    [$2], [$3])
58*33b1fccfSAndroid Build Coastguard Worker])
59*33b1fccfSAndroid Build Coastguard Worker
60*33b1fccfSAndroid Build Coastguard Workerdnl CC_CHECK_CFLAGS([FLAG1 FLAG2], [action-if-found], [action-if-not])
61*33b1fccfSAndroid Build Coastguard WorkerAC_DEFUN([CC_CHECK_CFLAGS], [
62*33b1fccfSAndroid Build Coastguard Worker  for flag in $1; do
63*33b1fccfSAndroid Build Coastguard Worker    CC_CHECK_CFLAG($flag, [$2], [$3])
64*33b1fccfSAndroid Build Coastguard Worker  done
65*33b1fccfSAndroid Build Coastguard Worker])
66*33b1fccfSAndroid Build Coastguard Worker
67*33b1fccfSAndroid Build Coastguard Workerdnl EROFS_UTILS_PARSE_DIRECTORY
68*33b1fccfSAndroid Build Coastguard Workerdnl Input:  $1 = a string to a relative or absolute directory
69*33b1fccfSAndroid Build Coastguard Workerdnl Output: $2 = the variable to set with the absolute directory
70*33b1fccfSAndroid Build Coastguard WorkerAC_DEFUN([EROFS_UTILS_PARSE_DIRECTORY],
71*33b1fccfSAndroid Build Coastguard Worker[
72*33b1fccfSAndroid Build Coastguard Worker dnl Check if argument is a directory
73*33b1fccfSAndroid Build Coastguard Worker if test -d $1 ; then
74*33b1fccfSAndroid Build Coastguard Worker    dnl Get the absolute path of the directory
75*33b1fccfSAndroid Build Coastguard Worker    dnl in case of relative directory.
76*33b1fccfSAndroid Build Coastguard Worker    dnl If realpath is not a valid command,
77*33b1fccfSAndroid Build Coastguard Worker    dnl an error is produced and we keep the given path.
78*33b1fccfSAndroid Build Coastguard Worker    local_tmp=`realpath $1 2>/dev/null`
79*33b1fccfSAndroid Build Coastguard Worker    if test "$local_tmp" != "" ; then
80*33b1fccfSAndroid Build Coastguard Worker       if test -d "$local_tmp" ; then
81*33b1fccfSAndroid Build Coastguard Worker           $2="$local_tmp"
82*33b1fccfSAndroid Build Coastguard Worker       else
83*33b1fccfSAndroid Build Coastguard Worker           $2=$1
84*33b1fccfSAndroid Build Coastguard Worker       fi
85*33b1fccfSAndroid Build Coastguard Worker    else
86*33b1fccfSAndroid Build Coastguard Worker       $2=$1
87*33b1fccfSAndroid Build Coastguard Worker    fi
88*33b1fccfSAndroid Build Coastguard Worker    dnl Check for space in the directory
89*33b1fccfSAndroid Build Coastguard Worker    if test `echo $1|cut -d' ' -f1` != $1 ; then
90*33b1fccfSAndroid Build Coastguard Worker        AC_MSG_ERROR($1 directory shall not contain any space.)
91*33b1fccfSAndroid Build Coastguard Worker    fi
92*33b1fccfSAndroid Build Coastguard Worker else
93*33b1fccfSAndroid Build Coastguard Worker    AC_MSG_ERROR($1 shall be a valid directory)
94*33b1fccfSAndroid Build Coastguard Worker fi
95*33b1fccfSAndroid Build Coastguard Worker])
96*33b1fccfSAndroid Build Coastguard Worker
97*33b1fccfSAndroid Build Coastguard WorkerAC_ARG_VAR([MAX_BLOCK_SIZE], [The maximum block size which erofs-utils supports])
98*33b1fccfSAndroid Build Coastguard Worker
99*33b1fccfSAndroid Build Coastguard WorkerAC_MSG_CHECKING([whether to enable multi-threading support])
100*33b1fccfSAndroid Build Coastguard WorkerAC_ARG_ENABLE([multithreading],
101*33b1fccfSAndroid Build Coastguard Worker    AS_HELP_STRING([--enable-multithreading],
102*33b1fccfSAndroid Build Coastguard Worker                   [enable multi-threading support (EXPERIMENTAL) @<:@default=no@:>@]),
103*33b1fccfSAndroid Build Coastguard Worker    [enable_multithreading="$enableval"],
104*33b1fccfSAndroid Build Coastguard Worker    [enable_multithreading="no"])
105*33b1fccfSAndroid Build Coastguard WorkerAC_MSG_RESULT([$enable_multithreading])
106*33b1fccfSAndroid Build Coastguard Worker
107*33b1fccfSAndroid Build Coastguard WorkerAC_ARG_ENABLE([debug],
108*33b1fccfSAndroid Build Coastguard Worker    [AS_HELP_STRING([--enable-debug],
109*33b1fccfSAndroid Build Coastguard Worker                    [enable debugging mode @<:@default=no@:>@])],
110*33b1fccfSAndroid Build Coastguard Worker    [enable_debug="$enableval"],
111*33b1fccfSAndroid Build Coastguard Worker    [enable_debug="no"])
112*33b1fccfSAndroid Build Coastguard Worker
113*33b1fccfSAndroid Build Coastguard WorkerAC_ARG_ENABLE([werror],
114*33b1fccfSAndroid Build Coastguard Worker    [AS_HELP_STRING([--enable-werror],
115*33b1fccfSAndroid Build Coastguard Worker                    [enable -Werror @<:@default=no@:>@])],
116*33b1fccfSAndroid Build Coastguard Worker    [enable_werror="$enableval"],
117*33b1fccfSAndroid Build Coastguard Worker    [enable_werror="no"])
118*33b1fccfSAndroid Build Coastguard Worker
119*33b1fccfSAndroid Build Coastguard WorkerAC_ARG_ENABLE([fuzzing],
120*33b1fccfSAndroid Build Coastguard Worker    [AS_HELP_STRING([--enable-fuzzing],
121*33b1fccfSAndroid Build Coastguard Worker                    [set up fuzzing mode @<:@default=no@:>@])],
122*33b1fccfSAndroid Build Coastguard Worker    [enable_fuzzing="$enableval"],
123*33b1fccfSAndroid Build Coastguard Worker    [enable_fuzzing="no"])
124*33b1fccfSAndroid Build Coastguard Worker
125*33b1fccfSAndroid Build Coastguard WorkerAC_ARG_ENABLE(lz4,
126*33b1fccfSAndroid Build Coastguard Worker   [AS_HELP_STRING([--disable-lz4], [disable LZ4 compression support @<:@default=enabled@:>@])],
127*33b1fccfSAndroid Build Coastguard Worker   [enable_lz4="$enableval"], [enable_lz4="yes"])
128*33b1fccfSAndroid Build Coastguard Worker
129*33b1fccfSAndroid Build Coastguard WorkerAC_ARG_ENABLE(lzma,
130*33b1fccfSAndroid Build Coastguard Worker   [AS_HELP_STRING([--disable-lzma], [disable LZMA compression support @<:@default=auto@:>@])],
131*33b1fccfSAndroid Build Coastguard Worker   [enable_lzma="$enableval"])
132*33b1fccfSAndroid Build Coastguard Worker
133*33b1fccfSAndroid Build Coastguard WorkerAC_ARG_WITH(zlib,
134*33b1fccfSAndroid Build Coastguard Worker   [AS_HELP_STRING([--without-zlib],
135*33b1fccfSAndroid Build Coastguard Worker      [Ignore presence of zlib inflate support @<:@default=auto@:>@])])
136*33b1fccfSAndroid Build Coastguard Worker
137*33b1fccfSAndroid Build Coastguard WorkerAC_ARG_WITH(libdeflate,
138*33b1fccfSAndroid Build Coastguard Worker   [AS_HELP_STRING([--with-libdeflate],
139*33b1fccfSAndroid Build Coastguard Worker      [Enable and build with libdeflate inflate support @<:@default=disabled@:>@])], [],
140*33b1fccfSAndroid Build Coastguard Worker      [with_libdeflate="no"])
141*33b1fccfSAndroid Build Coastguard Worker
142*33b1fccfSAndroid Build Coastguard WorkerAC_ARG_WITH(libzstd,
143*33b1fccfSAndroid Build Coastguard Worker   [AS_HELP_STRING([--with-libzstd],
144*33b1fccfSAndroid Build Coastguard Worker      [Enable and build with of libzstd support @<:@default=auto@:>@])])
145*33b1fccfSAndroid Build Coastguard Worker
146*33b1fccfSAndroid Build Coastguard WorkerAC_ARG_WITH(qpl,
147*33b1fccfSAndroid Build Coastguard Worker   [AS_HELP_STRING([--with-qpl],
148*33b1fccfSAndroid Build Coastguard Worker      [Enable and build with Intel QPL support @<:@default=disabled@:>@])], [],
149*33b1fccfSAndroid Build Coastguard Worker      [with_qpl="no"])
150*33b1fccfSAndroid Build Coastguard Worker
151*33b1fccfSAndroid Build Coastguard WorkerAC_ARG_ENABLE(fuse,
152*33b1fccfSAndroid Build Coastguard Worker   [AS_HELP_STRING([--enable-fuse], [enable erofsfuse @<:@default=no@:>@])],
153*33b1fccfSAndroid Build Coastguard Worker   [enable_fuse="$enableval"], [enable_fuse="no"])
154*33b1fccfSAndroid Build Coastguard Worker
155*33b1fccfSAndroid Build Coastguard WorkerAC_ARG_ENABLE([static-fuse],
156*33b1fccfSAndroid Build Coastguard Worker    [AS_HELP_STRING([--enable-static-fuse],
157*33b1fccfSAndroid Build Coastguard Worker                    [build erofsfuse as a static library @<:@default=no@:>@])],
158*33b1fccfSAndroid Build Coastguard Worker    [enable_static_fuse="$enableval"],
159*33b1fccfSAndroid Build Coastguard Worker    [enable_static_fuse="no"])
160*33b1fccfSAndroid Build Coastguard Worker
161*33b1fccfSAndroid Build Coastguard WorkerAC_ARG_WITH(uuid,
162*33b1fccfSAndroid Build Coastguard Worker   [AS_HELP_STRING([--without-uuid],
163*33b1fccfSAndroid Build Coastguard Worker      [Ignore presence of libuuid and disable uuid support @<:@default=enabled@:>@])])
164*33b1fccfSAndroid Build Coastguard Worker
165*33b1fccfSAndroid Build Coastguard WorkerAC_ARG_WITH(selinux,
166*33b1fccfSAndroid Build Coastguard Worker   [AS_HELP_STRING([--with-selinux],
167*33b1fccfSAndroid Build Coastguard Worker      [enable and build with selinux support @<:@default=no@:>@])],
168*33b1fccfSAndroid Build Coastguard Worker   [case "$with_selinux" in
169*33b1fccfSAndroid Build Coastguard Worker      yes|no) ;;
170*33b1fccfSAndroid Build Coastguard Worker      *) AC_MSG_ERROR([invalid argument to --with-selinux])
171*33b1fccfSAndroid Build Coastguard Worker      ;;
172*33b1fccfSAndroid Build Coastguard Worker    esac], [with_selinux=no])
173*33b1fccfSAndroid Build Coastguard Worker
174*33b1fccfSAndroid Build Coastguard Worker# Checks for libraries.
175*33b1fccfSAndroid Build Coastguard Worker# Use customized LZ4 library path when specified.
176*33b1fccfSAndroid Build Coastguard WorkerAC_ARG_WITH(lz4-incdir,
177*33b1fccfSAndroid Build Coastguard Worker   [AS_HELP_STRING([--with-lz4-incdir=DIR], [LZ4 include directory])], [
178*33b1fccfSAndroid Build Coastguard Worker   EROFS_UTILS_PARSE_DIRECTORY(["$withval"],[withval])])
179*33b1fccfSAndroid Build Coastguard Worker
180*33b1fccfSAndroid Build Coastguard WorkerAC_ARG_WITH(lz4-libdir,
181*33b1fccfSAndroid Build Coastguard Worker   [AS_HELP_STRING([--with-lz4-libdir=DIR], [LZ4 lib directory])], [
182*33b1fccfSAndroid Build Coastguard Worker   EROFS_UTILS_PARSE_DIRECTORY(["$withval"],[withval])])
183*33b1fccfSAndroid Build Coastguard Worker
184*33b1fccfSAndroid Build Coastguard WorkerAC_ARG_VAR([LZ4_CFLAGS], [C compiler flags for lz4])
185*33b1fccfSAndroid Build Coastguard WorkerAC_ARG_VAR([LZ4_LIBS], [linker flags for lz4])
186*33b1fccfSAndroid Build Coastguard Worker
187*33b1fccfSAndroid Build Coastguard Worker# Checks for header files.
188*33b1fccfSAndroid Build Coastguard WorkerAC_CHECK_HEADERS(m4_flatten([
189*33b1fccfSAndroid Build Coastguard Worker	dirent.h
190*33b1fccfSAndroid Build Coastguard Worker	execinfo.h
191*33b1fccfSAndroid Build Coastguard Worker	fcntl.h
192*33b1fccfSAndroid Build Coastguard Worker	getopt.h
193*33b1fccfSAndroid Build Coastguard Worker	inttypes.h
194*33b1fccfSAndroid Build Coastguard Worker	linux/aufs_type.h
195*33b1fccfSAndroid Build Coastguard Worker	linux/falloc.h
196*33b1fccfSAndroid Build Coastguard Worker	linux/fs.h
197*33b1fccfSAndroid Build Coastguard Worker	linux/types.h
198*33b1fccfSAndroid Build Coastguard Worker	linux/xattr.h
199*33b1fccfSAndroid Build Coastguard Worker	limits.h
200*33b1fccfSAndroid Build Coastguard Worker	stddef.h
201*33b1fccfSAndroid Build Coastguard Worker	stdint.h
202*33b1fccfSAndroid Build Coastguard Worker	stdlib.h
203*33b1fccfSAndroid Build Coastguard Worker	string.h
204*33b1fccfSAndroid Build Coastguard Worker	sys/ioctl.h
205*33b1fccfSAndroid Build Coastguard Worker	sys/mman.h
206*33b1fccfSAndroid Build Coastguard Worker	sys/random.h
207*33b1fccfSAndroid Build Coastguard Worker	sys/sendfile.h
208*33b1fccfSAndroid Build Coastguard Worker	sys/stat.h
209*33b1fccfSAndroid Build Coastguard Worker	sys/statfs.h
210*33b1fccfSAndroid Build Coastguard Worker	sys/sysmacros.h
211*33b1fccfSAndroid Build Coastguard Worker	sys/time.h
212*33b1fccfSAndroid Build Coastguard Worker	unistd.h
213*33b1fccfSAndroid Build Coastguard Worker]))
214*33b1fccfSAndroid Build Coastguard Worker
215*33b1fccfSAndroid Build Coastguard WorkerAC_HEADER_TIOCGWINSZ
216*33b1fccfSAndroid Build Coastguard Worker
217*33b1fccfSAndroid Build Coastguard Worker# Checks for typedefs, structures, and compiler characteristics.
218*33b1fccfSAndroid Build Coastguard WorkerAC_C_INLINE
219*33b1fccfSAndroid Build Coastguard WorkerAC_TYPE_INT64_T
220*33b1fccfSAndroid Build Coastguard WorkerAC_TYPE_SIZE_T
221*33b1fccfSAndroid Build Coastguard WorkerAC_TYPE_SSIZE_T
222*33b1fccfSAndroid Build Coastguard WorkerAC_CHECK_MEMBERS([struct stat.st_rdev])
223*33b1fccfSAndroid Build Coastguard WorkerAC_CHECK_MEMBERS([struct stat.st_atim])
224*33b1fccfSAndroid Build Coastguard WorkerAC_CHECK_MEMBERS([struct stat.st_atimensec])
225*33b1fccfSAndroid Build Coastguard WorkerAC_TYPE_UINT64_T
226*33b1fccfSAndroid Build Coastguard Worker
227*33b1fccfSAndroid Build Coastguard Worker#
228*33b1fccfSAndroid Build Coastguard Worker# Check to see if llseek() is declared in unistd.h.  On some libc's
229*33b1fccfSAndroid Build Coastguard Worker# it is, and on others it isn't..... Thank you glibc developers....
230*33b1fccfSAndroid Build Coastguard Worker#
231*33b1fccfSAndroid Build Coastguard WorkerAC_CHECK_DECL(llseek,
232*33b1fccfSAndroid Build Coastguard Worker  [AC_DEFINE(HAVE_LLSEEK_PROTOTYPE, 1,
233*33b1fccfSAndroid Build Coastguard Worker    [Define to 1 if llseek declared in unistd.h])],,
234*33b1fccfSAndroid Build Coastguard Worker  [#include <unistd.h>])
235*33b1fccfSAndroid Build Coastguard Worker
236*33b1fccfSAndroid Build Coastguard Worker#
237*33b1fccfSAndroid Build Coastguard Worker# Check to see if lseek64() is declared in unistd.h.  Glibc's header files
238*33b1fccfSAndroid Build Coastguard Worker# are so convoluted that I can't tell whether it will always be defined,
239*33b1fccfSAndroid Build Coastguard Worker# and if it isn't defined while lseek64 is defined in the library,
240*33b1fccfSAndroid Build Coastguard Worker# disaster will strike.
241*33b1fccfSAndroid Build Coastguard Worker#
242*33b1fccfSAndroid Build Coastguard Worker# Warning!  Use of --enable-gcc-wall may throw off this test.
243*33b1fccfSAndroid Build Coastguard Worker#
244*33b1fccfSAndroid Build Coastguard WorkerAC_CHECK_DECL(lseek64,[AC_DEFINE(HAVE_LSEEK64_PROTOTYPE, 1,
245*33b1fccfSAndroid Build Coastguard Worker  [Define to 1 if lseek64 declared in unistd.h])],,
246*33b1fccfSAndroid Build Coastguard Worker  [#define _LARGEFILE_SOURCE
247*33b1fccfSAndroid Build Coastguard Worker   #define _LARGEFILE64_SOURCE
248*33b1fccfSAndroid Build Coastguard Worker   #include <unistd.h>])
249*33b1fccfSAndroid Build Coastguard Worker
250*33b1fccfSAndroid Build Coastguard WorkerAC_CHECK_DECL(memrchr,[AC_DEFINE(HAVE_MEMRCHR, 1,
251*33b1fccfSAndroid Build Coastguard Worker  [Define to 1 if memrchr declared in string.h])],,
252*33b1fccfSAndroid Build Coastguard Worker  [#define _GNU_SOURCE
253*33b1fccfSAndroid Build Coastguard Worker   #include <string.h>])
254*33b1fccfSAndroid Build Coastguard Worker
255*33b1fccfSAndroid Build Coastguard Worker# Checks for library functions.
256*33b1fccfSAndroid Build Coastguard WorkerAC_CHECK_FUNCS(m4_flatten([
257*33b1fccfSAndroid Build Coastguard Worker	backtrace
258*33b1fccfSAndroid Build Coastguard Worker	copy_file_range
259*33b1fccfSAndroid Build Coastguard Worker	fallocate
260*33b1fccfSAndroid Build Coastguard Worker	gettimeofday
261*33b1fccfSAndroid Build Coastguard Worker	lgetxattr
262*33b1fccfSAndroid Build Coastguard Worker	llistxattr
263*33b1fccfSAndroid Build Coastguard Worker	memset
264*33b1fccfSAndroid Build Coastguard Worker	realpath
265*33b1fccfSAndroid Build Coastguard Worker	lseek64
266*33b1fccfSAndroid Build Coastguard Worker	ftello64
267*33b1fccfSAndroid Build Coastguard Worker	pread64
268*33b1fccfSAndroid Build Coastguard Worker	pwrite64
269*33b1fccfSAndroid Build Coastguard Worker	posix_fadvise
270*33b1fccfSAndroid Build Coastguard Worker	fstatfs
271*33b1fccfSAndroid Build Coastguard Worker	sendfile
272*33b1fccfSAndroid Build Coastguard Worker	strdup
273*33b1fccfSAndroid Build Coastguard Worker	strerror
274*33b1fccfSAndroid Build Coastguard Worker	strrchr
275*33b1fccfSAndroid Build Coastguard Worker	strtoull
276*33b1fccfSAndroid Build Coastguard Worker	sysconf
277*33b1fccfSAndroid Build Coastguard Worker	tmpfile64
278*33b1fccfSAndroid Build Coastguard Worker	utimensat]))
279*33b1fccfSAndroid Build Coastguard Worker
280*33b1fccfSAndroid Build Coastguard Worker# Detect maximum block size if necessary
281*33b1fccfSAndroid Build Coastguard WorkerAS_IF([test "x$MAX_BLOCK_SIZE" = "x"], [
282*33b1fccfSAndroid Build Coastguard Worker  AC_CACHE_CHECK([sysconf (_SC_PAGESIZE)], [erofs_cv_max_block_size],
283*33b1fccfSAndroid Build Coastguard Worker               AC_RUN_IFELSE([AC_LANG_PROGRAM(
284*33b1fccfSAndroid Build Coastguard Worker[[
285*33b1fccfSAndroid Build Coastguard Worker#include <unistd.h>
286*33b1fccfSAndroid Build Coastguard Worker#include <stdio.h>
287*33b1fccfSAndroid Build Coastguard Worker]],
288*33b1fccfSAndroid Build Coastguard Worker[[
289*33b1fccfSAndroid Build Coastguard Worker    int result;
290*33b1fccfSAndroid Build Coastguard Worker    FILE *f;
291*33b1fccfSAndroid Build Coastguard Worker
292*33b1fccfSAndroid Build Coastguard Worker    result = sysconf(_SC_PAGESIZE);
293*33b1fccfSAndroid Build Coastguard Worker    if (result < 0)
294*33b1fccfSAndroid Build Coastguard Worker	return 1;
295*33b1fccfSAndroid Build Coastguard Worker
296*33b1fccfSAndroid Build Coastguard Worker    f = fopen("conftest.out", "w");
297*33b1fccfSAndroid Build Coastguard Worker    if (!f)
298*33b1fccfSAndroid Build Coastguard Worker	return 1;
299*33b1fccfSAndroid Build Coastguard Worker
300*33b1fccfSAndroid Build Coastguard Worker    fprintf(f, "%d", result);
301*33b1fccfSAndroid Build Coastguard Worker    fclose(f);
302*33b1fccfSAndroid Build Coastguard Worker    return 0;
303*33b1fccfSAndroid Build Coastguard Worker]])],
304*33b1fccfSAndroid Build Coastguard Worker                             [erofs_cv_max_block_size=`cat conftest.out`],
305*33b1fccfSAndroid Build Coastguard Worker                             [erofs_cv_max_block_size=4096],
306*33b1fccfSAndroid Build Coastguard Worker                             [erofs_cv_max_block_size=4096]))
307*33b1fccfSAndroid Build Coastguard Worker], [erofs_cv_max_block_size=$MAX_BLOCK_SIZE])
308*33b1fccfSAndroid Build Coastguard Worker
309*33b1fccfSAndroid Build Coastguard Worker# Configure multi-threading support
310*33b1fccfSAndroid Build Coastguard WorkerAS_IF([test "x$enable_multithreading" != "xno"], [
311*33b1fccfSAndroid Build Coastguard Worker  AC_CHECK_HEADERS([pthread.h])
312*33b1fccfSAndroid Build Coastguard Worker  AC_CHECK_LIB([pthread], [pthread_mutex_lock], [],
313*33b1fccfSAndroid Build Coastguard Worker    AC_MSG_ERROR([libpthread is required for multi-threaded build]))
314*33b1fccfSAndroid Build Coastguard Worker  AC_DEFINE(EROFS_MT_ENABLED, 1, [Enable multi-threading support])
315*33b1fccfSAndroid Build Coastguard Worker], [])
316*33b1fccfSAndroid Build Coastguard Worker
317*33b1fccfSAndroid Build Coastguard Worker# Configure debug mode
318*33b1fccfSAndroid Build Coastguard WorkerAS_IF([test "x$enable_debug" != "xno"], [], [
319*33b1fccfSAndroid Build Coastguard Worker  dnl Turn off all assert checking.
320*33b1fccfSAndroid Build Coastguard Worker  CPPFLAGS="$CPPFLAGS -DNDEBUG"
321*33b1fccfSAndroid Build Coastguard Worker])
322*33b1fccfSAndroid Build Coastguard Worker
323*33b1fccfSAndroid Build Coastguard Worker# Configure -Werror
324*33b1fccfSAndroid Build Coastguard WorkerAS_IF([test "x$enable_werror" != "xyes"], [], [
325*33b1fccfSAndroid Build Coastguard Worker  CPPFLAGS="$CPPFLAGS -Werror"
326*33b1fccfSAndroid Build Coastguard Worker])
327*33b1fccfSAndroid Build Coastguard Worker
328*33b1fccfSAndroid Build Coastguard Worker# Configure libuuid
329*33b1fccfSAndroid Build Coastguard WorkerAS_IF([test "x$with_uuid" != "xno"], [
330*33b1fccfSAndroid Build Coastguard Worker  PKG_CHECK_MODULES([libuuid], [uuid])
331*33b1fccfSAndroid Build Coastguard Worker  # Paranoia: don't trust the result reported by pkgconfig before trying out
332*33b1fccfSAndroid Build Coastguard Worker  saved_LIBS="$LIBS"
333*33b1fccfSAndroid Build Coastguard Worker  saved_CPPFLAGS=${CPPFLAGS}
334*33b1fccfSAndroid Build Coastguard Worker  CPPFLAGS="${libuuid_CFLAGS} ${CPPFLAGS}"
335*33b1fccfSAndroid Build Coastguard Worker  LIBS="${libuuid_LIBS} $LIBS"
336*33b1fccfSAndroid Build Coastguard Worker  AC_MSG_CHECKING([libuuid usability])
337*33b1fccfSAndroid Build Coastguard Worker  AC_TRY_LINK([
338*33b1fccfSAndroid Build Coastguard Worker#include <uuid.h>
339*33b1fccfSAndroid Build Coastguard Worker], [
340*33b1fccfSAndroid Build Coastguard Workeruuid_t tmp;
341*33b1fccfSAndroid Build Coastguard Worker
342*33b1fccfSAndroid Build Coastguard Workeruuid_generate(tmp);
343*33b1fccfSAndroid Build Coastguard Workerreturn 0;
344*33b1fccfSAndroid Build Coastguard Worker], [have_uuid="yes"
345*33b1fccfSAndroid Build Coastguard Worker    AC_MSG_RESULT([yes])], [
346*33b1fccfSAndroid Build Coastguard Worker    have_uuid="no"
347*33b1fccfSAndroid Build Coastguard Worker    AC_MSG_RESULT([no])
348*33b1fccfSAndroid Build Coastguard Worker    AC_MSG_ERROR([libuuid doesn't work properly])])
349*33b1fccfSAndroid Build Coastguard Worker  LIBS="${saved_LIBS}"
350*33b1fccfSAndroid Build Coastguard Worker  CPPFLAGS="${saved_CPPFLAGS}"], [have_uuid="no"])
351*33b1fccfSAndroid Build Coastguard Worker
352*33b1fccfSAndroid Build Coastguard Worker# Configure selinux
353*33b1fccfSAndroid Build Coastguard WorkerAS_IF([test "x$with_selinux" != "xno"], [
354*33b1fccfSAndroid Build Coastguard Worker  PKG_CHECK_MODULES([libselinux], [libselinux])
355*33b1fccfSAndroid Build Coastguard Worker  # Paranoia: don't trust the result reported by pkgconfig before trying out
356*33b1fccfSAndroid Build Coastguard Worker  saved_LIBS="$LIBS"
357*33b1fccfSAndroid Build Coastguard Worker  saved_CPPFLAGS=${CPPFLAGS}
358*33b1fccfSAndroid Build Coastguard Worker  CPPFLAGS="${libselinux_CFLAGS} ${CPPFLAGS}"
359*33b1fccfSAndroid Build Coastguard Worker  LIBS="${libselinux_LIBS} $LIBS"
360*33b1fccfSAndroid Build Coastguard Worker  AC_CHECK_LIB(selinux, selabel_lookup, [
361*33b1fccfSAndroid Build Coastguard Worker    have_selinux="yes" ], [
362*33b1fccfSAndroid Build Coastguard Worker    AC_MSG_ERROR([libselinux doesn't work properly])])
363*33b1fccfSAndroid Build Coastguard Worker  LIBS="${saved_LIBS}"
364*33b1fccfSAndroid Build Coastguard Worker  CPPFLAGS="${saved_CPPFLAGS}"], [have_selinux="no"])
365*33b1fccfSAndroid Build Coastguard Worker
366*33b1fccfSAndroid Build Coastguard Worker# Configure fuse
367*33b1fccfSAndroid Build Coastguard WorkerAS_IF([test "x$enable_fuse" != "xno"], [
368*33b1fccfSAndroid Build Coastguard Worker  # Paranoia: don't trust the result reported by pkgconfig before trying out
369*33b1fccfSAndroid Build Coastguard Worker  saved_LIBS="$LIBS"
370*33b1fccfSAndroid Build Coastguard Worker  saved_CPPFLAGS=${CPPFLAGS}
371*33b1fccfSAndroid Build Coastguard Worker  PKG_CHECK_MODULES([libfuse3], [fuse3 >= 3.0], [
372*33b1fccfSAndroid Build Coastguard Worker    PKG_CHECK_MODULES([libfuse3_0], [fuse3 >= 3.0 fuse3 < 3.2], [
373*33b1fccfSAndroid Build Coastguard Worker      AC_DEFINE([FUSE_USE_VERSION], [30], [used FUSE API version])
374*33b1fccfSAndroid Build Coastguard Worker    ], [
375*33b1fccfSAndroid Build Coastguard Worker      PKG_CHECK_MODULES([libfuse3_2], [fuse3 >= 3.2], [
376*33b1fccfSAndroid Build Coastguard Worker        AC_DEFINE([FUSE_USE_VERSION], [32], [used FUSE API version])
377*33b1fccfSAndroid Build Coastguard Worker      ])
378*33b1fccfSAndroid Build Coastguard Worker    ])
379*33b1fccfSAndroid Build Coastguard Worker    CPPFLAGS="${libfuse3_CFLAGS} ${CPPFLAGS}"
380*33b1fccfSAndroid Build Coastguard Worker    LIBS="${libfuse3_LIBS} $LIBS"
381*33b1fccfSAndroid Build Coastguard Worker    AC_CHECK_LIB(fuse3, fuse_session_new, [], [
382*33b1fccfSAndroid Build Coastguard Worker    AC_MSG_ERROR([libfuse3 (>= 3.0) doesn't work properly for lowlevel api])])
383*33b1fccfSAndroid Build Coastguard Worker    have_fuse="yes"
384*33b1fccfSAndroid Build Coastguard Worker  ], [
385*33b1fccfSAndroid Build Coastguard Worker    PKG_CHECK_MODULES([libfuse2], [fuse >= 2.6], [
386*33b1fccfSAndroid Build Coastguard Worker      AC_DEFINE([FUSE_USE_VERSION], [26], [used FUSE API version])
387*33b1fccfSAndroid Build Coastguard Worker      CPPFLAGS="${libfuse2_CFLAGS} ${CPPFLAGS}"
388*33b1fccfSAndroid Build Coastguard Worker      LIBS="${libfuse2_LIBS} $LIBS"
389*33b1fccfSAndroid Build Coastguard Worker      AC_CHECK_LIB(fuse, fuse_lowlevel_new, [], [
390*33b1fccfSAndroid Build Coastguard Worker        AC_MSG_ERROR([libfuse (>= 2.6) doesn't work properly for lowlevel api])])
391*33b1fccfSAndroid Build Coastguard Worker      have_fuse="yes"
392*33b1fccfSAndroid Build Coastguard Worker    ], [have_fuse="no"])
393*33b1fccfSAndroid Build Coastguard Worker  ])
394*33b1fccfSAndroid Build Coastguard Worker  LIBS="${saved_LIBS}"
395*33b1fccfSAndroid Build Coastguard Worker  CPPFLAGS="${saved_CPPFLAGS}"], [have_fuse="no"])
396*33b1fccfSAndroid Build Coastguard Worker
397*33b1fccfSAndroid Build Coastguard Worker# Configure lz4
398*33b1fccfSAndroid Build Coastguard Workertest -z $LZ4_LIBS && LZ4_LIBS='-llz4'
399*33b1fccfSAndroid Build Coastguard Worker
400*33b1fccfSAndroid Build Coastguard Workerif test "x$enable_lz4" = "xyes"; then
401*33b1fccfSAndroid Build Coastguard Worker  test -z "${with_lz4_incdir}" || LZ4_CFLAGS="-I$with_lz4_incdir $LZ4_CFLAGS"
402*33b1fccfSAndroid Build Coastguard Worker
403*33b1fccfSAndroid Build Coastguard Worker  saved_CPPFLAGS=${CPPFLAGS}
404*33b1fccfSAndroid Build Coastguard Worker  CPPFLAGS="${LZ4_CFLAGS} ${CPPFLAGS}"
405*33b1fccfSAndroid Build Coastguard Worker
406*33b1fccfSAndroid Build Coastguard Worker  AC_CHECK_HEADERS([lz4.h],[have_lz4h="yes"], [])
407*33b1fccfSAndroid Build Coastguard Worker
408*33b1fccfSAndroid Build Coastguard Worker  if test "x${have_lz4h}" = "xyes" ; then
409*33b1fccfSAndroid Build Coastguard Worker    saved_LIBS="$LIBS"
410*33b1fccfSAndroid Build Coastguard Worker    saved_LDFLAGS=${LDFLAGS}
411*33b1fccfSAndroid Build Coastguard Worker    test -z "${with_lz4_libdir}" || LDFLAGS="-L$with_lz4_libdir ${LDFLAGS}"
412*33b1fccfSAndroid Build Coastguard Worker    AC_CHECK_LIB(lz4, LZ4_compress_destSize, [
413*33b1fccfSAndroid Build Coastguard Worker      have_lz4="yes"
414*33b1fccfSAndroid Build Coastguard Worker      have_lz4hc="yes"
415*33b1fccfSAndroid Build Coastguard Worker      AC_CHECK_LIB(lz4, LZ4_compress_HC_destSize, [], [
416*33b1fccfSAndroid Build Coastguard Worker        AC_CHECK_DECL(LZ4_compress_HC_destSize, [lz4_force_static="yes"],
417*33b1fccfSAndroid Build Coastguard Worker          [have_lz4hc="no"], [[
418*33b1fccfSAndroid Build Coastguard Worker#define LZ4_HC_STATIC_LINKING_ONLY (1)
419*33b1fccfSAndroid Build Coastguard Worker#include <lz4hc.h>
420*33b1fccfSAndroid Build Coastguard Worker        ]])
421*33b1fccfSAndroid Build Coastguard Worker      ])
422*33b1fccfSAndroid Build Coastguard Worker    ], [AC_MSG_ERROR([Cannot find proper lz4 version (>= 1.8.0)])])
423*33b1fccfSAndroid Build Coastguard Worker    LDFLAGS=${saved_LDFLAGS}
424*33b1fccfSAndroid Build Coastguard Worker    LIBS="${saved_LIBS}"
425*33b1fccfSAndroid Build Coastguard Worker  fi
426*33b1fccfSAndroid Build Coastguard Worker  CPPFLAGS=${saved_CPPFLAGS}
427*33b1fccfSAndroid Build Coastguard Workerfi
428*33b1fccfSAndroid Build Coastguard Worker
429*33b1fccfSAndroid Build Coastguard Worker# Configure liblzma
430*33b1fccfSAndroid Build Coastguard Workerhave_liblzma="no"
431*33b1fccfSAndroid Build Coastguard WorkerAS_IF([test "x$enable_lzma" != "xno"], [
432*33b1fccfSAndroid Build Coastguard Worker  saved_CPPFLAGS=${CPPFLAGS}
433*33b1fccfSAndroid Build Coastguard Worker  PKG_CHECK_MODULES([liblzma], [liblzma], [
434*33b1fccfSAndroid Build Coastguard Worker    # Paranoia: don't trust the result reported by pkgconfig before trying out
435*33b1fccfSAndroid Build Coastguard Worker    saved_LIBS="$LIBS"
436*33b1fccfSAndroid Build Coastguard Worker    saved_CPPFLAGS=${CPPFLAGS}
437*33b1fccfSAndroid Build Coastguard Worker    CPPFLAGS="${liblzma_CFLAGS} ${CPPFLAGS}"
438*33b1fccfSAndroid Build Coastguard Worker    LIBS="${liblzma_LIBS} $LIBS"
439*33b1fccfSAndroid Build Coastguard Worker    AC_CHECK_HEADERS([lzma.h],[
440*33b1fccfSAndroid Build Coastguard Worker      AC_CHECK_LIB(lzma, lzma_microlzma_encoder, [
441*33b1fccfSAndroid Build Coastguard Worker        AC_CHECK_DECL(lzma_microlzma_encoder, [have_liblzma="yes"],
442*33b1fccfSAndroid Build Coastguard Worker          [], [[
443*33b1fccfSAndroid Build Coastguard Worker#include <lzma.h>
444*33b1fccfSAndroid Build Coastguard Worker        ]])
445*33b1fccfSAndroid Build Coastguard Worker      ])
446*33b1fccfSAndroid Build Coastguard Worker    ])
447*33b1fccfSAndroid Build Coastguard Worker    LIBS="${saved_LIBS}"
448*33b1fccfSAndroid Build Coastguard Worker    CPPFLAGS="${saved_CPPFLAGS}"
449*33b1fccfSAndroid Build Coastguard Worker  ], [[]])
450*33b1fccfSAndroid Build Coastguard Worker  AS_IF([test "x$enable_lzma" = "xyes" -a "x$have_liblzma" != "xyes"], [
451*33b1fccfSAndroid Build Coastguard Worker    AC_MSG_ERROR([Cannot find a proper liblzma version])
452*33b1fccfSAndroid Build Coastguard Worker  ])
453*33b1fccfSAndroid Build Coastguard Worker])
454*33b1fccfSAndroid Build Coastguard Worker
455*33b1fccfSAndroid Build Coastguard Worker# Configure zlib
456*33b1fccfSAndroid Build Coastguard Workerhave_zlib="no"
457*33b1fccfSAndroid Build Coastguard WorkerAS_IF([test "x$with_zlib" != "xno"], [
458*33b1fccfSAndroid Build Coastguard Worker  PKG_CHECK_MODULES([zlib], [zlib], [
459*33b1fccfSAndroid Build Coastguard Worker    # Paranoia: don't trust the result reported by pkgconfig before trying out
460*33b1fccfSAndroid Build Coastguard Worker    saved_LIBS="$LIBS"
461*33b1fccfSAndroid Build Coastguard Worker    saved_CPPFLAGS=${CPPFLAGS}
462*33b1fccfSAndroid Build Coastguard Worker    CPPFLAGS="${zlib_CFLAGS} ${CPPFLAGS}"
463*33b1fccfSAndroid Build Coastguard Worker    LIBS="${zlib_LIBS} $LIBS"
464*33b1fccfSAndroid Build Coastguard Worker    AC_CHECK_HEADERS([zlib.h],[
465*33b1fccfSAndroid Build Coastguard Worker      AC_CHECK_LIB(z, inflate, [], [
466*33b1fccfSAndroid Build Coastguard Worker        AC_MSG_ERROR([zlib doesn't work properly])])
467*33b1fccfSAndroid Build Coastguard Worker      AC_CHECK_DECL(inflate, [have_zlib="yes"],
468*33b1fccfSAndroid Build Coastguard Worker        [AC_MSG_ERROR([zlib doesn't work properly])], [[
469*33b1fccfSAndroid Build Coastguard Worker#include <zlib.h>
470*33b1fccfSAndroid Build Coastguard Worker      ]])
471*33b1fccfSAndroid Build Coastguard Worker    ])
472*33b1fccfSAndroid Build Coastguard Worker    LIBS="${saved_LIBS}"
473*33b1fccfSAndroid Build Coastguard Worker    CPPFLAGS="${saved_CPPFLAGS}"], [
474*33b1fccfSAndroid Build Coastguard Worker    AS_IF([test "x$with_zlib" = "xyes"], [
475*33b1fccfSAndroid Build Coastguard Worker      AC_MSG_ERROR([Cannot find proper zlib])
476*33b1fccfSAndroid Build Coastguard Worker    ])
477*33b1fccfSAndroid Build Coastguard Worker  ])
478*33b1fccfSAndroid Build Coastguard Worker])
479*33b1fccfSAndroid Build Coastguard Worker
480*33b1fccfSAndroid Build Coastguard Worker# Configure libdeflate
481*33b1fccfSAndroid Build Coastguard WorkerAS_IF([test "x$with_libdeflate" != "xno"], [
482*33b1fccfSAndroid Build Coastguard Worker  PKG_CHECK_MODULES([libdeflate], [libdeflate])
483*33b1fccfSAndroid Build Coastguard Worker  # Paranoia: don't trust the result reported by pkgconfig before trying out
484*33b1fccfSAndroid Build Coastguard Worker  saved_LIBS="$LIBS"
485*33b1fccfSAndroid Build Coastguard Worker  saved_CPPFLAGS=${CPPFLAGS}
486*33b1fccfSAndroid Build Coastguard Worker  CPPFLAGS="${libdeflate_CFLAGS} ${CPPFLAGS}"
487*33b1fccfSAndroid Build Coastguard Worker  LIBS="${libdeflate_LIBS} $LIBS"
488*33b1fccfSAndroid Build Coastguard Worker  AC_CHECK_LIB(deflate, libdeflate_deflate_decompress, [
489*33b1fccfSAndroid Build Coastguard Worker    have_libdeflate="yes" ], [
490*33b1fccfSAndroid Build Coastguard Worker    AC_MSG_ERROR([libdeflate doesn't work properly])])
491*33b1fccfSAndroid Build Coastguard Worker  LIBS="${saved_LIBS}"
492*33b1fccfSAndroid Build Coastguard Worker  CPPFLAGS="${saved_CPPFLAGS}"], [have_libdeflate="no"])
493*33b1fccfSAndroid Build Coastguard Worker
494*33b1fccfSAndroid Build Coastguard Worker# Configure libzstd
495*33b1fccfSAndroid Build Coastguard Workerhave_libzstd="no"
496*33b1fccfSAndroid Build Coastguard WorkerAS_IF([test "x$with_libzstd" != "xno"], [
497*33b1fccfSAndroid Build Coastguard Worker  PKG_CHECK_MODULES([libzstd], [libzstd >= 1.4.0], [
498*33b1fccfSAndroid Build Coastguard Worker    # Paranoia: don't trust the result reported by pkgconfig before trying out
499*33b1fccfSAndroid Build Coastguard Worker    saved_LIBS="$LIBS"
500*33b1fccfSAndroid Build Coastguard Worker    saved_CPPFLAGS=${CPPFLAGS}
501*33b1fccfSAndroid Build Coastguard Worker    CPPFLAGS="${libzstd_CFLAGS} ${CPPFLAGS}"
502*33b1fccfSAndroid Build Coastguard Worker    LIBS="${libzstd_LIBS} $LIBS"
503*33b1fccfSAndroid Build Coastguard Worker    AC_CHECK_HEADERS([zstd.h],[
504*33b1fccfSAndroid Build Coastguard Worker      AC_CHECK_LIB(zstd, ZSTD_compress2, [], [
505*33b1fccfSAndroid Build Coastguard Worker        AC_MSG_ERROR([libzstd doesn't work properly])])
506*33b1fccfSAndroid Build Coastguard Worker      AC_CHECK_DECL(ZSTD_compress2, [have_libzstd="yes"],
507*33b1fccfSAndroid Build Coastguard Worker        [AC_MSG_ERROR([libzstd doesn't work properly])], [[
508*33b1fccfSAndroid Build Coastguard Worker#include <zstd.h>
509*33b1fccfSAndroid Build Coastguard Worker      ]])
510*33b1fccfSAndroid Build Coastguard Worker      AC_CHECK_FUNCS([ZSTD_getFrameContentSize])
511*33b1fccfSAndroid Build Coastguard Worker    ])
512*33b1fccfSAndroid Build Coastguard Worker    LIBS="${saved_LIBS}"
513*33b1fccfSAndroid Build Coastguard Worker    CPPFLAGS="${saved_CPPFLAGS}"], [
514*33b1fccfSAndroid Build Coastguard Worker    AS_IF([test "x$with_libzstd" = "xyes"], [
515*33b1fccfSAndroid Build Coastguard Worker      AC_MSG_ERROR([Cannot find proper libzstd])
516*33b1fccfSAndroid Build Coastguard Worker    ])
517*33b1fccfSAndroid Build Coastguard Worker  ])
518*33b1fccfSAndroid Build Coastguard Worker])
519*33b1fccfSAndroid Build Coastguard Worker
520*33b1fccfSAndroid Build Coastguard Worker# Configure Intel QPL
521*33b1fccfSAndroid Build Coastguard Workerhave_qpl="no"
522*33b1fccfSAndroid Build Coastguard WorkerAS_IF([test "x$with_qpl" != "xno"], [
523*33b1fccfSAndroid Build Coastguard Worker  PKG_CHECK_MODULES([libqpl], [qpl >= 1.5.0], [
524*33b1fccfSAndroid Build Coastguard Worker    # Paranoia: don't trust the result reported by pkgconfig before trying out
525*33b1fccfSAndroid Build Coastguard Worker    saved_LIBS="$LIBS"
526*33b1fccfSAndroid Build Coastguard Worker    saved_CPPFLAGS=${CPPFLAGS}
527*33b1fccfSAndroid Build Coastguard Worker    CPPFLAGS="${libqpl_CFLAGS} ${CPPFLAGS}"
528*33b1fccfSAndroid Build Coastguard Worker    LIBS="${libqpl_LIBS} $LIBS"
529*33b1fccfSAndroid Build Coastguard Worker    AC_CHECK_HEADERS([qpl/qpl.h],[
530*33b1fccfSAndroid Build Coastguard Worker      AC_CHECK_LIB(qpl, qpl_execute_job, [], [
531*33b1fccfSAndroid Build Coastguard Worker        AC_MSG_ERROR([libqpl doesn't work properly])])
532*33b1fccfSAndroid Build Coastguard Worker      AC_CHECK_DECL(qpl_execute_job, [have_qpl="yes"],
533*33b1fccfSAndroid Build Coastguard Worker        [AC_MSG_ERROR([libqpl doesn't work properly])], [[
534*33b1fccfSAndroid Build Coastguard Worker#include <qpl/qpl.h>
535*33b1fccfSAndroid Build Coastguard Worker      ]])
536*33b1fccfSAndroid Build Coastguard Worker    ])
537*33b1fccfSAndroid Build Coastguard Worker    LIBS="${saved_LIBS}"
538*33b1fccfSAndroid Build Coastguard Worker    CPPFLAGS="${saved_CPPFLAGS}"], [
539*33b1fccfSAndroid Build Coastguard Worker    AS_IF([test "x$with_qpl" = "xyes"], [
540*33b1fccfSAndroid Build Coastguard Worker      AC_MSG_ERROR([Cannot find proper libqpl])
541*33b1fccfSAndroid Build Coastguard Worker    ])
542*33b1fccfSAndroid Build Coastguard Worker  ])
543*33b1fccfSAndroid Build Coastguard Worker])
544*33b1fccfSAndroid Build Coastguard Worker
545*33b1fccfSAndroid Build Coastguard Worker# Enable 64-bit off_t
546*33b1fccfSAndroid Build Coastguard WorkerCFLAGS+=" -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
547*33b1fccfSAndroid Build Coastguard Worker
548*33b1fccfSAndroid Build Coastguard Worker# Configure fuzzing mode
549*33b1fccfSAndroid Build Coastguard WorkerAS_IF([test "x$enable_fuzzing" != "xyes"], [], [
550*33b1fccfSAndroid Build Coastguard Worker  CC_CHECK_CFLAGS(["-fsanitize=address,fuzzer-no-link"], [
551*33b1fccfSAndroid Build Coastguard Worker    CFLAGS="$CFLAGS -g -O1 -fsanitize=address,fuzzer-no-link"
552*33b1fccfSAndroid Build Coastguard Worker  ], [
553*33b1fccfSAndroid Build Coastguard Worker    AC_MSG_ERROR([Compiler doesn't support `-fsanitize=address,fuzzer-no-link`])
554*33b1fccfSAndroid Build Coastguard Worker  ])
555*33b1fccfSAndroid Build Coastguard Worker])
556*33b1fccfSAndroid Build Coastguard WorkerAM_CONDITIONAL([ENABLE_FUZZING], [test "x${enable_fuzzing}" = "xyes"])
557*33b1fccfSAndroid Build Coastguard Worker
558*33b1fccfSAndroid Build Coastguard Worker# Set up needed symbols, conditionals and compiler/linker flags
559*33b1fccfSAndroid Build Coastguard WorkerAM_CONDITIONAL([ENABLE_EROFS_MT], [test "x${enable_multithreading}" != "xno"])
560*33b1fccfSAndroid Build Coastguard WorkerAM_CONDITIONAL([ENABLE_LZ4], [test "x${have_lz4}" = "xyes"])
561*33b1fccfSAndroid Build Coastguard WorkerAM_CONDITIONAL([ENABLE_LZ4HC], [test "x${have_lz4hc}" = "xyes"])
562*33b1fccfSAndroid Build Coastguard WorkerAM_CONDITIONAL([ENABLE_FUSE], [test "x${have_fuse}" = "xyes"])
563*33b1fccfSAndroid Build Coastguard WorkerAM_CONDITIONAL([ENABLE_LIBLZMA], [test "x${have_liblzma}" = "xyes"])
564*33b1fccfSAndroid Build Coastguard WorkerAM_CONDITIONAL([ENABLE_LIBDEFLATE], [test "x${have_libdeflate}" = "xyes"])
565*33b1fccfSAndroid Build Coastguard WorkerAM_CONDITIONAL([ENABLE_LIBZSTD], [test "x${have_libzstd}" = "xyes"])
566*33b1fccfSAndroid Build Coastguard WorkerAM_CONDITIONAL([ENABLE_QPL], [test "x${have_qpl}" = "xyes"])
567*33b1fccfSAndroid Build Coastguard WorkerAM_CONDITIONAL([ENABLE_STATIC_FUSE], [test "x${enable_static_fuse}" = "xyes"])
568*33b1fccfSAndroid Build Coastguard Worker
569*33b1fccfSAndroid Build Coastguard Workerif test "x$have_uuid" = "xyes"; then
570*33b1fccfSAndroid Build Coastguard Worker  AC_DEFINE([HAVE_LIBUUID], 1, [Define to 1 if libuuid is found])
571*33b1fccfSAndroid Build Coastguard Workerfi
572*33b1fccfSAndroid Build Coastguard Worker
573*33b1fccfSAndroid Build Coastguard Workerif test "x$have_selinux" = "xyes"; then
574*33b1fccfSAndroid Build Coastguard Worker  AC_DEFINE([HAVE_LIBSELINUX], 1, [Define to 1 if libselinux is found])
575*33b1fccfSAndroid Build Coastguard Workerfi
576*33b1fccfSAndroid Build Coastguard Worker
577*33b1fccfSAndroid Build Coastguard Workerif test "x${have_lz4}" = "xyes"; then
578*33b1fccfSAndroid Build Coastguard Worker  AC_DEFINE([LZ4_ENABLED], [1], [Define to 1 if lz4 is enabled.])
579*33b1fccfSAndroid Build Coastguard Worker
580*33b1fccfSAndroid Build Coastguard Worker  if test "x${have_lz4hc}" = "xyes"; then
581*33b1fccfSAndroid Build Coastguard Worker    AC_DEFINE([LZ4HC_ENABLED], [1], [Define to 1 if lz4hc is enabled.])
582*33b1fccfSAndroid Build Coastguard Worker  fi
583*33b1fccfSAndroid Build Coastguard Worker
584*33b1fccfSAndroid Build Coastguard Worker  if test "x${lz4_force_static}" = "xyes"; then
585*33b1fccfSAndroid Build Coastguard Worker    LZ4_LIBS="-Wl,-Bstatic -Wl,-whole-archive -Xlinker ${LZ4_LIBS} -Wl,-no-whole-archive -Wl,-Bdynamic"
586*33b1fccfSAndroid Build Coastguard Worker    test -z "${with_lz4_libdir}" || LZ4_LIBS="-L${with_lz4_libdir} $LZ4_LIBS"
587*33b1fccfSAndroid Build Coastguard Worker  else
588*33b1fccfSAndroid Build Coastguard Worker    test -z "${with_lz4_libdir}" || LZ4_LIBS="-L${with_lz4_libdir} -R${with_lz4_libdir} $LZ4_LIBS"
589*33b1fccfSAndroid Build Coastguard Worker  fi
590*33b1fccfSAndroid Build Coastguard Worker  liblz4_LIBS="${LZ4_LIBS}"
591*33b1fccfSAndroid Build Coastguard Workerfi
592*33b1fccfSAndroid Build Coastguard WorkerAC_SUBST([liblz4_LIBS])
593*33b1fccfSAndroid Build Coastguard Worker
594*33b1fccfSAndroid Build Coastguard Workerif test "x${have_liblzma}" = "xyes"; then
595*33b1fccfSAndroid Build Coastguard Worker  AC_DEFINE([HAVE_LIBLZMA], [1], [Define to 1 if liblzma is enabled.])
596*33b1fccfSAndroid Build Coastguard Worker  liblzma_LIBS="-llzma"
597*33b1fccfSAndroid Build Coastguard Worker  test -z "${with_liblzma_libdir}" ||
598*33b1fccfSAndroid Build Coastguard Worker    liblzma_LIBS="-L${with_liblzma_libdir} $liblzma_LIBS"
599*33b1fccfSAndroid Build Coastguard Worker  test -z "${with_liblzma_incdir}" ||
600*33b1fccfSAndroid Build Coastguard Worker    liblzma_CFLAGS="-I${with_liblzma_incdir}"
601*33b1fccfSAndroid Build Coastguard Worker  AC_SUBST([liblzma_LIBS])
602*33b1fccfSAndroid Build Coastguard Worker  AC_SUBST([liblzma_CFLAGS])
603*33b1fccfSAndroid Build Coastguard Workerfi
604*33b1fccfSAndroid Build Coastguard Worker
605*33b1fccfSAndroid Build Coastguard Workerif test "x$have_zlib" = "xyes"; then
606*33b1fccfSAndroid Build Coastguard Worker  AC_DEFINE([HAVE_ZLIB], 1, [Define to 1 if zlib is found])
607*33b1fccfSAndroid Build Coastguard Workerfi
608*33b1fccfSAndroid Build Coastguard Worker
609*33b1fccfSAndroid Build Coastguard Workerif test "x$have_libdeflate" = "xyes"; then
610*33b1fccfSAndroid Build Coastguard Worker  AC_DEFINE([HAVE_LIBDEFLATE], 1, [Define to 1 if libdeflate is found])
611*33b1fccfSAndroid Build Coastguard Workerfi
612*33b1fccfSAndroid Build Coastguard Worker
613*33b1fccfSAndroid Build Coastguard Workerif test "x$have_libzstd" = "xyes"; then
614*33b1fccfSAndroid Build Coastguard Worker  AC_DEFINE([HAVE_LIBZSTD], 1, [Define to 1 if libzstd is found])
615*33b1fccfSAndroid Build Coastguard Workerfi
616*33b1fccfSAndroid Build Coastguard Worker
617*33b1fccfSAndroid Build Coastguard Workerif test "x$have_qpl" = "xyes"; then
618*33b1fccfSAndroid Build Coastguard Worker  AC_DEFINE([HAVE_QPL], 1, [Define to 1 if qpl is found])
619*33b1fccfSAndroid Build Coastguard Worker  AC_SUBST([libqpl_LIBS])
620*33b1fccfSAndroid Build Coastguard Worker  AC_SUBST([libqpl_CFLAGS])
621*33b1fccfSAndroid Build Coastguard Workerfi
622*33b1fccfSAndroid Build Coastguard Worker
623*33b1fccfSAndroid Build Coastguard Worker# Dump maximum block size
624*33b1fccfSAndroid Build Coastguard WorkerAS_IF([test "x$erofs_cv_max_block_size" = "x"],
625*33b1fccfSAndroid Build Coastguard Worker      [$erofs_cv_max_block_size = 4096], [])
626*33b1fccfSAndroid Build Coastguard Worker
627*33b1fccfSAndroid Build Coastguard WorkerAC_DEFINE_UNQUOTED([EROFS_MAX_BLOCK_SIZE], [$erofs_cv_max_block_size],
628*33b1fccfSAndroid Build Coastguard Worker		   [The maximum block size which erofs-utils supports])
629*33b1fccfSAndroid Build Coastguard Worker
630*33b1fccfSAndroid Build Coastguard WorkerAC_CONFIG_FILES([Makefile
631*33b1fccfSAndroid Build Coastguard Worker		 man/Makefile
632*33b1fccfSAndroid Build Coastguard Worker		 lib/Makefile
633*33b1fccfSAndroid Build Coastguard Worker		 mkfs/Makefile
634*33b1fccfSAndroid Build Coastguard Worker		 dump/Makefile
635*33b1fccfSAndroid Build Coastguard Worker		 fuse/Makefile
636*33b1fccfSAndroid Build Coastguard Worker		 fsck/Makefile])
637*33b1fccfSAndroid Build Coastguard WorkerAC_OUTPUT
638