1 dnl GNU Parted - a library and front end for manipulation hard disk partitions
2 dnl Copyright (C) 1998-2002, 2005-2012 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.in.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 no-dist-gzip 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 \
114 && test "$enable_dynamic_loading" = yes; then
116 [You can't use --enable-dynamic-loading and --disable-discover-only together]
120 AC_ARG_ENABLE([debug],
121 [ --enable-debug compile in assertions [default=yes]], ,
125 if test "$enable_debug" = yes; then
126 AC_DEFINE([DEBUG], [1], [Enable assertions, etc.])
129 AC_ARG_ENABLE([read-only],
130 [ --enable-read-only disable writing (for debugging) [default=no]]
134 if test "$enable_read_only" = yes; then
135 AC_DEFINE([READ_ONLY], [1], [Disable all writing code])
139 AC_SUBST([PARTEDLDFLAGS])
141 AC_ARG_ENABLE([pc98],
142 [ --enable-pc98 build with pc98 support [default=yes]], ,
145 if test "$enable_pc98" = yes; then
146 AC_DEFINE([ENABLE_PC98], [1],
147 [Include PC98 partition tables. (Sometimes excluded to avoid
148 collisions with msdos partition tables])
151 AC_ARG_ENABLE([hfs-extract-fs],
152 [ --enable-hfs-extract-fs Extract special HFS files for debugging [default=no]], ,
153 enable_hfs_extract_fs=no
155 if test "$enable_hfs_extract_fs" = yes; then
156 AC_DEFINE([HFS_EXTRACT_FS], [1],
157 [Extract low level special HFS(+) files for debugging purposes
158 when using the "check" command (NOT FOR PACKAGING)])
161 dnl make libc threadsafe (not required for us, but useful other users of
163 AM_CPPFLAGS="$AM_CPPFLAGS -D_REENTRANT"
165 dnl Check for programs.
168 AC_PROG_GCC_TRADITIONAL
172 parted_FIND_USABLE_TEST_DIR
174 dnl This test must come as early as possible after the compiler configuration
175 dnl tests, because the choice of the file model can (in principle) affect
176 dnl whether functions and headers are available, whether they work, etc.
181 AC_ARG_ENABLE([gcc-warnings],
182 [AS_HELP_STRING([--enable-gcc-warnings],
183 [turn on lots of GCC warnings (for developers)])],
186 *) AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
188 gl_gcc_warnings=$enableval],
192 if test "$gl_gcc_warnings" = yes; then
193 gl_WARN_ADD([-Werror], [WERROR_CFLAGS])
194 AC_SUBST([WERROR_CFLAGS])
197 # This, $nw, is the list of warnings we disable.
198 nw="$nw -Wdeclaration-after-statement" # too useful to forbid
199 nw="$nw -Waggregate-return" # anachronistic
200 nw="$nw -Wlong-long" # C90 is anachronistic (lib/gethrxtime.h)
201 nw="$nw -Wc++-compat" # We don't care about C++ compilers
202 nw="$nw -Wundef" # Warns on '#if GNULIB_FOO' etc in gnulib
203 nw="$nw -Wtraditional" # Warns on #elif which we use often
204 nw="$nw -Wcast-qual" # Too many warnings for now
205 nw="$nw -Wconversion" # Too many warnings for now
206 nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings
207 nw="$nw -Wsign-conversion" # Too many warnings for now
208 nw="$nw -Wtraditional-conversion" # Too many warnings for now
209 nw="$nw -Wunreachable-code" # Too many warnings for now
210 nw="$nw -Wpadded" # Our structs are not padded
211 nw="$nw -Wredundant-decls" # openat.h declares e.g., mkdirat
212 nw="$nw -Wlogical-op" # any use of fwrite provokes this
213 nw="$nw -Wvla" # warnings in gettext.h
214 nw="$nw -Wnested-externs" # use of XARGMATCH/verify_function__
215 nw="$nw -Wswitch-enum" # Too many warnings for now
216 nw="$nw -Wswitch-default" # Too many warnings for now
217 # Too many warnings for now
218 nw="$nw -Wattributes"
219 nw="$nw -Wstrict-prototypes"
220 nw="$nw -Wold-style-definition"
222 nw="$nw -Wmissing-prototypes"
223 nw="$nw -Wmissing-declarations"
224 nw="$nw -Wmissing-noreturn"
225 # things I might fix soon:
226 nw="$nw -Wfloat-equal" # sort.c, seq.c
227 nw="$nw -Wmissing-format-attribute" # copy.c
228 nw="$nw -Wunsafe-loop-optimizations" # a few src/*.c
229 nw="$nw -Winline" # system.h's readdir_ignoring_dot_and_dotdot
230 nw="$nw -Wstrict-overflow" # expr.c, pr.c, tr.c, factor.c
231 nw="$nw -Wstack-protector" # libparted/label/gpt.c
232 # ?? -Wstrict-overflow
234 gl_MANYWARN_ALL_GCC([ws])
235 gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
239 gl_WARN_ADD([-Wno-missing-field-initializers]) # We need this one
240 gl_WARN_ADD([-Wno-sign-compare]) # Too many warnings for now
241 gl_WARN_ADD([-Wno-pointer-sign]) # Too many warnings for now
242 gl_WARN_ADD([-Wno-unused-parameter]) # Too many warnings for now
243 gl_WARN_ADD([-Wno-unused-macros]) # Too many warnings for now
244 gl_WARN_ADD([-Wno-format-nonliteral])
246 # FIXME: investigate these
247 gl_WARN_ADD([-Wno-jump-misses-init])
249 # In spite of excluding -Wlogical-op above, it is enabled, as of
250 # gcc 4.5.0 20090517, and it provokes warnings in cat.c, dd.c, truncate.c
251 gl_WARN_ADD([-Wno-logical-op])
253 gl_WARN_ADD([-fdiagnostics-show-option])
255 AC_SUBST([WARN_CFLAGS])
257 AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.])
258 AC_DEFINE([_FORTIFY_SOURCE], [2],
259 [enable compile-time and run-time bounds-checking, and some warnings])
260 AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
265 AC_CHECK_SIZEOF([off_t], [64], [
267 #include <sys/types.h>
272 if test "$OS" = linux && test $ac_cv_sizeof_off_t -lt 8; then
273 dnl Need to disable shared libraries, to get llseek() to work. Long
274 dnl story. The short story is: lseek() isn't in glibc, so a syscall
275 dnl must be made. syscalls can't be made from within shared libraries,
276 dnl because of a bug (?) in gcc.
278 off_t is less than 8 bytes. Using llseek syscall, and disabling shared
285 AM_GNU_GETTEXT_VERSION([0.18])
286 AM_GNU_GETTEXT([external])
287 if test "$USE_INCLUDED_LIBINTL" = "yes"; then
289 GNU Parted requires gettext to be installed for compilation -
290 if native language support is desired. Either disable native language support
292 $ ./configure --disable-nls
293 Or install gettext. GNU gettext is available from
294 http://ftp.gnu.org/gnu/gettext
298 dnl Check for libdl, if we are doing dynamic loading
300 AC_SUBST([DYNAMIC_LOADING])
302 if test "$enable_dynamic_loading" = yes; then
303 AC_CHECK_LIB([dl], [dlopen],
305 PARTED_LIBS="$PARTED_LIBS -ldl"
307 AC_DEFINE([DYNAMIC_LOADING], [1], [Lazy linking to fs libs]),
309 [-ldl not found! Try using --disable-dynamic-loading]
315 dnl Check for libuuid
317 AC_CHECK_LIB([uuid], [uuid_generate], [UUID_LIBS="-luuid"],
319 [GNU Parted requires libuuid - a part of the util-linux-ng package (but
320 usually distributed separately in libuuid-devel, uuid-dev or similar)
321 This can probably be found on your distribution's CD or FTP site or at:
322 http://userweb.kernel.org/~kzak/util-linux-ng/
323 Note: originally, libuuid was part of the e2fsprogs package. Later, it
324 moved to util-linux-ng-2.16, and that package is now the preferred source.])])
325 AC_SUBST([UUID_LIBS])
327 dnl Check for libdevmapper
329 if test $ENABLE_DEVICE_MAPPER = yes; then
330 AC_CHECK_LIB([devmapper], [dm_task_create],
331 [DM_LIBS=-ldevmapper],
333 [libdevmapper could not be found, but is required for the
334 --enable-device-mapper option, which is enabled by default. Either disable
335 device-mapper support with --disable-device-mapper or download and install
337 http://sources.redhat.com/dm/
338 Note: if you are using precompiled packages you will need the development
339 package as well (it may be called device-mapper-devel or something similar).]
345 dnl Check for SELinux
347 if test "$enable_selinux" = yes; then
348 SELINUX_LIBS="-lselinux -lsepol"
350 AC_SUBST([SELINUX_LIBS])
352 dnl Check for libreiserfs
354 if test "$enable_dynamic_loading" = no && test "$enable_discover_only" = no; then
356 AC_CHECK_LIB([dal], [dal_equals],
358 AC_CHECK_LIB([reiserfs], [reiserfs_fs_probe],
359 REISER_LIBS="-ldal -lreiserfs"
360 AC_DEFINE([HAVE_LIBREISERFS], [1], [Have libreiserfs])
362 AC_CHECK_LIB([reiserfs], [reiserfs_fs_check],
363 AC_DEFINE([HAVE_REISERFS_FS_CHECK], [1], [Have reiserfs_fs_check()])
368 AC_SUBST([REISER_LIBS])
370 dnl Check for termcap
371 if test "$with_readline" = yes; then
374 AC_SEARCH_LIBS([tgetent], [tinfo ncurses curses termcap termlib],
375 [PARTED_LIBS="$PARTED_LIBS $LIBS"],
377 [termcap could not be found which is required for the
378 --with-readline option (which is enabled by default). Either disable readline
379 support with --without-readline or download and install termcap from:
380 ftp.gnu.org/gnu/termcap
381 Note: if you are using precompiled packages you will also need the development
382 package as well (which may be called termcap-devel or something similar).
383 Note: (n)curses also seems to work as a substitute for termcap. This was
384 not found either - but you could try installing that as well.])])
388 dnl Check for readline
389 dnl NOTE: We need to remove the gl_cv_ignore_unused_libraries flag if we
390 dnl detected one earlier. libreadline on some platforms (e.g., RHEL and
391 dnl Fedora) is left with
392 if test "$with_readline" = yes; then
394 LIBS="$LIBS $PARTED_LIBS"
395 found_working_libreadline=no
396 AC_CHECK_LIB([readline], [readline],
397 found_working_libreadline=yes,
399 [GNU Readline could not be found which is required for the
400 --with-readline (which is enabled by default). Either disable readline support with
401 --without-readline or downloaded and install it from:
402 ftp.gnu.org/gnu/readline
403 Note: if you are using precompiled packages you will also need the development
404 package as well (which may be called readline-devel or something similar).
409 LIBS="$OLD_LIBS $PARTED_LIBS"
411 # See if libreadline is too old to be used.
412 # The readline function in Debian's libreadline5 5.0-10 fails to
413 # print to stdout the response (from stdin) to a prompt, when stdout
414 # is redirected, while 5.2-3 works fine. That failure would cause
415 # several of parted's tests to failure.
416 # The purist approach would be to write a run-test, but that's
417 # not friendly to cross-compilers, so here's a compromise:
419 # See if libreadline defines one of these symbols:
420 # [this is the list of public symbols that are in 5.2, but not 5.0]
422 # $ diff -u /tmp/readline-5.[02]|grep '+T.[^_]'
424 # +T rl_variable_value
425 # +T rl_reset_screen_size
426 # +T alloc_history_entry
427 # +T copy_history_entry
428 # +T replace_history_data
430 # If not, then reject this readline lib.
431 AC_CHECK_LIB([readline], [rl_variable_value],
434 [Your version of libreadline is too old to be used.
435 Consider upgrading to version 5.2 or newer.])
436 found_working_libreadline=no,
439 if test $found_working_libreadline = yes; then
440 PARTED_LIBS="-lreadline $PARTED_LIBS"
441 AC_DEFINE([HAVE_LIBREADLINE], [1], [have readline])
446 AC_SUBST([PARTED_LIBS])
448 dnl Check for OS specific libraries
451 if test "$OS" = gnu; then
452 dnl libshouldbeinlibc
453 AC_CHECK_LIB([shouldbeinlibc], [vm_deallocate],
454 OS_LIBS="$OS_LIBS -lshouldbeinlibc",
456 [GNU Parted requires libshouldbeinlibc when running on
457 GNU/Hurd systems. It is a standard part of a GNU/Hurd system.]
461 dnl libstore may depend on libparted being present.
462 dnl Aren't circular dependencies wonderful?
466 AC_CHECK_LIB([parted], [ped_device_read])
469 AC_CHECK_LIB([store], [store_open],
470 OS_LIBS="$OS_LIBS -lstore",
472 [GNU Parted requires libstore when running on GNU/Hurd
473 systems. It is a standard part of a GNU/Hurd system.]
476 $OS_LIBS $UUID_LIBS $DM_LIBS $LIBS
483 if test "$OS" = beos; then
484 dnl Include the socket library, as it is a depedency of libuuid
485 dnl and so also of us (due to socket() call in libuuid)
486 OS_LIBS="$OS_LIBS -lsocket"
491 dnl One day, gettext might support libtool...
492 dnl if test "$USE_INCLUDED_LIBINTL" = "yes"; then
493 dnl INTLINCS='-I$(top_srcdir)/intl'
498 dnl Checks for header files.
499 AC_CHECK_HEADER([uuid/uuid.h], ,
501 [GNU Parted requires libuuid - a part of the e2fsprogs package.
502 You seem to have the library installed but not the headers. These are usually
503 found in a corresponding development package (usually called e2fsprogs-devel).
504 If you can't find one try:
505 http://web.mit.edu/tytso/www/linux/e2fsprogs.html])]
508 AC_CHECK_HEADERS([getopt.h])
509 AC_CHECK_HEADERS([linux/ext2_fs.h])
511 dnl required for libparted/llseek.c (TODO: make linux-x86 only)
512 if test "$OS" = linux; then
513 AC_CHECK_HEADER([linux/unistd.h])
516 if test "$with_readline" = yes; then
517 AC_CHECK_HEADERS([readline/readline.h readline/history.h], ,
519 [The headers for GNU Readline could not be found which
520 are required for the --with-readline option. You seem to have the GNU readline
521 library installed but not the headers. These are usually found in a
522 corresponding development package (usually called readline-devel). If you can't
524 ftp.gnu.org/gnu/readline
525 Alternatively you can disable readline support with --without-readline])]
529 AC_CHECK_HEADERS([termcap.h])
531 if test "$USE_NLS" = yes; then
532 AC_CHECK_HEADERS([wctype.h], ,
534 [One or more of the header files that are required for
535 native language support (wctype.h) could not be found. Either get a newer
536 version of GNU libc and its headers - which can be obtained from:
537 ftp.gnu.org/gnu/glibc
538 Or disable native language support with the --disable-nls option])]
542 AC_CHECK_HEADER([execinfo.h], [
543 AC_CHECK_LIB([c], [backtrace], [
544 AC_DEFINE([HAVE_BACKTRACE], [1], [Has backtrace support])
545 LDFLAGS="$LDFLAGS -rdynamic"
549 AM_CONDITIONAL([COMPILE_FOR_S390], [test "$host_cpu" = s390 || test "$host_cpu" = s390x])
551 dnl check for "check", unit testing library/header
552 PKG_CHECK_MODULES([CHECK], [check >= 0.9.3], have_check=yes, have_check=no)
553 if test "$have_check" != "yes"; then
554 AC_MSG_RESULT([Unable to locate check version 0.9.3 or higher: not building])
556 AM_CONDITIONAL([HAVE_CHECK], [test "$have_check" = yes])
558 dnl Checks for typedefs, structures and compiler characteristics.
566 dnl Checks for library functions.
567 AC_CHECK_FUNCS([sigaction])
568 AC_CHECK_FUNCS([getuid])
570 dnl NOTE: We need to remove the gl_cv_ignore_unused_libraries flag if we
571 dnl detected one earlier. libreadline on some platforms (e.g., RHEL and
572 dnl Fedora) is left with
573 if test "$with_readline" = yes; then
575 LIBS="$LIBS $PARTED_LIBS -lreadline"
576 AC_CHECK_FUNCS([rl_completion_matches])
580 AC_CHECK_FUNCS([canonicalize_file_name])
582 DATE=$(date '+%d %b %Y %H:%M')
585 BUILDINFO="$USER@$HOST, $DATE"
586 AC_SUBST([BUILDINFO])
589 AC_SUBST([LIB_BLKID])
591 AC_SEARCH_LIBS([blkid_probe_get_topology], [blkid],
592 [test "$ac_cv_search_blkid_probe_get_topology" = "none required" \
593 || LIB_BLKID=$ac_cv_search_blkid_probe_get_topology])
594 AC_CHECK_FUNC([blkid_probe_get_topology], [use_blkid=1], [use_blkid=0])
596 AC_DEFINE_UNQUOTED([USE_BLKID], [$use_blkid],
597 [Define if you have sufficient blkid support.])
598 AC_CHECK_HEADERS_ONCE([blkid/blkid.h])
604 include/parted/Makefile
606 libparted/labels/Makefile
607 libparted/fs/Makefile
608 libparted/tests/Makefile
622 echo Type \'make\' to compile parted.