7 dnl This is to figure out the version number and the date....
9 E2FSPROGS_VERSION=`grep E2FSPROGS_VERSION ${srcdir}/version.h \
10 | awk '{print $3}' | tr \" " " | awk '{print $1}'`
11 DATE=`grep E2FSPROGS_DATE ${srcdir}/version.h | awk '{print $3}' \
13 MONTH=`echo $DATE | awk -F- '{print $2}'`
14 YEAR=`echo $DATE | awk -F- '{print $3}'`
16 if expr $YEAR ">" 1900 > /dev/null ; then
18 elif expr $YEAR ">" 90 >/dev/null ; then
19 E2FSPROGS_YEAR=19$YEAR
21 E2FSPROGS_YEAR=20$YEAR
25 Jan) E2FSPROGS_MONTH="January" ;;
26 Feb) E2FSPROGS_MONTH="February" ;;
27 Mar) E2FSPROGS_MONTH="March" ;;
28 Apr) E2FSPROGS_MONTH="April" ;;
29 May) E2FSPROGS_MONTH="May" ;;
30 Jun) E2FSPROGS_MONTH="June" ;;
31 Jul) E2FSPROGS_MONTH="July" ;;
32 Aug) E2FSPROGS_MONTH="August" ;;
33 Sep) E2FSPROGS_MONTH="September" ;;
34 Oct) E2FSPROGS_MONTH="October" ;;
35 Nov) E2FSPROGS_MONTH="November" ;;
36 Dec) E2FSPROGS_MONTH="December" ;;
37 *) echo "Unknown month $MONTH??" ;;
41 echo "Generating configuration file for e2fsprogs version $E2FSPROGS_VERSION"
42 echo "Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}"
43 AC_SUBST(E2FSPROGS_YEAR)
44 AC_SUBST(E2FSPROGS_MONTH)
45 AC_SUBST(E2FSPROGS_VERSION)
46 AC_REQUIRE([AC_CANONICAL_HOST])
48 dnl set $(CC) from --with-cc=value
51 [ --with-cc=COMPILER select compiler to use],
52 AC_MSG_RESULT(CC=$withval)
54 if test -z "$CC" ; then CC=cc; fi
55 [AC_MSG_RESULT(CC defaults to $CC)])dnl
60 dnl set $(LD) from --with-linker=value
63 [ --with-linker=LINKER select linker to use],
64 AC_MSG_RESULT(LD=$withval)
66 if test -z "$LD" ; then LD=$CC; fi
67 [AC_MSG_RESULT(LD defaults to $LD)])dnl
71 dnl set $(CCOPTS) from --with-ccopts=value
74 [ --with-ccopts=CCOPTS select compiler command line options],
75 AC_MSG_RESULT(CCOPTS is $withval)
77 CFLAGS="$CFLAGS $withval",
81 dnl On systems without linux header files, we add an extra include directory
82 dnl that holds enough to fake it (hopefully). Note that the $(top_srcdir) here
83 dnl is quoted so that it gets expanded by make, not by configure.
85 AC_CHECK_HEADER(linux/fs.h, [linux_headers=yes], [linux_headers=no])
86 if test "$linux_headers" != yes; then
87 LINUX_INCLUDE='-I$(top_builddir)/include'
89 AC_SUBST(LINUX_INCLUDE)
91 dnl Set default values for library extentions. Will be dealt with after
92 dnl parsing configuration opions, which may modify these
98 dnl set $(LDFLAGS) from --with-ldopts=value
100 AC_ARG_WITH([ldopts],
101 [ --with-ldopts=LDOPTS select linker command line options],
102 AC_MSG_RESULT(LDFLAGS is $withval)
107 dnl Allow separate `root_prefix' to be specified
109 AC_ARG_WITH([root-prefix],
110 [ --with-root-prefix=PREFIX override prefix variable for files to be placed in the root],
111 root_prefix=$withval,
114 dnl handle --enable-compression
116 AC_ARG_ENABLE([compression],
117 [ --enable-compression enable EXPERIMENTAL compression support],
118 if test "$enableval" = "no"
120 echo "Disabling compression support"
122 AC_DEFINE(ENABLE_COMPRESSION)
123 echo "Enabling compression support"
124 echo "WARNING: Compression support is experimental"
127 echo "Disabling compression support by default"
130 dnl handle --enable-dll-shlibs
132 AC_ARG_ENABLE([dll-shlibs],
133 [ --enable-dll-shlibs select DLL libraries],
134 if test "$enableval" = "no"
137 MAKEFILE_DLL=/dev/null
138 echo "Disabling DLL shared libraries"
141 MAKEFILE_DLL=$srcdir/lib/Makefile.dll-lib
144 echo "Enabling DLL shared libraries"
147 MAKEFILE_DLL=/dev/null
149 echo "Disabling DLL shared libraries by default"
152 AC_SUBST_FILE(MAKEFILE_DLL)
154 dnl handle --enable-elf-shlibs
156 AC_ARG_ENABLE([elf-shlibs],
157 [ --enable-elf-shlibs select ELF shared libraries],
158 if test "$enableval" = "no"
161 MAKEFILE_ELF=/dev/null
162 echo "Disabling ELF shared libraries"
165 MAKEFILE_ELF=$srcdir/lib/Makefile.elf-lib
168 echo "Enabling ELF shared libraries"
171 MAKEFILE_ELF=/dev/null
173 echo "Disabling ELF shared libraries by default"
176 AC_SUBST_FILE(MAKEFILE_ELF)
178 dnl handle --enable-bsd-shlibs
180 AC_ARG_ENABLE([bsd-shlibs],
181 [ --enable-bsd-shlibs select BSD shared libraries],
182 if test "$enableval" = "no"
185 MAKEFILE_BSDLIB=/dev/null
186 echo "Disabling BSD shared libraries"
189 MAKEFILE_BSDLIB=$srcdir/lib/Makefile.bsd-lib
191 echo "Enabling BSD shared libraries"
194 MAKEFILE_BSDLIB=/dev/null
196 echo "Disabling BSD shared libraries by default"
199 AC_SUBST_FILE(MAKEFILE_BSDLIB)
201 dnl Add internationalization support, using gettext.
204 VERSION="$E2FSPROGS_VERSION"
205 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
206 AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
213 dnl handle --enable-profile
215 AC_ARG_ENABLE([profile],
216 [ --enable-profile build profiling libraries],
217 if test "$enableval" = "no"
220 MAKEFILE_PROFILE=/dev/null
221 echo "Disabling profiling libraries"
224 MAKEFILE_PROFILE=$srcdir/lib/Makefile.profile
225 PROFILED_LIB_EXT=_p.a
226 echo "Building profiling libraries"
230 MAKEFILE_PROFILE=/dev/null
231 echo "Disabling profiling libraries by default"
233 AC_SUBST(PROFILE_CMT)
234 AC_SUBST_FILE(MAKEFILE_PROFILE)
236 dnl handle --enable-checker
238 AC_ARG_ENABLE([checker],
239 [ --enable-checker build checker libraries],
240 if test "$enableval" = "no"
243 MAKEFILE_CHECKER=/dev/null
244 echo "Disabling checker libraries"
247 MAKEFILE_CHECKER=$srcdir/lib/Makefile.checker
248 echo "Building checker libraries"
252 MAKEFILE_CHECKER=/dev/null
253 echo "Disabling checker libraries by default"
255 AC_SUBST(CHECKER_CMT)
256 AC_SUBST_FILE(MAKEFILE_CHECKER)
258 dnl Substitute library extensions
261 AC_SUBST(STATIC_LIB_EXT)
262 AC_SUBST(PROFILED_LIB_EXT)
264 dnl handle --enable-gcc-wall
266 AC_ARG_ENABLE([gcc-wall],
267 [ --enable-gcc-wall enable GCC anal warnings (DON'T USE IN PRODUCTION)],
268 if test "$enableval" = "no"
271 echo "Disabling GCC warnings"
274 echo "Enabling GCC warnings"
278 echo "Disabling GCC warnings by default"
281 AC_ARG_ENABLE([dynamic-e2fsck],
282 [ --enable-dynamic-e2fsck build e2fsck dynamically],
283 if test "$enableval" = "no"
286 echo "Building e2fsck statically"
289 echo "Building e2fsck dynamically"
293 echo "Building e2fsck statically by default"
295 AC_SUBST(E2FSCK_TYPE)
297 dnl See whether to install the `fsck' wrapper program (that calls e2fsck)
299 AC_ARG_ENABLE([fsck],
300 [ --enable-fsck build fsck wrapper program],
301 [if test "$enableval" = "no"
303 FSCK_PROG='' FSCK_MAN=''
304 echo "Not building fsck wrapper"
306 FSCK_PROG=fsck FSCK_MAN=fsck.8
307 echo "Building fsck wrapper"
312 FSCK_PROG='' FSCK_MAN=''
313 echo "Not building fsck wrapper by default"
316 FSCK_PROG=fsck FSCK_MAN=fsck.8
317 echo "Building fsck wrapper by default"
324 MAKEFILE_LIBRARY=$srcdir/lib/Makefile.library
325 AC_SUBST_FILE(MAKEFILE_LIBRARY)
328 AC_ARG_ENABLE([old-bitops],
329 [ --enable-old-bitops Use old (non-standard but native) bitmask operations],
330 if test "$enableval" = "no"
332 echo "Using new (standard) bitmask operations"
334 AC_DEFINE(EXT2_OLD_BITOPS)
335 echo "Using old (native) bitmask operations"
339 echo "Using standard bitmask operations by default"
342 dnl End of configuration options
344 AC_SUBST(BINARY_TYPE)
346 AC_PATH_PROG(LN, ln, ln)
348 AC_PATH_PROG(MV, mv, mv)
349 AC_PATH_PROG(CP, cp, cp)
350 AC_PATH_PROG(RM, rm, rm)
351 AC_PATH_PROG(CHMOD, chmod, :)
352 AC_PATH_PROG(AWK, awk, awk)
353 AC_PATH_PROG(SED, sed, sed)
354 AC_PATH_PROG(PERL, perl, perl)
355 AC_CHECK_TOOL(AR, ar, ar)
356 AC_CHECK_TOOL(RANLIB, ranlib, :)
357 AC_CHECK_TOOL(STRIP, strip, :)
359 # See if we need a separate native compiler.
360 if test $cross_compiling = no; then
364 AC_CHECK_PROGS(BUILD_CC, gcc cc)
366 AC_CHECK_HEADERS(stdlib.h unistd.h stdarg.h errno.h malloc.h mntent.h paths.h dirent.h getopt.h setjmp.h signal.h termios.h linux/fd.h linux/major.h sys/disklabel.h sys/sockio.h sys/time.h sys/stat.h sys/types.h net/if.h netinet/in.h)
369 dnl See if struct dirent has a d_namlen field (like bsd systems), implying
370 dnl that the actual length of the structure may be grater than the declared
373 AC_MSG_CHECKING(whether struct dirent has a d_namlen field)
374 AC_CACHE_VAL(e2fsprogs_cv_struct_d_namlen,
376 [#include <sys/types.h>
377 #include <dirent.h>],
378 [struct dirent de; de.d_namlen = 0;],
379 [e2fsprogs_cv_struct_d_namlen=yes],
380 [e2fsprogs_cv_struct_d_namlen=no]))
381 AC_MSG_RESULT($e2fsprogs_cv_struct_d_namlen)
382 if test "$e2fsprogs_cv_struct_d_namlen" = yes; then
383 AC_DEFINE(HAVE_DIRENT_NAMLEN)
386 dnl Check to see if llseek() is declared in unistd.h. On some libc's
387 dnl it is, and on others it isn't..... Thank you glibc developers....
389 dnl Warning! Use of --enable-gcc-wall may throw off this test.
392 AC_MSG_CHECKING(whether llseek declared in unistd.h)
393 AC_CACHE_VAL(e2fsprogs_cv_have_llseek_prototype,
395 [#include <unistd.h>], [extern int llseek(int);],
396 [e2fsprogs_cv_have_llseek_prototype=no],
397 [e2fsprogs_cv_have_llseek_prototype=yes]))
398 AC_MSG_RESULT($e2fsprogs_cv_have_llseek_prototype)
399 if test "$e2fsprogs_cv_have_llseek_prototype" = yes; then
400 AC_DEFINE(HAVE_LLSEEK_PROTOTYPE)
403 dnl Check to see if lseek64() is declared in unistd.h. Glibc's header files
404 dnl are so convoluted that I can't tell whether it will always be defined,
405 dnl and if it isn't defined while lseek64 is defined in the library,
406 dnl disaster will strike.
408 dnl Warning! Use of --enable-gcc-wall may throw off this test.
411 AC_MSG_CHECKING(whether lseek64 declared in unistd.h)
412 AC_CACHE_VAL(e2fsprogs_cv_have_lseek64_prototype,
414 [#define _LARGEFILE_SOURCE
415 #define _LARGEFILE64_SOURCE
416 #include <unistd.h>], [extern int lseek64(int);],
417 [e2fsprogs_cv_have_lseek64_prototype=no],
418 [e2fsprogs_cv_have_lseek64_prototype=yes]))
419 AC_MSG_RESULT($e2fsprogs_cv_have_lseek64_prototype)
420 if test "$e2fsprogs_cv_have_lseek64_prototype" = yes; then
421 AC_DEFINE(HAVE_LSEEK64_PROTOTYPE)
426 if test "$cross_compiling" = yes -a "$ac_cv_sizeof_long" = ""; then
427 # if cross-compiling, with no cached values, just assume something common.
431 ac_cv_sizeof_long_long=8
432 AC_MSG_WARN([Cross-compiling, so cannot check type sizes; assuming short=2, int=4, long=4, long long=8])
434 AC_CHECK_SIZEOF(short)
436 AC_CHECK_SIZEOF(long)
437 AC_CHECK_SIZEOF(long long)
438 SIZEOF_SHORT=$ac_cv_sizeof_short
439 SIZEOF_INT=$ac_cv_sizeof_int
440 SIZEOF_LONG=$ac_cv_sizeof_long
441 SIZEOF_LONG_LONG=$ac_cv_sizeof_long_long
442 AC_SUBST(SIZEOF_SHORT)
444 AC_SUBST(SIZEOF_LONG)
445 AC_SUBST(SIZEOF_LONG_LONG)
447 dnl See if struct stat has a st_flags field, in which case we can get file
448 dnl flags somewhat portably. Also check for the analogous setter, chflags().
450 AC_MSG_CHECKING(whether struct stat has a st_flags field)
451 AC_CACHE_VAL(e2fsprogs_cv_struct_st_flags,
452 AC_TRY_COMPILE([#include <sys/stat.h>],
453 [struct stat stat; stat.st_flags = 0;],
454 [e2fsprogs_cv_struct_st_flags=yes],
455 [e2fsprogs_cv_struct_st_flags=no]))
456 AC_MSG_RESULT($e2fsprogs_cv_struct_st_flags)
457 if test "$e2fsprogs_cv_struct_st_flags" = yes; then
458 AC_MSG_CHECKING(whether st_flags field is useful)
459 AC_CACHE_VAL(e2fsprogs_cv_struct_st_flags_immut,
460 AC_TRY_COMPILE([#include <sys/stat.h>],
461 [struct stat stat; stat.st_flags |= UF_IMMUTABLE;],
462 [e2fsprogs_cv_struct_st_flags_immut=yes],
463 [e2fsprogs_cv_struct_st_flags_immut=no]))
464 AC_MSG_RESULT($e2fsprogs_cv_struct_st_flags_immut)
465 if test "$e2fsprogs_cv_struct_st_flags_immut" = yes; then
466 AC_DEFINE(HAVE_STAT_FLAGS)
469 AC_CHECK_FUNCS(chflags getrusage llseek lseek64 open64 strdup getmntinfo strcasecmp srandom fchown mallinfo fdatasync)
471 dnl Check to see if ino_t is defined
473 AC_MSG_CHECKING(ino_t defined by sys/types.h)
474 AC_CACHE_VAL(e2fsprogs_cv_ino_t,
475 AC_TRY_COMPILE([#include <sys/types.h>],
476 [ino_t ino; ino = 0;],
477 [e2fsprogs_cv_ino_t=yes],
478 [e2fsprogs_cv_ino_t=no]))
479 AC_MSG_RESULT($e2fsprogs_cv_ino_t)
480 if test "$e2fsprogs_cv_ino_t" = yes; then
481 AC_DEFINE(HAVE_INO_T)
484 dnl Check to see if -lsocket is required (solaris) to make something
485 dnl that uses socket() to compile; this is needed for the UUID library
488 AC_CHECK_LIB(socket, socket, [SOCKET_LIB=-lsocket])
491 dnl See if optreset exists
493 AC_MSG_CHECKING(for optreset)
494 AC_CACHE_VAL(ac_cv_have_optreset,
495 [AC_EGREP_HEADER(optreset, unistd.h,
496 ac_cv_have_optreset=yes, ac_cv_have_optreset=no)])dnl
497 AC_MSG_RESULT($ac_cv_have_optreset)
498 if test $ac_cv_have_optreset = yes; then
499 AC_DEFINE(HAVE_OPTRESET)
502 dnl We use the EXT2 ioctls only under Linux
506 AC_DEFINE(HAVE_EXT2_IOCTLS)
510 dnl Linux and Hurd places root files in the / by default
514 if test "$prefix" = NONE -a "$root_prefix" = NONE ; then
516 echo "On $host_os systems, root_prefix defaults to ''"
521 dnl On Linux/hurd, force the prefix to be /usr
525 if test "$prefix" = NONE ; then
527 echo "On $host_os systems, prefix defaults to /usr"
531 if test "$root_prefix" = NONE ; then
532 if test "$prefix" = NONE ; then
533 root_prefix="$ac_default_prefix"
535 root_prefix="$prefix"
538 AC_SUBST(root_prefix)
540 dnl See if -static works.
542 AC_MSG_CHECKING([whether linker accepts -static])
543 AC_CACHE_VAL(ac_cv_e2fsprogs_use_static,
544 [SAVE_LDFLAGS=$LDFLAGS; LDFLAGS="$LDFLAGS -static"
545 AC_TRY_LINK([#include <stdio.h>],[fflush(stdout);],
546 ac_cv_e2fsprogs_use_static=yes, ac_cv_e2fsprogs_use_static=no)
547 LDFLAGS=$SAVE_LDFLAGS])
549 dnl Regardless of how the test turns out, Solaris doesn't handle -static
550 dnl This is caused by the socket library requiring the nsl library, which
551 dnl requires the -dl library, which only works for dynamically linked
552 dnl programs. It basically means you can't have statically linked programs
553 dnl which use the network under Solaris.
557 ac_cv_e2fsprogs_use_static=no
560 AC_MSG_RESULT($ac_cv_e2fsprogs_use_static)
562 if test $ac_cv_e2fsprogs_use_static = yes; then
563 LDFLAG_STATIC=-static
565 AC_SUBST(LDFLAG_STATIC)
567 dnl Make the ss and et directories work correctly.
569 SS_DIR=`cd ${srcdir}/lib/ss; pwd`
570 ET_DIR=`cd ${srcdir}/lib/et; pwd`
574 dnl Only try to run the test suite if we're not cross compiling.
576 if test "$cross_compiling" = yes ; then
581 AC_SUBST(DO_TEST_SUITE)
583 dnl Make our output files, being sure that we create the some miscellaneous
586 test -d lib || mkdir lib
587 test -d include || mkdir include
588 test -d include/linux || mkdir include/linux
589 test -d include/asm || mkdir include/asm
591 if test -d ${srcdir}/resize ; then
592 rmakefile=resize/Makefile
594 AC_OUTPUT(MCONFIG Makefile util/Makefile util/subst.conf lib/et/Makefile
595 lib/ss/Makefile lib/ext2fs/Makefile lib/e2p/Makefile lib/uuid/Makefile
596 misc/Makefile e2fsck/Makefile debugfs/Makefile tests/Makefile
597 tests/progs/Makefile $rmakefile doc/Makefile
598 intl/Makefile po/Makefile.in)