• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 This will add -lblkid to the AC_CHECK_FUNCS search if we are using
1118dnl the system-provided blkid library
1119dnl
1120if test -n "$BLKID_CMT"; then
1121  AC_SEARCH_LIBS([blkid_probe_all], [blkid])
1122fi
1123dnl
1124if test -n "$DLOPEN_LIB" ; then
1125   ac_cv_func_dlopen=yes
1126fi
1127AC_CHECK_FUNCS(m4_flatten([
1128	__secure_getenv
1129	add_key
1130	backtrace
1131	blkid_probe_get_topology
1132	blkid_probe_enable_partitions
1133	chflags
1134	dlopen
1135	fadvise64
1136	fallocate
1137	fallocate64
1138	fchown
1139	fcntl
1140	fdatasync
1141	fstat64
1142	fsync
1143	ftruncate64
1144	futimes
1145	getcwd
1146	getdtablesize
1147	gethostname
1148	getmntinfo
1149	getpwuid_r
1150	getrlimit
1151	getrusage
1152	jrand48
1153	keyctl
1154	llistxattr
1155	llseek
1156	lseek64
1157	mallinfo
1158	mbstowcs
1159	memalign
1160	mempcpy
1161	mmap
1162	msync
1163	nanosleep
1164	open64
1165	pathconf
1166	posix_fadvise
1167	posix_fadvise64
1168	posix_memalign
1169	prctl
1170	pread
1171	pwrite
1172	pread64
1173	pwrite64
1174	secure_getenv
1175	setmntent
1176	setresgid
1177	setresuid
1178	snprintf
1179	srandom
1180	stpcpy
1181	strcasecmp
1182	strdup
1183	strnlen
1184	strptime
1185	strtoull
1186	sync_file_range
1187	sysconf
1188	usleep
1189	utime
1190	utimes
1191	valloc
1192]))
1193dnl
1194dnl Check to see if -lsocket is required (solaris) to make something
1195dnl that uses socket() to compile; this is needed for the UUID library
1196dnl
1197SOCKET_LIB=''
1198AC_CHECK_LIB(socket, socket, [SOCKET_LIB=-lsocket])
1199AC_SUBST(SOCKET_LIB)
1200dnl
1201dnl See if libmagic exists
1202dnl
1203AC_CHECK_LIB(magic, magic_file, [MAGIC_LIB=-lmagic
1204AC_CHECK_HEADERS([magic.h])])
1205if test "$ac_cv_func_dlopen" = yes ; then
1206   MAGIC_LIB=$DLOPEN_LIB
1207fi
1208AC_SUBST(MAGIC_LIB)
1209dnl
1210dnl Check to see if librt is required for clock_gettime() (glibc < 2.17)
1211dnl
1212AC_CHECK_LIB(rt, clock_gettime, [CLOCK_GETTIME_LIB=-lrt])
1213AC_SUBST(CLOCK_GETTIME_LIB)
1214dnl
1215dnl Check to see if the FUSE library is -lfuse or -losxfuse
1216dnl
1217FUSE_CMT=
1218FUSE_LIB=
1219dnl osxfuse.dylib supersedes fuselib.dylib
1220AC_ARG_ENABLE([fuse2fs],
1221[  --disable-fuse2fs	  do not build fuse2fs],
1222if test "$enableval" = "no"
1223then
1224	FUSE_CMT="#"
1225	AC_MSG_RESULT([Disabling fuse2fs])
1226else
1227	AC_CHECK_HEADERS([pthread.h fuse.h], [],
1228[AC_MSG_FAILURE([Cannot find fuse2fs headers.])],
1229[#define _FILE_OFFSET_BITS	64
1230#define FUSE_USE_VERSION 29])
1231
1232	AC_PREPROC_IFELSE(
1233[AC_LANG_PROGRAM([[#define FUSE_USE_VERSION 29
1234#ifdef __linux__
1235#include <linux/fs.h>
1236#include <linux/falloc.h>
1237#include <linux/xattr.h>
1238#endif
1239]], [])], [], [AC_MSG_FAILURE([Cannot find fuse2fs Linux headers.])])
1240
1241	AC_CHECK_LIB(osxfuse, fuse_main, [FUSE_LIB=-losxfuse],
1242		[AC_CHECK_LIB(fuse, fuse_main, [FUSE_LIB=-lfuse],
1243			      [AC_MSG_FAILURE([Cannot find fuse library.])])])
1244	AC_MSG_RESULT([Enabling fuse2fs])
1245fi
1246,
1247AC_CHECK_HEADERS([pthread.h fuse.h], [], [FUSE_CMT="#"],
1248[#define _FILE_OFFSET_BITS	64
1249#define FUSE_USE_VERSION 29
1250#ifdef __linux__
1251# include <linux/fs.h>
1252# include <linux/falloc.h>
1253# include <linux/xattr.h>
1254#endif])
1255if test -z "$FUSE_CMT"
1256then
1257	AC_CHECK_LIB(osxfuse, fuse_main, [FUSE_LIB=-losxfuse],
1258[AC_CHECK_LIB(fuse, fuse_main, [FUSE_LIB=-lfuse], [FUSE_CMT="#"])])
1259fi
1260if test -z "$FUSE_CMT"
1261then
1262	AC_MSG_RESULT([Enabling fuse2fs by default.])
1263fi
1264)
1265AC_SUBST(FUSE_LIB)
1266AC_SUBST(FUSE_CMT)
1267dnl
1268dnl See if optreset exists
1269dnl
1270AC_MSG_CHECKING(for optreset)
1271AC_CACHE_VAL(ac_cv_have_optreset,
1272[AC_EGREP_HEADER(optreset, unistd.h,
1273  ac_cv_have_optreset=yes, ac_cv_have_optreset=no)])dnl
1274AC_MSG_RESULT($ac_cv_have_optreset)
1275if test $ac_cv_have_optreset = yes; then
1276  AC_DEFINE(HAVE_OPTRESET, 1, [Define to 1 if optreset for getopt is present])
1277fi
1278dnl
1279dnl Test for sem_init, and which library it might require:
1280dnl
1281AH_TEMPLATE([HAVE_SEM_INIT], [Define to 1 if sem_init() exists])
1282SEM_INIT_LIB=''
1283echo GL_THREADS_API: ${gl_threads_api}
1284if test "${gl_threads_api}" != none
1285then
1286  AC_CHECK_FUNC(sem_init, ,
1287    AC_CHECK_LIB(pthread, sem_init,
1288  	AC_DEFINE(HAVE_SEM_INIT, 1)
1289  	SEM_INIT_LIB=-lpthread,
1290    AC_CHECK_LIB(rt, sem_init,
1291  	AC_DEFINE(HAVE_SEM_INIT, 1)
1292  	SEM_INIT_LIB=-lrt,
1293    AC_CHECK_LIB(posix4, sem_init,
1294  	AC_DEFINE(HAVE_SEM_INIT, 1)
1295  	SEM_INIT_LIB=-lposix4))))dnl
1296fi
1297AC_SUBST(SEM_INIT_LIB)
1298dnl
1299dnl Check for unified diff
1300dnl
1301AC_MSG_CHECKING(for unified diff option)
1302if diff -u $0 $0 > /dev/null 2>&1 ; then
1303   UNI_DIFF_OPTS=-u
1304else
1305   UNI_DIFF_OPTS=-c
1306fi
1307AC_MSG_RESULT($UNI_DIFF_OPTS)
1308AC_SUBST(UNI_DIFF_OPTS)
1309dnl
1310dnl We use the EXT2 ioctls only under Linux
1311dnl
1312case "$host_os" in
1313linux*)
1314	AC_DEFINE(HAVE_EXT2_IOCTLS, 1, [Define to 1 if Ext2 ioctls present])
1315	;;
1316esac
1317dnl
1318dnl Enable LTO for all packages
1319dnl
1320AC_ARG_ENABLE([lto],
1321[  --enable-lto		  enable link time optimization],,
1322enable_lto=no)
1323if test "$enable_lto" = "yes" || test "$enable_lto" = "probe"; then
1324	AC_MSG_CHECKING([if C compiler supports LTO])
1325	OLD_CFLAGS="$CFLAGS"
1326	OLD_LDFLAGS="$LDFLAGS"
1327	LTO_FLAGS="-g -flto -ffat-lto-objects"
1328	CFLAGS="$CFLAGS $LTO_FLAGS"
1329	LDFLAGS="$LDFLAGS $LTO_FLAGS"
1330	AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
1331		[AC_MSG_RESULT([yes])]
1332		[lto_cflags=$LTO_FLAGS]
1333		[lto_ldflags=$LTO_FLAGS]
1334		[AC_PATH_PROG(gcc_ar, gcc-ar,,)]
1335		[AC_PATH_PROG(gcc_ranlib, gcc-ranlib,,)],
1336		[AC_MSG_RESULT([no])])
1337	if test -x "$gcc_ar" && test -x "$gcc_ranlib"; then
1338		have_lto=yes
1339		AR="${gcc_ar}"
1340		RANLIB="${gcc_ranlib}"
1341	fi
1342	CFLAGS="${OLD_CFLAGS}"
1343	LDFLAGS="${OLD_LDFLAGS}"
1344	AC_SUBST(have_lto)
1345	AC_SUBST(lto_cflags)
1346	AC_SUBST(lto_ldflags)
1347fi
1348if test "$enable_lto" = "yes" && test "$have_lto" != "yes"; then
1349	AC_MSG_ERROR([LTO not supported by compiler.])
1350fi
1351dnl
1352dnl Enable UBSAN for all packages
1353dnl
1354AC_ARG_ENABLE([ubsan],
1355[  --enable-ubsan	  enable undefined behavior sanitizer],,
1356enable_ubsan=no)
1357if test "$enable_ubsan" = "yes" || test "$enable_ubsan" = "probe"; then
1358	AC_MSG_CHECKING([if C compiler supports UBSAN])
1359	OLD_CFLAGS="$CFLAGS"
1360	OLD_LDFLAGS="$LDFLAGS"
1361	UBSAN_FLAGS="-fsanitize=undefined"
1362	CFLAGS="$CFLAGS $UBSAN_FLAGS"
1363	LDFLAGS="$LDFLAGS $UBSAN_FLAGS"
1364	AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
1365		[AC_MSG_RESULT([yes])]
1366		[ubsan_cflags=$UBSAN_FLAGS]
1367		[ubsan_ldflags=$UBSAN_FLAGS]
1368		[have_ubsan=yes],
1369		[AC_MSG_RESULT([no])])
1370	CFLAGS="${OLD_CFLAGS}"
1371	LDFLAGS="${OLD_LDFLAGS}"
1372	AC_SUBST(have_ubsan)
1373	AC_SUBST(ubsan_cflags)
1374	AC_SUBST(ubsan_ldflags)
1375fi
1376if test "$enable_ubsan" = "yes" && test "$have_ubsan" != "yes"; then
1377	AC_MSG_ERROR([UBSAN not supported by compiler.])
1378fi
1379dnl
1380dnl Enable ADDRSAN for all packages
1381dnl
1382AC_ARG_ENABLE([addrsan],
1383[  --enable-addrsan	  enable address sanitizer],,
1384enable_addrsan=no)
1385if test "$enable_addrsan" = "yes" || test "$enable_addrsan" = "probe"; then
1386	AC_MSG_CHECKING([if C compiler supports ADDRSAN])
1387	OLD_CFLAGS="$CFLAGS"
1388	OLD_LDFLAGS="$LDFLAGS"
1389	ADDRSAN_FLAGS="-fsanitize=address"
1390	CFLAGS="$CFLAGS $ADDRSAN_FLAGS"
1391	LDFLAGS="$LDFLAGS $ADDRSAN_FLAGS"
1392	AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
1393		[AC_MSG_RESULT([yes])]
1394		[addrsan_cflags=$ADDRSAN_FLAGS]
1395		[addrsan_ldflags=$ADDRSAN_FLAGS]
1396		[have_addrsan=yes],
1397		[AC_MSG_RESULT([no])])
1398	CFLAGS="${OLD_CFLAGS}"
1399	LDFLAGS="${OLD_LDFLAGS}"
1400	AC_SUBST(have_addrsan)
1401	AC_SUBST(addrsan_cflags)
1402	AC_SUBST(addrsan_ldflags)
1403fi
1404if test "$enable_addrsan" = "yes" && test "$have_addrsan" != "yes"; then
1405	AC_MSG_ERROR([ADDRSAN not supported by compiler.])
1406fi
1407dnl
1408dnl Enable THREADSAN for all packages
1409dnl
1410AC_ARG_ENABLE([threadsan],
1411[  --enable-threadsan	  enable thread sanitizer],,
1412enable_threadsan=no)
1413if test "$enable_threadsan" = "yes" || test "$enable_threadsan" = "probe"; then
1414	AC_MSG_CHECKING([if C compiler supports THREADSAN])
1415	OLD_CFLAGS="$CFLAGS"
1416	OLD_LDFLAGS="$LDFLAGS"
1417	THREADSAN_FLAGS="-fsanitize=thread"
1418	CFLAGS="$CFLAGS $THREADSAN_FLAGS"
1419	LDFLAGS="$LDFLAGS $THREADSAN_FLAGS"
1420	AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
1421		[AC_MSG_RESULT([yes])]
1422		[threadsan_cflags=$THREADSAN_FLAGS]
1423		[threadsan_ldflags=$THREADSAN_FLAGS]
1424		[have_threadsan=yes],
1425		[AC_MSG_RESULT([no])])
1426	CFLAGS="${OLD_CFLAGS}"
1427	LDFLAGS="${OLD_LDFLAGS}"
1428	AC_SUBST(have_threadsan)
1429	AC_SUBST(threadsan_cflags)
1430	AC_SUBST(threadsan_ldflags)
1431fi
1432if test "$enable_threadsan" = "yes" && test "$have_threadsan" != "yes"; then
1433	AC_MSG_ERROR([THREADSAN not supported by compiler.])
1434fi
1435if test "$have_threadsan" = "yes" && test "$have_addrsan" = "yes"; then
1436	AC_MSG_WARN([ADDRSAN and THREADSAN are not known to work together.])
1437fi
1438dnl
1439dnl OS-specific uncomment control
1440dnl
1441LINUX_CMT="#"
1442CYGWIN_CMT="#"
1443UNIX_CMT=
1444case "$host_os" in
1445linux*)
1446	LINUX_CMT=
1447	;;
1448cygwin)
1449	CYGWIN_CMT=
1450	UNIX_CMT="#"
1451	;;
1452esac
1453AC_SUBST(LINUX_CMT)
1454AC_SUBST(CYGWIN_CMT)
1455AC_SUBST(UNIX_CMT)
1456dnl
1457dnl e2scrub only builds on linux
1458dnl
1459E2SCRUB_CMT="$LINUX_CMT"
1460AC_SUBST(E2SCRUB_CMT)
1461dnl
1462dnl Linux and Hurd places root files in the / by default
1463dnl
1464case "$host_os" in
1465linux* | gnu* | k*bsd*-gnu)
1466	if test "$prefix" = NONE -a "$root_prefix" = NONE ; then
1467		root_prefix="";
1468		AC_MSG_RESULT([On $host_os systems, root_prefix defaults to ''])
1469	fi
1470	;;
1471esac
1472dnl
1473dnl On Linux/hurd, force the prefix to be /usr
1474dnl
1475case "$host_os" in
1476linux* | gnu* | k*bsd*-gnu)
1477	if test "$prefix" = NONE ; then
1478		prefix="/usr";
1479		AC_MSG_RESULT([On $host_os systems, prefix defaults to /usr])
1480		if test "$mandir" = '${prefix}/man' ; then
1481			AC_MSG_RESULT([...and mandir defaults to /usr/share/man])
1482			mandir=/usr/share/man
1483		fi
1484	fi
1485;;
1486esac
1487if test "$root_prefix" = NONE ; then
1488	if test "$prefix" = NONE ; then
1489		root_prefix="$ac_default_prefix"
1490	else
1491		root_prefix="$prefix"
1492	fi
1493	root_bindir=$bindir
1494	root_sbindir=$sbindir
1495	root_libdir=$libdir
1496	root_sysconfdir=$sysconfdir
1497else
1498	root_bindir='${root_prefix}/bin'
1499	root_sbindir='${root_prefix}/sbin'
1500	root_libdir='${root_prefix}/lib'
1501	root_sysconfdir='${root_prefix}/etc'
1502fi
1503if test "$bindir" != '${exec_prefix}/bin'; then
1504    root_bindir=$bindir
1505    AC_MSG_RESULT([Setting root_bindir to $root_bindir])
1506fi
1507if test "$sbindir" != '${exec_prefix}/sbin'; then
1508    root_sbindir=$sbindir
1509    AC_MSG_RESULT([Setting root_sbindir to $root_sbindir])
1510fi
1511if test "$libdir" != '${exec_prefix}/lib'; then
1512    root_libdir=$libdir
1513    AC_MSG_RESULT([Setting root_libdir to $root_libdir])
1514fi
1515if test "$sysconfdir" != '${prefix}/etc'; then
1516    root_sysconfdir=$sysconfdir
1517    AC_MSG_RESULT([Setting root_sysconfdir to $root_sysconfdir])
1518fi
1519AC_SUBST(root_prefix)
1520AC_SUBST(root_bindir)
1521AC_SUBST(root_sbindir)
1522AC_SUBST(root_libdir)
1523AC_SUBST(root_sysconfdir)
1524dnl
1525dnl Allow specification of the multiarch arch
1526dnl
1527AC_ARG_WITH([multiarch],
1528[  --with-multiarch=ARCH specify the multiarch triplet],
1529if test "$withval" = "lib64"; then
1530    libdir=/usr/lib64
1531    root_libdir=/lib64
1532else
1533    libdir=$libdir/$withval
1534    root_libdir=$root_libdir/$withval
1535fi
1536)
1537dnl
1538dnl
1539dnl See if -static works.  This could fail if the linker does not
1540dnl support -static, or if required external libraries are not available
1541dnl in static form.
1542dnl
1543AC_MSG_CHECKING([whether we can link with -static])
1544AC_CACHE_VAL(ac_cv_e2fsprogs_use_static,
1545[SAVE_LDFLAGS=$LDFLAGS; LDFLAGS="$LDFLAGS_STATIC -static"
1546AC_TRY_LINK([#include <stdio.h>],[fflush(stdout);],
1547 ac_cv_e2fsprogs_use_static=yes, ac_cv_e2fsprogs_use_static=no)
1548LDFLAGS=$SAVE_LDFLAGS])
1549dnl
1550dnl Regardless of how the test turns out, Solaris doesn't handle -static
1551dnl This is caused by the socket library requiring the nsl library, which
1552dnl requires the -dl library, which only works for dynamically linked
1553dnl programs.  It basically means you can't have statically linked programs
1554dnl which use the network under Solaris.
1555dnl
1556case "$host_os" in
1557solaris2.*)
1558	ac_cv_e2fsprogs_use_static=no
1559;;
1560esac
1561AC_MSG_RESULT($ac_cv_e2fsprogs_use_static)
1562if test $ac_cv_e2fsprogs_use_static = yes; then
1563	LDFLAGS_STATIC="$LDFLAGS_STATIC -static"
1564fi
1565AC_SUBST(LDFLAGS_STATIC)
1566dnl
1567dnl Work around mysterious Darwin / GNU libintl problem
1568dnl (__asm__ redirection doesn't work for some mysterious reason.  Looks like
1569dnl Apple hacked gcc somehow?)
1570dnl
1571case "$host_os" in
1572darwin*)
1573	AC_MSG_RESULT([Using Apple Darwin / GNU libintl workaround])
1574	AC_DEFINE(_INTL_REDIRECT_MACROS, 1,
1575		[Define to 1 if Apple Darwin libintl workaround is needed])
1576	;;
1577esac
1578dnl
1579dnl Only try to run the test suite if we're not cross compiling.
1580dnl
1581if test "$cross_compiling" = yes ; then
1582  DO_TEST_SUITE=
1583else
1584  DO_TEST_SUITE=check
1585fi
1586AC_SUBST(DO_TEST_SUITE)
1587dnl
1588dnl Only include the intl include files if we're building with them
1589dnl
1590INCLUDES='-I. -I$(top_builddir)/lib -I$(top_srcdir)/lib'
1591if test -n "$CPPFLAGS" ; then
1592	INCLUDES="$INCLUDES $CPPFLAGS"
1593fi
1594if test "$USE_INCLUDED_LIBINTL" = "yes" ; then
1595	INCLUDES=$INCLUDES' -I$(top_builddir)/intl -I$(top_srcdir)/intl'
1596fi
1597if test -n "$WITH_DIET_LIBC" ; then
1598	INCLUDES="$INCLUDES -D_REENTRANT"
1599fi
1600AC_SUBST(INCLUDES)
1601dnl
1602dnl Build CFLAGS
1603dnl
1604if test $cross_compiling = no; then
1605   BUILD_CFLAGS="$CFLAGS $CPPFLAGS $INCLUDES -DHAVE_CONFIG_H"
1606   BUILD_LDFLAGS="$LDFLAGS"
1607fi
1608AC_SUBST(BUILD_CFLAGS)
1609AC_SUBST(BUILD_LDFLAGS)
1610dnl
1611dnl Define CFLAGS and LDFLAGS for shared libraries
1612dnl
1613CFLAGS_SHLIB=${CFLAGS_SHLIB:-$CFLAGS}
1614CFLAGS_STLIB=${CFLAGS_STLIB:-$CFLAGS}
1615LDFLAGS_SHLIB=${LDFLAGS_SHLIB:-$LDFLAGS}
1616AC_SUBST(CFLAGS_SHLIB)
1617AC_SUBST(CFLAGS_STLIB)
1618AC_SUBST(LDFLAGS_SHLIB)
1619
1620dnl
1621dnl Where do udev rules go?
1622dnl
1623AC_ARG_WITH([udev_rules_dir],
1624  [AS_HELP_STRING([--with-udev-rules-dir@<:@=DIR@:>@],
1625	[Install udev rules into DIR.])],
1626  [],
1627  [with_udev_rules_dir=yes])
1628AS_IF([test "x${with_udev_rules_dir}" != "xno"],
1629  [
1630	AS_IF([test "x${with_udev_rules_dir}" = "xyes"],
1631	  [
1632		PKG_CHECK_MODULES([udev], [udev],
1633		  [
1634			with_udev_rules_dir="$($PKG_CONFIG --variable=udevdir udev)/rules.d"
1635		  ], [
1636			with_udev_rules_dir=""
1637		  ])
1638	  ])
1639	AC_MSG_CHECKING([for udev rules dir])
1640	pkg_udev_rules_dir="${with_udev_rules_dir}"
1641	AS_IF([test -n "${pkg_udev_rules_dir}"],
1642	  [
1643		AC_MSG_RESULT(${pkg_udev_rules_dir})
1644		have_udev="yes"
1645	  ],
1646	  [
1647		AC_MSG_RESULT(no)
1648		have_udev="no"
1649	  ])
1650  ],
1651  [
1652	have_udev="disabled"
1653  ])
1654AC_SUBST(have_udev)
1655AC_SUBST(pkg_udev_rules_dir)
1656
1657dnl
1658dnl Where do cron jobs go?
1659dnl
1660AC_ARG_WITH([crond_dir],
1661  [AS_HELP_STRING([--with-crond-dir@<:@=DIR@:>@],
1662	[Install system crontabs into DIR.])],
1663  [],
1664  [with_crond_dir=yes])
1665AS_IF([test "x${with_crond_dir}" != "xno"],
1666  [
1667	AS_IF([test "x${with_crond_dir}" = "xyes"],
1668	  [
1669		AS_IF([test -d "/etc/cron.d"],
1670		  [with_crond_dir="/etc/cron.d"])
1671	  ])
1672	AC_MSG_CHECKING([for system crontab dir])
1673	crond_dir="${with_crond_dir}"
1674	AS_IF([test -n "${crond_dir}"],
1675	  [
1676		AC_MSG_RESULT(${crond_dir})
1677		have_crond="yes"
1678	  ],
1679	  [
1680		AC_MSG_RESULT(no)
1681		have_crond="no"
1682	  ])
1683  ],
1684  [
1685	have_crond="disabled"
1686  ])
1687AC_SUBST(have_crond)
1688AC_SUBST(crond_dir)
1689
1690dnl
1691dnl Where do systemd services go?
1692dnl
1693AC_ARG_WITH([systemd_unit_dir],
1694  [AS_HELP_STRING([--with-systemd-unit-dir@<:@=DIR@:>@],
1695	[Install systemd system units into DIR.])],
1696  [],
1697  [with_systemd_unit_dir=yes])
1698AS_IF([test "x${with_systemd_unit_dir}" != "xno"],
1699  [
1700	AS_IF([test "x${with_systemd_unit_dir}" = "xyes"],
1701	  [
1702		PKG_CHECK_MODULES([systemd], [systemd],
1703		  [
1704			with_systemd_unit_dir="$($PKG_CONFIG --variable=systemdsystemunitdir systemd)"
1705		  ], [
1706			with_systemd_unit_dir=""
1707		  ])
1708		m4_pattern_allow([^PKG_(MAJOR|MINOR|BUILD|REVISION)$])
1709	  ])
1710	AC_MSG_CHECKING([for systemd system unit dir])
1711	systemd_system_unit_dir="${with_systemd_unit_dir}"
1712	AS_IF([test -n "${systemd_system_unit_dir}"],
1713	  [
1714		AC_MSG_RESULT(${systemd_system_unit_dir})
1715		have_systemd="yes"
1716	  ],
1717	  [
1718		AC_MSG_RESULT(no)
1719		have_systemd="no"
1720	  ])
1721  ],
1722  [
1723	have_systemd="disabled"
1724  ])
1725AC_SUBST(have_systemd)
1726AC_SUBST(systemd_system_unit_dir)
1727
1728dnl
1729dnl Make our output files, being sure that we create the some miscellaneous
1730dnl directories
1731dnl
1732test -d lib || mkdir lib
1733test -d include || mkdir include
1734test -d include/linux || mkdir include/linux
1735test -d include/asm || mkdir include/asm
1736if test -z "$UUID_CMT" ; then
1737	uuid_out_list="lib/uuid/Makefile lib/uuid/uuid.pc \
1738		lib/uuid/uuid_types.h"
1739fi
1740if test -z "$BLKID_CMT" ; then
1741	blkid_out_list="lib/blkid/Makefile lib/blkid/blkid.pc \
1742		lib/blkid/blkid_types.h"
1743fi
1744for i in MCONFIG Makefile \
1745	util/Makefile util/subst.conf util/gen-tarball util/install-symlink \
1746	lib/et/Makefile lib/ss/Makefile lib/e2p/Makefile \
1747	lib/ext2fs/Makefile lib/ext2fs/ext2_types.h \
1748	$uuid_out_list $blkid_out_list lib/support/Makefile \
1749	lib/ss/ss.pc lib/et/com_err.pc lib/e2p/e2p.pc lib/ext2fs/ext2fs.pc \
1750	misc/Makefile ext2ed/Makefile e2fsck/Makefile \
1751	debugfs/Makefile tests/Makefile tests/progs/Makefile \
1752	resize/Makefile doc/Makefile intl/Makefile \
1753	intl/libgnuintl.h po/Makefile.in scrub/Makefile; do
1754	if test -d `dirname ${srcdir}/$i` ; then
1755		outlist="$outlist $i"
1756	fi
1757done
1758AC_OUTPUT($outlist)
1759if test -f util/gen-tarball; then chmod +x util/gen-tarball; fi
1760