Blame configure.ac

Packit 6ef888
Packit 6ef888
# Process this file with autoconf to produce a configure script.
Packit 6ef888
Packit 6ef888
AC_PREREQ([2.63])
Packit 6ef888
AC_INIT([gfs2-utils], [master], [cluster-devel@redhat.com])
Packit 6ef888
AM_INIT_AUTOMAKE([-Wno-portability])
Packit 6ef888
AM_SILENT_RULES([yes])
Packit 6ef888
LT_PREREQ([2.2.6])
Packit 6ef888
LT_INIT
Packit 6ef888
Packit 6ef888
AC_CONFIG_MACRO_DIR([m4])
Packit 6ef888
AC_CONFIG_SRCDIR([gfs2/libgfs2/libgfs2.h])
Packit 6ef888
AC_CONFIG_HEADERS([make/clusterautoconfig.h])
Packit 6ef888
Packit 6ef888
AC_CANONICAL_HOST
Packit 6ef888
AC_PROG_LIBTOOL
Packit 6ef888
Packit 6ef888
AC_LANG([C])
Packit 6ef888
Packit 6ef888
#i18n support
Packit 6ef888
AM_GNU_GETTEXT([external])
Packit 6ef888
AM_GNU_GETTEXT_VERSION([0.18])
Packit 6ef888
Packit 6ef888
# Sanitize path
Packit 6ef888
Packit 6ef888
if test "$prefix" = "NONE"; then
Packit 6ef888
	prefix="/usr"
Packit 6ef888
	if test "$localstatedir" = "\${prefix}/var"; then
Packit 6ef888
		localstatedir="/var"
Packit 6ef888
	fi
Packit 6ef888
	if test "$sysconfdir" = "\${prefix}/etc"; then
Packit 6ef888
		sysconfdir="/etc"
Packit 6ef888
	fi
Packit 6ef888
	if test "$libdir" = "\${exec_prefix}/lib"; then
Packit 6ef888
		if test -e /usr/lib64; then
Packit 6ef888
			libdir="/usr/lib64"
Packit 6ef888
		else
Packit 6ef888
			libdir="/usr/lib"
Packit 6ef888
		fi
Packit 6ef888
	fi
Packit 6ef888
fi
Packit 6ef888
Packit 6ef888
case $exec_prefix in
Packit 6ef888
  NONE)   exec_prefix=$prefix;;
Packit 6ef888
  prefix) exec_prefix=$prefix;;
Packit 6ef888
esac
Packit 6ef888
Packit 6ef888
# Checks for programs.
Packit 6ef888
Packit 6ef888
# check stolen from gnulib/m4/gnu-make.m4
Packit 6ef888
if ! ${MAKE-make} --version /cannot/make/this >/dev/null 2>&1; then
Packit 6ef888
	AC_MSG_ERROR([GNU make was not found but is required.])
Packit 6ef888
fi
Packit 6ef888
Packit 6ef888
AC_PROG_CC
Packit 6ef888
AM_PROG_CC_C_O
Packit 6ef888
AC_PROG_LN_S
Packit 6ef888
AC_PROG_INSTALL
Packit 6ef888
AC_PROG_MAKE_SET
Packit 6ef888
AC_PROG_LEX
Packit 6ef888
test "$LEX" != "flex" && AC_MSG_ERROR([flex not found])
Packit 6ef888
AC_CHECK_PROG([YACC], [bison], [bison -y])
Packit 6ef888
test x"$YACC" = x && AC_MSG_ERROR([bison not found])
Packit 6ef888
Packit 6ef888
## local helper functions
Packit 6ef888
Packit 6ef888
# this function checks if CC support options passed as
Packit 6ef888
# args. Global CFLAGS are ignored during this test.
Packit 6ef888
cc_supports_flag() {
Packit 6ef888
	local CFLAGS="$@"
Packit 6ef888
	AC_MSG_CHECKING([whether $CC supports $CFLAGS])
Packit 6ef888
	AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(){return 0;}])],
Packit 6ef888
			  [RC=0; AC_MSG_RESULT([yes])],
Packit 6ef888
			  [RC=1; AC_MSG_RESULT([no])])
Packit 6ef888
	return $RC
Packit 6ef888
}
Packit 6ef888
Packit 6ef888
# this function tests if a library has a certain function
Packit 6ef888
# by using AC_CHECK_LIB but restores the original LIBS global
Packit 6ef888
# envvar. This is required to avoid libtool to link everything
Packit 6ef888
# with everything.
Packit 6ef888
check_lib_no_libs() {
Packit 6ef888
	AC_CHECK_LIB([$1], [$2],,
Packit 6ef888
		     [AC_MSG_ERROR([Unable to find $1 library])])
Packit 6ef888
	LIBS=$ac_check_lib_save_LIBS
Packit 6ef888
}
Packit 6ef888
Packit 6ef888
# local options
Packit 6ef888
AC_ARG_ENABLE([debug],
Packit 6ef888
	AC_HELP_STRING([--enable-debug],[enable debug build [default=no]]),
Packit 6ef888
	[], [enable_debug="no"])
Packit 6ef888
AC_ARG_ENABLE([gcov],
Packit 6ef888
	AC_HELP_STRING([--enable-gcov],[enable coverage instrumentation [default=no]]),
Packit 6ef888
	[], [enable_gcov="no"])
Packit 6ef888
AC_ARG_ENABLE([gprof],
Packit 6ef888
	AC_HELP_STRING([--enable-gprof],[enable profiling instrumentation [default=no]]),
Packit 6ef888
	[], [enable_gprof="no"])
Packit 6ef888
Packit 6ef888
Packit 6ef888
# We use the Check framework for unit tests
Packit 6ef888
PKG_CHECK_MODULES([check], [check >= 0.9.8],
Packit 6ef888
                  [have_check=yes],
Packit 6ef888
                  [have_check=no])
Packit 6ef888
AM_CONDITIONAL([HAVE_CHECK], [test "x$have_check" = "xyes"])
Packit 6ef888
Packit 6ef888
PKG_CHECK_MODULES([zlib],[zlib])
Packit 6ef888
PKG_CHECK_MODULES([blkid],[blkid])
Packit 6ef888
PKG_CHECK_MODULES([uuid],[uuid],
Packit 6ef888
                  [have_uuid=yes],
Packit 6ef888
                  [have_uuid=no])
Packit 6ef888
Packit 6ef888
# old versions of ncurses don't ship pkg-config files
Packit 6ef888
PKG_CHECK_MODULES([ncurses],[ncurses],,
Packit 6ef888
		  [check_lib_no_libs ncurses printw])
Packit 6ef888
Packit 6ef888
if test -z "$ncurses_CFLAGS"  && test -z "$ncurses_LIBS"; then
Packit 6ef888
	ncurses_LIBS=-lncurses
Packit 6ef888
fi
Packit 6ef888
Packit 6ef888
AC_ARG_WITH([udevdir],
Packit 6ef888
            AS_HELP_STRING([--with-udevdir=DIR],
Packit 6ef888
                           [udev directory containing rules.d [default=${prefix}/lib/udev]]),
Packit 6ef888
            [], [with_udevdir=\${prefix}/lib/udev])
Packit 6ef888
AC_SUBST([udevdir], [$with_udevdir])
Packit 6ef888
Packit 6ef888
# Checks for header files.
Packit 6ef888
AC_CHECK_HEADERS([fcntl.h libintl.h limits.h locale.h mntent.h stddef.h sys/file.h sys/ioctl.h sys/mount.h sys/time.h sys/vfs.h syslog.h termios.h])
Packit 6ef888
AC_CHECK_HEADER([linux/fs.h], [], [AC_MSG_ERROR([Unable to find linux/fs.h])])
Packit 6ef888
AC_CHECK_HEADER([linux/types.h], [], [AC_MSG_ERROR([Unable to find linux/types.h])])
Packit 6ef888
AC_CHECK_HEADER([linux/limits.h], [], [AC_MSG_ERROR([Unable to find linux/limits.h])])
Packit 6ef888
AC_CHECK_HEADER([linux/gfs2_ondisk.h], [], [AC_MSG_ERROR([Unable to find linux/gfs2_ondisk.h])])
Packit 6ef888
AC_CHECK_MEMBER([struct gfs2_sb.sb_uuid], [sb_has_uuid=yes], [sb_has_uuid=no],
Packit 6ef888
                [[#include <linux/gfs2_ondisk.h>]])
Packit 6ef888
AC_CHECK_MEMBER([struct gfs2_leaf.lf_inode],[AC_DEFINE([GFS2_HAS_LEAF_HINTS],[],[Leaf block hints])],
Packit 6ef888
                [], [[#include <linux/gfs2_ondisk.h>]])
Packit 6ef888
AC_CHECK_MEMBER([struct gfs2_dirent.de_rahead],[AC_DEFINE([GFS2_HAS_DE_RAHEAD],[],[Dirent readahead field])],
Packit 6ef888
                [], [[#include <linux/gfs2_ondisk.h>]])
Packit 6ef888
AC_CHECK_MEMBER([struct gfs2_dirent.de_cookie],[AC_DEFINE([GFS2_HAS_DE_COOKIE],[],[Dirent cookie field])],
Packit 6ef888
                [], [[#include <linux/gfs2_ondisk.h>]])
Packit 6ef888
AC_CHECK_MEMBER([struct gfs2_rgrp.rg_skip],[AC_DEFINE([GFS2_HAS_RG_SKIP],[],[Next resource group pointer])],
Packit 6ef888
                [], [[#include <linux/gfs2_ondisk.h>]])
Packit 6ef888
AC_CHECK_MEMBER([struct gfs2_rgrp.rg_data0],[AC_DEFINE([GFS2_HAS_RG_RI_FIELDS],[],[Resource group fields duplicated from the rindex])],
Packit 6ef888
                [], [[#include <linux/gfs2_ondisk.h>]])
Packit 6ef888
AC_CHECK_MEMBER([struct gfs2_log_header.lh_crc],[AC_DEFINE([GFS2_HAS_LH_V2],[],[v2 log header format])],
Packit 6ef888
                [], [[#include <linux/gfs2_ondisk.h>]])
Packit 6ef888
Packit 6ef888
# libuuid is only required if struct gfs2_sb.sb_uuid exists
Packit 6ef888
if test "$sb_has_uuid" = "yes" -a "$have_uuid" = "no"; then
Packit 6ef888
	AC_MSG_ERROR([libuuid is required for this version of gfs2])
Packit 6ef888
fi
Packit 6ef888
Packit 6ef888
# *FLAGS handling
Packit 6ef888
ENV_CFLAGS="$CFLAGS"
Packit 6ef888
ENV_CPPFLAGS="$CPPFLAGS"
Packit 6ef888
ENV_LDFLAGS="$LDFLAGS"
Packit 6ef888
Packit 6ef888
# debug build stuff
Packit 6ef888
if test "x${enable_debug}" = xyes; then
Packit 6ef888
	AC_DEFINE_UNQUOTED([DEBUG], [1], [Compiling Debugging code])
Packit 6ef888
	OPT_CFLAGS="-O0"
Packit 6ef888
	OPT_CPPFLAGS=""
Packit 6ef888
else
Packit 6ef888
	OPT_CFLAGS="-O2"
Packit 6ef888
	OPT_CPPFLAGS="-D_FORTIFY_SOURCE=2"
Packit 6ef888
fi
Packit 6ef888
Packit 6ef888
# gdb flags
Packit 6ef888
if test "x${GCC}" = xyes; then
Packit 6ef888
	GDB_FLAGS="-ggdb3"
Packit 6ef888
else
Packit 6ef888
	GDB_FLAGS="-g"
Packit 6ef888
fi
Packit 6ef888
Packit 6ef888
# gcov works without optimization
Packit 6ef888
if test "x${enable_gcov}" = xyes; then
Packit 6ef888
	GCOV_CFLAGS="-fprofile-arcs -ftest-coverage"
Packit 6ef888
	if ! cc_supports_flag $GCOV_CFLAGS; then
Packit 6ef888
		AC_MSG_ERROR([your compiler does not support coverage instrumentation])
Packit 6ef888
	fi
Packit 6ef888
	if test "x${enable_debug}" = xyes; then
Packit 6ef888
		enable_debug="no (gcov enabled)"
Packit 6ef888
	fi
Packit 6ef888
	OPT_CFLAGS="-O0 $GCOV_CFLAGS"
Packit 6ef888
fi
Packit 6ef888
Packit 6ef888
if test "x${enable_gprof}" = xyes; then
Packit 6ef888
	GPROF_CFLAGS="-pg"
Packit 6ef888
	if ! cc_supports_flag $GPROF_CFLAGS; then
Packit 6ef888
		AC_MSG_ERROR([your compiler does not support gprof instrumentation])
Packit 6ef888
	fi
Packit 6ef888
	OPT_CFLAGS="$OPT_CFLAGS $GPROF_CFLAGS"
Packit 6ef888
fi
Packit 6ef888
Packit 6ef888
# extra warnings
Packit 6ef888
EXTRA_WARNINGS=""
Packit 6ef888
Packit 6ef888
WARNLIST="
Packit 6ef888
	all
Packit 6ef888
	shadow
Packit 6ef888
	missing-prototypes
Packit 6ef888
	missing-declarations
Packit 6ef888
	strict-prototypes
Packit 6ef888
	declaration-after-statement
Packit 6ef888
	pointer-arith
Packit 6ef888
	write-strings
Packit 6ef888
	cast-align
Packit 6ef888
	bad-function-cast
Packit 6ef888
	missing-format-attribute
Packit 6ef888
	format=2
Packit 6ef888
	format-security
Packit 6ef888
	format-nonliteral
Packit 6ef888
	no-long-long
Packit 6ef888
	no-strict-aliasing
Packit 6ef888
	"
Packit 6ef888
Packit 6ef888
for j in $WARNLIST; do
Packit 6ef888
	if cc_supports_flag -W$j; then
Packit 6ef888
		EXTRA_WARNINGS="$EXTRA_WARNINGS -W$j";
Packit 6ef888
	fi
Packit 6ef888
done
Packit 6ef888
Packit 6ef888
CFLAGS="$ENV_CFLAGS $OPT_CFLAGS $GDB_FLAGS $EXTRA_WARNINGS $WERROR_CFLAGS"
Packit 6ef888
CPPFLAGS="-I\$(top_builddir)/make -I\$(top_srcdir)/make -I. $ENV_CPPFLAGS $OPT_CPPFLAGS"
Packit 6ef888
LDFLAGS="$ENV_LDFLAGS"
Packit 6ef888
Packit 6ef888
AC_CONFIG_TESTDIR([tests], [gfs2/libgfs2:gfs2/mkfs:gfs2/fsck:gfs2/edit:gfs2/convert:gfs2/tune:tests])
Packit 6ef888
AC_CONFIG_FILES([Makefile
Packit 6ef888
		 gfs2/Makefile
Packit 6ef888
		 gfs2/include/Makefile
Packit 6ef888
		 gfs2/libgfs2/Makefile
Packit 6ef888
		 gfs2/convert/Makefile
Packit 6ef888
		 gfs2/edit/Makefile
Packit 6ef888
		 gfs2/fsck/Makefile
Packit 6ef888
		 gfs2/mkfs/Makefile
Packit 6ef888
		 gfs2/tune/Makefile
Packit 6ef888
		 gfs2/man/Makefile
Packit 6ef888
		 gfs2/scripts/Makefile
Packit 6ef888
		 gfs2/glocktop/Makefile
Packit 6ef888
		 doc/Makefile
Packit 6ef888
		 tests/Makefile
Packit 6ef888
		 tests/atlocal
Packit 6ef888
		 po/Makefile.in
Packit 6ef888
		 ])
Packit 6ef888
Packit 6ef888
AC_OUTPUT
Packit 6ef888
Packit 6ef888
echo
Packit 6ef888
echo "  Configure summary"
Packit 6ef888
echo " ==================="
Packit 6ef888
echo " prefix            : $prefix"
Packit 6ef888
echo " exec_prefix       : $exec_prefix"
Packit 6ef888
echo " libdir            : $libdir"
Packit 6ef888
echo " sbindir           : $sbindir"
Packit 6ef888
echo " udevdir           : $udevdir"
Packit 6ef888
echo " ------------------"
Packit 6ef888
echo " debug build       : $enable_debug"
Packit 6ef888
echo " C unit tests      : $have_check"
Packit 6ef888
echo " gprof build       : $enable_gprof"
Packit 6ef888
echo " gcov build        : $enable_gcov"
Packit 6ef888
echo
Packit 6ef888
echo "Now run 'make' to build and 'make check' to run tests"