dnl GNU Parted - a library and front end for manipulation hard disk partitions
dnl Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005, 2006, 2007
dnl Free Software Foundation, Inc.
dnl
dnl This file may be modified and/or distributed without restriction.

AC_PREREQ(2.61)
AC_INIT([GNU parted],[1.8.7],[bug-parted@gnu.org])

AC_CONFIG_SRCDIR(include/parted/parted.h)

AC_CONFIG_HEADERS([lib/config.h:lib/config.h.in])
AC_CONFIG_AUX_DIR(build-aux)

dnl Versioning
dnl Shamelessly pulled straight from glib's configure.in ...
dnl Making releases:
dnl    PED_MICRO_VERSION += 1;
dnl    PED_INTERFACE_AGE += 1;
dnl    PED_BINARY_AGE += 1;
dnl if any functions have been added, set PED_INTERFACE_AGE to 0.
dnl if backwards compatibility has been broken (eg. functions removed,
dnl function signatures changed),
dnl set PED_BINARY_AGE _and_ PED_INTERFACE_AGE to 0.
PED_MAJOR_VERSION=1
PED_MINOR_VERSION=8
PED_MICRO_VERSION=7
PED_INTERFACE_AGE=0
PED_BINARY_AGE=0
PED_VERSION_SUFFIX=
PED_VERSION=$PED_MAJOR_VERSION.$PED_MINOR_VERSION.$PED_MICRO_VERSION$PED_VERSION_SUFFIX

LT_RELEASE=$PED_MAJOR_VERSION.$PED_MINOR_VERSION
LT_CURRENT=`expr $PED_MICRO_VERSION - $PED_INTERFACE_AGE`
LT_REVISION=$PED_INTERFACE_AGE
LT_AGE=`expr $PED_BINARY_AGE - $PED_INTERFACE_AGE`
AC_SUBST(LT_RELEASE)
AC_SUBST(LT_CURRENT)
AC_SUBST(LT_REVISION)
AC_SUBST(LT_AGE)

# Ensure that the PED_*-specified version is the same as the literal
# in the AC_INIT line, above.
test $PACKAGE_VERSION = $PED_VERSION ||
  AC_MSG_ERROR(configure.ac: version mismatch: $PACKAGE_VERSION != $PED_VERSION)

AM_INIT_AUTOMAKE([1.10 dist-bzip2])

AC_CANONICAL_HOST
case "$host_os" in
	linux*) OS=linux ;;
	gnu*)	OS=gnu ;;
	beos*)	OS=beos ;;
	*)	AC_MSG_ERROR([Unknown or unsupported OS "$host_os".  Only "linux", "gnu" and "beos" are supported in this version of GNU Parted.]) ;;
esac
AC_SUBST(OS)

dnl Command-line options
AC_ARG_WITH(readline,
	[  --with-readline         support fancy command line editing], ,
	with_readline=yes
)

AC_ARG_ENABLE(mtrace,
	[  --enable-mtrace         enable malloc() debugging], ,
	enable_mtrace=no
)
if test "$enable_mtrace" = yes; then
	AC_DEFINE(ENABLE_MTRACE, 1, [Mtrace malloc() debugging])
fi

AC_ARG_ENABLE(device-mapper,
	[  --enable-device-mapper  enable device mapper support [default=no]], ,
	enable_device_mapper=no
)
if test "$enable_device_mapper" = yes; then
	AC_DEFINE(ENABLE_DEVICE_MAPPER, 1, [device mapper (libdevmapper) support])
fi

AC_ARG_ENABLE(selinux,
	[  --enable-selinux        enable SELinux support [default=no]], ,
	enable_selinux=no
)

AC_ARG_ENABLE(discover-only,
	[  --enable-discover-only  support only reading/probing [default=no]], ,
	enable_discover_only=no
)
if test "$enable_discover_only" = yes; then
	AC_DEFINE(DISCOVER_ONLY, 1, [Probing functionality only])
fi

PARTED_LIBS=""
AC_ARG_ENABLE(dynamic-loading,
[  --enable-dynamic-loading  support dynamic fs libraries [default=yes]], ,
	if test "$enable_discover_only" = yes; then
		enable_dynamic_loading=no
	else
		enable_dynamic_loading=yes
	fi
)
if test "$enable_discover_only" = yes -a "$enable_dynamic_loading" = yes; then
	AC_MSG_ERROR(
[You can't use --enable-dynamic-loading and --disable-discover-only together]
	)
fi

AC_ARG_ENABLE(fs,
	[  --enable-fs             include filesystem support [default=yes]], ,
	enable_fs=yes
)
if test "$enable_fs" = yes; then
	AC_DEFINE(ENABLE_FS, 1,
		  [Include file system support.  i.e. libparted/fs_...])
fi

AC_ARG_ENABLE(debug,
	[  --enable-debug          compile in assertions [default=yes]], ,
	enable_debug=yes
)

if test "$enable_debug" = yes; then
	AC_DEFINE(DEBUG, 1, [Enable assertions, etc.])
fi

AC_ARG_ENABLE(read-only,
	[  --enable-read-only      disable writing (for debugging) [default=no]]
	, ,
	enable_read_only=no
)
if test "$enable_read_only" = yes; then
	AC_DEFINE(READ_ONLY, 1, [Disable all writing code])
fi

PARTEDLDFLAGS=
AC_SUBST(PARTEDLDFLAGS)

AC_ARG_ENABLE(pc98,
	[  --enable-pc98          build with pc98 support [default=yes]], ,
	enable_pc98=yes
)
if test "$enable_pc98" = yes; then
	AC_DEFINE(ENABLE_PC98, 1,
		  [Include PC98 partition tables.  (Sometimes excluded to avoid
		   collisions with msdos partition tables])
fi

AC_ARG_ENABLE(Werror,
	[  --enable-Werror         build with gcc -Werror [default=yes]], ,
	enable_Werror=yes
)

AC_ARG_ENABLE(hfs-extract-fs,
	[  --enable-hfs-extract-fs Extract special HFS files for debugging [default=no]], ,
	enable_hfs_extract_fs=no
)
if test "$enable_hfs_extract_fs" = yes; then
       AC_DEFINE(HFS_EXTRACT_FS, 1,
                 [Extract low level special HFS(+) files for debugging purposes
                  when using the "check" command (NOT FOR PACKAGING)])
fi

dnl make libc threadsafe (not required for us, but useful other users of
dnl libparted)
AM_CPPFLAGS="$AM_CPPFLAGS -D_REENTRANT"

dnl Check for programs.
AC_ISC_POSIX
AC_PROG_CC
AC_PROG_GCC_TRADITIONAL
AM_PROG_CC_C_O

gl_EARLY

dnl This test must come as early as possible after the compiler configuration
dnl tests, because the choice of the file model can (in principle) affect
dnl whether functions and headers are available, whether they work, etc.
AC_SYS_LARGEFILE

gl_INIT

AC_CHECK_SIZEOF(off_t, 64, [
	#include <stdio.h>
	#include <sys/types.h>
	#include <unistd.h>
])

AM_ENABLE_SHARED
if test "$OS" = linux -a $ac_cv_sizeof_off_t -lt 8; then
	dnl Need to disable shared libraries, to get llseek() to work.  Long
	dnl story.  The short story is: lseek() isn't in glibc, so a syscall
	dnl must be made.  syscalls can't be made from within shared libraries,
	dnl because of a bug (?) in gcc.
	AC_MSG_WARN(
off_t is less than 8 bytes.  Using llseek syscall, and disabling shared
libraries.)
	AM_DISABLE_SHARED
fi
AM_PROG_LIBTOOL

AM_GNU_GETTEXT_VERSION([0.15])
AM_GNU_GETTEXT([external])
if test "$USE_INCLUDED_LIBINTL" = "yes"; then
	AC_MSG_ERROR(
GNU Parted requires gettext to be installed for compilation -
if native language support is desired.  Either disable native language support
with:
	$ ./configure --disable-nls
Or install gettext.  GNU gettext is available from
	http://ftp.gnu.org/gnu/gettext
)
	exit
fi

dnl Check for libdl, if we are doing dynamic loading
DL_LIBS=""
if test "$enable_dynamic_loading" = yes; then
	AC_CHECK_LIB(dl, dlopen,
		DL_LIBS="-ldl"
		PARTED_LIBS="$PARTED_LIBS -ldl"
		AC_DEFINE(DYNAMIC_LOADING, 1, [Lazy linking to fs libs]),
		AC_MSG_ERROR(
			[-ldl not found!  Try using --disable-dynamic-loading]
		)
		exit
	)
fi
AC_SUBST(DL_LIBS)

dnl Check for libuuid
UUID_LIBS=""
AC_CHECK_LIB(uuid, uuid_generate, UUID_LIBS="-luuid",
	AC_MSG_ERROR(
GNU Parted requires libuuid - a part of the e2fsprogs package (but
sometimes distributed separately in uuid-devel or similar)
This can probably be found on your distribution's CD or FTP site or at:
         http://web.mit.edu/tytso/www/linux/e2fsprogs.html
Note: if you are using precompiled packages you will also need the development
package as well (which may be called e2fsprogs-devel or something similar).
If you compile e2fsprogs yourself then you need to do 'make install' and
'make install-libs'.
	)
	exit
)
AC_SUBST(UUID_LIBS)

dnl Check for libdevmapper
DM_LIBS=""
if test "$enable_device_mapper" = yes; then
	AC_CHECK_LIB(devmapper, dm_task_create,
		DM_LIBS="-ldevmapper",
		AC_MSG_ERROR(
			[libdevmapper not found!  Try using --disable-device-mapper]
		)
		exit
	)
fi
AC_SUBST(DM_LIBS)

dnl Check for SELinux
SELINUX_LIBS=""
if test "$enable_selinux" = yes; then
	SELINUX_LIBS="-lselinux -lsepol"
fi
AC_SUBST(SELINUX_LIBS)

dnl Check for libreiserfs
REISER_LIBS=""
if test "$enable_dynamic_loading" = no -a "$enable_discover_only" = no; then
	OLD_LIBS="$LIBS"
	AC_CHECK_LIB(dal, dal_equals,
		LIBS="-ldal"
		AC_CHECK_LIB(reiserfs, reiserfs_fs_probe,
			REISER_LIBS="-ldal -lreiserfs"
			AC_DEFINE(HAVE_LIBREISERFS, 1, [Have libreiserfs])
		)
		AC_CHECK_LIB(reiserfs, reiserfs_fs_check,
			AC_DEFINE(HAVE_REISERFS_FS_CHECK, 1, [Have reiserfs_fs_check()])
		)
	)
	LIBS="$OLD_LIBS"
fi
AC_SUBST(REISER_LIBS)

dnl Check for termcap
if test "$with_readline" = yes; then
	OLD_LIBS="$LIBS"
	LIBS=""
	AC_SEARCH_LIBS(tgetent, tinfo ncurses curses termcap termlib,
		PARTED_LIBS="$PARTED_LIBS $LIBS",
		AC_MSG_ERROR(
termcap could not be found which is required for the
--with-readline option (which is enabled by default).  Either disable readline
support with --without-readline or download and install termcap from:
	ftp.gnu.org/gnu/termcap
Note: if you are using precompiled packages you will also need the development
  package as well (which may be called termcap-devel or something similar).
Note: (n)curses also seems to work as a substitute for termcap.  This was
  not found either - but you could try installing that as well.
)
	exit
	)
	LIBS="$OLD_LIBS"
fi

dnl Check for readline
dnl NOTE: We need to remove the gl_cv_ignore_unused_libraries flag if we
dnl detected one earlier.  libreadline on some platforms (e.g., RHEL and
dnl Fedora) is left with 
if test "$with_readline" = yes; then
	OLD_LIBS="$LIBS"
	LIBS="$LIBS $PARTED_LIBS"
	AC_CHECK_LIB(readline, readline,
		PARTED_LIBS="-lreadline $PARTED_LIBS"
		AC_DEFINE(HAVE_LIBREADLINE, 1, [have readline]),
		AC_MSG_ERROR(
GNU Readline could not be found which is required for the
--with-readline (which is enabled by default).  Either disable readline support with
--without-readline or downloaded and install it from:
        ftp.gnu.org/gnu/readline
Note: if you are using precompiled packages you will also need the development
package as well (which may be called readline-devel or something similar).
)
		exit,
		$PARTED_LIBS
	)
 	LIBS="$OLD_LIBS"
fi

AC_SUBST(PARTED_LIBS)

dnl Check for OS specific libraries

dnl GNU/Hurd:
if test "$OS" = gnu; then
dnl libshouldbeinlibc
	AC_CHECK_LIB(shouldbeinlibc, vm_deallocate,
		OS_LIBS="$OS_LIBS -lshouldbeinlibc",
		AC_MSG_ERROR(
GNU Parted requires libshouldbeinlibc when running on
GNU/Hurd systems.  It is a standard part of a GNU/Hurd system.
		)
		exit
	)

dnl libstore may depend on libparted being present.
dnl Aren't circular dependencies wonderful?
	OLD_LIBS="$LIBS"
	LIBS=

	AC_CHECK_LIB(parted, ped_device_read)

dnl libstore
	AC_CHECK_LIB(store, store_open,
		OS_LIBS="$OS_LIBS -lstore",
		AC_MSG_ERROR(
GNU Parted requires libstore when running on GNU/Hurd
systems.  It is a standard part of a GNU/Hurd system.
		)
		exit,
		$OS_LIBS $UUID_LIBS $DM_LIBS $LIBS
	)
	LIBS="$OLD_LIBS"
fi

dnl BeOS/ZETA/Haiku:

if test "$OS" = beos; then
	dnl Include the socket library, as it is a depedency of libuuid
	dnl and so also of us (due to socket() call in libuuid)
	OS_LIBS="$OS_LIBS -lsocket"
fi

AC_SUBST(OS_LIBS)

dnl One day, gettext might support libtool...
dnl if test "$USE_INCLUDED_LIBINTL" = "yes"; then
dnl	INTLINCS='-I$(top_srcdir)/intl'
dnl fi
AC_SUBST(INTLINCS)


dnl Checks for header files.
AC_CHECK_HEADER(uuid/uuid.h, ,
	AC_MSG_ERROR(
GNU Parted requires libuuid - a part of the e2fsprogs package.
You seem to have the library installed but not the headers.  These are usually
found in a corresponding development package (usually called e2fsprogs-devel).
If you can't find one try:
        http://web.mit.edu/tytso/www/linux/e2fsprogs.html
)
	exit
)

AC_CHECK_HEADERS(getopt.h)

dnl required for libparted/llseek.c  (TODO: make linux-x86 only)
if test "$OS" = linux; then
	AC_CHECK_HEADER(linux/unistd.h)
fi

if test "$with_readline" = yes; then
	AC_CHECK_HEADERS(readline/readline.h readline/history.h, ,
		AC_MSG_ERROR(
The headers for GNU Readline could not be found which
are required for the --with-readline option.  You seem to have the GNU readline
library installed but not the headers.  These are usually found in a
corresponding development package (usually called readline-devel).  If you can't
find one try:
        ftp.gnu.org/gnu/readline
Alternatively you can disable readline support with --without-readline
)
	exit
	)
fi

AC_CHECK_HEADERS(termcap.h)

if test "$USE_NLS" = yes; then
	AC_CHECK_HEADERS(wctype.h, ,
		AC_MSG_ERROR(
One or more of the header files that are required for
native language support (wctype.h) could not be found.  Either get a newer
version of GNU libc and its headers - which can be obtained from:
	ftp.gnu.org/gnu/glibc
Or disable native language support with the --disable-nls option
)
	exit
	)
fi

AC_CHECK_HEADER([execinfo.h], [
	AC_CHECK_LIB(c, backtrace, [
		AC_DEFINE(HAVE_BACKTRACE, 1, [Has backtrace support])
		LDFLAGS="$LDFLAGS -rdynamic"
	])
])

dnl Checks for #defines.
AC_COMPILE_IFELSE([
	AC_LANG_PROGRAM([[
	#if defined __s390__ || defined __s390x__
	#  message s390 defined
	#endif
	]])], [compile_for_s390="no"], [compile_for_s390="yes"])
AM_CONDITIONAL([COMPILE_FOR_S390], [test "$compile_for_s390" = "yes"])

dnl check for "check", unit testing library/header
PKG_CHECK_MODULES([CHECK], [check >= 0.9.3], have_check=yes, have_check=no)
if test "$have_scintilla" != "yes"; then
    AC_MSG_RESULT([Unable to locate check version 0.9.3 or higher: not building])
fi
AM_CONDITIONAL([HAVE_CHECK], [test "$have_check" = yes])

dnl Checks for typedefs, structures and compiler characteristics.
AC_PROG_LD

AC_C_BIGENDIAN
AC_C_INLINE
AC_C_CONST
AC_C_RESTRICT


dnl Checks for library functions.
AC_CHECK_FUNCS(sigaction)
AC_CHECK_FUNCS(getuid)

dnl NOTE: We need to remove the gl_cv_ignore_unused_libraries flag if we
dnl detected one earlier.  libreadline on some platforms (e.g., RHEL and
dnl Fedora) is left with 
if test "$with_readline" = yes; then
	OLD_LIBS="$LIBS"
	LIBS="$LIBS $PARTED_LIBS -lreadline"
	AC_CHECK_FUNCS(rl_completion_matches)
	LIBS="$OLD_LIBS"
fi

AC_CHECK_FUNCS(canonicalize_file_name)

# CFLAGS="$CFLAGS -W -Wall -Wno-unused -Wno-switch -Wno-format"

if test "$enable_Werror" = yes; then
	CFLAGS="$CFLAGS -Werror"
fi

DATE=$(date '+%d %b %Y %H:%M')
USER=$(whoami)
HOST=$(hostname)
BUILDINFO="$USER@$HOST, $DATE"
AC_SUBST(BUILDINFO)

AC_OUTPUT([
Makefile
lib/Makefile
include/Makefile
include/parted/Makefile
libparted/Makefile
libparted/labels/Makefile
libparted/fs/Makefile
libparted/fs/amiga/Makefile
libparted/fs/ext2/Makefile
libparted/fs/fat/Makefile
libparted/fs/hfs/Makefile
libparted/fs/jfs/Makefile
libparted/fs/linux_swap/Makefile
libparted/fs/ntfs/Makefile
libparted/fs/reiserfs/Makefile
libparted/fs/ufs/Makefile
libparted/fs/xfs/Makefile
libparted/tests/Makefile
libparted.pc
parted/Makefile
partprobe/Makefile
doc/Makefile
doc/C/Makefile
doc/pt_BR/Makefile
debug/Makefile
debug/clearfat/Makefile
debug/test/Makefile
tests/Makefile
po/Makefile.in
])

echo
echo Type \'make\' to compile parted.
