##
##    Copyright 1999-2000 Sistina Software, Inc.
##
##    This is free software released under the GNU General Public License.
##    There is no warranty for this software.  See the file COPYING for
##    details.
##
##    See the file CONTRIBUTORS for a list of contributors.
##
##    This file is maintained by:
##      AJ Lewis <lewis@sistina.com>
## 
##    File name: configure.in
##
##    Description: Input file for autoconf.  Generates the configure script 
##                 that tries to keep everything nice and portable.  It also
##                 simplifies distribution package building considerably.
################################################################################

dnl Process this file with autoconf to produce a configure script.
AC_INIT(lib/device/dev-cache.h)

dnl setup the directory where autoconf has auxilary files
AC_CONFIG_AUX_DIR(autoconf) 

dnl Checks for programs.
AC_PROG_AWK
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_RANLIB

dnl Checks for header files.
AC_HEADER_DIRENT
AC_HEADER_STDC
AC_CHECK_HEADERS(fcntl.h malloc.h sys/ioctl.h unistd.h)

dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_C_INLINE
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_STRUCT_ST_RDEV
AC_HEADER_TIME

dnl Get system type
AC_CANONICAL_SYSTEM

case "$host_os" in
	linux*)
		CFLAGS= 
		CLDFLAGS="-Wl,--version-script,.export.sym"
		CLDWHOLEARCHIVE="-Wl,-whole-archive"
		CLDNOWHOLEARCHIVE="-Wl,-no-whole-archive"
		LD_DEPS=".export.sym"
		LD_FLAGS="-Wl,--export-dynamic"
		SOFLAG="-shared"
		DEVMAPPER=yes
		ODIRECT=yes ;;
	darwin*)
		CFLAGS="-no-cpp-precomp -fno-common"
		CLDFLAGS=
		CLDWHOLEARCHIVE="-all_load"
		CLDNOWHOLEARCHIVE=
		LD_DEPS=
		LD_FLAGS=
		SOFLAG="-dynamiclib"
		DEVMAPPER=no
		ODIRECT=no ;;
esac

dnl -- prefix is /usr by default, the exec_prefix default is setup later
AC_PREFIX_DEFAULT(/usr)

dnl -- setup the ownership of the files
AC_ARG_WITH(user,
  [  --with-user=USER        Set the owner of installed files ],
  [ OWNER="$withval" ],
  [ OWNER="root" ])

dnl -- setup the group ownership of the files
AC_ARG_WITH(group,
  [  --with-group=GROUP      Set the group owner of installed files ],
  [ GROUP="$withval" ],
  [ GROUP="root" ])

dnl -- format1 inclusion type
AC_ARG_WITH(lvm1,
  [  --with-lvm1=TYPE        LVM1 metadata support: internal/shared/none
                          [TYPE=internal] ],
  [ LVM1="$withval" ],
  [ LVM1="internal" ])

if [[ "x$LVM1" != xnone -a "x$LVM1" != xinternal -a "x$LVM1" != xshared ]];
 then  AC_MSG_ERROR(
--with-lvm1 parameter invalid
)
 exit
fi;

if test x$LVM1 = xinternal; then
	CFLAGS="$CFLAGS -DLVM1_INTERNAL"
fi

AC_ARG_ENABLE(jobs, [  --enable-jobs=NUM       Number of jobs to run simultaneously], JOBS=-j$enableval, JOBS=-j2)

dnl Enables staticly-linked tools
AC_ARG_ENABLE(static_link, [  --enable-static_link    Use this to link the tools to their libraries
                          statically.  Default is dynamic linking],  STATIC_LINK=$enableval, STATIC_LINK=no)

dnl Enable readline
AC_ARG_ENABLE(readline, [  --enable-readline       Enable readline support],  \
READLINE=$enableval, READLINE=no)

if test x$READLINE = xyes; then
	CFLAGS="$CFLAGS -DREADLINE_SUPPORT"
fi

echo $ac_n "checking whether to enable debugging""... $ac_c" 1>&6
dnl Enable Debugging
AC_ARG_ENABLE(debug,    [  --enable-debug          Enable debugging],  \
DEBUG=yes, DEBUG=no)
echo "$ac_t""$DEBUG" 1>&6

echo $ac_n "checking whether to enable device-mapper""... $ac_c" 1>&6
dnl Disable devmapper
AC_ARG_ENABLE(devmapper, [  --disable-devmapper     Disable device-mapper interaction],  \
DEVMAPPER=no)
echo "$ac_t""$DEVMAPPER" 1>&6

if test x$DEVMAPPER = xyes; then
	CFLAGS="$CFLAGS -DDEVMAPPER_SUPPORT"
fi

echo $ac_n "checking whether to enable O_DIRECT""... $ac_c" 1>&6
dnl Disable O_DIRECT
AC_ARG_ENABLE(o_direct, [  --disable-o_direct      Disable O_DIRECT],  \
ODIRECT=no)
echo "$ac_t""$ODIRECT" 1>&6

if test x$ODIRECT = xyes; then
	CFLAGS="$CFLAGS -DO_DIRECT_SUPPORT"
fi

echo $ac_n "checking whether to compile liblvm2cmd.so""... $ac_c" 1>&6
dnl Enable cmdlib
AC_ARG_ENABLE(cmdlib, [  --enable-cmdlib         Build shared command library],  \
CMDLIB=yes, CMDLIB=no)
echo "$ac_t""$CMDLIB" 1>&6

if test x$CMDLIB = xyes; then
	CFLAGS="$CFLAGS -DCMDLIB"
fi

dnl Mess with default exec_prefix
if [[ "x$exec_prefix" = xNONE -a "x$prefix" = xNONE ]];
 then  exec_prefix="";
fi;

dnl Checks for library functions.
AC_PROG_GCC_TRADITIONAL
AC_TYPE_SIGNAL
AC_FUNC_VPRINTF
AC_CHECK_FUNCS(mkdir rmdir uname)

dnl check for termcap (Shamelessly copied from parted 1.4.17)
if test x$READLINE = xyes; then
	AC_SEARCH_LIBS(tgetent, ncurses curses termcap termlib, ,
		AC_MSG_ERROR(
termcap could not be found which is required for the
--enable-readline option (which is enabled by default).  Either disable readline
support with --disable-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
	)
fi

dnl Check for dlopen
AC_CHECK_LIB(dl, dlopen, HAVE_LIBDL=yes, HAVE_LIBDL=no)

if [[ "x$HAVE_LIBDL" = xyes -a "xSTATIC_LINK" = xno ]]; then
	CFLAGS="$CFLAGS -DHAVE_LIBDL"
	LIBS="-ldl $LIBS"
else
	HAVE_LIBDL=no
fi

dnl Check for shared/static conflicts
if [[ "x$LVM1" = xshared -a "x$STATIC_LINK" = xyes ]];
 then  AC_MSG_ERROR(
Features cannot be 'shared' when building statically
)
 exit
fi

dnl Check for is_selinux_enabled
AC_CHECK_LIB(selinux, is_selinux_enabled, HAVE_SELINUX=yes, HAVE_SELINUX=no)

if test x$HAVE_SELINUX = xyes; then
	CFLAGS="$CFLAGS -DHAVE_SELINUX"
	LIBS="-lselinux $LIBS"
fi

dnl Check for getopt
AC_CHECK_HEADERS(getopt.h, CFLAGS="$CFLAGS -DHAVE_GETOPTLONG")

dnl Check for readline (Shamelessly copied from parted 1.4.17)
if test x$READLINE = xyes; then
	AC_CHECK_LIB(readline, readline, ,
		AC_MSG_ERROR(
GNU Readline could not be found which is required for the
--enable-readline option (which is enabled by default).  Either disable readline
support with --disable-readline or download and install readline 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
	)
	AC_CHECK_FUNC(rl_completion_matches, CFLAGS="$CFLAGS -DHAVE_RL_COMPLETION_MATCHES")
		
fi

echo $ac_n "checking whether to enable internationalisation""... $ac_c" 1>&6
dnl Internationalisation stuff
AC_ARG_ENABLE(nls, [  --enable-nls            Enable Native Language Support],\
		INTL=yes, INTL=no)
echo "$ac_t""$INTL" 1>&6

if test x$INTL = xyes; then
	INTL_PACKAGE="lvm2"
	AC_PATH_PROG(MSGFMT, msgfmt)
	if [[ "x$MSGFMT" == x ]];
		then  AC_MSG_ERROR(
		msgfmt not found in path $PATH
		)
		exit  
	fi;

	AC_ARG_WITH(localedir,
  		    [  --with-localedir=DIR    Translation files in DIR [PREFIX/share/locale]],
  		    [ LOCALEDIR="$withval" ],
  		    [ LOCALEDIR='${prefix}/share/locale' ])
fi

if test "-f VERSION"; then
  LVM_VERSION="\"`cat VERSION`\""
else
  LVM_VERSION="Unknown"
fi

AC_SUBST(JOBS)
AC_SUBST(STATIC_LINK)
AC_SUBST(LVM1)
AC_SUBST(OWNER)
AC_SUBST(GROUP)
AC_SUBST(CFLAGS)
AC_SUBST(CLDFLAGS)
AC_SUBST(CLDWHOLEARCHIVE)
AC_SUBST(CLDNOWHOLEARCHIVE)
AC_SUBST(LD_DEPS)
AC_SUBST(LD_FLAGS)
AC_SUBST(SOFLAG)
AC_SUBST(LIBS)
AC_SUBST(LVM_VERSION)
AC_SUBST(DEBUG)
AC_SUBST(DEVMAPPER)
AC_SUBST(HAVE_LIBDL)
AC_SUBST(HAVE_SELINUX)
AC_SUBST(CMDLIB)
AC_SUBST(MSGFMT)
AC_SUBST(LOCALEDIR)
AC_SUBST(INTL_PACKAGE)
AC_SUBST(INTL)

dnl First and last lines should not contain files to generate in order to 
dnl keep utility scripts running properly
AC_OUTPUT( 								\
Makefile								\
make.tmpl                                                               \
include/Makefile						 	\
lib/Makefile							 	\
lib/format1/Makefile						 	\
man/Makefile							 	\
po/Makefile								\
tools/Makefile							 	\
tools/version.h								\
test/mm/Makefile							\
test/device/Makefile							\
test/format1/Makefile							\
test/regex/Makefile                                                     \
test/filters/Makefile                                                   \
)

if test x$ODIRECT != xyes; then
  echo
  echo Warning: O_DIRECT disabled.
  echo Use of pvmove may cause machine to lock up under low memory conditions.
  echo
fi
