Blame configure.ac

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