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 handle --enable-jfs-debug
203 AC_ARG_ENABLE([jfs-debug],
204 [ --enable-jfs-debug enable journal debugging],
205 if test "$enableval" = "no"
207 echo "Disabling journal debugging"
210 echo "Enabling journal debugging"
213 echo "Disabling journal debugging by default"
216 dnl Add internationalization support, using gettext.
219 VERSION="$E2FSPROGS_VERSION"
220 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
221 AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
228 dnl handle --enable-profile
230 AC_ARG_ENABLE([profile],
231 [ --enable-profile build profiling libraries],
232 if test "$enableval" = "no"
235 MAKEFILE_PROFILE=/dev/null
236 echo "Disabling profiling libraries"
239 MAKEFILE_PROFILE=$srcdir/lib/Makefile.profile
240 PROFILED_LIB_EXT=_p.a
241 echo "Building profiling libraries"
245 MAKEFILE_PROFILE=/dev/null
246 echo "Disabling profiling libraries by default"
248 AC_SUBST(PROFILE_CMT)
249 AC_SUBST_FILE(MAKEFILE_PROFILE)
251 dnl handle --enable-checker
253 AC_ARG_ENABLE([checker],
254 [ --enable-checker build checker libraries],
255 if test "$enableval" = "no"
258 MAKEFILE_CHECKER=/dev/null
259 echo "Disabling checker libraries"
262 MAKEFILE_CHECKER=$srcdir/lib/Makefile.checker
263 echo "Building checker libraries"
267 MAKEFILE_CHECKER=/dev/null
268 echo "Disabling checker libraries by default"
270 AC_SUBST(CHECKER_CMT)
271 AC_SUBST_FILE(MAKEFILE_CHECKER)
273 dnl Substitute library extensions
276 AC_SUBST(STATIC_LIB_EXT)
277 AC_SUBST(PROFILED_LIB_EXT)
279 dnl handle --enable-gcc-wall
281 AC_ARG_ENABLE([gcc-wall],
282 [ --enable-gcc-wall enable GCC anal warnings (DON'T USE IN PRODUCTION)],
283 if test "$enableval" = "no"
286 echo "Disabling GCC warnings"
289 echo "Enabling GCC warnings"
293 echo "Disabling GCC warnings by default"
296 AC_ARG_ENABLE([dynamic-e2fsck],
297 [ --enable-dynamic-e2fsck build e2fsck dynamically],
298 if test "$enableval" = "no"
301 echo "Building e2fsck statically"
304 echo "Building e2fsck dynamically"
308 echo "Building e2fsck statically by default"
310 AC_SUBST(E2FSCK_TYPE)
312 dnl See whether to install the `fsck' wrapper program (that calls e2fsck)
314 AC_ARG_ENABLE([fsck],
315 [ --enable-fsck build fsck wrapper program],
316 [if test "$enableval" = "no"
318 FSCK_PROG='' FSCK_MAN=''
319 echo "Not building fsck wrapper"
321 FSCK_PROG=fsck FSCK_MAN=fsck.8
322 echo "Building fsck wrapper"
327 FSCK_PROG='' FSCK_MAN=''
328 echo "Not building fsck wrapper by default"
331 FSCK_PROG=fsck FSCK_MAN=fsck.8
332 echo "Building fsck wrapper by default"
339 MAKEFILE_LIBRARY=$srcdir/lib/Makefile.library
340 AC_SUBST_FILE(MAKEFILE_LIBRARY)
343 AC_ARG_ENABLE([old-bitops],
344 [ --enable-old-bitops Use old (non-standard but native) bitmask operations],
345 if test "$enableval" = "no"
347 echo "Using new (standard) bitmask operations"
349 AC_DEFINE(EXT2_OLD_BITOPS)
350 echo "Using old (native) bitmask operations"
354 echo "Using standard bitmask operations by default"
357 dnl End of configuration options
359 AC_SUBST(BINARY_TYPE)
361 AC_PATH_PROG(LN, ln, ln)
363 AC_PATH_PROG(MV, mv, mv)
364 AC_PATH_PROG(CP, cp, cp)
365 AC_PATH_PROG(RM, rm, rm)
366 AC_PATH_PROG(CHMOD, chmod, :)
367 AC_PATH_PROG(AWK, awk, awk)
368 AC_PATH_PROG(SED, sed, sed)
369 AC_PATH_PROG(PERL, perl, perl)
370 AC_CHECK_TOOL(AR, ar, ar)
371 AC_CHECK_TOOL(RANLIB, ranlib, :)
372 AC_CHECK_TOOL(STRIP, strip, :)
374 # See if we need a separate native compiler.
375 if test $cross_compiling = no; then
379 AC_CHECK_PROGS(BUILD_CC, gcc cc)
381 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/mount.h sys/sockio.h sys/time.h sys/stat.h sys/types.h net/if.h netinet/in.h)
384 dnl See if struct dirent has a d_namlen field (like bsd systems), implying
385 dnl that the actual length of the structure may be grater than the declared
388 AC_MSG_CHECKING(whether struct dirent has a d_namlen field)
389 AC_CACHE_VAL(e2fsprogs_cv_struct_d_namlen,
391 [#include <sys/types.h>
392 #include <dirent.h>],
393 [struct dirent de; de.d_namlen = 0;],
394 [e2fsprogs_cv_struct_d_namlen=yes],
395 [e2fsprogs_cv_struct_d_namlen=no]))
396 AC_MSG_RESULT($e2fsprogs_cv_struct_d_namlen)
397 if test "$e2fsprogs_cv_struct_d_namlen" = yes; then
398 AC_DEFINE(HAVE_DIRENT_NAMLEN)
401 dnl Check to see if llseek() is declared in unistd.h. On some libc's
402 dnl it is, and on others it isn't..... Thank you glibc developers....
404 dnl Warning! Use of --enable-gcc-wall may throw off this test.
407 AC_MSG_CHECKING(whether llseek declared in unistd.h)
408 AC_CACHE_VAL(e2fsprogs_cv_have_llseek_prototype,
410 [#include <unistd.h>], [extern int llseek(int);],
411 [e2fsprogs_cv_have_llseek_prototype=no],
412 [e2fsprogs_cv_have_llseek_prototype=yes]))
413 AC_MSG_RESULT($e2fsprogs_cv_have_llseek_prototype)
414 if test "$e2fsprogs_cv_have_llseek_prototype" = yes; then
415 AC_DEFINE(HAVE_LLSEEK_PROTOTYPE)
418 dnl Check to see if lseek64() is declared in unistd.h. Glibc's header files
419 dnl are so convoluted that I can't tell whether it will always be defined,
420 dnl and if it isn't defined while lseek64 is defined in the library,
421 dnl disaster will strike.
423 dnl Warning! Use of --enable-gcc-wall may throw off this test.
426 AC_MSG_CHECKING(whether lseek64 declared in unistd.h)
427 AC_CACHE_VAL(e2fsprogs_cv_have_lseek64_prototype,
429 [#define _LARGEFILE_SOURCE
430 #define _LARGEFILE64_SOURCE
431 #include <unistd.h>], [extern int lseek64(int);],
432 [e2fsprogs_cv_have_lseek64_prototype=no],
433 [e2fsprogs_cv_have_lseek64_prototype=yes]))
434 AC_MSG_RESULT($e2fsprogs_cv_have_lseek64_prototype)
435 if test "$e2fsprogs_cv_have_lseek64_prototype" = yes; then
436 AC_DEFINE(HAVE_LSEEK64_PROTOTYPE)
441 if test "$cross_compiling" = yes -a "$ac_cv_sizeof_long" = ""; then
442 # if cross-compiling, with no cached values, just assume something common.
446 ac_cv_sizeof_long_long=8
447 AC_MSG_WARN([Cross-compiling, so cannot check type sizes; assuming short=2, int=4, long=4, long long=8])
449 AC_CHECK_SIZEOF(short)
451 AC_CHECK_SIZEOF(long)
452 AC_CHECK_SIZEOF(long long)
453 SIZEOF_SHORT=$ac_cv_sizeof_short
454 SIZEOF_INT=$ac_cv_sizeof_int
455 SIZEOF_LONG=$ac_cv_sizeof_long
456 SIZEOF_LONG_LONG=$ac_cv_sizeof_long_long
457 AC_SUBST(SIZEOF_SHORT)
459 AC_SUBST(SIZEOF_LONG)
460 AC_SUBST(SIZEOF_LONG_LONG)
462 dnl See if struct stat has a st_flags field, in which case we can get file
463 dnl flags somewhat portably. Also check for the analogous setter, chflags().
465 AC_MSG_CHECKING(whether struct stat has a st_flags field)
466 AC_CACHE_VAL(e2fsprogs_cv_struct_st_flags,
467 AC_TRY_COMPILE([#include <sys/stat.h>],
468 [struct stat stat; stat.st_flags = 0;],
469 [e2fsprogs_cv_struct_st_flags=yes],
470 [e2fsprogs_cv_struct_st_flags=no]))
471 AC_MSG_RESULT($e2fsprogs_cv_struct_st_flags)
472 if test "$e2fsprogs_cv_struct_st_flags" = yes; then
473 AC_MSG_CHECKING(whether st_flags field is useful)
474 AC_CACHE_VAL(e2fsprogs_cv_struct_st_flags_immut,
475 AC_TRY_COMPILE([#include <sys/stat.h>],
476 [struct stat stat; stat.st_flags |= UF_IMMUTABLE;],
477 [e2fsprogs_cv_struct_st_flags_immut=yes],
478 [e2fsprogs_cv_struct_st_flags_immut=no]))
479 AC_MSG_RESULT($e2fsprogs_cv_struct_st_flags_immut)
480 if test "$e2fsprogs_cv_struct_st_flags_immut" = yes; then
481 AC_DEFINE(HAVE_STAT_FLAGS)
484 AC_CHECK_FUNCS(chflags getrusage llseek lseek64 open64 strdup getmntinfo strcasecmp srandom fchown mallinfo fdatasync)
486 dnl Check to see if ino_t is defined
488 AC_MSG_CHECKING(ino_t defined by sys/types.h)
489 AC_CACHE_VAL(e2fsprogs_cv_ino_t,
490 AC_TRY_COMPILE([#include <sys/types.h>],
491 [ino_t ino; ino = 0;],
492 [e2fsprogs_cv_ino_t=yes],
493 [e2fsprogs_cv_ino_t=no]))
494 AC_MSG_RESULT($e2fsprogs_cv_ino_t)
495 if test "$e2fsprogs_cv_ino_t" = yes; then
496 AC_DEFINE(HAVE_INO_T)
499 dnl Check to see if -lsocket is required (solaris) to make something
500 dnl that uses socket() to compile; this is needed for the UUID library
503 AC_CHECK_LIB(socket, socket, [SOCKET_LIB=-lsocket])
506 dnl See if optreset exists
508 AC_MSG_CHECKING(for optreset)
509 AC_CACHE_VAL(ac_cv_have_optreset,
510 [AC_EGREP_HEADER(optreset, unistd.h,
511 ac_cv_have_optreset=yes, ac_cv_have_optreset=no)])dnl
512 AC_MSG_RESULT($ac_cv_have_optreset)
513 if test $ac_cv_have_optreset = yes; then
514 AC_DEFINE(HAVE_OPTRESET)
517 dnl We use the EXT2 ioctls only under Linux
521 AC_DEFINE(HAVE_EXT2_IOCTLS)
525 dnl Linux and Hurd places root files in the / by default
529 if test "$prefix" = NONE -a "$root_prefix" = NONE ; then
531 echo "On $host_os systems, root_prefix defaults to ''"
536 dnl On Linux/hurd, force the prefix to be /usr
540 if test "$prefix" = NONE ; then
542 echo "On $host_os systems, prefix defaults to /usr"
546 if test "$root_prefix" = NONE ; then
547 if test "$prefix" = NONE ; then
548 root_prefix="$ac_default_prefix"
550 root_prefix="$prefix"
553 AC_SUBST(root_prefix)
555 dnl See if -static works.
557 AC_MSG_CHECKING([whether linker accepts -static])
558 AC_CACHE_VAL(ac_cv_e2fsprogs_use_static,
559 [SAVE_LDFLAGS=$LDFLAGS; LDFLAGS="$LDFLAGS -static"
560 AC_TRY_LINK([#include <stdio.h>],[fflush(stdout);],
561 ac_cv_e2fsprogs_use_static=yes, ac_cv_e2fsprogs_use_static=no)
562 LDFLAGS=$SAVE_LDFLAGS])
564 dnl Regardless of how the test turns out, Solaris doesn't handle -static
565 dnl This is caused by the socket library requiring the nsl library, which
566 dnl requires the -dl library, which only works for dynamically linked
567 dnl programs. It basically means you can't have statically linked programs
568 dnl which use the network under Solaris.
572 ac_cv_e2fsprogs_use_static=no
575 AC_MSG_RESULT($ac_cv_e2fsprogs_use_static)
577 if test $ac_cv_e2fsprogs_use_static = yes; then
578 LDFLAG_STATIC=-static
580 AC_SUBST(LDFLAG_STATIC)
582 dnl Make the ss and et directories work correctly.
584 SS_DIR=`cd ${srcdir}/lib/ss; pwd`
585 ET_DIR=`cd ${srcdir}/lib/et; pwd`
589 dnl Only try to run the test suite if we're not cross compiling.
591 if test "$cross_compiling" = yes ; then
596 AC_SUBST(DO_TEST_SUITE)
598 dnl Make our output files, being sure that we create the some miscellaneous
601 test -d lib || mkdir lib
602 test -d include || mkdir include
603 test -d include/linux || mkdir include/linux
604 test -d include/asm || mkdir include/asm
606 if test -d ${srcdir}/resize ; then
607 rmakefile=resize/Makefile
609 AC_OUTPUT(MCONFIG Makefile util/Makefile util/subst.conf lib/et/Makefile
610 lib/ss/Makefile lib/ext2fs/Makefile lib/e2p/Makefile lib/uuid/Makefile
611 misc/Makefile e2fsck/Makefile debugfs/Makefile tests/Makefile
612 tests/progs/Makefile $rmakefile doc/Makefile
613 intl/Makefile po/Makefile.in)