1AC_INIT(version.h)
2AC_PREREQ(2.54)
3AC_CONFIG_AUX_DIR(config)
4AC_CONFIG_HEADERS([lib/config.h])
5AH_BOTTOM([#include <dirpaths.h>])
6MCONFIG=./MCONFIG
7AC_SUBST_FILE(MCONFIG)
8BINARY_TYPE=bin
9dnl
10dnl This is to figure out the version number and the date....
11dnl
12E2FSPROGS_VERSION=`grep E2FSPROGS_VERSION ${srcdir}/version.h  \
13	| awk '{print $3}' | tr \" " " | awk '{print $1}'`
14E2FSPROGS_DATE=`grep E2FSPROGS_DATE ${srcdir}/version.h | awk '{print $3}' \
15	| tr \" " " | awk '{print $1}'`
16E2FSPROGS_DAY=$(echo $E2FSPROGS_DATE | awk -F- '{print $1}' | sed -e '/^[[1-9]]$/s/^/0/')
17MONTH=`echo $E2FSPROGS_DATE | awk -F- '{print $2}'`
18YEAR=`echo $E2FSPROGS_DATE | awk -F- '{print $3}'`
19
20if expr $YEAR ">" 1900 > /dev/null ; then
21	E2FSPROGS_YEAR=$YEAR
22elif expr $YEAR ">" 90 >/dev/null ; then
23	E2FSPROGS_YEAR=19$YEAR
24else
25	E2FSPROGS_YEAR=20$YEAR
26fi
27
28case $MONTH in
29Jan)	MONTH_NUM=01; E2FSPROGS_MONTH="January" ;;
30Feb)	MONTH_NUM=02; E2FSPROGS_MONTH="February" ;;
31Mar)	MONTH_NUM=03; E2FSPROGS_MONTH="March" ;;
32Apr)	MONTH_NUM=04; E2FSPROGS_MONTH="April" ;;
33May)	MONTH_NUM=05; E2FSPROGS_MONTH="May" ;;
34Jun)	MONTH_NUM=06; E2FSPROGS_MONTH="June" ;;
35Jul)	MONTH_NUM=07; E2FSPROGS_MONTH="July" ;;
36Aug)	MONTH_NUM=08; E2FSPROGS_MONTH="August" ;;
37Sep)	MONTH_NUM=09; E2FSPROGS_MONTH="September" ;;
38Oct)	MONTH_NUM=10; E2FSPROGS_MONTH="October" ;;
39Nov)	MONTH_NUM=11; E2FSPROGS_MONTH="November" ;;
40Dec)	MONTH_NUM=12; E2FSPROGS_MONTH="December" ;;
41*)	AC_MSG_WARN([Unknown month $MONTH??]) ;;
42esac
43
44base_ver=`echo $E2FSPROGS_VERSION | \
45	       sed -e 's/-WIP//' -e 's/pre-//' -e 's/-PLUS//'`
46
47date_spec=${E2FSPROGS_YEAR}.${MONTH_NUM}.${E2FSPROGS_DAY}
48
49case $E2FSPROGS_VERSION in
50*-WIP|pre-*)
51	E2FSPROGS_PKGVER="$base_ver~WIP.$date_spec"
52	;;
53*)
54	E2FSPROGS_PKGVER="$base_ver"
55	;;
56esac
57
58unset DATE MONTH YEAR base_ver pre_vers date_spec
59AC_MSG_RESULT([Generating configuration file for e2fsprogs version $E2FSPROGS_VERSION])
60AC_MSG_RESULT([Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}])
61AC_SUBST(E2FSPROGS_YEAR)
62AC_SUBST(E2FSPROGS_MONTH)
63AC_SUBST(E2FSPROGS_DAY)
64AC_SUBST(E2FSPROGS_VERSION)
65AC_SUBST(E2FSPROGS_PKGVER)
66AC_SUBST(E2FSPROGS_DATE)
67dnl
68dnl Use diet libc
69dnl
70WITH_DIET_LIBC=
71AC_ARG_WITH([diet-libc],
72[  --with-diet-libc        use diet libc],
73CC="diet cc -nostdinc"
74WITH_DIET_LIBC=yes
75if test -z "$LIBS"
76then
77	LIBS="-lcompat"
78else
79	LIBS="$LIBS -lcompat"
80fi
81AC_MSG_RESULT(CC=$CC))dnl
82dnl
83AC_CANONICAL_HOST
84dnl
85dnl Check to see if libdl exists for the sake of dlopen
86dnl
87DLOPEN_LIB=''
88AC_CHECK_LIB(dl, dlopen,DLOPEN_LIB=-ldl)
89AC_SUBST(DLOPEN_LIB)
90dnl
91AC_ARG_WITH([cc],
92AC_HELP_STRING([--with-cc],[no longer supported, use CC= instead]),
93AC_MSG_ERROR([--with-cc no longer supported; use CC= instead]))
94dnl
95AC_ARG_WITH([ccopts],
96AC_HELP_STRING([--with-ccopts],[no longer supported, use CFLAGS= instead]),
97AC_MSG_ERROR([--with-ccopts no longer supported; use CFLAGS= instead]))
98dnl
99AC_ARG_WITH([ldopts],
100AC_HELP_STRING([--with-ldopts],[no longer supported, use LDFLAGS= instead]),
101AC_MSG_ERROR([--with-ldopts no longer supported; use LDFLAGS= instead]))
102dnl
103AC_PROG_CC
104if test "$GCC" = yes; then
105   RDYNAMIC="-rdynamic"
106   AC_SUBST(RDYNAMIC)
107fi
108AC_PROG_CPP
109dnl
110dnl Alpha computers use fast and imprecise floating point code that may
111dnl miss exceptions by default. Force sane options if we're using GCC.
112AC_MSG_CHECKING(for additional special compiler flags)
113if test "$GCC" = yes
114then
115    case "$host_cpu" in
116	alpha)		addcflags="-mieee" ;;
117    esac
118fi
119if test "x$addcflags" != x
120then
121    AC_MSG_RESULT($addcflags)
122    CFLAGS="$addcflags $CFLAGS"
123else
124    AC_MSG_RESULT([[(none)]])
125fi
126AC_USE_SYSTEM_EXTENSIONS
127dnl
128dnl Set default values for library extensions.  Will be dealt with after
129dnl parsing configuration options, which may modify these
130dnl
131LIB_EXT=.a
132STATIC_LIB_EXT=.a
133PROFILED_LIB_EXT=.a
134dnl
135dnl Allow separate `root_prefix' to be specified
136dnl
137AC_ARG_WITH([root-prefix],
138[  --with-root-prefix=PREFIX override prefix variable for files to be placed in the root],
139root_prefix=$withval,
140root_prefix=NONE)dnl
141dnl
142dnl handle --enable-maintainer-mode
143dnl
144AC_ARG_ENABLE([maintainer-mode],
145[  --enable-maintainer-mode enable makefile rules useful for maintainers],
146if test "$enableval" = "no"
147then
148	MAINTAINER_CMT=#
149	AC_MSG_RESULT([Disabling maintainer mode])
150else
151	MAINTAINER_CMT=
152	AC_MSG_RESULT([Enabling maintainer mode])
153fi
154,
155MAINTAINER_CMT=#
156AC_MSG_RESULT([Disabling maintainer mode by default])
157)
158AC_SUBST(MAINTAINER_CMT)
159dnl
160dnl handle --enable-symlink-install
161dnl
162AC_ARG_ENABLE([symlink-install],
163[  --enable-symlink-install use symlinks when installing instead of hard links],
164if test "$enableval" = "no"
165then
166	LINK_INSTALL_FLAGS=-f
167	AC_MSG_RESULT([Disabling symlinks for install])
168else
169	LINK_INSTALL_FLAGS=-sf
170	AC_MSG_RESULT([Enabling symlinks for install])
171fi
172,
173LINK_INSTALL_FLAGS=-f
174AC_MSG_RESULT([Disabling symlinks for install by default])
175)
176AC_SUBST(LINK_INSTALL_FLAGS)
177dnl
178dnl handle --enable-relative-symlinks
179dnl
180relative_symlink_defined=
181AC_ARG_ENABLE([relative-symlinks],
182[  --enable-relative-symlinks use relative symlinks when installing],
183if test "$enableval" = "no"
184then
185	SYMLINK_RELATIVE=
186	relative_symlink_defined=yes
187	AC_MSG_RESULT([Disabling relative symlinks for install])
188else
189	SYMLINK_RELATIVE=--relative
190	relative_symlink_defined=yes
191	AC_MSG_RESULT([Enabling relative symlinks for install])
192fi)
193AC_ARG_ENABLE([symlink-relative-symlinks],,
194if test "$enableval" = "no"
195then
196	SYMLINK_RELATIVE=yes
197	AC_MSG_RESULT([Disabling relative symlinks for install])
198else
199	SYMLINK_RELATIVE=--relative
200	AC_MSG_RESULT([Enabling relative symlinks for install])
201fi
202,
203if test -z "$relative_symlink_defined"
204then
205	SYMLINK_RELATIVE=
206AC_MSG_RESULT([Disabling relative symlinks for install by default])
207fi
208)
209AC_SUBST(SYMLINK_RELATIVE)
210dnl
211dnl handle --enable-symlink-build
212dnl
213AC_ARG_ENABLE([symlink-build],
214[  --enable-symlink-build  use symlinks while building instead of hard links],
215if test "$enableval" = "no"
216then
217	LINK_BUILD_FLAGS=
218	AC_MSG_RESULT([Disabling symlinks for build])
219else
220	LINK_BUILD_FLAGS=-s
221	AC_MSG_RESULT([Enabling symlinks for build])
222fi
223,
224LINK_BUILD_FLAGS=
225AC_MSG_RESULT([Disabling symlinks for build by default])
226)
227AC_SUBST(LINK_BUILD_FLAGS)
228dnl
229dnl handle --enable-verbose-makecmds
230dnl
231AC_ARG_ENABLE([verbose-makecmds],
232[  --enable-verbose-makecmds enable verbose make command output],
233if test "$enableval" = "no"
234then
235	AC_MSG_RESULT([Disabling verbose make commands])
236	E=@echo
237	ES=echo
238	Q=@
239else
240	AC_MSG_RESULT([Enabling verbose make commands])
241	E=@\\#
242	ES=\\#
243	Q=
244fi
245,
246AC_MSG_RESULT([Disabling verbose make commands])
247E=@echo
248ES=echo
249Q=@
250)
251AC_SUBST(E)
252AC_SUBST(ES)
253AC_SUBST(Q)
254dnl
255dnl This needs to be before all of the --enable-*-shlibs options
256dnl
257E2_PKG_CONFIG_STATIC=--static
258LDFLAG_DYNAMIC=
259PRIVATE_LIBS_CMT=
260dnl
261dnl handle --enable-elf-shlibs
262dnl
263AC_ARG_ENABLE([elf-shlibs],
264[  --enable-elf-shlibs	  select ELF shared libraries],
265if test "$enableval" = "no"
266then
267	ELF_CMT=#
268	MAKEFILE_ELF=/dev/null
269	AC_MSG_RESULT([Disabling ELF shared libraries])
270else
271	E2_PKG_CONFIG_STATIC=
272	ELF_CMT=
273	MAKEFILE_ELF=$srcdir/lib/Makefile.elf-lib
274	[case "$host_os" in
275	solaris2.*)
276		MAKEFILE_ELF=$srcdir/lib/Makefile.solaris-lib
277	;;
278	esac]
279	BINARY_TYPE=elfbin
280	LIB_EXT=.so
281	PRIVATE_LIBS_CMT=#
282	LDFLAG_DYNAMIC=['-Wl,-rpath-link,$(top_builddir)/lib']
283	AC_MSG_RESULT([Enabling ELF shared libraries])
284fi
285,
286MAKEFILE_ELF=/dev/null
287ELF_CMT=#
288AC_MSG_RESULT([Disabling ELF shared libraries by default])
289)
290AC_SUBST(ELF_CMT)
291AC_SUBST_FILE(MAKEFILE_ELF)
292dnl
293dnl handle --enable-bsd-shlibs
294dnl
295AC_ARG_ENABLE([bsd-shlibs],
296[  --enable-bsd-shlibs	  select BSD shared libraries],
297if test "$enableval" = "no"
298then
299	BSDLIB_CMT=#
300	MAKEFILE_BSDLIB=/dev/null
301	AC_MSG_RESULT([Disabling BSD shared libraries])
302else
303	E2_PKG_CONFIG_STATIC=
304	BSDLIB_CMT=
305	MAKEFILE_BSDLIB=$srcdir/lib/Makefile.bsd-lib
306	LIB_EXT=.so
307	[case "$host_os" in
308	darwin*)
309		MAKEFILE_BSDLIB=$srcdir/lib/Makefile.darwin-lib
310		LIB_EXT=.dylib
311	;;
312	esac]
313	AC_MSG_RESULT([Enabling BSD shared libraries])
314fi
315,
316MAKEFILE_BSDLIB=/dev/null
317BSDLIB_CMT=#
318AC_MSG_RESULT([Disabling BSD shared libraries by default])
319)
320AC_SUBST(BSDLIB_CMT)
321AC_SUBST_FILE(MAKEFILE_BSDLIB)
322dnl
323dnl handle --enable-profile
324dnl
325AC_ARG_ENABLE([profile],
326[  --enable-profile	  build profiling libraries],
327if test "$enableval" = "no"
328then
329	PROFILE_CMT=#
330	MAKEFILE_PROFILE=/dev/null
331	AC_MSG_RESULT([Disabling profiling libraries])
332else
333	PROFILE_CMT=
334	MAKEFILE_PROFILE=$srcdir/lib/Makefile.profile
335	PROFILED_LIB_EXT=_p.a
336	AC_MSG_RESULT([Building profiling libraries])
337fi
338,
339PROFILE_CMT=#
340MAKEFILE_PROFILE=/dev/null
341AC_MSG_RESULT([Disabling profiling libraries by default])
342)
343AC_SUBST(PROFILE_CMT)
344AC_SUBST_FILE(MAKEFILE_PROFILE)
345dnl
346dnl handle --enable-gcov
347dnl
348AC_ARG_ENABLE([gcov],
349[  --enable-gcov	  	  build for coverage testing using gcov],
350if test "$enableval" = "yes"
351then
352	CFLAGS="-g -fprofile-arcs -ftest-coverage"
353	LDFLAGS="-fprofile-arcs -ftest-coverage"
354	AC_MSG_RESULT([Enabling gcov support])
355fi
356)
357dnl
358dnl handle --enable-hardening
359dnl
360CFLAGS_SHLIB="${CFLAGS_SHLIB:-$CFLAGS}"
361CFLAGS_STLIB="${CFLAGS_STLIB:-$CFLAGS}"
362LDFLAGS_SHLIB=${LDFLAGS_SHLIB:-$LDFLAGS}
363LDFLAGS_STATIC=${LDFLAGS_STATIC:-$LDFLAGS}
364AC_ARG_ENABLE([hardening],
365[  --enable-hardening	  	  build for coverage testing using gcov],
366if test "$enableval" = "yes"
367then
368	HARDEN_CFLAGS="-D_FORTIFY_SOURCE=2 -fstack-protector-strong"
369	HARDEN_LDFLAGS=["-Wl,-z,relro -Wl,-z,now"]
370	CFLAGS="$CFLAGS $HARDEN_CFLAGS -fPIE"
371	CFLAGS_SHLIB="$CFLAGS_SHLIB $HARDEN_CFLAGS"
372	CFLAGS_STLIB="$CFLAGS_STLIB $HARDEN_CFLAGS -fPIE"
373	LDFLAGS="$LDFLAGS $HARDEN_LDFLAGS -fPIE -pie"
374	LDFLAGS_STATIC="$LDFLAGS_STATIC $HARDEN_LDFLAGS"
375	LDFLAGS_SHLIB="$LDFLAGS_SHLIB $HARDEN_LDFLAGS"
376	AC_MSG_RESULT([Enabling hardening support])
377fi
378)
379dnl
380dnl Substitute library extensions
381dnl
382AC_SUBST(LIB_EXT)
383AC_SUBST(STATIC_LIB_EXT)
384AC_SUBST(PROFILED_LIB_EXT)
385AC_SUBST(LDFLAG_DYNAMIC)
386AC_SUBST(PRIVATE_LIBS_CMT)
387dnl
388dnl handle --enable-jbd-debug
389dnl
390AC_ARG_ENABLE([jbd-debug],
391[  --enable-jbd-debug  	  enable journal debugging],
392if test "$enableval" = "no"
393then
394	AC_MSG_RESULT([Disabling journal debugging])
395else
396	AC_DEFINE(CONFIG_JBD_DEBUG, 1,
397		[Define to 1 if debugging ext3/4 journal code])
398	AC_MSG_RESULT([Enabling journal debugging])
399fi
400,
401AC_MSG_RESULT([Disabling journal debugging by default])
402)
403dnl
404dnl handle --enable-blkid-debug
405dnl
406AC_ARG_ENABLE([blkid-debug],
407[  --enable-blkid-debug    enable blkid debugging],
408if test "$enableval" = "no"
409then
410	AC_MSG_RESULT([Disabling blkid debugging])
411else
412	AC_DEFINE(CONFIG_BLKID_DEBUG, 1,
413		[Define to 1 if debugging the blkid library])
414	AC_MSG_RESULT([Enabling blkid debugging])
415fi
416,
417AC_MSG_RESULT([Disabling blkid debugging by default])
418)
419dnl
420dnl handle --enable-testio-debug
421dnl
422AC_ARG_ENABLE([testio-debug],
423[  --disable-testio-debug  disable the use of the test I/O manager for debugging],
424AH_TEMPLATE([CONFIG_TESTIO_DEBUG],
425	[Define to 1 if the testio I/O manager should be enabled])
426if test "$enableval" = "no"
427then
428	AC_MSG_RESULT([Disabling testio debugging])
429	TEST_IO_CMT="#"
430else
431	TEST_IO_CMT=
432	AC_DEFINE(CONFIG_TESTIO_DEBUG, 1)
433	AC_MSG_RESULT([Enabling testio debugging])
434fi
435,
436AC_MSG_RESULT([Enabling testio debugging by default])
437AC_DEFINE(CONFIG_TESTIO_DEBUG, 1)
438TEST_IO_CMT=
439)
440AC_SUBST(TEST_IO_CMT)
441dnl
442dnl handle --disable-libuuid
443dnl
444PKG_PROG_PKG_CONFIG
445LIBUUID=
446DEPLIBUUID=
447STATIC_LIBUUID=
448DEPSTATIC_LIBUUID=
449PROFILED_LIBUUID=
450DEPPROFILED_LIBUUID=
451UUID_CMT=
452AC_ARG_ENABLE([libuuid],
453[  --enable-libuuid	  build and use private uuid library],
454if test "$enableval" = "no"
455then
456	if test -z "$PKG_CONFIG"; then
457		AC_MSG_ERROR([pkg-config not installed; please install it.])
458	fi
459
460	AC_CHECK_LIB(uuid, uuid_generate,
461		[LIBUUID=`$PKG_CONFIG --libs uuid`;
462		 STATIC_LIBUUID=`$PKG_CONFIG --static --libs uuid`],
463		[AC_MSG_ERROR([external uuid library not found])])
464	PROFILED_LIBUUID=$LIBUUID
465	UUID_CMT=#
466	AC_MSG_RESULT([Disabling private uuid library])
467else
468	LIBUUID='$(LIB)/libuuid'$LIB_EXT
469	DEPLIBUUID=$LIBUUID
470	STATIC_LIBUUID='$(LIB)/libuuid'$STATIC_LIB_EXT
471	DEPSTATIC_LIBUUID=$STATIC_LIBUUID
472	PROFILED_LIBUUID='$(LIB)/libuuid'$PROFILED_LIB_EXT
473	DEPPROFILED_LIBUUID=$PROFILED_LIBUUID
474	AC_MSG_RESULT([Enabling private uuid library])
475fi
476,
477if test -n "$PKG_CONFIG"; then
478	AC_CHECK_LIB(uuid, uuid_generate,
479		[LIBUUID=`$PKG_CONFIG --libs uuid`;
480		 STATIC_LIBUUID=`$PKG_CONFIG --static --libs uuid`])
481fi
482if test -n "$LIBUUID"; then
483	PROFILED_LIBUUID=$LIBUUID
484	UUID_CMT=#
485	AC_MSG_RESULT([Using system uuid by default])
486else
487	LIBUUID='$(LIB)/libuuid'$LIB_EXT
488	DEPLIBUUID=$LIBUUID
489	STATIC_LIBUUID='$(LIB)/libuuid'$STATIC_LIB_EXT
490	DEPSTATIC_LIBUUID=$STATIC_LIBUUID
491	PROFILED_LIBUUID='$(LIB)/libuuid'$PROFILED_LIB_EXT
492	DEPPROFILED_LIBUUID=$PROFILED_LIBUUID
493	AC_MSG_RESULT([Enabling private uuid library by default])
494fi
495)
496AC_SUBST(LIBUUID)
497AC_SUBST(DEPLIBUUID)
498AC_SUBST(STATIC_LIBUUID)
499AC_SUBST(DEPSTATIC_LIBUUID)
500AC_SUBST(PROFILED_LIBUUID)
501AC_SUBST(DEPPROFILED_LIBUUID)
502AC_SUBST(UUID_CMT)
503dnl
504dnl handle --disable-libblkid
505dnl
506PKG_PROG_PKG_CONFIG
507LIBBLKID=
508DEPLIBBLKID=
509STATIC_LIBBLKID=
510DEPSTATIC_LIBBLKID=
511PROFILED_LIBBLKID=
512DEPPROFILED_LIBBLKID=
513BLKID_CMT=
514AH_TEMPLATE([CONFIG_BUILD_FINDFS], [Define to 1 to compile findfs])
515AC_ARG_ENABLE([libblkid],
516[  --enable-libblkid	  build and use private blkid library],
517if test "$enableval" = "no"
518then
519	if test -z "$PKG_CONFIG"; then
520		AC_MSG_ERROR([pkg-config not installed; please install it.])
521	fi
522
523	AC_CHECK_LIB(blkid, blkid_get_cache,
524		[LIBBLKID=`$PKG_CONFIG --libs blkid`;
525		 STATIC_LIBBLKID=`$PKG_CONFIG --static --libs blkid`],
526		[AC_MSG_ERROR([external blkid library not found])], -luuid)
527	BLKID_CMT=#
528	PROFILED_LIBBLKID=$LIBBLKID
529	AC_MSG_RESULT([Disabling private blkid library])
530else
531	LIBBLKID='$(LIB)/libblkid'$LIB_EXT
532	DEPLIBBLKID=$LIBBLKID
533	STATIC_LIBBLKID='$(LIB)/libblkid'$STATIC_LIB_EXT
534	DEPSTATIC_LIBBLKID=$STATIC_LIBBLKID
535	PROFILED_LIBBLKID='$(LIB)/libblkid'$PROFILED_LIB_EXT
536	DEPPROFILED_LIBBLKID=$PROFILED_LIBBLKID
537	AC_DEFINE(CONFIG_BUILD_FINDFS, 1)
538	AC_MSG_RESULT([Enabling private blkid library])
539fi
540,
541if test -n "$PKG_CONFIG"; then
542	AC_CHECK_LIB(blkid, blkid_get_cache,
543		[LIBBLKID=`$PKG_CONFIG --libs blkid`;
544		 STATIC_LIBBLKID=`$PKG_CONFIG --static --libs blkid`])
545fi
546if test -n "$LIBBLKID"; then
547	BLKID_CMT=#
548	PROFILED_LIBBLKID=$LIBBLKID
549	AC_MSG_RESULT([Using system blkid library by default])
550else
551	LIBBLKID='$(LIB)/libblkid'$LIB_EXT
552	DEPLIBBLKID=$LIBBLKID
553	STATIC_LIBBLKID='$(LIB)/libblkid'$STATIC_LIB_EXT
554	DEPSTATIC_LIBBLKID=$STATIC_LIBBLKID
555	PROFILED_LIBBLKID='$(LIB)/libblkid'$PROFILED_LIB_EXT
556	DEPPROFILED_LIBBLKID=$PROFILED_LIBBLKID
557	AC_DEFINE(CONFIG_BUILD_FINDFS, 1)
558	AC_MSG_RESULT([Enabling private blkid library by default])
559fi
560)
561AC_SUBST(LIBBLKID)
562AC_SUBST(DEPLIBBLKID)
563AC_SUBST(STATIC_LIBBLKID)
564AC_SUBST(DEPSTATIC_LIBBLKID)
565AC_SUBST(PROFILED_LIBBLKID)
566AC_SUBST(DEPPROFILED_LIBBLKID)
567AC_SUBST(BLKID_CMT)
568dnl
569dnl handle --enable-subset
570dnl
571ALL_CMT=
572SUBSET_CMT=
573AC_ARG_ENABLE([subset],
574[  --enable-subset  	  enable subset-only build],
575if test "$enableval" = "no"
576then
577	SUBSET_CMT=#
578	AC_MSG_RESULT([Disabling subset-only build])
579else
580	ALL_CMT=#
581	AC_MSG_RESULT([Enabling subset-only-build])
582fi
583,)
584AC_SUBST(ALL_CMT)
585AC_SUBST(SUBSET_CMT)
586dnl
587dnl handle --disable-backtrace
588dnl
589AH_TEMPLATE([DISABLE_BACKTRACE], [Define to 1 to disable use of backtrace])
590AC_ARG_ENABLE([backtrace],
591[  --disable-backtrace	  disable use backtrace],
592if test "$enableval" = "no"
593then
594	AC_MSG_RESULT([Disabling use of backtrace])
595	AC_DEFINE(DISABLE_BACKTRACE, 1)
596else
597	AC_MSG_RESULT([Enabling use of backtrace])
598fi
599,
600AC_MSG_RESULT([Enabling use of backtrace by default])
601)
602dnl
603dnl handle --enable-debugfs
604dnl
605AC_ARG_ENABLE([debugfs],
606[  --disable-debugfs   	  disable support of debugfs program],
607if test "$enableval" = "no"
608then
609	AC_MSG_RESULT([Disabling debugfs support])
610	DEBUGFS_CMT="#"
611else
612	DEBUGFS_CMT=
613	AC_MSG_RESULT([Enabling debugfs support])
614fi
615,
616AC_MSG_RESULT([Enabling debugfs support by default])
617DEBUGFS_CMT=
618)
619AC_SUBST(DEBUGFS_CMT)
620dnl
621dnl handle --enable-imager
622dnl
623AC_ARG_ENABLE([imager],
624[  --disable-imager   	  disable support of e2image program],
625if test "$enableval" = "no"
626then
627	AC_MSG_RESULT([Disabling e2image support])
628	IMAGER_CMT="#"
629else
630	IMAGER_CMT=
631	AC_MSG_RESULT([Enabling e2image support])
632fi
633,
634AC_MSG_RESULT([Enabling e2image support by default])
635IMAGER_CMT=
636)
637AC_SUBST(IMAGER_CMT)
638dnl
639dnl handle --enable-resizer
640dnl
641AC_ARG_ENABLE([resizer],
642[  --disable-resizer   	  disable support of e2resize program],
643if test "$enableval" = "no"
644then
645	AC_MSG_RESULT([Disabling e2resize support])
646	RESIZER_CMT="#"
647else
648	RESIZER_CMT=
649	AC_MSG_RESULT([Enabling e2resize support])
650fi
651,
652AC_MSG_RESULT([Enabling e2resize support by default])
653RESIZER_CMT=
654)
655AC_SUBST(RESIZER_CMT)
656dnl
657dnl handle --enable-defrag
658dnl
659AC_ARG_ENABLE([defrag],
660[  --disable-defrag   	  disable support of e4defrag program],
661if test "$enableval" = "no"
662then
663	AC_MSG_RESULT([Disabling e4defrag support])
664	DEFRAG_CMT="#"
665else
666	DEFRAG_CMT=
667	AC_MSG_RESULT([Enabling e4defrag support])
668fi
669,
670if test -z "$WITH_DIET_LIBC"
671then
672	AC_MSG_RESULT([Enabling e4defrag support by default])
673	DEFRAG_CMT=
674else
675	AC_MSG_RESULT([Disabling e4defrag support by default])
676	DEFRAG_CMT="#"
677fi
678)
679AC_SUBST(DEFRAG_CMT)
680dnl
681dnl See whether to install the `fsck' wrapper program (that calls e2fsck)
682dnl
683AC_ARG_ENABLE([fsck],
684[  --enable-fsck           build fsck wrapper program],
685[if test "$enableval" = "no"
686then
687	FSCK_PROG='' FSCK_MAN=''
688	AC_MSG_RESULT([Not building fsck wrapper])
689else
690	FSCK_PROG=fsck FSCK_MAN=fsck.8
691	AC_MSG_RESULT([Building fsck wrapper])
692fi]
693,
694[case "$host_os" in
695  gnu*)
696    FSCK_PROG='' FSCK_MAN=''
697    AC_MSG_RESULT([Not building fsck wrapper by default])
698    ;;
699  *)
700    FSCK_PROG=fsck FSCK_MAN=fsck.8
701    AC_MSG_RESULT([Building fsck wrapper by default])
702esac]
703)
704AC_SUBST(FSCK_PROG)
705AC_SUBST(FSCK_MAN)
706dnl
707dnl See whether to install the `e2initrd-helper' program
708dnl
709AC_ARG_ENABLE([e2initrd-helper],
710[  --enable-e2initrd-helper build e2initrd-helper program],
711[if test "$enableval" = "no"
712then
713	E2INITRD_PROG='' E2INITRD_MAN=''
714	AC_MSG_RESULT([Not building e2initrd helper])
715else
716	E2INITRD_PROG=e2initrd_helper E2INITRD_MAN=e2initrd_helper.8
717	AC_MSG_RESULT([Building e2initrd helper])
718fi]
719,
720E2INITRD_PROG=e2initrd_helper E2INITRD_MAN=e2initrd_helper.8
721AC_MSG_RESULT([Building e2initrd helper by default])
722)
723AC_SUBST(E2INITRD_PROG)
724AC_SUBST(E2INITRD_MAN)
725dnl
726dnl
727dnl
728AC_ARG_ENABLE([tls],
729[  --disable-tls           disable use of thread local support],
730[if test "$enableval" = "no"
731then
732	try_tls=""
733	AC_MSG_RESULT([Disabling thread local support])
734else
735	try_tls="yes"
736	AC_MSG_RESULT([Enabling thread local support])
737fi]
738,
739if test -n "$WITH_DIET_LIBC"
740then
741	try_tls=""
742	AC_MSG_RESULT([Diet libc does not support thread local support])
743else
744	try_tls="yes"
745	AC_MSG_RESULT([Try using thread local support by default])
746fi
747)
748if test "$try_tls" = "yes"
749then
750AX_TLS
751fi
752dnl
753dnl
754dnl
755AH_TEMPLATE([USE_UUIDD], [Define to 1 to build uuidd])
756AC_ARG_ENABLE([uuidd],
757[  --disable-uuidd         disable building the uuid daemon],
758[if test "$enableval" = "no"
759then
760	AC_MSG_RESULT([Not building uuidd])
761	UUIDD_CMT="#"
762else
763	AC_DEFINE(USE_UUIDD, 1)
764	UUIDD_CMT=""
765	AC_MSG_RESULT([Building uuidd])
766fi]
767,
768AC_DEFINE(USE_UUIDD, 1)
769if test -z "$UUID_CMT"
770then
771	UUIDD_CMT=""
772	AC_MSG_RESULT([Building uuidd by default])
773else
774	UUIDD_CMT="#"
775	AC_MSG_RESULT([Disabling uuidd by default])
776fi
777)
778AC_SUBST(UUIDD_CMT)
779dnl
780dnl handle --disable-mmp
781dnl
782AH_TEMPLATE([CONFIG_MMP], [Define to 1 to enable mmp support])
783AC_ARG_ENABLE([mmp],
784[  --disable-mmp           disable support mmp, Multi Mount Protection],
785if test "$enableval" = "no"
786then
787	AC_MSG_RESULT([Disabling mmp support])
788else
789	AC_MSG_RESULT([Enabling mmp support])
790	AC_DEFINE(CONFIG_MMP, 1)
791fi
792,
793AC_MSG_RESULT([Enabling mmp support by default])
794AC_DEFINE(CONFIG_MMP, 1)
795)
796dnl
797dnl handle --disable-tdb
798dnl
799AH_TEMPLATE([CONFIG_TDB], [Define to 1 to enable tdb support])
800AC_ARG_ENABLE([tdb],
801[  --disable-tdb           disable tdb support],
802if test "$enableval" = "no"
803then
804	AC_MSG_RESULT([Disabling tdb support])
805	TDB_CMT="#"
806	TDB_MAN_COMMENT='.\"'
807else
808	AC_MSG_RESULT([Enabling tdb support])
809	AC_DEFINE(CONFIG_TDB, 1)
810	TDB_CMT=""
811	TDB_MAN_COMMENT=""
812fi
813,
814AC_MSG_RESULT([Enabling mmp support by default])
815AC_DEFINE(CONFIG_TDB, 1)
816TDB_CMT=""
817TDB_MAN_COMMENT=""
818)
819AC_SUBST(TDB_CMT)
820AC_SUBST(TDB_MAN_COMMENT)
821dnl
822dnl handle --disable-bmap-stats
823dnl
824AH_TEMPLATE([ENABLE_BMAP_STATS], [Define to 1 to enable bitmap stats.])
825AC_ARG_ENABLE([bmap-stats],
826[  --disable-bmap-stats    disable collection of bitmap stats.],
827if test "$enableval" = "no"
828then
829	AC_MSG_RESULT([Disabling bitmap statistics support])
830else
831	AC_MSG_RESULT([Enabling bitmap statistics support])
832	AC_DEFINE(ENABLE_BMAP_STATS, 1)
833fi
834,
835AC_MSG_RESULT([Enabling bitmap statistics support by default])
836AC_DEFINE(ENABLE_BMAP_STATS, 1)
837)
838dnl
839dnl handle --enable-bmap-stats-ops
840dnl
841AH_TEMPLATE([ENABLE_BMAP_STATS_OPS], [Define to 1 to enable bitmap stats.])
842AC_ARG_ENABLE([bmap-stats-ops],
843[  --enable-bmap-stats-ops enable collection of additional bitmap stats],
844if test "$enableval" = "no"
845then
846	AC_MSG_RESULT([Disabling additional bitmap statistics])
847else
848	dnl There has to be a better way!
849	AS_IF([test "x${enable_bmap_stats}" = "xno"],
850	 AC_MSG_FAILURE([Error --enable-bmap-stats-ops requires bmap-stats]))
851
852	AC_MSG_RESULT([Enabling additional bitmap statistics])
853	AC_DEFINE(ENABLE_BMAP_STATS_OPS, 1)
854fi
855,
856AC_MSG_RESULT([Disabling additional bitmap statistics by default])
857)
858dnl
859dnl
860dnl
861MAKEFILE_LIBRARY=$srcdir/lib/Makefile.library
862AC_SUBST_FILE(MAKEFILE_LIBRARY)
863dnl
864dnl Add internationalization support, using gettext.
865dnl
866GETTEXT_PACKAGE=e2fsprogs
867PACKAGE=e2fsprogs
868VERSION="$E2FSPROGS_VERSION"
869VERSION=0.14.1
870AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [package name for gettext])
871AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [version for gettext])
872AC_SUBST(GETTEXT_PACKAGE)
873AC_SUBST(PACKAGE)
874AC_SUBST(VERSION)
875
876AM_GNU_GETTEXT
877dnl
878dnl End of configuration options
879dnl
880AC_SUBST(BINARY_TYPE)
881AC_PROG_MAKE_SET
882CHECK_GNU_MAKE
883AC_PATH_PROG(LN, ln, ln)
884AC_PROG_MKDIR_P
885AC_PROG_LN_S
886AC_PATH_PROG(MV, mv, mv)
887AC_PATH_PROG(CP, cp, cp)
888AC_PATH_PROG(RM, rm, rm)
889AC_PATH_PROG(CHMOD, chmod, :)
890AC_PROG_AWK
891AC_PROG_EGREP
892AC_PATH_PROG(SED, sed, sed)
893AC_PATH_PROG(PERL, perl, perl)
894AC_PATH_PROG(LDCONFIG, ldconfig, :)
895AC_CHECK_TOOL(AR, ar, ar)
896AC_CHECK_TOOL(RANLIB, ranlib, :)
897AC_CHECK_TOOL(STRIP, strip, :)
898AC_CHECK_PROG(MAKEINFO, makeinfo, makeinfo, )
899if test "_$MAKEINFO" = "_"; then
900    MAKEINFO="echo Makeinfo is missing. Info documentation will not be built."
901else
902    case "$MAKEINFO" in
903      */missing.*)
904        AC_MSG_WARN([
905*** Makeinfo is missing. Info documentation will not be built.])
906        ;;
907      *)
908        ;;
909    esac
910fi
911AC_SUBST(MAKEINFO)
912AC_PROG_INSTALL
913# See if we need a separate native compiler.
914if test $cross_compiling = no; then
915  BUILD_CC="$CC"
916  AC_SUBST(BUILD_CC)
917else
918  AC_CHECK_PROGS(BUILD_CC, gcc cc)
919fi
920AC_CHECK_HEADERS(m4_flatten([
921	dirent.h
922	errno.h
923	execinfo.h
924	getopt.h
925	malloc.h
926	mntent.h
927	paths.h
928	semaphore.h
929	setjmp.h
930	signal.h
931	stdarg.h
932	stdint.h
933	stdlib.h
934	termios.h
935	termio.h
936	unistd.h
937	utime.h
938	attr/xattr.h
939	linux/falloc.h
940	linux/fd.h
941	linux/fsmap.h
942	linux/major.h
943	linux/loop.h
944	linux/types.h
945	net/if_dl.h
946	netinet/in.h
947	sys/acl.h
948	sys/disklabel.h
949	sys/disk.h
950	sys/file.h
951	sys/ioctl.h
952	sys/key.h
953	sys/mkdev.h
954	sys/mman.h
955	sys/mount.h
956	sys/prctl.h
957	sys/resource.h
958	sys/select.h
959	sys/socket.h
960	sys/sockio.h
961	sys/stat.h
962	sys/syscall.h
963	sys/sysctl.h
964	sys/sysmacros.h
965	sys/time.h
966	sys/types.h
967	sys/un.h
968	sys/wait.h
969	sys/xattr.h
970]))
971dnl Check where to find a dd(1) that supports iflag=fullblock
972dnl and oflag=append
973AC_MSG_CHECKING([for a dd(1) program that supports iflag=fullblock])
974DD=
975for i in dd gdd ; do
976	if "$i" if=/dev/null of=/dev/null count=1 bs=10k 2>/dev/null iflag=fullblock oflag=append ; then
977		DD=$i
978		break
979	fi
980done
981if test -n "$DD" ; then
982	AC_MSG_RESULT([$DD])
983else
984	AC_MSG_RESULT([not found, using dd])
985	DD=dd
986	AC_MSG_WARN([No GNU-compatible dd(1) program found, expect some self-test failures.])
987fi
988AC_SUBST([DD])
989
990AC_CHECK_HEADERS(net/if.h,,,
991[[
992#if HAVE_SYS_TYPES_H
993#include <sys/types.h>
994#endif
995#if HAVE_SYS_SOCKET
996#include <sys/socket.h>
997#endif
998]])
999AC_FUNC_VPRINTF
1000dnl Check to see if dirent has member d_reclen. On cygwin those d_reclen
1001dnl is not declared.
1002AC_CHECK_MEMBER(struct dirent.d_reclen,[AC_DEFINE(HAVE_RECLEN_DIRENT, 1,
1003		       [Define to 1 if dirent has d_reclen])],,
1004		[#include <dirent.h>])
1005AC_CHECK_MEMBERS([struct stat.st_atim])
1006dnl Check to see if ssize_t was declared
1007AC_CHECK_TYPE(ssize_t,[AC_DEFINE(HAVE_TYPE_SSIZE_T, 1,
1008		[Define to 1 if ssize_t declared])],,
1009	      [#include <sys/types.h>])
1010dnl
1011dnl Check to see if llseek() is declared in unistd.h.  On some libc's
1012dnl it is, and on others it isn't..... Thank you glibc developers....
1013dnl
1014AC_CHECK_DECL(llseek,[AC_DEFINE(HAVE_LLSEEK_PROTOTYPE, 1,
1015			[Define to 1 if llseek declared in unistd.h])],,
1016	      [#include <unistd.h>])
1017dnl
1018dnl Check to see if lseek64() is declared in unistd.h.  Glibc's header files
1019dnl are so convoluted that I can't tell whether it will always be defined,
1020dnl and if it isn't defined while lseek64 is defined in the library,
1021dnl disaster will strike.
1022dnl
1023dnl Warning!  Use of --enable-gcc-wall may throw off this test.
1024dnl
1025dnl
1026AC_CHECK_DECL(lseek64,[AC_DEFINE(HAVE_LSEEK64_PROTOTYPE, 1,
1027			[Define to 1 if lseek64 declared in unistd.h])],,
1028		[#define _LARGEFILE_SOURCE
1029		 #define _LARGEFILE64_SOURCE
1030		 #include <unistd.h>])
1031dnl
1032dnl Word sizes...
1033dnl
1034AC_CHECK_SIZEOF(short)
1035AC_CHECK_SIZEOF(int)
1036AC_CHECK_SIZEOF(long)
1037AC_CHECK_SIZEOF(long long)
1038AC_CHECK_SIZEOF(off_t)
1039AC_CHECK_SIZEOF(time_t)
1040SIZEOF_SHORT=$ac_cv_sizeof_short
1041SIZEOF_INT=$ac_cv_sizeof_int
1042SIZEOF_LONG=$ac_cv_sizeof_long
1043SIZEOF_LONG_LONG=$ac_cv_sizeof_long_long
1044SIZEOF_OFF_T=$ac_cv_sizeof_off_t
1045SIZEOF_TIME_T=$ac_cv_sizeof_time_t
1046AC_SUBST(SIZEOF_SHORT)
1047AC_SUBST(SIZEOF_INT)
1048AC_SUBST(SIZEOF_LONG)
1049AC_SUBST(SIZEOF_LONG_LONG)
1050AC_SUBST(SIZEOF_OFF_T)
1051AC_SUBST(SIZEOF_TIME_T)
1052AC_C_BIGENDIAN
1053if test $cross_compiling = no; then
1054  BUILD_CC="$BUILD_CC" CPP="$CPP" /bin/sh $ac_aux_dir/parse-types.sh
1055else
1056  CROSS_COMPILE="1" BUILD_CC="$BUILD_CC" CPP="$CPP" /bin/sh $ac_aux_dir/parse-types.sh
1057fi
1058ASM_TYPES_HEADER=./asm_types.h
1059AC_SUBST_FILE(ASM_TYPES_HEADER)
1060dnl
1061dnl Save the configuration #defines needed for the public ext2fs.h
1062dnl header file
1063dnl
1064echo "/* These defines are needed for the public ext2fs.h header file */" \
1065     > public_config.h
1066if grep HAVE_SYS_TYPES_H confdefs.h > tmp_config.$$; then
1067  uniq tmp_config.$$ >> public_config.h
1068else
1069  echo "#undef HAVE_SYS_TYPES_H" >> public_config.h
1070fi
1071if grep WORDS_BIGENDIAN confdefs.h > tmp_config.$$; then
1072  uniq tmp_config.$$ >> public_config.h
1073else
1074  echo "#undef WORDS_BIGENDIAN" >> public_config.h
1075fi
1076rm -f tmp_config.$$
1077PUBLIC_CONFIG_HEADER=./public_config.h
1078AC_SUBST_FILE(PUBLIC_CONFIG_HEADER)
1079dnl
1080dnl See if we have inttypes.h and if intptr_t is defined
1081dnl
1082AC_CHECK_HEADERS([inttypes.h])
1083AC_CHECK_TYPES(intptr_t)
1084dnl
1085dnl See if struct stat has a st_flags field, in which case we can get file
1086dnl flags somewhat portably.  Also check for the analogous setter, chflags().
1087dnl
1088AC_MSG_CHECKING(whether struct stat has a st_flags field)
1089AC_CACHE_VAL(e2fsprogs_cv_struct_st_flags,
1090	AC_TRY_COMPILE([#include <sys/stat.h>],
1091		[struct stat stat; stat.st_flags = 0;],
1092		[e2fsprogs_cv_struct_st_flags=yes],
1093		[e2fsprogs_cv_struct_st_flags=no]))
1094AC_MSG_RESULT($e2fsprogs_cv_struct_st_flags)
1095if test "$e2fsprogs_cv_struct_st_flags" = yes; then
1096  AC_MSG_CHECKING(whether st_flags field is useful)
1097  AC_CACHE_VAL(e2fsprogs_cv_struct_st_flags_immut,
1098	AC_TRY_COMPILE([#include <sys/stat.h>],
1099		[struct stat stat; stat.st_flags |= UF_IMMUTABLE;],
1100		[e2fsprogs_cv_struct_st_flags_immut=yes],
1101		[e2fsprogs_cv_struct_st_flags_immut=no]))
1102  AC_MSG_RESULT($e2fsprogs_cv_struct_st_flags_immut)
1103  if test "$e2fsprogs_cv_struct_st_flags_immut" = yes; then
1104	  AC_DEFINE(HAVE_STAT_FLAGS, 1,
1105		[Define to 1 if struct stat has st_flags])
1106  fi
1107fi
1108dnl
1109dnl Check for the presence of SA_LEN
1110dnl
1111AC_CHECK_MEMBER(struct sockaddr.sa_len,
1112		AC_DEFINE_UNQUOTED(HAVE_SA_LEN,1,
1113			[Define to 1 if if struct sockaddr contains sa_len]),,
1114	[#include <sys/types.h>
1115	 #include <sys/socket.h>])
1116dnl
1117dnl If we are using the system-provided blkid library, check for
1118dnl the functions added after migrating that library to util-linux
1119dnl
1120if test -n "$BLKID_CMT"; then
1121  AC_CHECK_LIB(blkid, blkid_probe_get_topology,
1122		      AC_DEFINE(HAVE_BLKID_PROBE_GET_TOPOLOGY, 1,
1123				[Define to 1 if blkid has blkid_probe_get_topology]))
1124  AC_CHECK_LIB(blkid, blkid_probe_enable_partitions,
1125		      AC_DEFINE(HAVE_BLKID_PROBE_ENABLE_PARTITIONS, 1,
1126				[Define to 1 if blkid has blkid_probe_enable_partitions]))
1127fi
1128dnl
1129if test -n "$DLOPEN_LIB" ; then
1130   ac_cv_func_dlopen=yes
1131fi
1132AC_CHECK_FUNCS(m4_flatten([
1133	__secure_getenv
1134	add_key
1135	backtrace
1136	chflags
1137	dlopen
1138	fadvise64
1139	fallocate
1140	fallocate64
1141	fchown
1142	fcntl
1143	fdatasync
1144	fstat64
1145	fsync
1146	ftruncate64
1147	futimes
1148	getcwd
1149	getdtablesize
1150	gethostname
1151	getmntinfo
1152	getpwuid_r
1153	getrlimit
1154	getrusage
1155	jrand48
1156	keyctl
1157	llistxattr
1158	llseek
1159	lseek64
1160	mallinfo
1161	mbstowcs
1162	memalign
1163	mempcpy
1164	mmap
1165	msync
1166	nanosleep
1167	open64
1168	pathconf
1169	posix_fadvise
1170	posix_fadvise64
1171	posix_memalign
1172	prctl
1173	pread
1174	pwrite
1175	pread64
1176	pwrite64
1177	secure_getenv
1178	setmntent
1179	setresgid
1180	setresuid
1181	snprintf
1182	srandom
1183	stpcpy
1184	strcasecmp
1185	strdup
1186	strnlen
1187	strptime
1188	strtoull
1189	sync_file_range
1190	sysconf
1191	usleep
1192	utime
1193	utimes
1194	valloc
1195]))
1196dnl
1197dnl Check to see if -lsocket is required (solaris) to make something
1198dnl that uses socket() to compile; this is needed for the UUID library
1199dnl
1200SOCKET_LIB=''
1201AC_CHECK_LIB(socket, socket, [SOCKET_LIB=-lsocket])
1202AC_SUBST(SOCKET_LIB)
1203dnl
1204dnl See if libmagic exists
1205dnl
1206AC_CHECK_LIB(magic, magic_file, [MAGIC_LIB=-lmagic
1207AC_CHECK_HEADERS([magic.h])])
1208if test "$ac_cv_func_dlopen" = yes ; then
1209   MAGIC_LIB=$DLOPEN_LIB
1210fi
1211AC_SUBST(MAGIC_LIB)
1212dnl
1213dnl Check to see if librt is required for clock_gettime() (glibc < 2.17)
1214dnl
1215AC_CHECK_LIB(rt, clock_gettime, [CLOCK_GETTIME_LIB=-lrt])
1216AC_SUBST(CLOCK_GETTIME_LIB)
1217dnl
1218dnl Check to see if the FUSE library is -lfuse or -losxfuse
1219dnl
1220FUSE_CMT=
1221FUSE_LIB=
1222dnl osxfuse.dylib supersedes fuselib.dylib
1223AC_ARG_ENABLE([fuse2fs],
1224[  --disable-fuse2fs	  do not build fuse2fs],
1225if test "$enableval" = "no"
1226then
1227	FUSE_CMT="#"
1228	AC_MSG_RESULT([Disabling fuse2fs])
1229else
1230	AC_CHECK_HEADERS([pthread.h fuse.h], [],
1231[AC_MSG_FAILURE([Cannot find fuse2fs headers.])],
1232[#define _FILE_OFFSET_BITS	64
1233#define FUSE_USE_VERSION 29])
1234
1235	AC_PREPROC_IFELSE(
1236[AC_LANG_PROGRAM([[#define FUSE_USE_VERSION 29
1237#ifdef __linux__
1238#include <linux/fs.h>
1239#include <linux/falloc.h>
1240#include <linux/xattr.h>
1241#endif
1242]], [])], [], [AC_MSG_FAILURE([Cannot find fuse2fs Linux headers.])])
1243
1244	AC_CHECK_LIB(osxfuse, fuse_main, [FUSE_LIB=-losxfuse],
1245		[AC_CHECK_LIB(fuse, fuse_main, [FUSE_LIB=-lfuse],
1246			      [AC_MSG_FAILURE([Cannot find fuse library.])])])
1247	AC_MSG_RESULT([Enabling fuse2fs])
1248fi
1249,
1250AC_CHECK_HEADERS([pthread.h fuse.h], [], [FUSE_CMT="#"],
1251[#define _FILE_OFFSET_BITS	64
1252#define FUSE_USE_VERSION 29
1253#ifdef __linux__
1254# include <linux/fs.h>
1255# include <linux/falloc.h>
1256# include <linux/xattr.h>
1257#endif])
1258if test -z "$FUSE_CMT"
1259then
1260	AC_CHECK_LIB(osxfuse, fuse_main, [FUSE_LIB=-losxfuse],
1261[AC_CHECK_LIB(fuse, fuse_main, [FUSE_LIB=-lfuse], [FUSE_CMT="#"])])
1262fi
1263if test -z "$FUSE_CMT"
1264then
1265	AC_MSG_RESULT([Enabling fuse2fs by default.])
1266fi
1267)
1268AC_SUBST(FUSE_LIB)
1269AC_SUBST(FUSE_CMT)
1270dnl
1271dnl See if optreset exists
1272dnl
1273AC_MSG_CHECKING(for optreset)
1274AC_CACHE_VAL(ac_cv_have_optreset,
1275[AC_EGREP_HEADER(optreset, unistd.h,
1276  ac_cv_have_optreset=yes, ac_cv_have_optreset=no)])dnl
1277AC_MSG_RESULT($ac_cv_have_optreset)
1278if test $ac_cv_have_optreset = yes; then
1279  AC_DEFINE(HAVE_OPTRESET, 1, [Define to 1 if optreset for getopt is present])
1280fi
1281dnl
1282dnl Test for sem_init, and which library it might require:
1283dnl
1284AH_TEMPLATE([HAVE_SEM_INIT], [Define to 1 if sem_init() exists])
1285SEM_INIT_LIB=''
1286echo GL_THREADS_API: ${gl_threads_api}
1287if test "${gl_threads_api}" != none
1288then
1289  AC_CHECK_FUNC(sem_init, ,
1290    AC_CHECK_LIB(pthread, sem_init,
1291  	AC_DEFINE(HAVE_SEM_INIT, 1)
1292  	SEM_INIT_LIB=-lpthread,
1293    AC_CHECK_LIB(rt, sem_init,
1294  	AC_DEFINE(HAVE_SEM_INIT, 1)
1295  	SEM_INIT_LIB=-lrt,
1296    AC_CHECK_LIB(posix4, sem_init,
1297  	AC_DEFINE(HAVE_SEM_INIT, 1)
1298  	SEM_INIT_LIB=-lposix4))))dnl
1299fi
1300AC_SUBST(SEM_INIT_LIB)
1301dnl
1302dnl Check for unified diff
1303dnl
1304AC_MSG_CHECKING(for unified diff option)
1305if diff -u $0 $0 > /dev/null 2>&1 ; then
1306   UNI_DIFF_OPTS=-u
1307else
1308   UNI_DIFF_OPTS=-c
1309fi
1310AC_MSG_RESULT($UNI_DIFF_OPTS)
1311AC_SUBST(UNI_DIFF_OPTS)
1312dnl
1313dnl We use the EXT2 ioctls only under Linux
1314dnl
1315case "$host_os" in
1316linux*)
1317	AC_DEFINE(HAVE_EXT2_IOCTLS, 1, [Define to 1 if Ext2 ioctls present])
1318	;;
1319esac
1320dnl
1321dnl Check the available mount options
1322dnl
1323AX_CHECK_MOUNT_OPT(nosuid)
1324AX_CHECK_MOUNT_OPT(nodev)
1325dnl Enable LTO for all packages
1326dnl
1327AC_ARG_ENABLE([lto],
1328[  --enable-lto		  enable link time optimization],,
1329enable_lto=no)
1330if test "$enable_lto" = "yes" || test "$enable_lto" = "probe"; then
1331	AC_MSG_CHECKING([if C compiler supports LTO])
1332	OLD_CFLAGS="$CFLAGS"
1333	OLD_LDFLAGS="$LDFLAGS"
1334	LTO_FLAGS="-g -flto -ffat-lto-objects"
1335	CFLAGS="$CFLAGS $LTO_FLAGS"
1336	LDFLAGS="$LDFLAGS $LTO_FLAGS"
1337	AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
1338		[AC_MSG_RESULT([yes])]
1339		[lto_cflags=$LTO_FLAGS]
1340		[lto_ldflags=$LTO_FLAGS]
1341		[AC_PATH_PROG(gcc_ar, gcc-ar,,)]
1342		[AC_PATH_PROG(gcc_ranlib, gcc-ranlib,,)],
1343		[AC_MSG_RESULT([no])])
1344	if test -x "$gcc_ar" && test -x "$gcc_ranlib"; then
1345		have_lto=yes
1346		AR="${gcc_ar}"
1347		RANLIB="${gcc_ranlib}"
1348	fi
1349	CFLAGS="${OLD_CFLAGS}"
1350	LDFLAGS="${OLD_LDFLAGS}"
1351	AC_SUBST(have_lto)
1352	AC_SUBST(lto_cflags)
1353	AC_SUBST(lto_ldflags)
1354fi
1355if test "$enable_lto" = "yes" && test "$have_lto" != "yes"; then
1356	AC_MSG_ERROR([LTO not supported by compiler.])
1357fi
1358dnl
1359dnl Enable UBSAN for all packages
1360dnl
1361AC_ARG_ENABLE([ubsan],
1362[  --enable-ubsan	  enable undefined behavior sanitizer],,
1363enable_ubsan=no)
1364if test "$enable_ubsan" = "yes" || test "$enable_ubsan" = "probe"; then
1365	AC_MSG_CHECKING([if C compiler supports UBSAN])
1366	OLD_CFLAGS="$CFLAGS"
1367	OLD_LDFLAGS="$LDFLAGS"
1368	UBSAN_FLAGS="-fsanitize=undefined"
1369	CFLAGS="$CFLAGS $UBSAN_FLAGS"
1370	LDFLAGS="$LDFLAGS $UBSAN_FLAGS"
1371	AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
1372		[AC_MSG_RESULT([yes])]
1373		[ubsan_cflags=$UBSAN_FLAGS]
1374		[ubsan_ldflags=$UBSAN_FLAGS]
1375		[have_ubsan=yes],
1376		[AC_MSG_RESULT([no])])
1377	CFLAGS="${OLD_CFLAGS}"
1378	LDFLAGS="${OLD_LDFLAGS}"
1379	AC_SUBST(have_ubsan)
1380	AC_SUBST(ubsan_cflags)
1381	AC_SUBST(ubsan_ldflags)
1382fi
1383if test "$enable_ubsan" = "yes" && test "$have_ubsan" != "yes"; then
1384	AC_MSG_ERROR([UBSAN not supported by compiler.])
1385fi
1386dnl
1387dnl Enable ADDRSAN for all packages
1388dnl
1389AC_ARG_ENABLE([addrsan],
1390[  --enable-addrsan	  enable address sanitizer],,
1391enable_addrsan=no)
1392if test "$enable_addrsan" = "yes" || test "$enable_addrsan" = "probe"; then
1393	AC_MSG_CHECKING([if C compiler supports ADDRSAN])
1394	OLD_CFLAGS="$CFLAGS"
1395	OLD_LDFLAGS="$LDFLAGS"
1396	ADDRSAN_FLAGS="-fsanitize=address"
1397	CFLAGS="$CFLAGS $ADDRSAN_FLAGS"
1398	LDFLAGS="$LDFLAGS $ADDRSAN_FLAGS"
1399	AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
1400		[AC_MSG_RESULT([yes])]
1401		[addrsan_cflags=$ADDRSAN_FLAGS]
1402		[addrsan_ldflags=$ADDRSAN_FLAGS]
1403		[have_addrsan=yes],
1404		[AC_MSG_RESULT([no])])
1405	CFLAGS="${OLD_CFLAGS}"
1406	LDFLAGS="${OLD_LDFLAGS}"
1407	AC_SUBST(have_addrsan)
1408	AC_SUBST(addrsan_cflags)
1409	AC_SUBST(addrsan_ldflags)
1410fi
1411if test "$enable_addrsan" = "yes" && test "$have_addrsan" != "yes"; then
1412	AC_MSG_ERROR([ADDRSAN not supported by compiler.])
1413fi
1414dnl
1415dnl Enable THREADSAN for all packages
1416dnl
1417AC_ARG_ENABLE([threadsan],
1418[  --enable-threadsan	  enable thread sanitizer],,
1419enable_threadsan=no)
1420if test "$enable_threadsan" = "yes" || test "$enable_threadsan" = "probe"; then
1421	AC_MSG_CHECKING([if C compiler supports THREADSAN])
1422	OLD_CFLAGS="$CFLAGS"
1423	OLD_LDFLAGS="$LDFLAGS"
1424	THREADSAN_FLAGS="-fsanitize=thread"
1425	CFLAGS="$CFLAGS $THREADSAN_FLAGS"
1426	LDFLAGS="$LDFLAGS $THREADSAN_FLAGS"
1427	AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
1428		[AC_MSG_RESULT([yes])]
1429		[threadsan_cflags=$THREADSAN_FLAGS]
1430		[threadsan_ldflags=$THREADSAN_FLAGS]
1431		[have_threadsan=yes],
1432		[AC_MSG_RESULT([no])])
1433	CFLAGS="${OLD_CFLAGS}"
1434	LDFLAGS="${OLD_LDFLAGS}"
1435	AC_SUBST(have_threadsan)
1436	AC_SUBST(threadsan_cflags)
1437	AC_SUBST(threadsan_ldflags)
1438fi
1439if test "$enable_threadsan" = "yes" && test "$have_threadsan" != "yes"; then
1440	AC_MSG_ERROR([THREADSAN not supported by compiler.])
1441fi
1442if test "$have_threadsan" = "yes" && test "$have_addrsan" = "yes"; then
1443	AC_MSG_WARN([ADDRSAN and THREADSAN are not known to work together.])
1444fi
1445dnl
1446dnl OS-specific uncomment control
1447dnl
1448LINUX_CMT="#"
1449CYGWIN_CMT="#"
1450UNIX_CMT=
1451case "$host_os" in
1452linux*)
1453	LINUX_CMT=
1454	;;
1455cygwin)
1456	CYGWIN_CMT=
1457	UNIX_CMT="#"
1458	;;
1459esac
1460AC_SUBST(LINUX_CMT)
1461AC_SUBST(CYGWIN_CMT)
1462AC_SUBST(UNIX_CMT)
1463dnl
1464dnl e2scrub only builds on linux
1465dnl
1466E2SCRUB_CMT="$LINUX_CMT"
1467AC_SUBST(E2SCRUB_CMT)
1468dnl
1469dnl Linux and Hurd places root files in the / by default
1470dnl
1471case "$host_os" in
1472linux* | gnu* | k*bsd*-gnu)
1473	if test "$prefix" = NONE -a "$root_prefix" = NONE ; then
1474		root_prefix="";
1475		AC_MSG_RESULT([On $host_os systems, root_prefix defaults to ''])
1476	fi
1477	;;
1478esac
1479dnl
1480dnl On Linux/hurd, force the prefix to be /usr
1481dnl
1482case "$host_os" in
1483linux* | gnu* | k*bsd*-gnu)
1484	if test "$prefix" = NONE ; then
1485		prefix="/usr";
1486		AC_MSG_RESULT([On $host_os systems, prefix defaults to /usr])
1487		if test "$mandir" = '${prefix}/man' ; then
1488			AC_MSG_RESULT([...and mandir defaults to /usr/share/man])
1489			mandir=/usr/share/man
1490		fi
1491	fi
1492;;
1493esac
1494if test "$root_prefix" = NONE ; then
1495	if test "$prefix" = NONE ; then
1496		root_prefix="$ac_default_prefix"
1497	else
1498		root_prefix="$prefix"
1499	fi
1500	root_bindir=$bindir
1501	root_sbindir=$sbindir
1502	root_libdir=$libdir
1503	root_sysconfdir=$sysconfdir
1504else
1505	root_bindir='${root_prefix}/bin'
1506	root_sbindir='${root_prefix}/sbin'
1507	root_libdir='${root_prefix}/lib'
1508	root_sysconfdir='${root_prefix}/etc'
1509fi
1510if test "$bindir" != '${exec_prefix}/bin'; then
1511    root_bindir=$bindir
1512    AC_MSG_RESULT([Setting root_bindir to $root_bindir])
1513fi
1514if test "$sbindir" != '${exec_prefix}/sbin'; then
1515    root_sbindir=$sbindir
1516    AC_MSG_RESULT([Setting root_sbindir to $root_sbindir])
1517fi
1518if test "$libdir" != '${exec_prefix}/lib'; then
1519    root_libdir=$libdir
1520    AC_MSG_RESULT([Setting root_libdir to $root_libdir])
1521fi
1522if test "$sysconfdir" != '${prefix}/etc'; then
1523    root_sysconfdir=$sysconfdir
1524    AC_MSG_RESULT([Setting root_sysconfdir to $root_sysconfdir])
1525fi
1526AC_SUBST(root_prefix)
1527AC_SUBST(root_bindir)
1528AC_SUBST(root_sbindir)
1529AC_SUBST(root_libdir)
1530AC_SUBST(root_sysconfdir)
1531dnl
1532dnl Allow specification of the multiarch arch
1533dnl
1534AC_ARG_WITH([multiarch],
1535[  --with-multiarch=ARCH specify the multiarch triplet],
1536if test "$withval" = "lib64"; then
1537    libdir=/usr/lib64
1538    root_libdir=/lib64
1539else
1540    libdir=$libdir/$withval
1541    root_libdir=$root_libdir/$withval
1542fi
1543)
1544dnl
1545dnl
1546dnl See if -static works.  This could fail if the linker does not
1547dnl support -static, or if required external libraries are not available
1548dnl in static form.
1549dnl
1550AC_MSG_CHECKING([whether we can link with -static])
1551AC_CACHE_VAL(ac_cv_e2fsprogs_use_static,
1552[SAVE_LDFLAGS=$LDFLAGS; LDFLAGS="$LDFLAGS_STATIC -static"
1553AC_TRY_LINK([#include <stdio.h>],[fflush(stdout);],
1554 ac_cv_e2fsprogs_use_static=yes, ac_cv_e2fsprogs_use_static=no)
1555LDFLAGS=$SAVE_LDFLAGS])
1556dnl
1557dnl Regardless of how the test turns out, Solaris doesn't handle -static
1558dnl This is caused by the socket library requiring the nsl library, which
1559dnl requires the -dl library, which only works for dynamically linked
1560dnl programs.  It basically means you can't have statically linked programs
1561dnl which use the network under Solaris.
1562dnl
1563case "$host_os" in
1564solaris2.*)
1565	ac_cv_e2fsprogs_use_static=no
1566;;
1567esac
1568AC_MSG_RESULT($ac_cv_e2fsprogs_use_static)
1569if test $ac_cv_e2fsprogs_use_static = yes; then
1570	LDFLAGS_STATIC="$LDFLAGS_STATIC -static"
1571fi
1572AC_SUBST(LDFLAGS_STATIC)
1573dnl
1574dnl Work around mysterious Darwin / GNU libintl problem
1575dnl (__asm__ redirection doesn't work for some mysterious reason.  Looks like
1576dnl Apple hacked gcc somehow?)
1577dnl
1578case "$host_os" in
1579darwin*)
1580	AC_MSG_RESULT([Using Apple Darwin / GNU libintl workaround])
1581	AC_DEFINE(_INTL_REDIRECT_MACROS, 1,
1582		[Define to 1 if Apple Darwin libintl workaround is needed])
1583	;;
1584esac
1585dnl
1586dnl Only try to run the test suite if we're not cross compiling.
1587dnl
1588if test "$cross_compiling" = yes ; then
1589  DO_TEST_SUITE=
1590else
1591  DO_TEST_SUITE=check
1592fi
1593AC_SUBST(DO_TEST_SUITE)
1594dnl
1595dnl Only include the intl include files if we're building with them
1596dnl
1597INCLUDES='-I. -I$(top_builddir)/lib -I$(top_srcdir)/lib'
1598if test -n "$CPPFLAGS" ; then
1599	INCLUDES="$INCLUDES $CPPFLAGS"
1600fi
1601if test "$USE_INCLUDED_LIBINTL" = "yes" ; then
1602	INCLUDES=$INCLUDES' -I$(top_builddir)/intl -I$(top_srcdir)/intl'
1603fi
1604if test -n "$WITH_DIET_LIBC" ; then
1605	INCLUDES="$INCLUDES -D_REENTRANT"
1606fi
1607AC_SUBST(INCLUDES)
1608dnl
1609dnl Build CFLAGS
1610dnl
1611if test $cross_compiling = no; then
1612   BUILD_CFLAGS="$CFLAGS $CPPFLAGS $INCLUDES -DHAVE_CONFIG_H"
1613   BUILD_LDFLAGS="$LDFLAGS"
1614fi
1615AC_SUBST(BUILD_CFLAGS)
1616AC_SUBST(BUILD_LDFLAGS)
1617dnl
1618dnl Define CFLAGS and LDFLAGS for shared libraries
1619dnl
1620CFLAGS_SHLIB=${CFLAGS_SHLIB:-$CFLAGS}
1621CFLAGS_STLIB=${CFLAGS_STLIB:-$CFLAGS}
1622LDFLAGS_SHLIB=${LDFLAGS_SHLIB:-$LDFLAGS}
1623AC_SUBST(CFLAGS_SHLIB)
1624AC_SUBST(CFLAGS_STLIB)
1625AC_SUBST(LDFLAGS_SHLIB)
1626
1627dnl
1628dnl Where do udev rules go?
1629dnl
1630AC_ARG_WITH([udev_rules_dir],
1631  [AS_HELP_STRING([--with-udev-rules-dir@<:@=DIR@:>@],
1632	[Install udev rules into DIR.])],
1633  [],
1634  [with_udev_rules_dir=yes])
1635AS_IF([test "x${with_udev_rules_dir}" != "xno"],
1636  [
1637	AS_IF([test "x${with_udev_rules_dir}" = "xyes"],
1638	  [
1639		PKG_CHECK_MODULES([udev], [udev],
1640		  [
1641			with_udev_rules_dir="$($PKG_CONFIG --variable=udevdir udev)/rules.d"
1642		  ], [
1643			with_udev_rules_dir=""
1644		  ])
1645	  ])
1646	AC_MSG_CHECKING([for udev rules dir])
1647	pkg_udev_rules_dir="${with_udev_rules_dir}"
1648	AS_IF([test -n "${pkg_udev_rules_dir}"],
1649	  [
1650		AC_MSG_RESULT(${pkg_udev_rules_dir})
1651		have_udev="yes"
1652	  ],
1653	  [
1654		AC_MSG_RESULT(no)
1655		have_udev="no"
1656	  ])
1657  ],
1658  [
1659	have_udev="disabled"
1660  ])
1661AC_SUBST(have_udev)
1662AC_SUBST(pkg_udev_rules_dir)
1663
1664dnl
1665dnl Where do cron jobs go?
1666dnl
1667AC_ARG_WITH([crond_dir],
1668  [AS_HELP_STRING([--with-crond-dir@<:@=DIR@:>@],
1669	[Install system crontabs into DIR.])],
1670  [],
1671  [with_crond_dir=yes])
1672AS_IF([test "x${with_crond_dir}" != "xno"],
1673  [
1674	AS_IF([test "x${with_crond_dir}" = "xyes"],
1675	  [
1676		AS_IF([test -d "/etc/cron.d"],
1677		  [with_crond_dir="/etc/cron.d"],
1678		  [have_crond="no"; with_crond_dir=""])
1679	  ])
1680	AC_MSG_CHECKING([for system crontab dir])
1681	crond_dir="${with_crond_dir}"
1682	AS_IF([test -n "${crond_dir}"],
1683	  [
1684		AC_MSG_RESULT(${crond_dir})
1685		have_crond="yes"
1686	  ],
1687	  [
1688		AC_MSG_RESULT(no)
1689		have_crond="no"
1690	  ])
1691  ],
1692  [
1693	have_crond="disabled"
1694  ])
1695AC_SUBST(have_crond)
1696AC_SUBST(crond_dir)
1697
1698dnl
1699dnl Where do systemd services go?
1700dnl
1701AC_ARG_WITH([systemd_unit_dir],
1702  [AS_HELP_STRING([--with-systemd-unit-dir@<:@=DIR@:>@],
1703	[Install systemd system units into DIR.])],
1704  [],
1705  [with_systemd_unit_dir=yes])
1706AS_IF([test "x${with_systemd_unit_dir}" != "xno"],
1707  [
1708	AS_IF([test "x${with_systemd_unit_dir}" = "xyes"],
1709	  [
1710		PKG_CHECK_MODULES([systemd], [systemd],
1711		  [
1712			with_systemd_unit_dir="$($PKG_CONFIG --variable=systemdsystemunitdir systemd)"
1713		  ], [
1714			with_systemd_unit_dir=""
1715		  ])
1716		m4_pattern_allow([^PKG_(MAJOR|MINOR|BUILD|REVISION)$])
1717	  ])
1718	AC_MSG_CHECKING([for systemd system unit dir])
1719	systemd_system_unit_dir="${with_systemd_unit_dir}"
1720	AS_IF([test -n "${systemd_system_unit_dir}"],
1721	  [
1722		AC_MSG_RESULT(${systemd_system_unit_dir})
1723		have_systemd="yes"
1724	  ],
1725	  [
1726		AC_MSG_RESULT(no)
1727		have_systemd="no"
1728	  ])
1729  ],
1730  [
1731	have_systemd="disabled"
1732  ])
1733AC_SUBST(have_systemd)
1734AC_SUBST(systemd_system_unit_dir)
1735
1736dnl
1737dnl Make our output files, being sure that we create the some miscellaneous
1738dnl directories
1739dnl
1740test -d lib || mkdir lib
1741test -d include || mkdir include
1742test -d include/linux || mkdir include/linux
1743test -d include/asm || mkdir include/asm
1744if test -z "$UUID_CMT" ; then
1745	uuid_out_list="lib/uuid/Makefile lib/uuid/uuid.pc \
1746		lib/uuid/uuid_types.h"
1747fi
1748if test -z "$BLKID_CMT" ; then
1749	blkid_out_list="lib/blkid/Makefile lib/blkid/blkid.pc \
1750		lib/blkid/blkid_types.h"
1751fi
1752for i in MCONFIG Makefile \
1753	util/Makefile util/subst.conf util/gen-tarball util/install-symlink \
1754	lib/et/Makefile lib/ss/Makefile lib/e2p/Makefile \
1755	lib/ext2fs/Makefile lib/ext2fs/ext2_types.h \
1756	$uuid_out_list $blkid_out_list lib/support/Makefile \
1757	lib/ss/ss.pc lib/et/com_err.pc lib/e2p/e2p.pc lib/ext2fs/ext2fs.pc \
1758	misc/Makefile ext2ed/Makefile e2fsck/Makefile \
1759	debugfs/Makefile tests/Makefile tests/progs/Makefile \
1760	resize/Makefile doc/Makefile intl/Makefile \
1761	intl/libgnuintl.h po/Makefile.in scrub/Makefile; do
1762	if test -d `dirname ${srcdir}/$i` ; then
1763		outlist="$outlist $i"
1764	fi
1765done
1766AC_OUTPUT($outlist)
1767if test -f util/gen-tarball; then chmod +x util/gen-tarball; fi
1768