Whamcloud - gitweb
a9b5567194661e6415759f13eb311fac72dbdbc3
[tools/e2fsprogs.git] / configure.in
1 AC_INIT(version.h)
2 AC_PREREQ(2.12)
3 MCONFIG=./MCONFIG
4 AC_SUBST_FILE(MCONFIG)
5 BINARY_TYPE=bin
6 dnl
7 dnl This is to figure out the version number and the date....
8 dnl
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}' \
12         | tr \" " "`
13 MONTH=`echo $DATE | awk -F- '{print $2}'`
14 YEAR=`echo $DATE | awk -F- '{print $3}'`
15
16 if expr $YEAR ">" 1900 > /dev/null ; then
17         E2FSPROGS_YEAR=$YEAR
18 elif expr $YEAR ">" 90 >/dev/null ; then
19         E2FSPROGS_YEAR=19$YEAR
20 else
21         E2FSPROGS_YEAR=20$YEAR
22 fi
23
24 case $MONTH in
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??" ;;
38 esac
39
40 unset DATE MONTH YEAR
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])
47 dnl
48 dnl set $(CC) from --with-cc=value
49 dnl
50 AC_ARG_WITH([cc],
51 [  --with-cc=COMPILER      select compiler to use],
52 AC_MSG_RESULT(CC=$withval)
53 CC=$withval,
54 if test -z "$CC" ; then CC=cc; fi
55 [AC_MSG_RESULT(CC defaults to $CC)])dnl
56 export CC
57 AC_SUBST([CC])
58 dnl
59 dnl set $(LD) from --with-linker=value
60 dnl
61 AC_ARG_WITH([linker],
62 [  --with-linker=LINKER    select linker to use],
63 AC_MSG_RESULT(LD=$withval)
64 LD=$withval,
65 if test -z "$LD" ; then LD=$CC; fi
66 [AC_MSG_RESULT(LD defaults to $LD)])dnl
67 export LD
68 AC_SUBST([LD])
69 dnl
70 dnl set $(CCOPTS) from --with-ccopts=value
71 dnl
72 AC_ARG_WITH([ccopts],
73 [  --with-ccopts=CCOPTS    select compiler command line options],
74 AC_MSG_RESULT(CCOPTS is $withval)
75 CCOPTS=$withval
76 CFLAGS="$CFLAGS $withval",
77 CCOPTS=)dnl
78 AC_SUBST(CCOPTS)
79 dnl
80 dnl Set default values for library extentions.  Will be dealt with after
81 dnl parsing configuration opions, which may modify these
82 dnl
83 LIB_EXT=.a
84 STATIC_LIB_EXT=.a
85 PROFILE_LIB_EXT=.a
86 dnl
87 dnl set $(LDFLAGS) from --with-ldopts=value
88 dnl
89 AC_ARG_WITH([ldopts],
90 [  --with-ldopts=LDOPTS    select linker command line options],
91 AC_MSG_RESULT(LDFLAGS is $withval)
92 LDFLAGS=$withval,
93 LDFLAGS=)dnl
94 AC_SUBST(LDFLAGS)
95 dnl
96 dnl Allow separate `root_prefix' to be specified
97 dnl
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,
101 root_prefix=NONE)dnl
102 dnl
103 dnl handle --enable-dll-shlibs
104 dnl
105 AC_ARG_ENABLE([dll-shlibs],
106 [  --enable-dll-shlibs    select DLL libraries],
107 if test "$enableval" = "no"
108 then
109         DLL_CMT=#
110         MAKEFILE_DLL=/dev/null
111         echo "Disabling DLL shared libraries"
112 else
113         DLL_CMT=
114         MAKEFILE_DLL=$srcdir/lib/Makefile.dll-lib
115         BINARY_TYPE=dllbin
116         LIB_EXT=.sa
117         echo "Enabling DLL shared libraries"
118 fi
119 ,
120 MAKEFILE_DLL=/dev/null
121 DLL_CMT=#
122 echo "Disabling DLL shared libraries by default"
123 )
124 AC_SUBST(DLL_CMT)
125 AC_SUBST_FILE(MAKEFILE_DLL)
126 dnl
127 dnl handle --enable-elf-shlibs
128 dnl
129 AC_ARG_ENABLE([elf-shlibs],
130 [  --enable-elf-shlibs    select ELF shared libraries],
131 if test "$enableval" = "no"
132 then
133         ELF_CMT=#
134         MAKEFILE_ELF=/dev/null
135         echo "Disabling ELF shared libraries"
136 else
137         ELF_CMT=
138         MAKEFILE_ELF=$srcdir/lib/Makefile.elf-lib
139         BINARY_TYPE=elfbin
140         LIB_EXT=.so
141         echo "Enabling ELF shared libraries"
142 fi
143 ,
144 MAKEFILE_ELF=/dev/null
145 ELF_CMT=#
146 echo "Disabling ELF shared libraries by default"
147 )
148 AC_SUBST(ELF_CMT)
149 AC_SUBST_FILE(MAKEFILE_ELF)
150 dnl
151 dnl handle --enable-bsd-shlibs
152 dnl
153 AC_ARG_ENABLE([bsd-shlibs],
154 [  --enable-bsd-shlibs    select BSD shared libraries],
155 if test "$enableval" = "no"
156 then
157         BSDLIB_CMT=#
158         MAKEFILE_BSDLIB=/dev/null
159         echo "Disabling BSD shared libraries"
160 else
161         BSDLIB_CMT=
162         MAKEFILE_BSDLIB=$srcdir/lib/Makefile.bsd-lib
163         LIB_EXT=.so
164         echo "Enabling BSD shared libraries"
165 fi
166 ,
167 MAKEFILE_BSDLIB=/dev/null
168 BSDLIB_CMT=#
169 echo "Disabling BSD shared libraries by default"
170 )
171 AC_SUBST(BSDLIB_CMT)
172 AC_SUBST_FILE(MAKEFILE_BSDLIB)
173 dnl
174 dnl handle --enable-profile
175 dnl
176 AC_ARG_ENABLE([profile],
177 [  --enable-profile       build profiling libraries],
178 if test "$enableval" = "no"
179 then
180         PROFILE_CMT=#
181         MAKEFILE_PROFILE=/dev/null
182         echo "Disabling profiling libraries"
183 else
184         PROFILE_CMT=
185         MAKEFILE_PROFILE=$srcdir/lib/Makefile.profile
186         PROFILED_LIB_EXT=_p.a
187         echo "Building profiling libraries"
188 fi
189 ,
190 PROFILE_CMT=#
191 MAKEFILE_PROFILE=/dev/null
192 echo "Disabling profiling libraries by default"
193 )
194 AC_SUBST(PROFILE_CMT)
195 AC_SUBST_FILE(MAKEFILE_PROFILE)
196 dnl
197 dnl handle --enable-checker
198 dnl
199 AC_ARG_ENABLE([checker],
200 [  --enable-checker       build checker libraries],
201 if test "$enableval" = "no"
202 then
203         CHECKER_CMT=#
204         MAKEFILE_CHECKER=/dev/null
205         echo "Disabling checker libraries"
206 else
207         CHECKER_CMT=
208         MAKEFILE_CHECKER=$srcdir/lib/Makefile.checker
209         echo "Building checker libraries"
210 fi
211 ,
212 CHECKER_CMT=#
213 MAKEFILE_CHECKER=/dev/null
214 echo "Disabling checker libraries by default"
215 )
216 AC_SUBST(CHECKER_CMT)
217 AC_SUBST_FILE(MAKEFILE_CHECKER)
218 dnl
219 dnl Substitute library extensions
220 dnl
221 AC_SUBST(LIB_EXT)
222 AC_SUBST(STATIC_LIB_EXT)
223 AC_SUBST(PROFILED_LIB_EXT)
224 dnl
225 dnl handle --enable-gcc-wall
226 dnl
227 AC_ARG_ENABLE([gcc-wall],
228 [  --enable-gcc-wall      enable GCC anal warnings (DON'T USE IN PRODUCTION)],
229 if test "$enableval" = "no"
230 then
231         W=#
232         echo "Disabling GCC warnings"
233 else
234         W=
235         echo "Enabling GCC warnings"
236 fi
237 ,
238 W=#
239 echo "Disabling GCC warnings by default"
240 )
241 AC_SUBST(W)
242 AC_ARG_ENABLE([dynamic-e2fsck],
243 [  --enable-dynamic-e2fsck build e2fsck dynamically],
244 if test "$enableval" = "no"
245 then
246         E2FSCK_TYPE=static
247         echo "Building e2fsck statically"
248 else
249         E2FSCK_TYPE=shared
250         echo "Building e2fsck dynamically"
251 fi
252 ,
253 E2FSCK_TYPE=static
254 echo "Building e2fsck statically by default"
255 )
256 AC_SUBST(E2FSCK_TYPE)
257 dnl
258 dnl See whether to install the `fsck' wrapper program (that calls e2fsck)
259 dnl
260 AC_ARG_ENABLE([fsck],
261 [  --enable-fsck           build fsck wrapper program],
262 [if test "$enableval" = "no"
263 then
264         FSCK_PROG='' FSCK_MAN=''
265         echo "Not building fsck wrapper"
266 else
267         FSCK_PROG=fsck FSCK_MAN=fsck.8
268         echo "Building fsck wrapper"
269 fi]
270 ,
271 [case "$host_os" in
272   gnu*)
273     FSCK_PROG='' FSCK_MAN=''
274     echo "Not building fsck wrapper by default"
275     ;;
276   *)
277     FSCK_PROG=fsck FSCK_MAN=fsck.8
278     echo "Building fsck wrapper by default"
279 esac]
280 )
281 AC_SUBST(FSCK_PROG)
282 AC_SUBST(FSCK_MAN)
283 dnl
284 dnl
285 MAKEFILE_LIBRARY=$srcdir/lib/Makefile.library
286 AC_SUBST_FILE(MAKEFILE_LIBRARY)
287 dnl
288 dnl
289 AC_ARG_ENABLE([old-bitops],
290 [  --enable-old-bitops    Use old (non-standard but native) bitmask operations],
291 if test "$enableval" = "no"
292 then
293         echo "Using new (standard) bitmask operations"
294 else
295         AC_DEFINE(EXT2_OLD_BITOPS)
296         echo "Using old (native) bitmask operations"
297
298 fi
299 ,
300 echo "Using standard bitmask operations by default"
301 )
302 dnl
303 dnl End of configuration options
304 dnl
305 AC_SUBST(BINARY_TYPE)
306 AC_PROG_MAKE_SET
307 AC_PATH_PROG(LN, ln, ln)
308 AC_PROG_LN_S
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_CHECK_TOOL(AR, ar, ar)
316 AC_CHECK_TOOL(RANLIB, ranlib, :)
317 AC_CHECK_TOOL(STRIP, strip, :)
318 AC_PROG_CC
319 AC_PROG_INSTALL
320 AC_C_CROSS
321 AC_CHECK_HEADERS(stdlib.h unistd.h stdarg.h errno.h mntent.h paths.h dirent.h getopt.h setjmp.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)
322 AC_FUNC_VPRINTF
323 dnl
324 dnl See if struct dirent has a d_namlen field (like bsd systems), implying
325 dnl that the actual length of the structure may be grater than the declared
326 dnl length. 
327 dnl
328 AC_MSG_CHECKING(whether struct dirent has a d_namlen field)
329 AC_CACHE_VAL(e2fsprogs_cv_struct_d_namlen,
330         AC_TRY_COMPILE(
331 [#include <sys/types.h>
332 #include <dirent.h>],
333                 [struct dirent de; de.d_namlen = 0;],
334                 [e2fsprogs_cv_struct_d_namlen=yes],
335                 [e2fsprogs_cv_struct_d_namlen=no]))
336 AC_MSG_RESULT($e2fsprogs_cv_struct_d_namlen)
337 if test "$e2fsprogs_cv_struct_d_namlen" = yes; then
338   AC_DEFINE(HAVE_DIRENT_NAMLEN)
339 fi
340 dnl
341 dnl Check to see if llseek() is declared in unistd.h.  On some libc's 
342 dnl it is, and on others it isn't..... Thank you glibc developers....
343 dnl
344 dnl Warning!  Use of --enable-gcc-wall may throw off this test.
345 dnl
346 dnl
347 AC_MSG_CHECKING(whether llseek declared in unistd.h)
348 AC_CACHE_VAL(e2fsprogs_cv_have_llseek_prototype,
349         AC_TRY_COMPILE(
350 [#include <unistd.h>], [extern int llseek(int);],
351         [e2fsprogs_cv_have_llseek_prototype=no],
352         [e2fsprogs_cv_have_llseek_prototype=yes]))
353 AC_MSG_RESULT($e2fsprogs_cv_have_llseek_prototype)
354 if test "$e2fsprogs_cv_have_llseek_prototype" = yes; then
355    AC_DEFINE(HAVE_LLSEEK_PROTOTYPE)
356 fi
357 dnl
358 dnl Word sizes...
359 dnl
360 if test "$cross_compiling" = yes -a "$ac_cv_sizeof_long" = ""; then
361   # if cross-compiling, with no cached values, just assume something common. 
362   ac_cv_sizeof_short=2
363   ac_cv_sizeof_int=4
364   ac_cv_sizeof_long=4
365   ac_cv_sizeof_long_long=0
366   AC_MSG_WARN([Cross-compiling, so cannot check type sizes; assuming short=2, int=4, long=4])
367 fi
368 AC_CHECK_SIZEOF(short)
369 AC_CHECK_SIZEOF(int)
370 AC_CHECK_SIZEOF(long)
371 AC_CHECK_SIZEOF(long long)
372 SIZEOF_SHORT=$ac_cv_sizeof_short
373 SIZEOF_INT=$ac_cv_sizeof_int
374 SIZEOF_LONG=$ac_cv_sizeof_long
375 SIZEOF_LONG_LONG=$ac_cv_sizeof_long_long
376 AC_SUBST(SIZEOF_SHORT)
377 AC_SUBST(SIZEOF_INT)
378 AC_SUBST(SIZEOF_LONG)
379 AC_SUBST(SIZEOF_LONG_LONG)
380 dnl
381 dnl See if struct stat has a st_flags field, in which case we can get file
382 dnl flags somewhat portably.  Also check for the analogous setter, chflags().
383 dnl
384 AC_MSG_CHECKING(whether struct stat has a st_flags field)
385 AC_CACHE_VAL(e2fsprogs_cv_struct_st_flags,
386         AC_TRY_COMPILE([#include <sys/stat.h>],
387                 [struct stat stat; stat.st_flags = 0;],
388                 [e2fsprogs_cv_struct_st_flags=yes],
389                 [e2fsprogs_cv_struct_st_flags=no]))
390 AC_MSG_RESULT($e2fsprogs_cv_struct_st_flags)
391 if test "$e2fsprogs_cv_struct_st_flags" = yes; then
392   AC_DEFINE(HAVE_STAT_FLAGS)
393 fi
394 AC_CHECK_FUNCS(chflags getrusage llseek strdup getmntinfo strcasecmp srandom fchown)
395 dnl
396 dnl Check to see if ino_t is defined
397 dnl
398 AC_MSG_CHECKING(ino_t defined by sys/types.h)
399 AC_CACHE_VAL(e2fsprogs_cv_ino_t,
400         AC_TRY_COMPILE([#include <sys/types.h>],
401         [ino_t ino; ino = 0;],
402         [e2fsprogs_cv_ino_t=yes],
403         [e2fsprogs_cv_ino_t=no]))
404 AC_MSG_RESULT($e2fsprogs_cv_ino_t)
405 if test "$e2fsprogs_cv_ino_t" = yes; then
406    AC_DEFINE(HAVE_INO_T)
407 fi
408 dnl
409 dnl On systems without linux header files, we add an extra include directory
410 dnl that holds enough to fake it (hopefully).  Note that the $(top_srcdir) here
411 dnl is quoted so that it gets expanded by make, not by configure.
412 dnl
413 AC_CHECK_HEADER(linux/fs.h, [linux_headers=yes], [linux_headers=no])
414 if test "$linux_headers" = yes; then
415   AC_DEFINE(HAVE_LINUX_FS_H)
416 else
417   LINUX_INCLUDE='-I$(top_srcdir)/include -I$(top_builddir)/include'
418   # Use this include directory with test compiles in the configure script too.
419   CPPFLAGS="$CPPFLAGS -I$srcdir/include -I./include"
420 fi
421 AC_SUBST(LINUX_INCLUDE)
422 dnl
423 dnl Check to see if -lsocket is required (solaris) to make something
424 dnl that uses socket() to compile; this is needed for the UUID library
425 dnl
426 SOCKET_LIB=''
427 AC_CHECK_LIB(socket, socket, [SOCKET_LIB=-lsocket])
428 AC_SUBST(SOCKET_LIB)
429 dnl
430 dnl See if optreset exists
431 dnl
432 AC_MSG_CHECKING(for optreset)
433 AC_CACHE_VAL(ac_cv_have_optreset,
434 [AC_EGREP_HEADER(optreset, unistd.h,
435   ac_cv_have_optreset=yes, ac_cv_have_optreset=no)])dnl
436 AC_MSG_RESULT($ac_cv_have_optreset)
437 if test $ac_cv_have_optreset = yes; then
438   AC_DEFINE(HAVE_OPTRESET)
439 fi
440 dnl
441 dnl See if using the EXT2 ioctls causes a compile-time barf (as on the hurd).
442 dnl
443 AC_MSG_CHECKING(whether the ext2 ioctls compile)
444 AC_CACHE_VAL(e2fsprogs_cv_ioctl_ext2,
445         AC_TRY_COMPILE([#include <linux/ext2_fs.h>
446 #include <sys/ioctl.h>],
447                 [ioctl (0, EXT2_IOC_SETVERSION, 0);],
448                 [e2fsprogs_cv_ioctl_ext2=yes],
449                 [e2fsprogs_cv_ioctl_ext2=no]))
450 AC_MSG_RESULT($e2fsprogs_cv_ioctl_ext2)
451 if test "$e2fsprogs_cv_ioctl_ext2" = yes; then
452   AC_DEFINE(HAVE_EXT2_IOCTLS)
453 fi
454 dnl
455 dnl Linux places root files in the / by default
456 dnl
457 case "$host_os" in
458 linux*)
459         if test "$prefix" = NONE -a "$root_prefix" = NONE ; then
460                 root_prefix="";
461                 echo "On $host_os systems, root_prefix defaults to ''"
462         fi
463         ;;
464 esac
465 dnl
466 dnl On Linux/hurd, force the prefix to be /usr
467 dnl
468 case "$host_os" in
469 linux* | gnu*)
470         if test "$prefix" = NONE ; then
471                 prefix="/usr";
472                 echo "On $host_os systems, prefix defaults to /usr"
473         fi
474 ;;
475 esac
476 if test "$root_prefix" = NONE ; then
477         if test "$prefix" = NONE ; then
478                 root_prefix="$ac_default_prefix"
479         else
480                 root_prefix="$prefix"
481         fi
482 fi
483 AC_SUBST(root_prefix)
484 dnl
485 dnl See if -static works.
486 dnl
487 AC_MSG_CHECKING([whether linker accepts -static])
488 AC_CACHE_VAL(ac_cv_e2fsprogs_use_static,
489 [SAVE_LDFLAGS=$LDFLAGS; LDFLAGS="$LDFLAGS -static"
490 AC_TRY_LINK([#include <stdio.h>],[fflush(stdout);],
491  ac_cv_e2fsprogs_use_static=yes, ac_cv_e2fsprogs_use_static=no)
492 LDFLAGS=$SAVE_LDFLAGS])
493 dnl
494 dnl Regardless of how the test turns out, Solaris doesn't handle -static
495 dnl This is caused by the socket library requiring the nsl library, which
496 dnl requires the -dl library, which only works for dynamically linked 
497 dnl programs.  It basically means you can't have statically linked programs
498 dnl which use the network under Solaris.  
499 dnl
500 case "$host_os" in
501 solaris2.*)
502         ac_cv_e2fsprogs_use_static=no   
503 ;;
504 esac
505 AC_MSG_RESULT($ac_cv_e2fsprogs_use_static)
506 LDFLAG_STATIC=
507 if test $ac_cv_e2fsprogs_use_static = yes; then
508         LDFLAG_STATIC=-static
509 fi
510 AC_SUBST(LDFLAG_STATIC)
511 dnl
512 dnl Make the ss and et directories work correctly.
513 dnl
514 SS_DIR=`cd ${srcdir}/lib/ss; pwd`
515 ET_DIR=`cd ${srcdir}/lib/et; pwd`
516 AC_SUBST(SS_DIR)
517 AC_SUBST(ET_DIR)
518 dnl
519 dnl Only try to run the test suite if we're not cross compiling.
520 dnl
521 if test "$cross_compiling" = yes ; then
522   DO_TEST_SUITE=
523 else
524   DO_TEST_SUITE=check
525 fi
526 AC_SUBST(DO_TEST_SUITE)
527 dnl
528 dnl
529 dnl
530 DO_SUBSTITUTE_SCRIPT=$srcdir/lib/do_substitute
531 AC_SUBST_FILE(DO_SUBSTITUTE_SCRIPT)
532 dnl
533 dnl Make our output files, being sure that we create the some miscellaneous 
534 dnl directories
535 dnl
536 test -d lib || mkdir lib
537 test -d include || mkdir include
538 test -d include/linux || mkdir include/linux
539 test -d include/asm || mkdir include/asm
540 rmakefile=
541 if test -d ${srcdir}/resize ; then
542    rmakefile=resize/Makefile
543 fi
544 AC_OUTPUT(MCONFIG Makefile util/Makefile util/subst.conf lib/et/Makefile 
545         lib/ss/Makefile lib/ext2fs/Makefile lib/e2p/Makefile lib/uuid/Makefile
546         misc/Makefile e2fsck/Makefile debugfs/Makefile tests/Makefile 
547         tests/progs/Makefile $rmakefile doc/Makefile)