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
59 dnl set $(LD) from --with-linker=value
62 [ --with-linker=LINKER select linker to use],
63 AC_MSG_RESULT(LD=$withval)
65 if test -z "$LD" ; then LD=$CC; fi
66 [AC_MSG_RESULT(LD defaults to $LD)])dnl
70 dnl set $(CCOPTS) from --with-ccopts=value
73 [ --with-ccopts=CCOPTS select compiler command line options],
74 AC_MSG_RESULT(CCOPTS is $withval)
76 CFLAGS="$CFLAGS $withval",
80 dnl Set default values for library extentions. Will be dealt with after
81 dnl parsing configuration opions, which may modify these
87 dnl set $(LDFLAGS) from --with-ldopts=value
90 [ --with-ldopts=LDOPTS select linker command line options],
91 AC_MSG_RESULT(LDFLAGS is $withval)
96 dnl Allow separate `root_prefix' to be specified
98 AC_ARG_WITH([root-prefix],
99 [ --with-root-prefix=PREFIX override prefix variable for files to be placed in the root],
100 root_prefix=$withval,
103 dnl handle --enable-dll-shlibs
105 AC_ARG_ENABLE([dll-shlibs],
106 [ --enable-dll-shlibs select DLL libraries],
107 if test "$enableval" = "no"
110 MAKEFILE_DLL=/dev/null
111 echo "Disabling DLL shared libraries"
114 MAKEFILE_DLL=$srcdir/lib/Makefile.dll-lib
117 echo "Enabling DLL shared libraries"
120 MAKEFILE_DLL=/dev/null
122 echo "Disabling DLL shared libraries by default"
125 AC_SUBST_FILE(MAKEFILE_DLL)
127 dnl handle --enable-elf-shlibs
129 AC_ARG_ENABLE([elf-shlibs],
130 [ --enable-elf-shlibs select ELF shared libraries],
131 if test "$enableval" = "no"
134 MAKEFILE_ELF=/dev/null
135 echo "Disabling ELF shared libraries"
138 MAKEFILE_ELF=$srcdir/lib/Makefile.elf-lib
141 echo "Enabling ELF shared libraries"
144 MAKEFILE_ELF=/dev/null
146 echo "Disabling ELF shared libraries by default"
149 AC_SUBST_FILE(MAKEFILE_ELF)
151 dnl handle --enable-bsd-shlibs
153 AC_ARG_ENABLE([bsd-shlibs],
154 [ --enable-bsd-shlibs select BSD shared libraries],
155 if test "$enableval" = "no"
158 MAKEFILE_BSDLIB=/dev/null
159 echo "Disabling BSD shared libraries"
162 MAKEFILE_BSDLIB=$srcdir/lib/Makefile.bsd-lib
164 echo "Enabling BSD shared libraries"
167 MAKEFILE_BSDLIB=/dev/null
169 echo "Disabling BSD shared libraries by default"
172 AC_SUBST_FILE(MAKEFILE_BSDLIB)
174 dnl handle --enable-profile
176 AC_ARG_ENABLE([profile],
177 [ --enable-profile build profiling libraries],
178 if test "$enableval" = "no"
181 MAKEFILE_PROFILE=/dev/null
182 echo "Disabling profiling libraries"
185 MAKEFILE_PROFILE=$srcdir/lib/Makefile.profile
186 PROFILED_LIB_EXT=_p.a
187 echo "Building profiling libraries"
191 MAKEFILE_PROFILE=/dev/null
192 echo "Disabling profiling libraries by default"
194 AC_SUBST(PROFILE_CMT)
195 AC_SUBST_FILE(MAKEFILE_PROFILE)
197 dnl handle --enable-checker
199 AC_ARG_ENABLE([checker],
200 [ --enable-checker build checker libraries],
201 if test "$enableval" = "no"
204 MAKEFILE_CHECKER=/dev/null
205 echo "Disabling checker libraries"
208 MAKEFILE_CHECKER=$srcdir/lib/Makefile.checker
209 echo "Building checker libraries"
213 MAKEFILE_CHECKER=/dev/null
214 echo "Disabling checker libraries by default"
216 AC_SUBST(CHECKER_CMT)
217 AC_SUBST_FILE(MAKEFILE_CHECKER)
219 dnl Substitute library extensions
222 AC_SUBST(STATIC_LIB_EXT)
223 AC_SUBST(PROFILED_LIB_EXT)
225 dnl handle --enable-gcc-wall
227 AC_ARG_ENABLE([gcc-wall],
228 [ --enable-gcc-wall enable GCC anal warnings (DON'T USE IN PRODUCTION)],
229 if test "$enableval" = "no"
232 echo "Disabling GCC warnings"
235 echo "Enabling GCC warnings"
239 echo "Disabling GCC warnings by default"
242 AC_ARG_ENABLE([dynamic-e2fsck],
243 [ --enable-dynamic-e2fsck build e2fsck dynamically],
244 if test "$enableval" = "no"
247 echo "Building e2fsck statically"
250 echo "Building e2fsck dynamically"
254 echo "Building e2fsck statically by default"
256 AC_SUBST(E2FSCK_TYPE)
258 dnl See whether to install the `fsck' wrapper program (that calls e2fsck)
260 AC_ARG_ENABLE([fsck],
261 [ --enable-fsck build fsck wrapper program],
262 [if test "$enableval" = "no"
264 FSCK_PROG='' FSCK_MAN=''
265 echo "Not building fsck wrapper"
267 FSCK_PROG=fsck FSCK_MAN=fsck.8
268 echo "Building fsck wrapper"
273 FSCK_PROG='' FSCK_MAN=''
274 echo "Not building fsck wrapper by default"
277 FSCK_PROG=fsck FSCK_MAN=fsck.8
278 echo "Building fsck wrapper by default"
285 MAKEFILE_LIBRARY=$srcdir/lib/Makefile.library
286 AC_SUBST_FILE(MAKEFILE_LIBRARY)
289 AC_ARG_ENABLE([old-bitops],
290 [ --enable-old-bitops Use old (non-standard but native) bitmask operations],
291 if test "$enableval" = "no"
293 echo "Using new (standard) bitmask operations"
295 AC_DEFINE(EXT2_OLD_BITOPS)
296 echo "Using old (native) bitmask operations"
300 echo "Using standard bitmask operations by default"
303 dnl End of configuration options
305 AC_SUBST(BINARY_TYPE)
307 AC_PATH_PROG(LN, ln, ln)
309 AC_PATH_PROG(MV, mv, mv)
310 AC_PATH_PROG(CP, cp, cp)
311 AC_PATH_PROG(RM, rm, rm)
312 AC_PATH_PROG(CHMOD, chmod, :)
313 AC_PATH_PROG(AWK, awk, awk)
314 AC_PATH_PROG(SED, sed, sed)
315 AC_PATH_PROG(PERL, perl, perl)
316 AC_CHECK_TOOL(AR, ar, ar)
317 AC_CHECK_TOOL(RANLIB, ranlib, :)
318 AC_CHECK_TOOL(STRIP, strip, :)
322 # See if we need a separate native compiler.
323 if test $cross_compiling = no; then
327 AC_CHECK_PROGS(BUILD_CC, gcc cc)
329 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 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)
332 dnl See if struct dirent has a d_namlen field (like bsd systems), implying
333 dnl that the actual length of the structure may be grater than the declared
336 AC_MSG_CHECKING(whether struct dirent has a d_namlen field)
337 AC_CACHE_VAL(e2fsprogs_cv_struct_d_namlen,
339 [#include <sys/types.h>
340 #include <dirent.h>],
341 [struct dirent de; de.d_namlen = 0;],
342 [e2fsprogs_cv_struct_d_namlen=yes],
343 [e2fsprogs_cv_struct_d_namlen=no]))
344 AC_MSG_RESULT($e2fsprogs_cv_struct_d_namlen)
345 if test "$e2fsprogs_cv_struct_d_namlen" = yes; then
346 AC_DEFINE(HAVE_DIRENT_NAMLEN)
349 dnl Check to see if llseek() is declared in unistd.h. On some libc's
350 dnl it is, and on others it isn't..... Thank you glibc developers....
352 dnl Warning! Use of --enable-gcc-wall may throw off this test.
355 AC_MSG_CHECKING(whether llseek declared in unistd.h)
356 AC_CACHE_VAL(e2fsprogs_cv_have_llseek_prototype,
358 [#include <unistd.h>], [extern int llseek(int);],
359 [e2fsprogs_cv_have_llseek_prototype=no],
360 [e2fsprogs_cv_have_llseek_prototype=yes]))
361 AC_MSG_RESULT($e2fsprogs_cv_have_llseek_prototype)
362 if test "$e2fsprogs_cv_have_llseek_prototype" = yes; then
363 AC_DEFINE(HAVE_LLSEEK_PROTOTYPE)
368 if test "$cross_compiling" = yes -a "$ac_cv_sizeof_long" = ""; then
369 # if cross-compiling, with no cached values, just assume something common.
373 ac_cv_sizeof_long_long=8
374 AC_MSG_WARN([Cross-compiling, so cannot check type sizes; assuming short=2, int=4, long=4, long long=8])
376 AC_CHECK_SIZEOF(short)
378 AC_CHECK_SIZEOF(long)
379 AC_CHECK_SIZEOF(long long)
380 SIZEOF_SHORT=$ac_cv_sizeof_short
381 SIZEOF_INT=$ac_cv_sizeof_int
382 SIZEOF_LONG=$ac_cv_sizeof_long
383 SIZEOF_LONG_LONG=$ac_cv_sizeof_long_long
384 AC_SUBST(SIZEOF_SHORT)
386 AC_SUBST(SIZEOF_LONG)
387 AC_SUBST(SIZEOF_LONG_LONG)
389 dnl See if struct stat has a st_flags field, in which case we can get file
390 dnl flags somewhat portably. Also check for the analogous setter, chflags().
392 AC_MSG_CHECKING(whether struct stat has a st_flags field)
393 AC_CACHE_VAL(e2fsprogs_cv_struct_st_flags,
394 AC_TRY_COMPILE([#include <sys/stat.h>],
395 [struct stat stat; stat.st_flags = 0;],
396 [e2fsprogs_cv_struct_st_flags=yes],
397 [e2fsprogs_cv_struct_st_flags=no]))
398 AC_MSG_RESULT($e2fsprogs_cv_struct_st_flags)
399 if test "$e2fsprogs_cv_struct_st_flags" = yes; then
400 AC_MSG_CHECKING(whether st_flags field is useful)
401 AC_CACHE_VAL(e2fsprogs_cv_struct_st_flags_immut,
402 AC_TRY_COMPILE([#include <sys/stat.h>],
403 [struct stat stat; stat.st_flags |= UF_IMMUTABLE;],
404 [e2fsprogs_cv_struct_st_flags_immut=yes],
405 [e2fsprogs_cv_struct_st_flags_immut=no]))
406 AC_MSG_RESULT($e2fsprogs_cv_struct_st_flags_immut)
407 if test "$e2fsprogs_cv_struct_st_flags_immut" = yes; then
408 AC_DEFINE(HAVE_STAT_FLAGS)
411 AC_CHECK_FUNCS(chflags getrusage llseek strdup getmntinfo strcasecmp srandom fchown mallinfo)
413 dnl Check to see if ino_t is defined
415 AC_MSG_CHECKING(ino_t defined by sys/types.h)
416 AC_CACHE_VAL(e2fsprogs_cv_ino_t,
417 AC_TRY_COMPILE([#include <sys/types.h>],
418 [ino_t ino; ino = 0;],
419 [e2fsprogs_cv_ino_t=yes],
420 [e2fsprogs_cv_ino_t=no]))
421 AC_MSG_RESULT($e2fsprogs_cv_ino_t)
422 if test "$e2fsprogs_cv_ino_t" = yes; then
423 AC_DEFINE(HAVE_INO_T)
426 dnl On systems without linux header files, we add an extra include directory
427 dnl that holds enough to fake it (hopefully). Note that the $(top_srcdir) here
428 dnl is quoted so that it gets expanded by make, not by configure.
430 AC_CHECK_HEADER(linux/fs.h, [linux_headers=yes], [linux_headers=no])
431 if test "$linux_headers" = yes; then
432 AC_DEFINE(HAVE_LINUX_FS_H)
434 LINUX_INCLUDE='-I$(top_srcdir)/include -I$(top_builddir)/include'
435 # Use this include directory with test compiles in the configure script too.
436 CPPFLAGS="$CPPFLAGS -I$srcdir/include -I./include"
438 AC_SUBST(LINUX_INCLUDE)
440 dnl Check to see if -lsocket is required (solaris) to make something
441 dnl that uses socket() to compile; this is needed for the UUID library
444 AC_CHECK_LIB(socket, socket, [SOCKET_LIB=-lsocket])
447 dnl See if optreset exists
449 AC_MSG_CHECKING(for optreset)
450 AC_CACHE_VAL(ac_cv_have_optreset,
451 [AC_EGREP_HEADER(optreset, unistd.h,
452 ac_cv_have_optreset=yes, ac_cv_have_optreset=no)])dnl
453 AC_MSG_RESULT($ac_cv_have_optreset)
454 if test $ac_cv_have_optreset = yes; then
455 AC_DEFINE(HAVE_OPTRESET)
458 dnl See if using the EXT2 ioctls causes a compile-time barf (as on the Hurd).
460 AC_MSG_CHECKING(whether the ext2 ioctls compile)
461 AC_CACHE_VAL(e2fsprogs_cv_ioctl_ext2,
462 AC_TRY_COMPILE([#include <linux/ext2_fs.h>
463 #include <sys/ioctl.h>],
464 [ioctl (0, EXT2_IOC_SETVERSION, 0);],
465 [e2fsprogs_cv_ioctl_ext2=yes],
466 [e2fsprogs_cv_ioctl_ext2=no]))
467 AC_MSG_RESULT($e2fsprogs_cv_ioctl_ext2)
468 if test "$e2fsprogs_cv_ioctl_ext2" = yes; then
469 AC_DEFINE(HAVE_EXT2_IOCTLS)
472 dnl Check if ext2_inode has i_version (changed to i_generation in Linux 2.3)
474 AC_MSG_CHECKING(whether struct ext2_inode has an i_version field)
475 AC_CACHE_VAL(e2fsprogs_cv_ext2_inode_version,
476 AC_TRY_COMPILE([#include <linux/ext2_fs.h>],
477 [struct ext2_inode e2i; e2i.i_version=0;],
478 [e2fsprogs_cv_ext2_inode_version=yes],
479 [e2fsprogs_cv_ext2_inode_version=no]))
480 AC_MSG_RESULT($e2fsprogs_cv_ext2_inode_version)
481 if test "$e2fsprogs_cv_ext2_inode_version" = yes; then
482 AC_DEFINE(HAVE_EXT2_INODE_VERSION)
485 dnl Linux and Hurd places root files in the / by default
489 if test "$prefix" = NONE -a "$root_prefix" = NONE ; then
491 echo "On $host_os systems, root_prefix defaults to ''"
496 dnl On Linux/hurd, force the prefix to be /usr
500 if test "$prefix" = NONE ; then
502 echo "On $host_os systems, prefix defaults to /usr"
506 if test "$root_prefix" = NONE ; then
507 if test "$prefix" = NONE ; then
508 root_prefix="$ac_default_prefix"
510 root_prefix="$prefix"
513 AC_SUBST(root_prefix)
515 dnl See if -static works.
517 AC_MSG_CHECKING([whether linker accepts -static])
518 AC_CACHE_VAL(ac_cv_e2fsprogs_use_static,
519 [SAVE_LDFLAGS=$LDFLAGS; LDFLAGS="$LDFLAGS -static"
520 AC_TRY_LINK([#include <stdio.h>],[fflush(stdout);],
521 ac_cv_e2fsprogs_use_static=yes, ac_cv_e2fsprogs_use_static=no)
522 LDFLAGS=$SAVE_LDFLAGS])
524 dnl Regardless of how the test turns out, Solaris doesn't handle -static
525 dnl This is caused by the socket library requiring the nsl library, which
526 dnl requires the -dl library, which only works for dynamically linked
527 dnl programs. It basically means you can't have statically linked programs
528 dnl which use the network under Solaris.
532 ac_cv_e2fsprogs_use_static=no
535 AC_MSG_RESULT($ac_cv_e2fsprogs_use_static)
537 if test $ac_cv_e2fsprogs_use_static = yes; then
538 LDFLAG_STATIC=-static
540 AC_SUBST(LDFLAG_STATIC)
542 dnl Make the ss and et directories work correctly.
544 SS_DIR=`cd ${srcdir}/lib/ss; pwd`
545 ET_DIR=`cd ${srcdir}/lib/et; pwd`
549 dnl Only try to run the test suite if we're not cross compiling.
551 if test "$cross_compiling" = yes ; then
556 AC_SUBST(DO_TEST_SUITE)
560 DO_SUBSTITUTE_SCRIPT=$srcdir/lib/do_substitute
561 AC_SUBST_FILE(DO_SUBSTITUTE_SCRIPT)
563 dnl Make our output files, being sure that we create the some miscellaneous
566 test -d lib || mkdir lib
567 test -d include || mkdir include
568 test -d include/linux || mkdir include/linux
569 test -d include/asm || mkdir include/asm
571 if test -d ${srcdir}/resize ; then
572 rmakefile=resize/Makefile
574 AC_OUTPUT(MCONFIG Makefile util/Makefile util/subst.conf lib/et/Makefile
575 lib/ss/Makefile lib/ext2fs/Makefile lib/e2p/Makefile lib/uuid/Makefile
576 misc/Makefile e2fsck/Makefile debugfs/Makefile tests/Makefile
577 tests/progs/Makefile $rmakefile doc/Makefile)