Whamcloud - gitweb
Fix Solaris portability bug in the resize tests.
[tools/e2fsprogs.git] / configure.in
1 AC_INIT(version.h)
2 AC_PREREQ(2.50)
3 AC_CONFIG_AUX_DIR(config)
4 MCONFIG=./MCONFIG
5 AC_SUBST_FILE(MCONFIG)
6 BINARY_TYPE=bin
7 dnl
8 dnl This is to figure out the version number and the date....
9 dnl
10 E2FSPROGS_VERSION=`grep E2FSPROGS_VERSION ${srcdir}/version.h  \
11         | awk '{print $3}' | tr \" " " | awk '{print $1}'`
12 DATE=`grep E2FSPROGS_DATE ${srcdir}/version.h | awk '{print $3}' \
13         | tr \" " "`
14 E2FSPROGS_DAY=`echo $DATE | awk -F- '{print $1}'`
15 MONTH=`echo $DATE | awk -F- '{print $2}'`
16 YEAR=`echo $DATE | awk -F- '{print $3}'`
17
18 if expr $YEAR ">" 1900 > /dev/null ; then
19         E2FSPROGS_YEAR=$YEAR
20 elif expr $YEAR ">" 90 >/dev/null ; then
21         E2FSPROGS_YEAR=19$YEAR
22 else
23         E2FSPROGS_YEAR=20$YEAR
24 fi
25
26 case $MONTH in
27 Jan)    E2FSPROGS_MONTH="January" ;;
28 Feb)    E2FSPROGS_MONTH="February" ;;
29 Mar)    E2FSPROGS_MONTH="March" ;;
30 Apr)    E2FSPROGS_MONTH="April" ;;
31 May)    E2FSPROGS_MONTH="May" ;;
32 Jun)    E2FSPROGS_MONTH="June" ;;
33 Jul)    E2FSPROGS_MONTH="July" ;;
34 Aug)    E2FSPROGS_MONTH="August" ;;
35 Sep)    E2FSPROGS_MONTH="September" ;;
36 Oct)    E2FSPROGS_MONTH="October" ;;
37 Nov)    E2FSPROGS_MONTH="November" ;;
38 Dec)    E2FSPROGS_MONTH="December" ;;
39 *)      echo "Unknown month $MONTH??" ;;
40 esac
41
42 unset DATE MONTH YEAR
43 echo "Generating configuration file for e2fsprogs version $E2FSPROGS_VERSION"
44 echo "Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}"
45 AC_SUBST(E2FSPROGS_YEAR)
46 AC_SUBST(E2FSPROGS_MONTH)
47 AC_SUBST(E2FSPROGS_DAY)
48 AC_SUBST(E2FSPROGS_VERSION)
49 AC_CANONICAL_HOST
50 dnl
51 dnl Use diet libc
52 dnl 
53 AC_ARG_WITH([diet-libc],
54 [  --with-diet-libc      Use diet libc],
55 CC="diet cc -nostdinc"
56 AC_MSG_RESULT(CC=$CC))dnl
57 dnl
58 dnl set $(CC) from --with-cc=value
59 dnl
60 AC_ARG_WITH([cc],
61 [  --with-cc=COMPILER      select compiler to use],
62 AC_MSG_RESULT(CC=$withval)
63 CC=$withval,
64 if test -z "$CC" ; then CC=cc; fi
65 [AC_MSG_RESULT(CC defaults to $CC)])dnl
66 export CC
67 AC_SUBST([CC])
68 AC_PROG_CC
69 dnl
70 dnl set $(LD) from --with-linker=value
71 dnl
72 AC_ARG_WITH([linker],
73 [  --with-linker=LINKER    select linker to use],
74 AC_MSG_RESULT(LD=$withval)
75 LD=$withval,
76 if test -z "$LD" ; then LD=$CC; fi
77 [AC_MSG_RESULT(LD defaults to $LD)])dnl
78 export LD
79 AC_SUBST([LD])
80 dnl
81 dnl set $(CCOPTS) from --with-ccopts=value
82 dnl
83 AC_ARG_WITH([ccopts],
84 [  --with-ccopts=CCOPTS    select compiler command line options],
85 AC_MSG_RESULT(CCOPTS is $withval)
86 CFLAGS=$withval,
87 )dnl
88 dnl
89 dnl On systems without linux header files, we add an extra include directory
90 dnl that holds enough to fake it (hopefully).  Note that the $(top_srcdir) here
91 dnl is quoted so that it gets expanded by make, not by configure.
92 dnl
93 AC_CHECK_HEADER(linux/fs.h, [linux_headers=yes], [linux_headers=no])
94 if test "$linux_headers" != yes; then
95   LINUX_INCLUDE='-I$(top_builddir)/include'
96 fi
97 AC_SUBST(LINUX_INCLUDE)
98 dnl
99 dnl Alpha computers use fast and imprecise floating point code that may
100 dnl miss exceptions by default. Force sane options if we're using GCC.
101 AC_MSG_CHECKING(for additional special compiler flags)
102 if test "$GCC" = yes
103 then
104     case "$host_cpu" in
105         alpha)          addcflags="-mieee" ;;
106     esac
107 fi
108 if test "x$addcflags" != x
109 then
110     AC_MSG_RESULT($addcflags)
111     CFLAGS="$addcflags $CFLAGS"
112 else
113     AC_MSG_RESULT([[(none)]])
114 fi
115 dnl
116 dnl Set default values for library extentions.  Will be dealt with after
117 dnl parsing configuration opions, which may modify these
118 dnl
119 LIB_EXT=.a
120 STATIC_LIB_EXT=.a
121 PROFILE_LIB_EXT=.a
122 dnl
123 dnl set $(LDFLAGS) from --with-ldopts=value
124 dnl
125 AC_ARG_WITH([ldopts],
126 [  --with-ldopts=LDOPTS    select linker command line options],
127 AC_MSG_RESULT(LDFLAGS is $withval)
128 LDFLAGS=$withval,
129 LDFLAGS=)dnl
130 AC_SUBST(LDFLAGS)
131 dnl
132 dnl Allow separate `root_prefix' to be specified
133 dnl
134 AC_ARG_WITH([root-prefix],
135 [  --with-root-prefix=PREFIX override prefix variable for files to be placed in the root],
136 root_prefix=$withval,
137 root_prefix=NONE)dnl
138 dnl
139 dnl handle --enable-compression
140 dnl
141 AC_ARG_ENABLE([compression],
142 [  --enable-compression   enable EXPERIMENTAL compression support],
143 if test "$enableval" = "no"
144 then
145         echo "Disabling compression support"
146 else
147         AC_DEFINE(ENABLE_COMPRESSION)
148         echo "Enabling compression support"
149         echo "WARNING: Compression support is experimental"
150 fi
151 ,
152 echo "Disabling compression support by default"
153 )
154 dnl
155 dnl handle --enable-htree
156 dnl
157 AC_ARG_ENABLE([htree],
158 [  --enable-htree         enable EXPERIMENTAL htree directory support],
159 if test "$enableval" = "no"
160 then
161         HTREE_CMT=#
162         echo "Disabling htree directory support"
163 else
164         HTREE_CMT=
165         AC_DEFINE(ENABLE_HTREE)
166         echo "Enabling htree directory support"
167 fi
168 ,
169 HTREE_CMT=
170 AC_DEFINE(ENABLE_HTREE)
171 echo "Enabling htree directory support by default"
172 )
173 AC_SUBST(HTREE_CMT)
174 dnl
175 dnl handle --enable-clear-htree
176 dnl
177 AC_ARG_ENABLE([htree-clear],
178 [  --enable-htree-clear           clear htree because we don't trust e2fsck],
179 if test "$enableval" = "no"
180 then
181         HTREE_CLR_CMT=#
182         echo "Disabling htree clearing"
183 else
184         HTREE_CLR_CMT=
185         AC_DEFINE(ENABLE_HTREE_CLEAR)
186         echo "Enabling htree clearing"
187 fi
188 ,
189 HTREE_CLR_CMT=#
190 echo "Disabling htree clearing by default"
191 )
192 AC_SUBST(HTREE_CLR_CMT)
193 dnl
194 dnl handle --enable-elf-shlibs
195 dnl
196 AC_ARG_ENABLE([elf-shlibs],
197 [  --enable-elf-shlibs    select ELF shared libraries],
198 if test "$enableval" = "no"
199 then
200         ELF_CMT=#
201         MAKEFILE_ELF=/dev/null
202         echo "Disabling ELF shared libraries"
203 else
204         ELF_CMT=
205         MAKEFILE_ELF=$srcdir/lib/Makefile.elf-lib
206         [case "$host_os" in
207         solaris2.*)
208                 MAKEFILE_ELF=$srcdir/lib/Makefile.solaris-lib
209         ;;
210         esac]
211         BINARY_TYPE=elfbin
212         LIB_EXT=.so
213         echo "Enabling ELF shared libraries"
214 fi
215 ,
216 MAKEFILE_ELF=/dev/null
217 ELF_CMT=#
218 echo "Disabling ELF shared libraries by default"
219 )
220 AC_SUBST(ELF_CMT)
221 AC_SUBST_FILE(MAKEFILE_ELF)
222 dnl
223 dnl handle --enable-bsd-shlibs
224 dnl
225 AC_ARG_ENABLE([bsd-shlibs],
226 [  --enable-bsd-shlibs    select BSD shared libraries],
227 if test "$enableval" = "no"
228 then
229         BSDLIB_CMT=#
230         MAKEFILE_BSDLIB=/dev/null
231         echo "Disabling BSD shared libraries"
232 else
233         BSDLIB_CMT=
234         MAKEFILE_BSDLIB=$srcdir/lib/Makefile.bsd-lib
235         LIB_EXT=.so
236         [case "$host_os" in
237         darwin*)
238                 MAKEFILE_BSDLIB=$srcdir/lib/Makefile.darwin-lib
239                 LIB_EXT=.dylib
240         ;;
241         esac]
242         echo "Enabling BSD shared libraries"
243 fi
244 ,
245 MAKEFILE_BSDLIB=/dev/null
246 BSDLIB_CMT=#
247 echo "Disabling BSD shared libraries by default"
248 )
249 AC_SUBST(BSDLIB_CMT)
250 AC_SUBST_FILE(MAKEFILE_BSDLIB)
251 dnl
252 dnl handle --enable-profile
253 dnl
254 AC_ARG_ENABLE([profile],
255 [  --enable-profile       build profiling libraries],
256 if test "$enableval" = "no"
257 then
258         PROFILE_CMT=#
259         MAKEFILE_PROFILE=/dev/null
260         echo "Disabling profiling libraries"
261 else
262         PROFILE_CMT=
263         MAKEFILE_PROFILE=$srcdir/lib/Makefile.profile
264         PROFILED_LIB_EXT=_p.a
265         echo "Building profiling libraries"
266 fi
267 ,
268 PROFILE_CMT=#
269 MAKEFILE_PROFILE=/dev/null
270 echo "Disabling profiling libraries by default"
271 )
272 AC_SUBST(PROFILE_CMT)
273 AC_SUBST_FILE(MAKEFILE_PROFILE)
274 dnl
275 dnl handle --enable-checker
276 dnl
277 AC_ARG_ENABLE([checker],
278 [  --enable-checker       build checker libraries],
279 if test "$enableval" = "no"
280 then
281         CHECKER_CMT=#
282         MAKEFILE_CHECKER=/dev/null
283         echo "Disabling checker libraries"
284 else
285         CHECKER_CMT=
286         MAKEFILE_CHECKER=$srcdir/lib/Makefile.checker
287         echo "Building checker libraries"
288 fi
289 ,
290 CHECKER_CMT=#
291 MAKEFILE_CHECKER=/dev/null
292 echo "Disabling checker libraries by default"
293 )
294 AC_SUBST(CHECKER_CMT)
295 AC_SUBST_FILE(MAKEFILE_CHECKER)
296 dnl
297 dnl Substitute library extensions
298 dnl
299 AC_SUBST(LIB_EXT)
300 AC_SUBST(STATIC_LIB_EXT)
301 AC_SUBST(PROFILED_LIB_EXT)
302 dnl
303 dnl handle --enable-jbd-debug
304 dnl
305 AC_ARG_ENABLE([jbd-debug],
306 [  --enable-jbd-debug     enable journal debugging],
307 if test "$enableval" = "no"
308 then
309         echo "Disabling journal debugging"
310 else
311         AC_DEFINE(CONFIG_JBD_DEBUG)
312         echo "Enabling journal debugging"
313 fi
314 ,
315 echo "Disabling journal debugging by default"
316 )
317 dnl
318 dnl handle --enable-blkid-debug
319 dnl
320 AC_ARG_ENABLE([blkid-debug],
321 [  --enable-blkid-debug    enable blkid debugging],
322 if test "$enableval" = "no"
323 then
324         echo "Disabling blkid debugging"
325 else
326         AC_DEFINE(CONFIG_BLKID_DEBUG)
327         echo "Enabling blkid debugging"
328 fi
329 ,
330 echo "Disabling blkid debugging by default"
331 )
332 dnl
333 dnl handle --enable-testio-debug
334 dnl
335 AC_ARG_ENABLE([testio-debug],
336 [  --enable-testio-debug   enable the use of the test I/O manager for debugging],
337 if test "$enableval" = "no"
338 then
339         echo "Disabling testio debugging"
340 else
341         AC_DEFINE(CONFIG_TESTIO_DEBUG)
342         echo "Enabling testio debugging"
343 fi
344 ,
345 echo "Disabling testio debugging by default"
346 )
347 dnl
348 dnl handle --enable-swapfs
349 dnl
350 AC_ARG_ENABLE([swapfs],
351 [  --disable-swapfs       disable support of legacy byte-swapped filesystems],
352 if test "$enableval" = "no"
353 then
354         SWAPFS_CMT=#
355         echo "Disabling swapfs support"
356 else
357         SWAPFS_CMT=
358         AC_DEFINE(ENABLE_SWAPFS)
359         echo "Enabling swapfs support"
360 fi
361 ,
362 SWAPFS_CMT=
363 echo "Enabling swapfs support by default"
364 AC_DEFINE(ENABLE_SWAPFS)
365 )
366 AC_SUBST(SWAPFS_CMT)
367 dnl
368 dnl handle --enable-debugfs
369 dnl
370 AC_ARG_ENABLE([debugfs],
371 [  --disable-debugfs      disable support of debugfs program],
372 if test "$enableval" = "no"
373 then
374         echo "Disabling debugfs support"
375         DEBUGFS_CMT="#"
376 else
377         DEBUGFS_CMT=
378         echo "Enabling debugfs support"
379 fi
380 ,
381 echo "Enabling debugfs support by default"
382 DEBUGFS_CMT=
383 )
384 AC_SUBST(DEBUGFS_CMT)
385 dnl
386 dnl handle --enable-imager
387 dnl
388 AC_ARG_ENABLE([imager],
389 [  --disable-imager       disable support of e2image program],
390 if test "$enableval" = "no"
391 then
392         echo "Disabling e2image support"
393         IMAGER_CMT="#"
394 else
395         IMAGER_CMT=
396         echo "Enabling e2image support"
397 fi
398 ,
399 echo "Enabling e2image support by default"
400 IMAGER_CMT=
401 )
402 AC_SUBST(IMAGER_CMT)
403 dnl
404 dnl handle --enable-resizer
405 dnl
406 AC_ARG_ENABLE([resizer],
407 [  --disable-resizer      disable support of e2resize program],
408 if test "$enableval" = "no"
409 then
410         echo "Disabling e2resize support"
411         RESIZER_CMT="#"
412 else
413         RESIZER_CMT=
414         echo "Enabling e2resize support"
415 fi
416 ,
417 echo "Enabling e2resize support by default"
418 RESIZER_CMT=
419 )
420 AC_SUBST(RESIZER_CMT)
421 dnl
422 dnl handle --enable-dynamic-e2fsck
423 dnl
424 AC_ARG_ENABLE([dynamic-e2fsck],
425 [  --enable-dynamic-e2fsck build e2fsck dynamically],
426 if test "$enableval" = "no"
427 then
428         E2FSCK_TYPE=static
429         echo "Building e2fsck statically"
430 else
431         E2FSCK_TYPE=shared
432         echo "Building e2fsck dynamically"
433 fi
434 ,
435 E2FSCK_TYPE=static
436 echo "Building e2fsck statically by default"
437 )
438 AC_SUBST(E2FSCK_TYPE)
439 dnl
440 dnl See whether to install the `fsck' wrapper program (that calls e2fsck)
441 dnl
442 AC_ARG_ENABLE([fsck],
443 [  --enable-fsck           build fsck wrapper program],
444 [if test "$enableval" = "no"
445 then
446         FSCK_PROG='' FSCK_MAN=''
447         echo "Not building fsck wrapper"
448 else
449         FSCK_PROG=fsck FSCK_MAN=fsck.8
450         echo "Building fsck wrapper"
451 fi]
452 ,
453 [case "$host_os" in
454   gnu*)
455     FSCK_PROG='' FSCK_MAN=''
456     echo "Not building fsck wrapper by default"
457     ;;
458   *)
459     FSCK_PROG=fsck FSCK_MAN=fsck.8
460     echo "Building fsck wrapper by default"
461 esac]
462 )
463 AC_SUBST(FSCK_PROG)
464 AC_SUBST(FSCK_MAN)
465 dnl
466 dnl See whether to install the `e2initrd-helper' program
467 dnl
468 AC_ARG_ENABLE([e2initrd-helper],
469 [  --enable-e2initrd-helper build e2initrd-helper program],
470 [if test "$enableval" = "no"
471 then
472         E2INITRD_PROG='' E2INITRD_MAN=''
473         echo "Not building e2initrd helper"
474 else
475         E2INITRD_PROG=e2initrd_helper E2INITRD_MAN=e2initrd_helper.8
476         echo "Building e2initrd helper"
477 fi]
478 ,
479 E2INITRD_PROG=e2initrd_helper E2INITRD_MAN=e2initrd_helper.8
480 echo "Building e2initrd helper by default"
481 )
482 AC_SUBST(E2INITRD_PROG)
483 AC_SUBST(E2INITRD_MAN)
484 dnl
485 dnl
486 MAKEFILE_LIBRARY=$srcdir/lib/Makefile.library
487 AC_SUBST_FILE(MAKEFILE_LIBRARY)
488 dnl
489 dnl
490 AC_ARG_ENABLE([old-bitops],
491 [  --enable-old-bitops    Use old (non-standard but native) bitmask operations],
492 if test "$enableval" = "no"
493 then
494         echo "Using new (standard) bitmask operations"
495 else
496         AC_DEFINE(EXT2_OLD_BITOPS)
497         echo "Using old (native) bitmask operations"
498
499 fi
500 ,
501 echo "Using standard bitmask operations by default"
502 )
503 dnl
504 dnl Add internationalization support, using gettext.
505 dnl
506 GETTEXT_PACKAGE=e2fsprogs
507 PACKAGE=e2fsprogs
508 VERSION="$E2FSPROGS_VERSION"
509 VERSION=0.14.1
510 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
511 AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
512 AC_SUBST(GETTEXT_PACKAGE)
513 AC_SUBST(PACKAGE)
514 AC_SUBST(VERSION)
515
516 AM_GNU_GETTEXT
517 dnl
518 dnl End of configuration options
519 dnl
520 AC_SUBST(BINARY_TYPE)
521 AC_PROG_MAKE_SET
522 AC_PATH_PROG(LN, ln, ln)
523 AC_PROG_LN_S
524 AC_PATH_PROG(MV, mv, mv)
525 AC_PATH_PROG(CP, cp, cp)
526 AC_PATH_PROG(RM, rm, rm)
527 AC_PATH_PROG(CHMOD, chmod, :)
528 AC_PROG_AWK
529 AC_PROG_EGREP
530 AC_PATH_PROG(SED, sed, sed)
531 AC_PATH_PROG(PERL, perl, perl)
532 AC_PATH_PROG(LDCONFIG, ldconfig, :)
533 AC_CHECK_TOOL(AR, ar, ar)
534 AC_CHECK_TOOL(RANLIB, ranlib, :)
535 AC_CHECK_TOOL(STRIP, strip, :)
536 AC_PROG_INSTALL
537 # See if we need a separate native compiler.
538 if test $cross_compiling = no; then
539   BUILD_CC="$CC"
540   AC_SUBST(BUILD_CC)
541 else
542   AC_CHECK_PROGS(BUILD_CC, gcc cc)
543 fi
544 AC_CHECK_HEADERS(stdlib.h unistd.h stdarg.h stdint.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/ioctl.h sys/mkdev.h sys/queue.h sys/sockio.h sys/socket.h sys/sysmacros.h sys/time.h sys/stat.h sys/types.h sys/wait.h sys/resource.h net/if_dl.h netinet/in.h)
545 AC_CHECK_HEADERS(sys/disk.h sys/mount.h,,,
546 [[
547 #if HAVE_SYS_QUEUE_H
548 #include <sys/queue.h>
549 #endif
550 ]])
551 AC_CHECK_HEADERS(net/if.h,,,
552 [[
553 #if HAVE_SYS_TYPES_H
554 #include <sys/types.h>
555 #endif
556 #if HAVE_SYS_SOCKET
557 #include <sys/socket.h>
558 #endif
559 ]])
560 AC_FUNC_VPRINTF
561 dnl Check to see if dirent has member d_reclen. On cygwin those d_reclen
562 dnl is not decleared.
563 AC_CHECK_MEMBER(struct dirent.d_reclen,[AC_DEFINE(HAVE_RECLEN_DIRENT)],,
564                 [#include <dirent.h>])
565 dnl Check to see if ssize_t was decleared
566 AC_CHECK_TYPE(ssize_t,[AC_DEFINE(HAVE_TYPE_SSIZE_T)],,
567               [#include <sys/types.h>])
568 dnl
569 dnl Check to see if llseek() is declared in unistd.h.  On some libc's 
570 dnl it is, and on others it isn't..... Thank you glibc developers....
571 dnl
572 AC_CHECK_DECL(llseek,[AC_DEFINE(HAVE_LLSEEK_PROTOTYPE)],,
573               [#include <unistd.h>])
574 dnl
575 dnl Check to see if lseek64() is declared in unistd.h.  Glibc's header files
576 dnl are so convoluted that I can't tell whether it will always be defined,
577 dnl and if it isn't defined while lseek64 is defined in the library, 
578 dnl disaster will strike.  
579 dnl
580 dnl Warning!  Use of --enable-gcc-wall may throw off this test.
581 dnl
582 dnl
583 AC_CHECK_DECL(lseek64,[AC_DEFINE(HAVE_LSEEK64_PROTOTYPE)],,
584                 [#define _LARGEFILE_SOURCE
585                  #define _LARGEFILE64_SOURCE
586                  #include <unistd.h>])
587 dnl
588 dnl Word sizes...
589 dnl
590 if test "$cross_compiling" = yes -a "$ac_cv_sizeof_long" = ""; then
591   # if cross-compiling, with no cached values, just assume something common. 
592   ac_cv_sizeof_short=2
593   ac_cv_sizeof_int=4
594   ac_cv_sizeof_long=4
595   ac_cv_sizeof_long_long=8
596   AC_MSG_WARN([Cross-compiling, so cannot check type sizes; assuming short=2, int=4, long=4, long long=8])
597 fi
598 AC_CHECK_SIZEOF(short)
599 AC_CHECK_SIZEOF(int)
600 AC_CHECK_SIZEOF(long)
601 AC_CHECK_SIZEOF(long long)
602 SIZEOF_SHORT=$ac_cv_sizeof_short
603 SIZEOF_INT=$ac_cv_sizeof_int
604 SIZEOF_LONG=$ac_cv_sizeof_long
605 SIZEOF_LONG_LONG=$ac_cv_sizeof_long_long
606 AC_SUBST(SIZEOF_SHORT)
607 AC_SUBST(SIZEOF_INT)
608 AC_SUBST(SIZEOF_LONG)
609 AC_SUBST(SIZEOF_LONG_LONG)
610 AC_C_BIGENDIAN
611 dnl
612 dnl See if we have inttypes.h and if intptr_t is defined
613 dnl
614 AC_CHECK_HEADERS([inttypes.h])
615 AC_CHECK_TYPES(intptr_t)
616 dnl
617 dnl See if struct stat has a st_flags field, in which case we can get file
618 dnl flags somewhat portably.  Also check for the analogous setter, chflags().
619 dnl
620 AC_MSG_CHECKING(whether struct stat has a st_flags field)
621 AC_CACHE_VAL(e2fsprogs_cv_struct_st_flags,
622         AC_TRY_COMPILE([#include <sys/stat.h>],
623                 [struct stat stat; stat.st_flags = 0;],
624                 [e2fsprogs_cv_struct_st_flags=yes],
625                 [e2fsprogs_cv_struct_st_flags=no]))
626 AC_MSG_RESULT($e2fsprogs_cv_struct_st_flags)
627 if test "$e2fsprogs_cv_struct_st_flags" = yes; then
628   AC_MSG_CHECKING(whether st_flags field is useful)
629   AC_CACHE_VAL(e2fsprogs_cv_struct_st_flags_immut,
630         AC_TRY_COMPILE([#include <sys/stat.h>],
631                 [struct stat stat; stat.st_flags |= UF_IMMUTABLE;],
632                 [e2fsprogs_cv_struct_st_flags_immut=yes],
633                 [e2fsprogs_cv_struct_st_flags_immut=no]))
634   AC_MSG_RESULT($e2fsprogs_cv_struct_st_flags_immut)
635   if test "$e2fsprogs_cv_struct_st_flags_immut" = yes; then
636           AC_DEFINE(HAVE_STAT_FLAGS)
637   fi
638 fi
639 dnl
640 dnl Check for the presence of SA_LEN
641 dnl
642 AC_CHECK_MEMBER(struct sockaddr.sa_len,
643                 AC_DEFINE_UNQUOTED(HAVE_SA_LEN,1,[Define if struct sockaddr contains sa_len]),,
644         [#include <sys/types.h>
645          #include <sys/socket.h>])
646 dnl
647 AC_CHECK_FUNCS(chflags getrusage llseek lseek64 open64 getmntinfo strtoull strcasecmp srandom fchown mallinfo fdatasync strnlen strptime sysconf pathconf posix_memalign memalign valloc)
648 dnl
649 dnl Check to see if -lsocket is required (solaris) to make something
650 dnl that uses socket() to compile; this is needed for the UUID library
651 dnl
652 SOCKET_LIB=''
653 AC_CHECK_LIB(socket, socket, [SOCKET_LIB=-lsocket])
654 AC_SUBST(SOCKET_LIB)
655 dnl
656 dnl Check to see if libdl exists for the sake of dlopen
657 dnl
658 DLOPEN_LIB=''
659 AC_CHECK_LIB(dl, dlopen, 
660 [DLOPEN_LIB=-ldl
661 AC_DEFINE(HAVE_DLOPEN)])
662 AC_SUBST(DLOPEN_LIB)
663 dnl
664 dnl See if optreset exists
665 dnl
666 AC_MSG_CHECKING(for optreset)
667 AC_CACHE_VAL(ac_cv_have_optreset,
668 [AC_EGREP_HEADER(optreset, unistd.h,
669   ac_cv_have_optreset=yes, ac_cv_have_optreset=no)])dnl
670 AC_MSG_RESULT($ac_cv_have_optreset)
671 if test $ac_cv_have_optreset = yes; then
672   AC_DEFINE(HAVE_OPTRESET)
673 fi
674 dnl
675 dnl We use the EXT2 ioctls only under Linux
676 dnl
677 case "$host_os" in
678 linux*)
679         AC_DEFINE(HAVE_EXT2_IOCTLS)
680         ;;
681 esac
682 dnl
683 dnl OS-specific uncomment control
684 dnl
685 LINUX_CMT="#"
686 CYGWIN_CMT="#"
687 UNIX_CMT=
688 case "$host_os" in
689 linux*)
690         LINUX_CMT=
691         ;;
692 cygwin)
693         CYGWIN_CMT=
694         UNIX_CMT="#"
695         ;;
696 esac
697 AC_SUBST(LINUX_CMT)
698 AC_SUBST(CYGWIN_CMT)
699 AC_SUBST(UNIX_CMT)
700 dnl
701 dnl Linux and Hurd places root files in the / by default
702 dnl
703 case "$host_os" in
704 linux* | gnu* | k*bsd*-gnu)
705         if test "$prefix" = NONE -a "$root_prefix" = NONE ; then
706                 root_prefix="";
707                 echo "On $host_os systems, root_prefix defaults to ''"
708         fi
709         ;;
710 esac
711 dnl
712 dnl On Linux/hurd, force the prefix to be /usr
713 dnl
714 case "$host_os" in
715 linux* | gnu* | k*bsd*-gnu)
716         if test "$prefix" = NONE ; then
717                 prefix="/usr";
718                 echo "On $host_os systems, prefix defaults to /usr"
719                 if test "$mandir" = '${prefix}/man' ; then
720                         echo "...and mandir defaults to /usr/share/man"
721                         mandir=/usr/share/man
722                 fi
723         fi
724 ;;
725 esac
726 if test "$root_prefix" = NONE ; then
727         if test "$prefix" = NONE ; then
728                 root_prefix="$ac_default_prefix"
729         else
730                 root_prefix="$prefix"
731         fi
732         root_bindir=$bindir
733         root_sbindir=$sbindir
734         root_libdir=$libdir
735         root_sysconfdir=$sysconfdir
736 else
737         root_bindir='${root_prefix}/bin'
738         root_sbindir='${root_prefix}/sbin'
739         root_libdir='${root_prefix}/lib'
740         root_sysconfdir='${root_prefix}/etc'
741 fi
742 AC_SUBST(root_prefix)
743 AC_SUBST(root_bindir)
744 AC_SUBST(root_sbindir)
745 AC_SUBST(root_libdir)
746 AC_SUBST(root_sysconfdir)
747 dnl
748 dnl See if -static works.
749 dnl
750 AC_MSG_CHECKING([whether linker accepts -static])
751 AC_CACHE_VAL(ac_cv_e2fsprogs_use_static,
752 [SAVE_LDFLAGS=$LDFLAGS; LDFLAGS="$LDFLAGS -static"
753 AC_TRY_LINK([#include <stdio.h>],[fflush(stdout);],
754  ac_cv_e2fsprogs_use_static=yes, ac_cv_e2fsprogs_use_static=no)
755 LDFLAGS=$SAVE_LDFLAGS])
756 dnl
757 dnl Regardless of how the test turns out, Solaris doesn't handle -static
758 dnl This is caused by the socket library requiring the nsl library, which
759 dnl requires the -dl library, which only works for dynamically linked 
760 dnl programs.  It basically means you can't have statically linked programs
761 dnl which use the network under Solaris.  
762 dnl
763 case "$host_os" in
764 solaris2.*)
765         ac_cv_e2fsprogs_use_static=no   
766 ;;
767 esac
768 AC_MSG_RESULT($ac_cv_e2fsprogs_use_static)
769 LDFLAG_STATIC=
770 if test $ac_cv_e2fsprogs_use_static = yes; then
771         LDFLAG_STATIC=-static
772 fi
773 AC_SUBST(LDFLAG_STATIC)
774 dnl
775 dnl Work around mysterious Darwin / GNU libintl problem
776 dnl (__asm__ redirection doesn't work for some mysterious reason.  Looks like
777 dnl Apple hacked gcc somehow?)
778 dnl
779 case "$host_os" in
780 darwin*)
781         echo "Using Apple Darwin / GNU libintl workaround"
782         AC_DEFINE(_INTL_REDIRECT_MACROS)
783         ;;
784 esac
785 dnl
786 dnl Make the ss and et directories work correctly.
787 dnl
788 SS_DIR=`cd ${srcdir}/lib/ss; pwd`
789 ET_DIR=`cd ${srcdir}/lib/et; pwd`
790 AC_SUBST(SS_DIR)
791 AC_SUBST(ET_DIR)
792 dnl
793 dnl Only try to run the test suite if we're not cross compiling.
794 dnl
795 if test "$cross_compiling" = yes ; then
796   DO_TEST_SUITE=
797 else
798   DO_TEST_SUITE=check
799 fi
800 AC_SUBST(DO_TEST_SUITE)
801 dnl
802 dnl Only include the intl include files if we're building with them
803 dnl 
804 INTL_FLAGS=
805 if test "$USE_INCLUDED_LIBINTL" = "yes" ; then
806         INTL_FLAGS='-I$(top_builddir)/intl -I$(top_srcdir)/intl'
807 fi
808 AC_SUBST(INTL_FLAGS)
809 dnl
810 dnl Make our output files, being sure that we create the some miscellaneous 
811 dnl directories
812 dnl
813 test -d lib || mkdir lib
814 test -d include || mkdir include
815 test -d include/linux || mkdir include/linux
816 test -d include/asm || mkdir include/asm
817 for i in MCONFIG Makefile e2fsprogs.spec \
818         util/Makefile util/subst.conf util/gen-tarball \
819         lib/et/Makefile lib/ss/Makefile lib/ext2fs/Makefile lib/e2p/Makefile \
820         lib/uuid/Makefile lib/uuid/uuid_types.h \
821         lib/blkid/Makefile lib/blkid/blkid_types.h \
822         lib/ss/ss.pc lib/uuid/uuid.pc lib/et/com_err.pc \
823         lib/e2p/e2p.pc lib/blkid/blkid.pc lib/ext2fs/ext2fs.pc \
824         misc/Makefile ext2ed/Makefile e2fsck/Makefile \
825         debugfs/Makefile tests/Makefile tests/progs/Makefile \
826         resize/Makefile doc/Makefile intl/Makefile po/Makefile.in ; do
827         if test -d `dirname ${srcdir}/$i` ; then
828                 outlist="$outlist $i"
829         fi
830 done
831 AC_OUTPUT($outlist)