############################################################################### ## Copyright (C) 2000-2004 Sistina Software, Inc. All rights reserved. ## Copyright (C) 2004-2009 Red Hat, Inc. All rights reserved. ## ## This copyrighted material is made available to anyone wishing to use, ## modify, copy, or redistribute it subject to the terms and conditions ## of the GNU General Public License v.2. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software Foundation, ## Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ################################################################################ AC_PREREQ(2.57) ################################################################################ dnl -- Process this file with autoconf to produce a configure script. AC_INIT AC_CONFIG_SRCDIR([lib/device/dev-cache.h]) AC_CONFIG_HEADERS([lib/misc/configure.h]) ################################################################################ dnl -- Setup the directory where autoconf has auxilary files AC_CONFIG_AUX_DIR(autoconf) ################################################################################ dnl -- Get system type AC_CANONICAL_TARGET([]) case "$host_os" in linux*) CFLAGS="$CFLAGS" COPTIMISE_FLAG="-O2" CLDFLAGS="$CLDFLAGS -Wl,--version-script,.export.sym" CLDWHOLEARCHIVE="-Wl,-whole-archive" CLDNOWHOLEARCHIVE="-Wl,-no-whole-archive" LDDEPS="$LDDEPS .export.sym" LDFLAGS="$LDFLAGS -Wl,--export-dynamic" LIB_SUFFIX=so DEVMAPPER=yes ODIRECT=yes DM_IOCTLS=yes SELINUX=yes REALTIME=yes CLUSTER=internal FSADM=yes ;; darwin*) CFLAGS="$CFLAGS -no-cpp-precomp -fno-common" COPTIMISE_FLAG="-O2" CLDFLAGS="$CLDFLAGS" CLDWHOLEARCHIVE="-all_load" CLDNOWHOLEARCHIVE= LIB_SUFFIX=dylib DEVMAPPER=yes ODIRECT=no DM_IOCTLS=no SELINUX=no REALTIME=no CLUSTER=none FSADM=no ;; esac ################################################################################ dnl -- Checks for programs. AC_PROG_SED AC_PROG_AWK AC_PROG_CC dnl probably no longer needed in 2008, but... AC_PROG_GCC_TRADITIONAL AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET AC_PROG_MKDIR_P AC_PROG_RANLIB AC_PATH_PROG(CFLOW_CMD, cflow) AC_PATH_PROG(CSCOPE_CMD, cscope) ################################################################################ dnl -- Check for header files. AC_HEADER_DIRENT AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_HEADER_TIME AC_CHECK_HEADERS([locale.h stddef.h syslog.h sys/file.h sys/time.h assert.h \ libgen.h signal.h sys/mman.h sys/resource.h sys/utsname.h sys/wait.h time.h], , [AC_MSG_ERROR(bailing out)]) case "$host_os" in linux*) AC_CHECK_HEADERS(asm/byteorder.h linux/fs.h malloc.h,,AC_MSG_ERROR(bailing out)) ;; darwin*) AC_CHECK_HEADERS(machine/endian.h sys/disk.h,,AC_MSG_ERROR(bailing out)) ;; esac AC_CHECK_HEADERS([ctype.h dirent.h errno.h fcntl.h getopt.h inttypes.h limits.h \ stdarg.h stdio.h stdlib.h string.h sys/ioctl.h sys/param.h sys/stat.h \ sys/types.h unistd.h], , [AC_MSG_ERROR(bailing out)]) AC_CHECK_HEADERS(termios.h sys/statvfs.h) ################################################################################ dnl -- Check for typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE AC_CHECK_MEMBERS([struct stat.st_rdev]) AC_TYPE_OFF_T AC_TYPE_PID_T AC_TYPE_SIGNAL AC_TYPE_SIZE_T AC_TYPE_MODE_T AC_CHECK_MEMBERS([struct stat.st_rdev]) AC_STRUCT_TM ################################################################################ dnl -- Check for functions AC_CHECK_FUNCS([gethostname getpagesize memset mkdir rmdir munmap setlocale \ strcasecmp strchr strdup strncasecmp strerror strrchr strstr strtol strtoul \ uname], , [AC_MSG_ERROR(bailing out)]) AC_FUNC_ALLOCA AC_FUNC_CLOSEDIR_VOID AC_FUNC_FORK AC_FUNC_LSTAT AC_FUNC_MALLOC AC_FUNC_MEMCMP AC_FUNC_MMAP AC_FUNC_STAT AC_FUNC_STRTOD AC_FUNC_VPRINTF ################################################################################ dnl -- Enables statically-linked tools AC_MSG_CHECKING(whether to use static linking) 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) AC_MSG_RESULT($STATIC_LINK) ################################################################################ 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_MSG_CHECKING(file owner) OWNER="root" AC_ARG_WITH(user, [ --with-user=USER Set the owner of installed files [[USER=root]] ], [ OWNER="$withval" ]) AC_MSG_RESULT($OWNER) if test x$OWNER != x; then OWNER="-o $OWNER" fi ################################################################################ dnl -- Setup the group ownership of the files AC_MSG_CHECKING(group owner) GROUP="root" AC_ARG_WITH(group, [ --with-group=GROUP Set the group owner of installed files [[GROUP=root]] ], [ GROUP="$withval" ]) AC_MSG_RESULT($GROUP) if test x$GROUP != x; then GROUP="-g $GROUP" fi ################################################################################ dnl -- Setup device node ownership AC_MSG_CHECKING(device node uid) AC_ARG_WITH(device-uid, [ --with-device-uid=UID Set the owner used for new device nodes [[UID=0]] ], [ DM_DEVICE_UID="$withval" ], [ DM_DEVICE_UID="0" ] ) AC_MSG_RESULT($DM_DEVICE_UID) ################################################################################ dnl -- Setup device group ownership AC_MSG_CHECKING(device node gid) AC_ARG_WITH(device-gid, [ --with-device-gid=UID Set the group used for new device nodes [[GID=0]] ], [ DM_DEVICE_GID="$withval" ], [ DM_DEVICE_GID="0" ] ) AC_MSG_RESULT($DM_DEVICE_GID) ################################################################################ dnl -- Setup device mode AC_MSG_CHECKING(device node mode) AC_ARG_WITH(device-mode, [ --with-device-mode=MODE Set the mode used for new device nodes [[MODE=0600]] ], [ DM_DEVICE_MODE="$withval" ], [ DM_DEVICE_MODE="0600" ] ) AC_MSG_RESULT($DM_DEVICE_MODE) ################################################################################ dnl -- LVM1 tool fallback option AC_MSG_CHECKING(whether to enable lvm1 fallback) AC_ARG_ENABLE(lvm1_fallback, [ --enable-lvm1_fallback Use this to fall back and use LVM1 binaries if device-mapper is missing from the kernel], LVM1_FALLBACK=$enableval, LVM1_FALLBACK=no) AC_MSG_RESULT($LVM1_FALLBACK) if test x$LVM1_FALLBACK = xyes; then AC_DEFINE([LVM1_FALLBACK], 1, [Define to 1 if 'lvm' should fall back to using LVM1 binaries if device-mapper is missing from the kernel]) fi ################################################################################ dnl -- format1 inclusion type AC_MSG_CHECKING(whether to include support for lvm1 metadata) AC_ARG_WITH(lvm1, [ --with-lvm1=TYPE LVM1 metadata support: internal/shared/none [TYPE=internal] ], [ LVM1="$withval" ], [ LVM1="internal" ]) AC_MSG_RESULT($LVM1) if [[ "x$LVM1" != xnone -a "x$LVM1" != xinternal -a "x$LVM1" != xshared ]]; then AC_MSG_ERROR( --with-lvm1 parameter invalid ) fi; if test x$LVM1 = xinternal; then AC_DEFINE([LVM1_INTERNAL], 1, [Define to 1 to include built-in support for LVM1 metadata.]) fi ################################################################################ dnl -- format_pool inclusion type AC_MSG_CHECKING(whether to include support for GFS pool metadata) AC_ARG_WITH(pool, [ --with-pool=TYPE GFS pool read-only support: internal/shared/none [TYPE=internal] ], [ POOL="$withval" ], [ POOL="internal" ]) AC_MSG_RESULT($POOL) if [[ "x$POOL" != xnone -a "x$POOL" != xinternal -a "x$POOL" != xshared ]]; then AC_MSG_ERROR( --with-pool parameter invalid ) fi; if test x$POOL = xinternal; then AC_DEFINE([POOL_INTERNAL], 1, [Define to 1 to include built-in support for GFS pool metadata.]) fi ################################################################################ dnl -- cluster_locking inclusion type AC_MSG_CHECKING(whether to include support for cluster locking) AC_ARG_WITH(cluster, [ --with-cluster=TYPE Cluster LVM locking support: internal/shared/none [TYPE=internal] ], [ CLUSTER="$withval" ]) AC_MSG_RESULT($CLUSTER) if [[ "x$CLUSTER" != xnone -a "x$CLUSTER" != xinternal -a "x$CLUSTER" != xshared ]]; then AC_MSG_ERROR( --with-cluster parameter invalid ) fi; if test x$CLUSTER = xinternal; then AC_DEFINE([CLUSTER_LOCKING_INTERNAL], 1, [Define to 1 to include built-in support for clustered LVM locking.]) fi ################################################################################ dnl -- snapshots inclusion type AC_MSG_CHECKING(whether to include snapshots) AC_ARG_WITH(snapshots, [ --with-snapshots=TYPE Snapshot support: internal/shared/none [TYPE=internal] ], [ SNAPSHOTS="$withval" ], [ SNAPSHOTS="internal" ]) AC_MSG_RESULT($SNAPSHOTS) if [[ "x$SNAPSHOTS" != xnone -a "x$SNAPSHOTS" != xinternal -a "x$SNAPSHOTS" != xshared ]]; then AC_MSG_ERROR( --with-snapshots parameter invalid ) fi; if test x$SNAPSHOTS = xinternal; then AC_DEFINE([SNAPSHOT_INTERNAL], 1, [Define to 1 to include built-in support for snapshots.]) fi ################################################################################ dnl -- mirrors inclusion type AC_MSG_CHECKING(whether to include mirrors) AC_ARG_WITH(mirrors, [ --with-mirrors=TYPE Mirror support: internal/shared/none [TYPE=internal] ], [ MIRRORS="$withval" ], [ MIRRORS="internal" ]) AC_MSG_RESULT($MIRRORS) if [[ "x$MIRRORS" != xnone -a "x$MIRRORS" != xinternal -a "x$MIRRORS" != xshared ]]; then AC_MSG_ERROR( --with-mirrors parameter invalid ) fi; if test x$MIRRORS = xinternal; then AC_DEFINE([MIRRORED_INTERNAL], 1, [Define to 1 to include built-in support for mirrors.]) fi ################################################################################ dnl -- Disable readline AC_MSG_CHECKING(whether to enable readline) AC_ARG_ENABLE([readline], [ --disable-readline Disable readline support], [READLINE=$enableval], [READLINE=maybe]) AC_MSG_RESULT($READLINE) ################################################################################ dnl -- Disable realtime clock support AC_MSG_CHECKING(whether to enable realtime support) AC_ARG_ENABLE(realtime, [ --disable-realtime Disable realtime clock support], REALTIME=$enableval) AC_MSG_RESULT($REALTIME) ################################################################################ dnl -- Build cluster LVM daemon AC_MSG_CHECKING(whether to build cluster LVM daemon) AC_ARG_WITH(clvmd, [ --with-clvmd=TYPE Build cluster LVM Daemon. The following locking combinations are valid: * cman,gulm (RHEL4 or equivalent) * cman (RHEL5 or equivalent) * cman,corosync,openais (or selection of them) * all (autodetect) * none (disable build) [TYPE=none] ], [ CLVMD="$withval" ], [ CLVMD="none" ]) if test x$CLVMD = xyes; then CLVMD=all fi AC_MSG_RESULT($CLVMD) dnl -- If clvmd enabled without cluster locking, automagically include it if test x$CLVMD != xnone && test x$CLUSTER = xnone; then CLUSTER=internal fi dnl -- define build types if [[ `expr x"$CLVMD" : '.*gulm.*'` != 0 ]]; then BUILDGULM=yes fi if [[ `expr x"$CLVMD" : '.*corosync.*'` != 0 ]]; then BUILDCOROSYNC=yes fi if [[ `expr x"$CLVMD" : '.*openais.*'` != 0 ]]; then BUILDOPENAIS=yes fi if [[ `expr x"$CLVMD" : '.*cman.*'` != 0 ]]; then BUILDCMAN=yes fi dnl -- sanity check around user selection if test x$BUILDGULM = xyes; then if test x$BUILDCOROSYNC = xyes || \ test x$BUILDOPENAIS = xyes; then AC_MSG_ERROR([requested clvmd configuration is not valid]) fi fi dnl -- Init pkg-config with dummy invokation: dnl -- this is required because PKG_CHECK_MODULES macro is expanded dnl -- to initialize the pkg-config environment only at the first invokation, dnl -- that would be conditional in this configure.in. if test x$CLVMD != xnone; then PKG_CHECK_MODULES(PKGCONFIGINIT, pkgconfiginit, [], [AC_MSG_RESULT([pkg-config initialized])]) fi dnl -- define a soft bailout if we are autodetecting soft_bailout() { NOTFOUND=1 } hard_bailout() { AC_MSG_ERROR([bailing out]) } dnl -- if clvmd=all then set soft_bailout (we don't want to error) dnl -- and set all builds to yes. We need to do this here dnl -- to skip the gulm + openais|corosync sanity check above. if test x$CLVMD = xall; then bailout=soft_bailout BUILDGULM=yes BUILDCMAN=yes BUILDCOROSYNC=yes BUILDOPENAIS=yes else bailout=hard_bailout fi dnl -- helper macro to check libs without adding them to LIBS check_lib_no_libs() { lib_no_libs_arg1=$1 shift lib_no_libs_arg2=$1 shift lib_no_libs_args=$@ AC_CHECK_LIB([$lib_no_libs_arg1], [$lib_no_libs_arg2],, [$bailout], [$lib_no_libs_args]) LIBS=$ac_check_lib_save_LIBS } dnl -- Look for gulm libraries if required. if test x$BUILDGULM = xyes; then PKG_CHECK_MODULES(CCS, libccs, [HAVE_CCS=yes], [NOTFOUND=0 AC_CHECK_HEADERS(ccs.h,,$bailout) check_lib_no_libs ccs ccs_connect if test $NOTFOUND = 0; then AC_MSG_RESULT([no pkg for libccs, using -lccs]) CCS_LIBS="-lccs" HAVE_CCS=yes fi]) PKG_CHECK_MODULES(GULM, libgulm, [HAVE_GULM=yes], [NOTFOUND=0 AC_CHECK_HEADERS(libgulm.h,,$bailout) check_lib_no_libs gulm lg_core_login if test $NOTFOUND = 0; then AC_MSG_RESULT([no pkg for libgulm, using -lgulm]) GULM_LIBS="-lgulm" HAVE_GULM=yes fi]) fi dnl -- Look for cman libraries if required. if test x$BUILDCMAN = xyes; then PKG_CHECK_MODULES(CMAN, libcman, [HAVE_CMAN=yes], [NOTFOUND=0 AC_CHECK_HEADERS(libcman.h,,$bailout) check_lib_no_libs cman cman_init if test $NOTFOUND = 0; then AC_MSG_RESULT([no pkg for libcman, using -lcman]) CMAN_LIBS="-lcman" HAVE_CMAN=yes fi]) CHECKCONFDB=yes CHECKDLM=yes fi dnl -- Look for corosync that's required also for openais build dnl -- only enough recent version of corosync ship pkg-config files. dnl -- We can safely rely on that to detect the correct bits. if test x$BUILDCOROSYNC = xyes || \ test x$BUILDOPENAIS = xyes; then PKG_CHECK_MODULES(COROSYNC, corosync, [HAVE_COROSYNC=yes], $bailout) CHECKCONFDB=yes fi dnl -- Look for corosync libraries if required. if test x$BUILDCOROSYNC = xyes; then PKG_CHECK_MODULES(QUORUM, libquorum, [HAVE_QUORUM=yes], $bailout) CHECKCPG=yes CHECKDLM=yes fi dnl -- Look for openais libraries if required. if test x$BUILDOPENAIS = xyes; then PKG_CHECK_MODULES(SALCK, libSaLck, [HAVE_SALCK=yes], $bailout) CHECKCPG=yes fi dnl -- Below are checks for libraries common to more than one build. dnl -- Check confdb library. dnl -- mandatory for corosync build. dnl -- optional for openais/cman build. if test x$CHECKCONFDB = xyes; then PKG_CHECK_MODULES(CONFDB, libconfdb, [HAVE_CONFDB=yes], [HAVE_CONFDB=no]) AC_CHECK_HEADERS(corosync/confdb.h, [HAVE_CONFDB_H=yes], [HAVE_CONFDB_H=no]) if test x$HAVE_CONFDB != xyes && \ test x$HAVE_CONFDB_H = xyes; then check_lib_no_libs confdb confdb_initialize AC_MSG_RESULT([no pkg for confdb, using -lconfdb]) CONFDB_LIBS="-lconfdb" HAVE_CONFDB=yes fi if test x$BUILDCOROSYNC = xyes && \ test x$HAVE_CONFDB != xyes && test x$CLVMD != xall; then AC_MSG_ERROR([bailing out... confdb library is required]) fi fi dnl -- Check cpg library. if test x$CHECKCPG = xyes; then PKG_CHECK_MODULES(CPG, libcpg, [HAVE_CPG=yes], $bailout) fi dnl -- Check dlm library. if test x$CHECKDLM = xyes; then PKG_CHECK_MODULES(DLM, libdlm, [HAVE_DLM=yes], [NOTFOUND=0 AC_CHECK_HEADERS(libdlm.h,,$bailout) check_lib_no_libs dlm dlm_lock -lpthread if test $NOTFOUND = 0; then AC_MSG_RESULT([no pkg for libdlm, using -ldlm]) DLM_LIBS="-ldlm -lpthread" HAVE_DLM=yes fi]) fi dnl -- If we are autodetecting, we need to re-create dnl -- the depedencies checks and set a proper CLVMD. if test x$CLVMD = xall; then if test x$HAVE_CCS = xyes && \ test x$HAVE_GULM = xyes; then AC_MSG_RESULT([Enabling clvmd gulm backend]) NEWCLVMD="$NEWCLVMD,gulm" fi if test x$HAVE_CMAN = xyes && \ test x$HAVE_DLM = xyes; then AC_MSG_RESULT([Enabling clvmd cman backend]) NEWCLVMD="$NEWCLVMD,cman" fi if test x$HAVE_COROSYNC = xyes && \ test x$HAVE_QUORUM = xyes && \ test x$HAVE_CPG = xyes && \ test x$HAVE_DLM = xyes && \ test x$HAVE_CONFDB = xyes; then AC_MSG_RESULT([Enabling clvmd corosync backend]) NEWCLVMD="$NEWCLVMD,corosync" fi if test x$HAVE_COROSYNC = xyes && \ test x$HAVE_CPG = xyes && \ test x$HAVE_SALCK = xyes; then AC_MSG_RESULT([Enabling clvmd openais backend]) NEWCLVMD="$NEWCLVMD,openais" fi CLVMD="$NEWCLVMD" fi ################################################################################ dnl -- Build cluster mirror log daemon AC_MSG_CHECKING(whether to build cluster mirror log daemon) AC_ARG_ENABLE(cmirrord, [ --enable-cmirrord Enable the cluster mirror log daemon], CMIRRORD=$enableval, CMIRRORD=no) AC_MSG_RESULT($CMIRRORD) BUILD_CMIRRORD=$CMIRRORD ################################################################################ dnl -- cmirrord pidfile AH_TEMPLATE(CMIRRORD_PIDFILE, [Path to cmirrord pidfile.]) if test "x$BUILD_CMIRRORD" = xyes; then AC_ARG_WITH(cmirrord-pidfile, [ --with-cmirrord-pidfile=PATH cmirrord pidfile [[/var/run/cmirrord.pid]] ], [ AC_DEFINE_UNQUOTED(CMIRRORD_PIDFILE,"$withval") ], [ AC_DEFINE_UNQUOTED(CMIRRORD_PIDFILE,"/var/run/cmirrord.pid") ]) fi ################################################################################ dnl -- Look for corosync libraries if required. if [[ "x$BUILD_CMIRRORD" = xyes ]]; then # # FIXME: ALSO NEED TO CHECK FOR CHECKPOINT MODULE # FIXME: Merge this with the new clvmd logic # PKG_CHECK_MODULES(CPG, libcpg, [], [AC_MSG_RESULT([no pkg for libcpg library, using -lcpg]); CPG_LIBS="-lcpg"]) fi ################################################################################ dnl -- Enable debugging AC_MSG_CHECKING(whether to enable debugging) AC_ARG_ENABLE(debug, [ --enable-debug Enable debugging], DEBUG=$enableval, DEBUG=no) AC_MSG_RESULT($DEBUG) dnl -- Normally turn off optimisation for debug builds if test x$DEBUG = xyes; then COPTIMISE_FLAG= else CSCOPE_CMD= fi ################################################################################ dnl -- Override optimisation AC_MSG_CHECKING(for C optimisation flag) AC_ARG_WITH(optimisation, [ --with-optimisation=OPT C optimisation flag [[OPT=-O2]] ], [ COPTIMISE_FLAG="$withval" ]) AC_MSG_RESULT($COPTIMISE_FLAG) ################################################################################ dnl -- Enable profiling AC_MSG_CHECKING(whether to gather gcov profiling data) AC_ARG_ENABLE(profiling, AC_HELP_STRING(--enable-profiling, [Gather gcov profiling data]), PROFILING=$enableval, PROFILING=no) AC_MSG_RESULT($PROFILING) if test "x$PROFILING" = xyes; then COPTIMISE_FLAG="$COPTIMISE_FLAG -fprofile-arcs -ftest-coverage" AC_PATH_PROG(LCOV, lcov, no) AC_PATH_PROG(GENHTML, genhtml, no) if test "$LCOV" = no -o "$GENHTML" = no ; then AC_MSG_ERROR([lcov and genhtml are required for profiling]) fi fi ################################################################################ dnl -- Disable devmapper AC_MSG_CHECKING(whether to use device-mapper) AC_ARG_ENABLE(devmapper, [ --disable-devmapper Disable LVM2 device-mapper interaction], DEVMAPPER=$enableval) AC_MSG_RESULT($DEVMAPPER) if test x$DEVMAPPER = xyes; then AC_DEFINE([DEVMAPPER_SUPPORT], 1, [Define to 1 to enable LVM2 device-mapper interaction.]) fi ################################################################################ dnl -- Enable udev synchronisation AC_MSG_CHECKING(whether to enable synchronisation with udev processing) AC_ARG_ENABLE(udev_sync, [ --enable-udev_sync Enable synchronisation with udev processing], UDEV_SYNC=$enableval, UDEV_SYNC=no) AC_MSG_RESULT($UDEV_SYNC) if test x$UDEV_SYNC = xyes; then AC_DEFINE([UDEV_SYNC_SUPPORT], 1, [Define to 1 to enable synchronisation with udev processing.]) fi dnl -- Enable udev rules AC_MSG_CHECKING(whether to enable installation of udev rules required for synchronisation) AC_ARG_ENABLE(udev_rules, [ --enable-udev_rules Install rule files needed for udev synchronisation], UDEV_RULES=$enableval, UDEV_RULES=$UDEV_SYNC) AC_MSG_RESULT($UDEV_RULES) ################################################################################ dnl -- Compatibility mode AC_ARG_ENABLE(compat, [ --enable-compat Enable support for old device-mapper versions], DM_COMPAT=$enableval, DM_COMPAT=no) ################################################################################ dnl -- Disable ioctl AC_ARG_ENABLE(ioctl, [ --disable-driver Disable calls to device-mapper in the kernel], DM_IOCTLS=$enableval) ################################################################################ dnl -- Disable O_DIRECT AC_MSG_CHECKING(whether to enable O_DIRECT) AC_ARG_ENABLE(o_direct, [ --disable-o_direct Disable O_DIRECT], ODIRECT=$enableval) AC_MSG_RESULT($ODIRECT) if test x$ODIRECT = xyes; then AC_DEFINE([O_DIRECT_SUPPORT], 1, [Define to 1 to enable O_DIRECT support.]) fi ################################################################################ dnl -- Enable liblvm2app.so AC_MSG_CHECKING(whether to build liblvm2app.so application library) AC_ARG_ENABLE(applib, [ --enable-applib Build application library], APPLIB=$enableval, APPLIB=no) AC_MSG_RESULT($APPLIB) AC_SUBST([LVM2APP_LIB]) test x$APPLIB = xyes \ && LVM2APP_LIB=-llvm2app \ || LVM2APP_LIB= ################################################################################ dnl -- Enable cmdlib AC_MSG_CHECKING(whether to compile liblvm2cmd.so) AC_ARG_ENABLE(cmdlib, [ --enable-cmdlib Build shared command library], CMDLIB=$enableval, CMDLIB=no) AC_MSG_RESULT($CMDLIB) AC_SUBST([LVM2CMD_LIB]) test x$CMDLIB = xyes \ && LVM2CMD_LIB=-llvm2cmd \ || LVM2CMD_LIB= ################################################################################ dnl -- Enable pkg-config AC_ARG_ENABLE(pkgconfig, [ --enable-pkgconfig Install pkgconfig support], PKGCONFIG=$enableval, PKGCONFIG=no) ################################################################################ dnl -- Enable fsadm AC_MSG_CHECKING(whether to install fsadm) AC_ARG_ENABLE(fsadm, [ --enable-fsadm Enable fsadm], FSADM=$enableval) AC_MSG_RESULT($FSADM) ################################################################################ dnl -- enable dmeventd handling AC_MSG_CHECKING(whether to use dmeventd) AC_ARG_ENABLE(dmeventd, [ --enable-dmeventd Enable the device-mapper event daemon], DMEVENTD=$enableval) AC_MSG_RESULT($DMEVENTD) BUILD_DMEVENTD=$DMEVENTD dnl -- dmeventd currently requires internal mirror support if test x$DMEVENTD = xyes; then if test x$MIRRORS != xinternal; then AC_MSG_ERROR( --enable-dmeventd currently requires --with-mirrors=internal ) fi if test x$CMDLIB = xno; then AC_MSG_ERROR( --enable-dmeventd requires --enable-cmdlib to be used as well ) fi fi if test x$DMEVENTD = xyes; then AC_DEFINE([DMEVENTD], 1, [Define to 1 to enable the device-mapper event daemon.]) fi ################################################################################ dnl -- getline included in recent libc AC_CHECK_LIB(c, getline, AC_DEFINE([HAVE_GETLINE], 1, [Define to 1 if getline is available.])) ################################################################################ dnl -- canonicalize_file_name included in recent libc AC_CHECK_LIB(c, canonicalize_file_name, AC_DEFINE([HAVE_CANONICALIZE_FILE_NAME], 1, [Define to 1 if canonicalize_file_name is available.])) ################################################################################ dnl -- Clear default exec_prefix - install into /sbin rather than /usr/sbin if [[ "x$exec_prefix" = xNONE -a "x$prefix" = xNONE ]]; then exec_prefix=""; fi; ################################################################################ dnl -- Check for termcap (Shamelessly copied from parted 1.4.17) if test x$READLINE != xno; then AC_SEARCH_LIBS([tgetent], [tinfo ncurses curses termcap termlib], [tg_found=yes], [tg_found=no]) test x$READLINE:$tg_found = xyes:no && 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. ) fi ################################################################################ dnl -- Check for dlopen AC_CHECK_LIB(dl, dlopen, HAVE_LIBDL=yes, HAVE_LIBDL=no) if [[ "x$HAVE_LIBDL" = xyes ]]; then AC_DEFINE([HAVE_LIBDL], 1, [Define to 1 if dynamic libraries are available.]) LIBS="-ldl $LIBS" else HAVE_LIBDL=no fi ################################################################################ dnl -- Check for shared/static conflicts if [[ \( "x$LVM1" = xshared -o "x$POOL" = xshared -o "x$CLUSTER" = xshared \ -o "x$SNAPSHOTS" = xshared -o "x$MIRRORS" = xshared \ \) -a "x$STATIC_LINK" = xyes ]]; then AC_MSG_ERROR( Features cannot be 'shared' when building statically ) fi ################################################################################ dnl -- Disable selinux AC_MSG_CHECKING(whether to enable selinux support) AC_ARG_ENABLE(selinux, [ --disable-selinux Disable selinux support], SELINUX=$enableval) AC_MSG_RESULT($SELINUX) ################################################################################ dnl -- Check for selinux if test x$SELINUX = xyes; then AC_CHECK_LIB(sepol, sepol_check_context, HAVE_SEPOL=yes, HAVE_SEPOL=no) if test x$HAVE_SEPOL = xyes; then AC_DEFINE([HAVE_SEPOL], 1, [Define to 1 if sepol_check_context is available.]) LIBS="-lsepol $LIBS" fi AC_CHECK_LIB(selinux, is_selinux_enabled, HAVE_SELINUX=yes, HAVE_SELINUX=no) if test x$HAVE_SELINUX = xyes; then AC_DEFINE([HAVE_SELINUX], 1, [Define to 1 to include support for selinux.]) LIBS="-lselinux $LIBS" else AC_MSG_WARN(Disabling selinux) fi # With --enable-static_link and selinux enabled, linking # fails on at least Debian unstable due to unsatisfied references # to pthread_mutex_lock and _unlock. See if we need -lpthread. if test "$STATIC_LINK-$HAVE_SELINUX" = yes-yes; then lvm_saved_libs=$LIBS LIBS="$LIBS -static" AC_SEARCH_LIBS([pthread_mutex_lock], [pthread], [test "$ac_cv_search_pthread_mutex_lock" = "none required" || LIB_PTHREAD=-lpthread]) LIBS=$lvm_saved_libs fi fi ################################################################################ dnl -- Check for realtime clock support if test x$REALTIME = xyes; then AC_CHECK_LIB(rt, clock_gettime, HAVE_REALTIME=yes, HAVE_REALTIME=no) if test x$HAVE_REALTIME = xyes; then AC_DEFINE([HAVE_REALTIME], 1, [Define to 1 to include support for realtime clock.]) LIBS="-lrt $LIBS" else AC_MSG_WARN(Disabling realtime clock) fi fi ################################################################################ dnl -- Check for getopt AC_CHECK_HEADERS(getopt.h, AC_DEFINE([HAVE_GETOPTLONG], 1, [Define to 1 if getopt_long is available.])) ################################################################################ dnl -- Check for readline (Shamelessly copied from parted 1.4.17) if test x$READLINE != xno; then rl_found=yes AC_CHECK_LIB([readline], [readline], , [rl_found=no]) test x$READLINE:$rl_found = xyes:no && 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). ) if test $rl_found = yes; then AC_CHECK_FUNCS([rl_completion_matches]) AC_DEFINE([READLINE_SUPPORT], 1, [Define to 1 to include the LVM readline shell.]) fi fi ################################################################################ dnl -- Internationalisation stuff AC_MSG_CHECKING(whether to enable internationalisation) AC_ARG_ENABLE(nls, [ --enable-nls Enable Native Language Support], INTL=$enableval, INTL=no) AC_MSG_RESULT($INTL) if test x$INTL = xyes; then # FIXME - Move this - can be device-mapper too INTL_PACKAGE="lvm2" AC_PATH_PROG(MSGFMT, msgfmt) if [[ "x$MSGFMT" == x ]]; then AC_MSG_ERROR( msgfmt not found in path $PATH ) fi; AC_ARG_WITH(localedir, [ --with-localedir=DIR Translation files in DIR [[PREFIX/share/locale]] ], [ LOCALEDIR="$withval" ], [ LOCALEDIR='${prefix}/share/locale' ]) fi ################################################################################ AC_ARG_WITH(confdir, [ --with-confdir=DIR Configuration files in DIR [[/etc]]], [ CONFDIR="$withval" ], [ CONFDIR='/etc' ]) AC_ARG_WITH(staticdir, [ --with-staticdir=DIR Static binary in DIR [[EPREFIX/sbin]]], [ STATICDIR="$withval" ], [ STATICDIR='${exec_prefix}/sbin' ]) AC_ARG_WITH(usrlibdir, [ --with-usrlibdir=DIR], [ usrlibdir="$withval"], [ usrlibdir='${prefix}/lib' ]) AC_ARG_WITH(usrsbindir, [ --with-usrsbindir=DIR], [ usrsbindir="$withval"], [ usrsbindir='${prefix}/sbin' ]) ################################################################################ AC_ARG_WITH(udev_prefix, [ --with-udev-prefix=UPREFIX Install udev rule files in UPREFIX [[EPREFIX]]], [ udev_prefix="$withval"], [ udev_prefix='${exec_prefix}' ]) AC_ARG_WITH(udevdir, [ --with-udevdir=DIR udev rules in DIR [[UPREFIX/lib/udev/rules.d]]], [ udevdir="$withval"], [ udevdir='${udev_prefix}/lib/udev/rules.d' ]) ################################################################################ dnl -- Ensure additional headers required if test x$READLINE = xyes; then AC_CHECK_HEADERS(readline/readline.h readline/history.h,,AC_MSG_ERROR(bailing out)) fi if test x$CLVMD != xnone; then AC_CHECK_HEADERS(mntent.h netdb.h netinet/in.h pthread.h search.h sys/mount.h sys/socket.h sys/uio.h sys/un.h utmpx.h,,AC_MSG_ERROR(bailing out)) AC_CHECK_FUNCS(dup2 getmntent memmove select socket,,AC_MSG_ERROR(bailing out)) AC_FUNC_GETMNTENT # AC_FUNC_REALLOC AC_FUNC_SELECT_ARGTYPES fi if test x$CLUSTER != xnone; then AC_CHECK_HEADERS(sys/socket.h sys/un.h,,AC_MSG_ERROR(bailing out)) AC_CHECK_FUNCS(socket,,AC_MSG_ERROR(bailing out)) fi if test x$HAVE_LIBDL = xyes; then AC_CHECK_HEADERS(dlfcn.h,,AC_MSG_ERROR(bailing out)) fi if test x$INTL = xyes; then AC_CHECK_HEADERS(libintl.h,,AC_MSG_ERROR(bailing out)) fi if test x$HAVE_SELINUX = xyes; then AC_CHECK_HEADERS(selinux/selinux.h,,AC_MSG_ERROR(bailing out)) fi if test x$UDEV_SYNC = xyes; then AC_CHECK_HEADERS(sys/ipc.h sys/sem.h,,AC_MSG_ERROR(bailing out)) fi ################################################################################ AC_PATH_PROG(MODPROBE_CMD, modprobe) if test x$MODPROBE_CMD != x; then AC_DEFINE_UNQUOTED([MODPROBE_CMD], ["$MODPROBE_CMD"], [The path to 'modprobe', if available.]) fi ################################################################################ dnl -- dmeventd pidfile and executable path AH_TEMPLATE(DMEVENTD_PIDFILE, [Path to dmeventd pidfile.]) if test "$BUILD_DMEVENTD" = yes; then AC_ARG_WITH(dmeventd-pidfile, [ --with-dmeventd-pidfile=PATH dmeventd pidfile [[/var/run/dmeventd.pid]] ], [ AC_DEFINE_UNQUOTED(DMEVENTD_PIDFILE,"$withval") ], [ AC_DEFINE_UNQUOTED(DMEVENTD_PIDFILE,"/var/run/dmeventd.pid") ]) fi AH_TEMPLATE(DMEVENTD_PATH, [Path to dmeventd binary.]) if test "$BUILD_DMEVENTD" = yes; then dmeventd_prefix="$exec_prefix" if test "x$dmeventd_prefix" = "xNONE"; then dmeventd_prefix="$prefix" fi if test "x$dmeventd_prefix" = "xNONE"; then dmeventd_prefix="" fi AC_ARG_WITH(dmeventd-path, [ --with-dmeventd-path=PATH dmeventd path [[EPREFIX/sbin/dmeventd]] ], [ AC_DEFINE_UNQUOTED(DMEVENTD_PATH,"$withval") ], [ AC_DEFINE_UNQUOTED(DMEVENTD_PATH,"$dmeventd_prefix/sbin/dmeventd") ]) fi ################################################################################ dnl -- which kernel interface to use (ioctl only) AC_MSG_CHECKING(for kernel interface choice) AC_ARG_WITH(interface, [ --with-interface=IFACE Choose kernel interface (ioctl) [[ioctl]] ], [ interface="$withval" ], [ interface=ioctl ]) if [[ "x$interface" != xioctl ]]; then AC_MSG_ERROR(--with-interface=ioctl required. fs no longer supported.) fi AC_MSG_RESULT($interface) ################################################################################ DM_LIB_VERSION="\"`cat VERSION_DM 2>/dev/null || echo Unknown`\"" AC_DEFINE_UNQUOTED(DM_LIB_VERSION, $DM_LIB_VERSION, [Library version]) DM_LIB_PATCHLEVEL=`cat VERSION_DM | $AWK -F '[[-. ]]' '{printf "%s.%s.%s",$1,$2,$3}'` LVM_VERSION="\"`cat VERSION 2>/dev/null || echo Unknown`\"" VER=`cat VERSION` LVM_RELEASE_DATE="\"`echo $VER | $SED 's/.* (//;s/).*//'`\"" VER=`echo "$VER" | $AWK '{print $1}'` LVM_RELEASE="\"`echo "$VER" | $AWK -F '-' '{print $2}'`\"" VER=`echo "$VER" | $AWK -F '-' '{print $1}'` LVM_MAJOR=`echo "$VER" | $AWK -F '.' '{print $1}'` LVM_MINOR=`echo "$VER" | $AWK -F '.' '{print $2}'` LVM_PATCHLEVEL=`echo "$VER" | $AWK -F '[[(.]]' '{print $3}'` LVM_LIBAPI=`echo "$VER" | $AWK -F '[[()]]' '{print $2}'` ################################################################################ AC_SUBST(APPLIB) AC_SUBST(BUILD_CMIRRORD) AC_SUBST(BUILD_DMEVENTD) AC_SUBST(CCS_CFLAGS) AC_SUBST(CCS_LIBS) AC_SUBST(CFLAGS) AC_SUBST(CFLOW_CMD) AC_SUBST(CLDFLAGS) AC_SUBST(CLDNOWHOLEARCHIVE) AC_SUBST(CLDWHOLEARCHIVE) AC_SUBST(CLUSTER) AC_SUBST(CLVMD) AC_SUBST(CMAN_CFLAGS) AC_SUBST(CMAN_LIBS) AC_SUBST(CMDLIB) AC_SUBST(CONFDB_CFLAGS) AC_SUBST(CONFDB_LIBS) AC_SUBST(CONFDIR) AC_SUBST(COPTIMISE_FLAG) AC_SUBST(CPG_CFLAGS) AC_SUBST(CPG_LIBS) AC_SUBST(CSCOPE_CMD) AC_SUBST(DEBUG) AC_SUBST(DEVMAPPER) AC_SUBST(DLM_CFLAGS) AC_SUBST(DLM_LIBS) AC_SUBST(DMEVENTD) AC_SUBST(DM_COMPAT) AC_SUBST(DM_DEVICE_GID) AC_SUBST(DM_DEVICE_MODE) AC_SUBST(DM_DEVICE_UID) AC_SUBST(DM_IOCTLS) AC_SUBST(DM_LIB_VERSION) AC_SUBST(DM_LIB_PATCHLEVEL) AC_SUBST(FSADM) AC_SUBST(GROUP) AC_SUBST(GULM_CFLAGS) AC_SUBST(GULM_LIBS) AC_SUBST(HAVE_LIBDL) AC_SUBST(HAVE_REALTIME) AC_SUBST(HAVE_SELINUX) AC_SUBST(INTL) AC_SUBST(INTL_PACKAGE) AC_SUBST(JOBS) AC_SUBST(LDDEPS) AC_SUBST(LIBS) AC_SUBST(LIB_SUFFIX) AC_SUBST(LOCALEDIR) AC_SUBST(LVM1) AC_SUBST(LVM1_FALLBACK) AC_SUBST(LVM_VERSION) AC_SUBST(LVM_LIBAPI) AC_SUBST(LVM_MAJOR) AC_SUBST(LVM_MINOR) AC_SUBST(LVM_PATCHLEVEL) AC_SUBST(LVM_RELEASE) AC_SUBST(LVM_RELEASE_DATE) AC_SUBST(MIRRORS) AC_SUBST(MSGFMT) AC_SUBST(OWNER) AC_SUBST(PKGCONFIG) AC_SUBST(POOL) AC_SUBST(QUORUM_CFLAGS) AC_SUBST(QUORUM_LIBS) AC_SUBST(SALCK_CFLAGS) AC_SUBST(SALCK_LIBS) AC_SUBST(SNAPSHOTS) AC_SUBST(STATICDIR) AC_SUBST(STATIC_LINK) AC_SUBST(UDEV_RULES) AC_SUBST([LIB_PTHREAD]) AC_SUBST(interface) AC_SUBST(kerneldir) AC_SUBST(missingkernel) AC_SUBST(kernelvsn) AC_SUBST(tmpdir) AC_SUBST(udev_prefix) AC_SUBST(udevdir) AC_SUBST(usrlibdir) AC_SUBST(usrsbindir) ################################################################################ dnl -- First and last lines should not contain files to generate in order to dnl -- keep utility scripts running properly AC_CONFIG_FILES([ Makefile make.tmpl daemons/Makefile daemons/clvmd/Makefile daemons/clogd/Makefile daemons/dmeventd/Makefile daemons/dmeventd/libdevmapper-event.pc daemons/dmeventd/plugins/Makefile daemons/dmeventd/plugins/mirror/Makefile daemons/dmeventd/plugins/snapshot/Makefile doc/Makefile include/Makefile lib/Makefile lib/format1/Makefile lib/format_pool/Makefile lib/locking/Makefile lib/mirror/Makefile lib/misc/lvm-version.h lib/snapshot/Makefile libdm/Makefile libdm/libdevmapper.pc liblvm/Makefile liblvm/liblvm2app.pc man/Makefile po/Makefile scripts/clvmd_init_red_hat scripts/Makefile test/Makefile test/api/Makefile tools/Makefile udev/Makefile ]) AC_OUTPUT if test x$ODIRECT != xyes; then AC_MSG_WARN(Warning: O_DIRECT disabled: low-memory pvmove may lock up) fi