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 On systems without linux header files, we add an extra include directory
81 dnl that holds enough to fake it (hopefully). Note that the $(top_srcdir) here
82 dnl is quoted so that it gets expanded by make, not by configure.
84 AC_CHECK_HEADER(linux/fs.h, [linux_headers=yes], [linux_headers=no])
85 if test "$linux_headers" = yes; then
86 AC_DEFINE(HAVE_LINUX_FS_H)
88 LINUX_INCLUDE='-I$(top_srcdir)/include -I$(top_builddir)/include'
89 # Use this include directory with test compiles in the configure script too.
90 CPPFLAGS="$CPPFLAGS -I$srcdir/include -I./include"
92 AC_SUBST(LINUX_INCLUDE)
94 dnl Set default values for library extentions. Will be dealt with after
95 dnl parsing configuration opions, which may modify these
101 dnl set $(LDFLAGS) from --with-ldopts=value
103 AC_ARG_WITH([ldopts],
104 [ --with-ldopts=LDOPTS select linker command line options],
105 AC_MSG_RESULT(LDFLAGS is $withval)
110 dnl Allow separate `root_prefix' to be specified
112 AC_ARG_WITH([root-prefix],
113 [ --with-root-prefix=PREFIX override prefix variable for files to be placed in the root],
114 root_prefix=$withval,
117 dnl handle --enable-dll-shlibs
119 AC_ARG_ENABLE([dll-shlibs],
120 [ --enable-dll-shlibs select DLL libraries],
121 if test "$enableval" = "no"
124 MAKEFILE_DLL=/dev/null
125 echo "Disabling DLL shared libraries"
128 MAKEFILE_DLL=$srcdir/lib/Makefile.dll-lib
131 echo "Enabling DLL shared libraries"
134 MAKEFILE_DLL=/dev/null
136 echo "Disabling DLL shared libraries by default"
139 AC_SUBST_FILE(MAKEFILE_DLL)
141 dnl handle --enable-elf-shlibs
143 AC_ARG_ENABLE([elf-shlibs],
144 [ --enable-elf-shlibs select ELF shared libraries],
145 if test "$enableval" = "no"
148 MAKEFILE_ELF=/dev/null
149 echo "Disabling ELF shared libraries"
152 MAKEFILE_ELF=$srcdir/lib/Makefile.elf-lib
155 echo "Enabling ELF shared libraries"
158 MAKEFILE_ELF=/dev/null
160 echo "Disabling ELF shared libraries by default"
163 AC_SUBST_FILE(MAKEFILE_ELF)
165 dnl handle --enable-bsd-shlibs
167 AC_ARG_ENABLE([bsd-shlibs],
168 [ --enable-bsd-shlibs select BSD shared libraries],
169 if test "$enableval" = "no"
172 MAKEFILE_BSDLIB=/dev/null
173 echo "Disabling BSD shared libraries"
176 MAKEFILE_BSDLIB=$srcdir/lib/Makefile.bsd-lib
178 echo "Enabling BSD shared libraries"
181 MAKEFILE_BSDLIB=/dev/null
183 echo "Disabling BSD shared libraries by default"
186 AC_SUBST_FILE(MAKEFILE_BSDLIB)
188 dnl handle --enable-profile
190 AC_ARG_ENABLE([profile],
191 [ --enable-profile build profiling libraries],
192 if test "$enableval" = "no"
195 MAKEFILE_PROFILE=/dev/null
196 echo "Disabling profiling libraries"
199 MAKEFILE_PROFILE=$srcdir/lib/Makefile.profile
200 PROFILED_LIB_EXT=_p.a
201 echo "Building profiling libraries"
205 MAKEFILE_PROFILE=/dev/null
206 echo "Disabling profiling libraries by default"
208 AC_SUBST(PROFILE_CMT)
209 AC_SUBST_FILE(MAKEFILE_PROFILE)
211 dnl handle --enable-checker
213 AC_ARG_ENABLE([checker],
214 [ --enable-checker build checker libraries],
215 if test "$enableval" = "no"
218 MAKEFILE_CHECKER=/dev/null
219 echo "Disabling checker libraries"
222 MAKEFILE_CHECKER=$srcdir/lib/Makefile.checker
223 echo "Building checker libraries"
227 MAKEFILE_CHECKER=/dev/null
228 echo "Disabling checker libraries by default"
230 AC_SUBST(CHECKER_CMT)
231 AC_SUBST_FILE(MAKEFILE_CHECKER)
233 dnl Substitute library extensions
236 AC_SUBST(STATIC_LIB_EXT)
237 AC_SUBST(PROFILED_LIB_EXT)
239 dnl handle --enable-gcc-wall
241 AC_ARG_ENABLE([gcc-wall],
242 [ --enable-gcc-wall enable GCC anal warnings (DON'T USE IN PRODUCTION)],
243 if test "$enableval" = "no"
246 echo "Disabling GCC warnings"
249 echo "Enabling GCC warnings"
253 echo "Disabling GCC warnings by default"
256 AC_ARG_ENABLE([dynamic-e2fsck],
257 [ --enable-dynamic-e2fsck build e2fsck dynamically],
258 if test "$enableval" = "no"
261 echo "Building e2fsck statically"
264 echo "Building e2fsck dynamically"
268 echo "Building e2fsck statically by default"
270 AC_SUBST(E2FSCK_TYPE)
272 dnl See whether to install the `fsck' wrapper program (that calls e2fsck)
274 AC_ARG_ENABLE([fsck],
275 [ --enable-fsck build fsck wrapper program],
276 [if test "$enableval" = "no"
278 FSCK_PROG='' FSCK_MAN=''
279 echo "Not building fsck wrapper"
281 FSCK_PROG=fsck FSCK_MAN=fsck.8
282 echo "Building fsck wrapper"
287 FSCK_PROG='' FSCK_MAN=''
288 echo "Not building fsck wrapper by default"
291 FSCK_PROG=fsck FSCK_MAN=fsck.8
292 echo "Building fsck wrapper by default"
299 MAKEFILE_LIBRARY=$srcdir/lib/Makefile.library
300 AC_SUBST_FILE(MAKEFILE_LIBRARY)
303 AC_ARG_ENABLE([old-bitops],
304 [ --enable-old-bitops Use old (non-standard but native) bitmask operations],
305 if test "$enableval" = "no"
307 echo "Using new (standard) bitmask operations"
309 AC_DEFINE(EXT2_OLD_BITOPS)
310 echo "Using old (native) bitmask operations"
314 echo "Using standard bitmask operations by default"
317 dnl End of configuration options
319 AC_SUBST(BINARY_TYPE)
321 AC_PATH_PROG(LN, ln, ln)
323 AC_PATH_PROG(MV, mv, mv)
324 AC_PATH_PROG(CP, cp, cp)
325 AC_PATH_PROG(RM, rm, rm)
326 AC_PATH_PROG(CHMOD, chmod, :)
327 AC_PATH_PROG(AWK, awk, awk)
328 AC_PATH_PROG(SED, sed, sed)
329 AC_PATH_PROG(PERL, perl, perl)
330 AC_CHECK_TOOL(AR, ar, ar)
331 AC_CHECK_TOOL(RANLIB, ranlib, :)
332 AC_CHECK_TOOL(STRIP, strip, :)
336 # See if we need a separate native compiler.
337 if test $cross_compiling = no; then
341 AC_CHECK_PROGS(BUILD_CC, gcc cc)
343 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)
346 dnl See if struct dirent has a d_namlen field (like bsd systems), implying
347 dnl that the actual length of the structure may be grater than the declared
350 AC_MSG_CHECKING(whether struct dirent has a d_namlen field)
351 AC_CACHE_VAL(e2fsprogs_cv_struct_d_namlen,
353 [#include <sys/types.h>
354 #include <dirent.h>],
355 [struct dirent de; de.d_namlen = 0;],
356 [e2fsprogs_cv_struct_d_namlen=yes],
357 [e2fsprogs_cv_struct_d_namlen=no]))
358 AC_MSG_RESULT($e2fsprogs_cv_struct_d_namlen)
359 if test "$e2fsprogs_cv_struct_d_namlen" = yes; then
360 AC_DEFINE(HAVE_DIRENT_NAMLEN)
363 dnl Check to see if llseek() is declared in unistd.h. On some libc's
364 dnl it is, and on others it isn't..... Thank you glibc developers....
366 dnl Warning! Use of --enable-gcc-wall may throw off this test.
369 AC_MSG_CHECKING(whether llseek declared in unistd.h)
370 AC_CACHE_VAL(e2fsprogs_cv_have_llseek_prototype,
372 [#include <unistd.h>], [extern int llseek(int);],
373 [e2fsprogs_cv_have_llseek_prototype=no],
374 [e2fsprogs_cv_have_llseek_prototype=yes]))
375 AC_MSG_RESULT($e2fsprogs_cv_have_llseek_prototype)
376 if test "$e2fsprogs_cv_have_llseek_prototype" = yes; then
377 AC_DEFINE(HAVE_LLSEEK_PROTOTYPE)
382 if test "$cross_compiling" = yes -a "$ac_cv_sizeof_long" = ""; then
383 # if cross-compiling, with no cached values, just assume something common.
387 ac_cv_sizeof_long_long=8
388 AC_MSG_WARN([Cross-compiling, so cannot check type sizes; assuming short=2, int=4, long=4, long long=8])
390 AC_CHECK_SIZEOF(short)
392 AC_CHECK_SIZEOF(long)
393 AC_CHECK_SIZEOF(long long)
394 SIZEOF_SHORT=$ac_cv_sizeof_short
395 SIZEOF_INT=$ac_cv_sizeof_int
396 SIZEOF_LONG=$ac_cv_sizeof_long
397 SIZEOF_LONG_LONG=$ac_cv_sizeof_long_long
398 AC_SUBST(SIZEOF_SHORT)
400 AC_SUBST(SIZEOF_LONG)
401 AC_SUBST(SIZEOF_LONG_LONG)
403 dnl See if struct stat has a st_flags field, in which case we can get file
404 dnl flags somewhat portably. Also check for the analogous setter, chflags().
406 AC_MSG_CHECKING(whether struct stat has a st_flags field)
407 AC_CACHE_VAL(e2fsprogs_cv_struct_st_flags,
408 AC_TRY_COMPILE([#include <sys/stat.h>],
409 [struct stat stat; stat.st_flags = 0;],
410 [e2fsprogs_cv_struct_st_flags=yes],
411 [e2fsprogs_cv_struct_st_flags=no]))
412 AC_MSG_RESULT($e2fsprogs_cv_struct_st_flags)
413 if test "$e2fsprogs_cv_struct_st_flags" = yes; then
414 AC_MSG_CHECKING(whether st_flags field is useful)
415 AC_CACHE_VAL(e2fsprogs_cv_struct_st_flags_immut,
416 AC_TRY_COMPILE([#include <sys/stat.h>],
417 [struct stat stat; stat.st_flags |= UF_IMMUTABLE;],
418 [e2fsprogs_cv_struct_st_flags_immut=yes],
419 [e2fsprogs_cv_struct_st_flags_immut=no]))
420 AC_MSG_RESULT($e2fsprogs_cv_struct_st_flags_immut)
421 if test "$e2fsprogs_cv_struct_st_flags_immut" = yes; then
422 AC_DEFINE(HAVE_STAT_FLAGS)
425 AC_CHECK_FUNCS(chflags getrusage llseek strdup getmntinfo strcasecmp srandom fchown mallinfo)
427 dnl Check to see if ino_t is defined
429 AC_MSG_CHECKING(ino_t defined by sys/types.h)
430 AC_CACHE_VAL(e2fsprogs_cv_ino_t,
431 AC_TRY_COMPILE([#include <sys/types.h>],
432 [ino_t ino; ino = 0;],
433 [e2fsprogs_cv_ino_t=yes],
434 [e2fsprogs_cv_ino_t=no]))
435 AC_MSG_RESULT($e2fsprogs_cv_ino_t)
436 if test "$e2fsprogs_cv_ino_t" = yes; then
437 AC_DEFINE(HAVE_INO_T)
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)