1 dnl GNU Parted - a library and front end for manipulation hard disk partitions
2 dnl Copyright (C) 1998-2002, 2005-2009 Free Software Foundation, Inc.
4 dnl This file may be modified and/or distributed without restriction.
7 AC_INIT([GNU parted], m4_esyscmd([build-aux/git-version-gen .version]),
10 # When the most recent signed tag is v1.8.8.1,
11 # the above might set e.g., PACKAGE_VERSION='1.8.8.1.1-0bfc'
13 AC_CONFIG_SRCDIR([include/parted/parted.h])
15 AC_CONFIG_HEADERS([lib/config.h:lib/config.h.in])
16 AC_CONFIG_AUX_DIR([build-aux])
19 dnl Shamelessly pulled straight from glib's configure.in ...
21 dnl PED_MICRO_VERSION += 1;
22 dnl PED_INTERFACE_AGE += 1;
23 dnl PED_BINARY_AGE += 1;
24 dnl if any functions have been added, set PED_INTERFACE_AGE to 0.
25 dnl if backwards compatibility has been broken (eg. functions removed,
26 dnl function signatures changed),
27 dnl set PED_BINARY_AGE _and_ PED_INTERFACE_AGE to 0.
29 # Derive these numbers from $PACKAGE_VERSION, which is set
30 # when autoconf creates configure (see AC_INIT, above).
31 PED_MAJOR_VERSION=`echo "$PACKAGE_VERSION"|sed 's/\..*//'`
32 PED_MINOR_VERSION=`echo "$PACKAGE_VERSION"|sed 's/^[[0-9]][[0-9]]*\.//;s/\..*//'`
33 case $PACKAGE_VERSION in
35 PED_MICRO_VERSION=`echo "$PACKAGE_VERSION" \
36 | sed 's/^[^.]*\.[^.]*\.//;s/\..*//'`
38 *) PED_MICRO_VERSION=0;;
44 PED_VERSION=$PED_MAJOR_VERSION.$PED_MINOR_VERSION.$PED_MICRO_VERSION$PED_VERSION_SUFFIX
46 LT_RELEASE=$PED_MAJOR_VERSION.$PED_MINOR_VERSION
47 LT_CURRENT=`expr $PED_MICRO_VERSION - $PED_INTERFACE_AGE`
48 LT_REVISION=$PED_INTERFACE_AGE
49 LT_AGE=`expr $PED_BINARY_AGE - $PED_INTERFACE_AGE`
50 AC_SUBST([LT_RELEASE])
51 AC_SUBST([LT_CURRENT])
52 AC_SUBST([LT_REVISION])
55 AM_INIT_AUTOMAKE([1.11 dist-xz color-tests parallel-tests])
56 AM_SILENT_RULES([yes]) # make --enable-silent-rules the default.
63 *) AC_MSG_ERROR([Unknown or unsupported OS "$host_os". Only "linux", "gnu" and "beos" are supported in this version of GNU Parted.]) ;;
67 dnl Command-line options
68 AC_ARG_WITH([readline],
69 [ --with-readline support fancy command line editing], ,
73 AC_ARG_ENABLE([mtrace],
74 [ --enable-mtrace enable malloc() debugging], ,
77 if test "$enable_mtrace" = yes; then
78 AC_DEFINE([ENABLE_MTRACE], [1], [Mtrace malloc() debugging])
81 AC_SUBST([ENABLE_DEVICE_MAPPER])
82 ENABLE_DEVICE_MAPPER=yes
83 AC_ARG_ENABLE([device-mapper],
84 [ --enable-device-mapper enable device mapper support [default=yes]],
85 [ENABLE_DEVICE_MAPPER=$enable_device_mapper])
86 if test $ENABLE_DEVICE_MAPPER = yes; then
87 AC_DEFINE([ENABLE_DEVICE_MAPPER],
88 1, [device mapper (libdevmapper) support])
91 AC_ARG_ENABLE([selinux],
92 [ --enable-selinux enable SELinux support [default=no]], ,
96 AC_ARG_ENABLE([discover-only],
97 [ --enable-discover-only support only reading/probing [default=no]], ,
98 enable_discover_only=no
100 if test "$enable_discover_only" = yes; then
101 AC_DEFINE([DISCOVER_ONLY], [1], [Probing functionality only])
105 AC_ARG_ENABLE([dynamic-loading],
106 [ --enable-dynamic-loading support dynamic fs libraries [default=yes]], ,
107 if test "$enable_discover_only" = yes; then
108 enable_dynamic_loading=no
110 enable_dynamic_loading=yes
113 if test "$enable_discover_only" = yes -a "$enable_dynamic_loading" = yes; then
115 [You can't use --enable-dynamic-loading and --disable-discover-only together]
120 [ --enable-fs include filesystem support [default=yes]], ,
123 if test "$enable_fs" = yes; then
124 AC_DEFINE([ENABLE_FS], [1],
125 [Include file system support. i.e. libparted/fs_...])
128 AC_ARG_ENABLE([debug],
129 [ --enable-debug compile in assertions [default=yes]], ,
133 if test "$enable_debug" = yes; then
134 AC_DEFINE([DEBUG], [1], [Enable assertions, etc.])
137 AC_ARG_ENABLE([read-only],
138 [ --enable-read-only disable writing (for debugging) [default=no]]
142 if test "$enable_read_only" = yes; then
143 AC_DEFINE([READ_ONLY], [1], [Disable all writing code])
147 AC_SUBST([PARTEDLDFLAGS])
149 AC_ARG_ENABLE([pc98],
150 [ --enable-pc98 build with pc98 support [default=yes]], ,
153 if test "$enable_pc98" = yes; then
154 AC_DEFINE([ENABLE_PC98], [1],
155 [Include PC98 partition tables. (Sometimes excluded to avoid
156 collisions with msdos partition tables])
159 AC_ARG_ENABLE([Werror],
160 [ --enable-Werror build with gcc -Werror [default=yes]], ,
164 AC_ARG_ENABLE([hfs-extract-fs],
165 [ --enable-hfs-extract-fs Extract special HFS files for debugging [default=no]], ,
166 enable_hfs_extract_fs=no
168 if test "$enable_hfs_extract_fs" = yes; then
169 AC_DEFINE([HFS_EXTRACT_FS], [1],
170 [Extract low level special HFS(+) files for debugging purposes
171 when using the "check" command (NOT FOR PACKAGING)])
174 dnl make libc threadsafe (not required for us, but useful other users of
176 AM_CPPFLAGS="$AM_CPPFLAGS -D_REENTRANT"
178 dnl Check for programs.
181 AC_PROG_GCC_TRADITIONAL
185 parted_FIND_USABLE_TEST_DIR
187 dnl This test must come as early as possible after the compiler configuration
188 dnl tests, because the choice of the file model can (in principle) affect
189 dnl whether functions and headers are available, whether they work, etc.
194 AC_ARG_ENABLE([gcc-warnings],
195 [AS_HELP_STRING([--enable-gcc-warnings],
196 [turn on lots of GCC warnings (for developers)])],
199 *) AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
201 gl_gcc_warnings=$enableval],
205 if test "$gl_gcc_warnings" = yes; then
206 gl_WARN_ADD([-Werror], [WERROR_CFLAGS])
207 AC_SUBST([WERROR_CFLAGS])
210 # This, $nw, is the list of warnings we disable.
211 nw="$nw -Wdeclaration-after-statement" # too useful to forbid
212 nw="$nw -Waggregate-return" # anachronistic
213 nw="$nw -Wlong-long" # C90 is anachronistic (lib/gethrxtime.h)
214 nw="$nw -Wc++-compat" # We don't care about C++ compilers
215 nw="$nw -Wundef" # Warns on '#if GNULIB_FOO' etc in gnulib
216 nw="$nw -Wtraditional" # Warns on #elif which we use often
217 nw="$nw -Wcast-qual" # Too many warnings for now
218 nw="$nw -Wconversion" # Too many warnings for now
219 nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings
220 nw="$nw -Wsign-conversion" # Too many warnings for now
221 nw="$nw -Wtraditional-conversion" # Too many warnings for now
222 nw="$nw -Wunreachable-code" # Too many warnings for now
223 nw="$nw -Wpadded" # Our structs are not padded
224 nw="$nw -Wredundant-decls" # openat.h declares e.g., mkdirat
225 nw="$nw -Wlogical-op" # any use of fwrite provokes this
226 nw="$nw -Wformat-nonliteral" # who.c and pinky.c strftime uses
227 nw="$nw -Wvla" # warnings in gettext.h
228 nw="$nw -Wnested-externs" # use of XARGMATCH/verify_function__
229 nw="$nw -Wswitch-enum" # Too many warnings for now
230 nw="$nw -Wswitch-default" # Too many warnings for now
231 # Too many warnings for now
232 nw="$nw -Wattributes"
233 nw="$nw -Wstrict-prototypes"
234 nw="$nw -Wold-style-definition"
236 nw="$nw -Wmissing-prototypes"
237 nw="$nw -Wmissing-declarations"
238 nw="$nw -Wmissing-noreturn"
239 # things I might fix soon:
240 nw="$nw -Wfloat-equal" # sort.c, seq.c
241 nw="$nw -Wmissing-format-attribute" # copy.c
242 nw="$nw -Wunsafe-loop-optimizations" # a few src/*.c
243 nw="$nw -Winline" # system.h's readdir_ignoring_dot_and_dotdot
244 nw="$nw -Wstrict-overflow" # expr.c, pr.c, tr.c, factor.c
245 nw="$nw -Wstack-protector" # libparted/label/gpt.c
246 # ?? -Wstrict-overflow
248 gl_MANYWARN_ALL_GCC([ws])
249 gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
253 gl_WARN_ADD([-Wno-missing-field-initializers]) # We need this one
254 gl_WARN_ADD([-Wno-sign-compare]) # Too many warnings for now
255 gl_WARN_ADD([-Wno-pointer-sign]) # Too many warnings for now
256 gl_WARN_ADD([-Wno-unused-parameter]) # Too many warnings for now
257 gl_WARN_ADD([-Wno-unused-macros]) # Too many warnings for now
259 # FIXME: investigate these
260 gl_WARN_ADD([-Wno-jump-misses-init])
262 # In spite of excluding -Wlogical-op above, it is enabled, as of
263 # gcc 4.5.0 20090517, and it provokes warnings in cat.c, dd.c, truncate.c
264 gl_WARN_ADD([-Wno-logical-op])
266 gl_WARN_ADD([-fdiagnostics-show-option])
268 AC_SUBST([WARN_CFLAGS])
270 AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.])
271 AC_DEFINE([_FORTIFY_SOURCE], [2],
272 [enable compile-time and run-time bounds-checking, and some warnings])
273 AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
278 AC_CHECK_SIZEOF([off_t], [64], [
280 #include <sys/types.h>
285 if test "$OS" = linux -a $ac_cv_sizeof_off_t -lt 8; then
286 dnl Need to disable shared libraries, to get llseek() to work. Long
287 dnl story. The short story is: lseek() isn't in glibc, so a syscall
288 dnl must be made. syscalls can't be made from within shared libraries,
289 dnl because of a bug (?) in gcc.
291 off_t is less than 8 bytes. Using llseek syscall, and disabling shared
297 AM_GNU_GETTEXT_VERSION([0.15])
298 AM_GNU_GETTEXT([external])
299 if test "$USE_INCLUDED_LIBINTL" = "yes"; then
301 GNU Parted requires gettext to be installed for compilation -
302 if native language support is desired. Either disable native language support
304 $ ./configure --disable-nls
305 Or install gettext. GNU gettext is available from
306 http://ftp.gnu.org/gnu/gettext
310 dnl Check for libdl, if we are doing dynamic loading
312 if test "$enable_dynamic_loading" = yes; then
313 AC_CHECK_LIB([dl], [dlopen],
315 PARTED_LIBS="$PARTED_LIBS -ldl"
316 AC_DEFINE([DYNAMIC_LOADING], [1], [Lazy linking to fs libs]),
318 [-ldl not found! Try using --disable-dynamic-loading]
324 dnl Check for libuuid
326 AC_CHECK_LIB([uuid], [uuid_generate], [UUID_LIBS="-luuid"],
328 [GNU Parted requires libuuid - a part of the e2fsprogs package (but
329 sometimes distributed separately in uuid-devel or similar)
330 This can probably be found on your distribution's CD or FTP site or at:
331 http://web.mit.edu/tytso/www/linux/e2fsprogs.html
332 Note: if you are using precompiled packages you will also need the development
333 package as well (which may be called e2fsprogs-devel or something similar).
334 If you compile e2fsprogs yourself then you need to do 'make install' and
335 'make install-libs'.])]
337 AC_SUBST([UUID_LIBS])
339 dnl Check for libdevmapper
341 if test $ENABLE_DEVICE_MAPPER = yes; then
342 AC_CHECK_LIB([devmapper], [dm_task_create],
343 [DM_LIBS=-ldevmapper],
345 [libdevmapper could not be found, but is required for the
346 --enable-device-mapper option, which is enabled by default. Either disable
347 device-mapper support with --disable-device-mapper or download and install
349 http://sources.redhat.com/dm/
350 Note: if you are using precompiled packages you will need the development
351 package as well (it may be called device-mapper-devel or something similar).]
357 dnl Check for SELinux
359 if test "$enable_selinux" = yes; then
360 SELINUX_LIBS="-lselinux -lsepol"
362 AC_SUBST([SELINUX_LIBS])
364 dnl Check for libreiserfs
366 if test "$enable_dynamic_loading" = no -a "$enable_discover_only" = no; then
368 AC_CHECK_LIB([dal], [dal_equals],
370 AC_CHECK_LIB([reiserfs], [reiserfs_fs_probe],
371 REISER_LIBS="-ldal -lreiserfs"
372 AC_DEFINE([HAVE_LIBREISERFS], [1], [Have libreiserfs])
374 AC_CHECK_LIB([reiserfs], [reiserfs_fs_check],
375 AC_DEFINE([HAVE_REISERFS_FS_CHECK], [1], [Have reiserfs_fs_check()])
380 AC_SUBST([REISER_LIBS])
382 dnl Check for termcap
383 if test "$with_readline" = yes; then
386 AC_SEARCH_LIBS([tgetent], [tinfo ncurses curses termcap termlib],
387 [PARTED_LIBS="$PARTED_LIBS $LIBS"],
389 [termcap could not be found which is required for the
390 --with-readline option (which is enabled by default). Either disable readline
391 support with --without-readline or download and install termcap from:
392 ftp.gnu.org/gnu/termcap
393 Note: if you are using precompiled packages you will also need the development
394 package as well (which may be called termcap-devel or something similar).
395 Note: (n)curses also seems to work as a substitute for termcap. This was
396 not found either - but you could try installing that as well.])])
400 dnl Check for readline
401 dnl NOTE: We need to remove the gl_cv_ignore_unused_libraries flag if we
402 dnl detected one earlier. libreadline on some platforms (e.g., RHEL and
403 dnl Fedora) is left with
404 if test "$with_readline" = yes; then
406 LIBS="$LIBS $PARTED_LIBS"
407 found_working_libreadline=no
408 AC_CHECK_LIB([readline], [readline],
409 found_working_libreadline=yes,
411 [GNU Readline could not be found which is required for the
412 --with-readline (which is enabled by default). Either disable readline support with
413 --without-readline or downloaded and install it from:
414 ftp.gnu.org/gnu/readline
415 Note: if you are using precompiled packages you will also need the development
416 package as well (which may be called readline-devel or something similar).
421 LIBS="$OLD_LIBS $PARTED_LIBS"
423 # See if libreadline is too old to be used.
424 # The readline function in Debian's libreadline5 5.0-10 fails to
425 # print to stdout the response (from stdin) to a prompt, when stdout
426 # is redirected, while 5.2-3 works fine. That failure would cause
427 # several of parted's tests to failure.
428 # The purist approach would be to write a run-test, but that's
429 # not friendly to cross-compilers, so here's a compromise:
431 # See if libreadline defines one of these symbols:
432 # [this is the list of public symbols that are in 5.2, but not 5.0]
434 # $ diff -u /tmp/readline-5.[02]|grep '+T.[^_]'
436 # +T rl_variable_value
437 # +T rl_reset_screen_size
438 # +T alloc_history_entry
439 # +T copy_history_entry
440 # +T replace_history_data
442 # If not, then reject this readline lib.
443 AC_CHECK_LIB([readline], [rl_variable_value],
446 [Your version of libreadline is too old to be used.
447 Consider upgrading to version 5.2 or newer.])
448 found_working_libreadline=no,
451 if test $found_working_libreadline = yes; then
452 PARTED_LIBS="-lreadline $PARTED_LIBS"
453 AC_DEFINE([HAVE_LIBREADLINE], [1], [have readline])
458 AC_SUBST([PARTED_LIBS])
460 dnl Check for OS specific libraries
463 if test "$OS" = gnu; then
464 dnl libshouldbeinlibc
465 AC_CHECK_LIB([shouldbeinlibc], [vm_deallocate],
466 OS_LIBS="$OS_LIBS -lshouldbeinlibc",
468 [GNU Parted requires libshouldbeinlibc when running on
469 GNU/Hurd systems. It is a standard part of a GNU/Hurd system.]
473 dnl libstore may depend on libparted being present.
474 dnl Aren't circular dependencies wonderful?
478 AC_CHECK_LIB([parted], [ped_device_read])
481 AC_CHECK_LIB([store], [store_open],
482 OS_LIBS="$OS_LIBS -lstore",
484 [GNU Parted requires libstore when running on GNU/Hurd
485 systems. It is a standard part of a GNU/Hurd system.]
488 $OS_LIBS $UUID_LIBS $DM_LIBS $LIBS
495 if test "$OS" = beos; then
496 dnl Include the socket library, as it is a depedency of libuuid
497 dnl and so also of us (due to socket() call in libuuid)
498 OS_LIBS="$OS_LIBS -lsocket"
503 dnl One day, gettext might support libtool...
504 dnl if test "$USE_INCLUDED_LIBINTL" = "yes"; then
505 dnl INTLINCS='-I$(top_srcdir)/intl'
510 dnl Checks for header files.
511 AC_CHECK_HEADER([uuid/uuid.h], ,
513 [GNU Parted requires libuuid - a part of the e2fsprogs package.
514 You seem to have the library installed but not the headers. These are usually
515 found in a corresponding development package (usually called e2fsprogs-devel).
516 If you can't find one try:
517 http://web.mit.edu/tytso/www/linux/e2fsprogs.html])]
520 AC_CHECK_HEADERS([getopt.h])
522 dnl required for libparted/llseek.c (TODO: make linux-x86 only)
523 if test "$OS" = linux; then
524 AC_CHECK_HEADER([linux/unistd.h])
527 if test "$with_readline" = yes; then
528 AC_CHECK_HEADERS([readline/readline.h readline/history.h], ,
530 [The headers for GNU Readline could not be found which
531 are required for the --with-readline option. You seem to have the GNU readline
532 library installed but not the headers. These are usually found in a
533 corresponding development package (usually called readline-devel). If you can't
535 ftp.gnu.org/gnu/readline
536 Alternatively you can disable readline support with --without-readline])]
540 AC_CHECK_HEADERS([termcap.h])
542 if test "$USE_NLS" = yes; then
543 AC_CHECK_HEADERS([wctype.h], ,
545 [One or more of the header files that are required for
546 native language support (wctype.h) could not be found. Either get a newer
547 version of GNU libc and its headers - which can be obtained from:
548 ftp.gnu.org/gnu/glibc
549 Or disable native language support with the --disable-nls option])]
553 AC_CHECK_HEADER([execinfo.h], [
554 AC_CHECK_LIB([c], [backtrace], [
555 AC_DEFINE([HAVE_BACKTRACE], [1], [Has backtrace support])
556 LDFLAGS="$LDFLAGS -rdynamic"
560 AM_CONDITIONAL([COMPILE_FOR_S390], [test "$host_cpu" = s390 || test "$host_cpu" = s390x])
561 AM_CONDITIONAL([BUILD_LINUX], [test "$OS" = linux])
563 dnl check for "check", unit testing library/header
564 PKG_CHECK_MODULES([CHECK], [check >= 0.9.3], have_check=yes, have_check=no)
565 if test "$have_check" != "yes"; then
566 AC_MSG_RESULT([Unable to locate check version 0.9.3 or higher: not building])
568 AM_CONDITIONAL([HAVE_CHECK], [test "$have_check" = yes])
570 dnl Checks for typedefs, structures and compiler characteristics.
578 dnl Checks for library functions.
579 AC_CHECK_FUNCS([sigaction])
580 AC_CHECK_FUNCS([getuid])
582 dnl NOTE: We need to remove the gl_cv_ignore_unused_libraries flag if we
583 dnl detected one earlier. libreadline on some platforms (e.g., RHEL and
584 dnl Fedora) is left with
585 if test "$with_readline" = yes; then
587 LIBS="$LIBS $PARTED_LIBS -lreadline"
588 AC_CHECK_FUNCS([rl_completion_matches])
592 AC_CHECK_FUNCS([canonicalize_file_name])
594 # CFLAGS="$CFLAGS -W -Wall -Wno-unused -Wno-switch -Wno-format"
596 if test "$enable_Werror" = yes; then
597 CFLAGS="$CFLAGS -Werror"
600 DATE=$(date '+%d %b %Y %H:%M')
603 BUILDINFO="$USER@$HOST, $DATE"
604 AC_SUBST([BUILDINFO])
610 include/parted/Makefile
612 libparted/labels/Makefile
613 libparted/fs/Makefile
614 libparted/fs/amiga/Makefile
615 libparted/fs/ext2/Makefile
616 libparted/fs/fat/Makefile
617 libparted/fs/hfs/Makefile
618 libparted/fs/jfs/Makefile
619 libparted/fs/linux_swap/Makefile
620 libparted/fs/ntfs/Makefile
621 libparted/fs/reiserfs/Makefile
622 libparted/fs/ufs/Makefile
623 libparted/fs/xfs/Makefile
624 libparted/tests/Makefile
632 debug/clearfat/Makefile
639 echo Type \'make\' to compile parted.