liberasurecode/configure.ac

303 lines
9.8 KiB
Plaintext

################################################################################
# Standard Stuff
################################################################################
AC_PREREQ([2.61])
AC_INIT(liberasurecode, [-],
[tusharsg AT gmail DOT com, kmgreen2 AT gmail DOT com],
[], [https://github.com/openstack/liberasurecode])
AM_MAINTAINER_MODE([disable])
m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
AM_SILENT_RULES([yes])
# Get release version
AC_PATH_PROG(SED, sed, "", $PATH:/bin:/usr/bin:/usr/local/bin)
if test -z "$SED"; then
AC_MSG_WARN([sed was not found])
fi
VERINC="${srcdir}/include/erasurecode/erasurecode_version.h"
AC_MSG_CHECKING([liberasurecode API version])
LIBERASURECODE_VERSION_MAJOR=`$SED -ne 's/^#define _MAJOR *\([0-9]*\)/\1/p' ${VERINC} 2>/dev/null`
AC_MSG_RESULT($LIBERASURECODE_VERSION_MAJOR)
if test -z "$LIBERASURECODE_VERSION_MAJOR"; then
AC_MSG_ERROR([API version number can not be retrieved from $VERINC])
fi
LIBERASURECODE_VERSION_MINOR=`$SED -ne 's/^#define _MINOR *\([0-9]*\)/\1/p' ${VERINC} 2>/dev/null`
LIBERASURECODE_VERSION_MICRO=`$SED -ne 's/^#define _REV *\([0-9]*\)/\1/p' ${VERINC} 2>/dev/null`
LIBERASURECODE_VERSION=${LIBERASURECODE_VERSION_MAJOR}.${LIBERASURECODE_VERSION_MINOR}.${LIBERASURECODE_VERSION_MICRO}
LIBERASURECODE_API_VERSION=${LIBERASURECODE_VERSION_MAJOR}
LIBERASURECODE_VERSION_INFO=$((${LIBERASURECODE_VERSION_MAJOR}+${LIBERASURECODE_VERSION_MINOR})):${LIBERASURECODE_VERSION_MICRO}:${LIBERASURECODE_VERSION_MINOR}
AC_GNU_SOURCE
AM_INIT_AUTOMAKE([subdir-objects])
LT_INIT # libtool
AC_PROG_LN_S
dnl Compiling with per-target flags requires AM_PROG_CC_C_O.
AC_PROG_CC
AM_PROG_CC_C_O
AC_PROG_LIBTOOL
AC_PROG_CXX
AC_PROG_INSTALL
AC_PROG_MAKE_SET
PKG_PROG_PKG_CONFIG
m4_ifndef([PKG_INSTALLDIR],[
# PKG_INSTALLDIR(DIRECTORY)
# -------------------------
# Substitutes the variable pkgconfigdir as the location where a module
# should install pkg-config .pc files. By default the directory is
# $libdir/pkgconfig, but the default can be changed by passing
# DIRECTORY. The user can override through the --with-pkgconfigdir
# parameter.
AC_DEFUN([PKG_INSTALLDIR],
[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
m4_pushdef([pkg_description],
[pkg-config installation directory @<:@]pkg_default[@:>@])
AC_ARG_WITH([pkgconfigdir],
[AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
[with_pkgconfigdir=]pkg_default)
AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
m4_popdef([pkg_default])
m4_popdef([pkg_description])
]) dnl PKG_INSTALLDIR
])
PKG_INSTALLDIR
AC_SUBST(LIBERASURECODE_VERSION_MAJOR)
AC_SUBST(LIBERASURECODE_API_VERSION)
AC_SUBST(LIBERASURECODE_VERSION_MINOR)
AC_SUBST(LIBERASURECODE_VERSION_MICRO)
AC_SUBST(LIBERASURECODE_VERSION)
AC_SUBST(LIBERASURECODE_VERSION_INFO)
AC_SUBST([PACKAGE_VERSION], LIBERASURECODE_VERSION)
AC_CONFIG_HEADER(include/config_liberasurecode.h)
AX_EXT()
################################################################################
# System Headers
################################################################################
dnl Check for C library headers
AC_HEADER_STDC
AC_CHECK_HEADERS(sys/types.h stdio.h stdlib.h stddef.h stdarg.h \
malloc.h memory.h string.h strings.h inttypes.h \
stdint.h ctype.h iconv.h signal.h dlfcn.h \
pthread.h unistd.h limits.h errno.h syslog.h)
AC_CHECK_FUNCS(malloc calloc realloc free openlog)
#################################################################################
# Debug/coverage Options
#################################################################################
AC_ARG_ENABLE([werror],
[ --disable-werror Dont treat compilation warnings as failures],
[case "${enableval}" in
yes) werror=true ;;
no) werror=false ;;
*) AC_MSG_ERROR([bad value ${enableval} for --disable-werror]) ;;
esac],[werror=true])
if test x$werror = xtrue ; then
werror_flag="-Werror"
else
werror_flag=""
fi
AC_ARG_ENABLE([debug],
[ --enable-debug Turn on debugging],
[case "${enableval}" in
yes) debug=true ;;
no) debug=false ;;
*) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
esac],[debug=false])
if test x$debug = xtrue ; then
DEBUG=1
CXXFLAGS=""
CFLAGS="-O0 -ggdb -g3 ${werror_flag} -D_GNU_SOURCE=1 -Wall -pedantic -std=c99 ${CFLAGS}"
else
DEBUG=0
CXXFLAGS=""
CFLAGS="-O2 -g ${werror_flag} -D_GNU_SOURCE=1 -Wall -pedantic -std=c99 ${CFLAGS}"
fi
AC_ARG_ENABLE([gcov],
[ --enable-gcov Turn on code coverage],
[case "${enableval}" in
yes) gcov=true ;;
no) gcov=false ;;
*) AC_MSG_ERROR([bad value ${enableval} for --enable-gcov]) ;;
esac],[gcov=false])
if test x$gcov = xtrue ; then
AC_CHECK_LIB(gcov, main,
[
GCOV_FLAGS="-fprofile-arcs -ftest-coverage"
GCOV_LDFLAGS="-lgcov"
CXXFLAGS=""
CFLAGS=""
], [
AC_MSG_ERROR([failed to locate gcov library])
])
fi
AC_SUBST(GCOV_FLAGS)
AC_SUBST(GCOV_LDFLAGS)
dnl Expand the sources and objects needed to build the library
AC_SUBST(ac_aux_dir)
AC_SUBST(OBJECTS)
dnl Do CPUID and associated compiler flag checks
dnl but allow to disable all of this in order to build portable binaries
AC_ARG_ENABLE([mmi], [ --disable-mmi do not use host-specific instructions],
[case "${enableval}" in
yes) mmi=true ;;
no) mmi=false ;;
*) AC_MSG_ERROR([bad value ${enableval} for --disable-mmi]) ;;
esac],[mmi=true])
if test x$mmi = xtrue ; then
SUPPORTED_FLAGS=""
$CC - -E -mmmx </dev/null >/dev/null 2>&1
if test $? = 0; then
SUPPORTED_FLAGS="-mmmx"
AC_MSG_RESULT([$CC supports -mmmx])
fi
$CC - -E -msse </dev/null >/dev/null 2>&1
if test $? = 0; then
SUPPORTED_FLAGS="$SUPPORTED_FLAGS -msse"
AC_MSG_RESULT([$CC supports -msse])
fi
$CC - -E -msse2 </dev/null >/dev/null 2>&1
if test $? = 0; then
SUPPORTED_FLAGS="$SUPPORTED_FLAGS -msse2"
AC_MSG_RESULT([$CC supports -msse2])
fi
$CC - -E -msse3 </dev/null >/dev/null 2>&1
if test $? = 0; then
SUPPORTED_FLAGS="$SUPPORTED_FLAGS -msse3"
AC_MSG_RESULT([$CC supports -msse3])
fi
$CC - -E -mssse3 </dev/null >/dev/null 2>&1
if test $? = 0; then
SUPPORTED_FLAGS="$SUPPORTED_FLAGS -mssse3"
AC_MSG_RESULT([$CC supports -mssse3])
fi
$CC - -E -msse4.1 </dev/null >/dev/null 2>&1
if test $? = 0; then
SUPPORTED_FLAGS="$SUPPORTED_FLAGS -msse4.1"
AC_MSG_RESULT([$CC supports -msse4.1])
fi
$CC - -E -msse4.2 </dev/null >/dev/null 2>&1
if test $? = 0; then
SUPPORTED_FLAGS="$SUPPORTED_FLAGS -msse4.2"
AC_MSG_RESULT([$CC supports -msse4.2])
fi
$CC - -E -mavx </dev/null >/dev/null 2>&1
if test $? = 0; then
SUPPORTED_FLAGS="$SUPPORTED_FLAGS -mavx"
AC_MSG_RESULT([$CC supports -mavx])
fi
# Detect the SIMD features supported by both the compiler and the CPU
SIMD_FLAGS=""
cat "$srcdir/get_flags_from_cpuid.c" \
| sed "s/FLAGSFROMAUTOCONF/${SUPPORTED_FLAGS}/" \
| $CC -x c -g - -o get_flags_from_cpuid
if [[ -e ./get_flags_from_cpuid ]]; then
chmod 755 get_flags_from_cpuid
./get_flags_from_cpuid
rm ./get_flags_from_cpuid
if [[ -e compiler_flags ]]; then
SIMD_FLAGS=`cat compiler_flags`
rm -f compiler_flags
else
AC_MSG_WARN([Could not run the CPUID detection program])
fi
else
AC_MSG_WARN([Could not compile the CPUID detection program])
fi
AC_MSG_RESULT([Generating with SIMD flags: $SIMD_FLAGS])
CFLAGS="$CFLAGS $SIMD_FLAGS"
fi
# Certain code may be dependent on 32 vs. 64-bit arch, so add a
# flag for 64-bit
AC_CHECK_SIZEOF([long])
if test "$ac_cv_sizeof_long" -eq 8; then
CFLAGS="$CFLAGS -DARCH_64"
AC_MSG_RESULT([Adding -DARCH_64 to CFLAGS])
fi
#################################################################################
# Doxygen Documentation
#################################################################################
AC_CHECK_PROG(DOXYGEN, doxygen, true, false)
AM_CONDITIONAL(HAVE_DOXYGEN, $DOXYGEN)
AC_SUBST(HAVE_DOXYGEN)
dnl Let people disable the doxygen stuff.
AC_ARG_ENABLE(doxygen, [ --enable-doxygen use doxygen to build documentation (default=auto)],
enable_doxygen="$enableval",
enable_doxygen=auto)
if test x$enable_doxygen = xauto ; then
if test x$DOXYGEN = xtrue ; then
enable_doxygen=yes
else
enable_doxygen=no
fi
fi
dnl NOTE: We need to use a separate automake conditional for this
dnl to make this work with the tarballs.
AM_CONDITIONAL(ENABLE_DOXYGEN, test x$enable_doxygen = xyes)
################################################################################
# Output Files
################################################################################
AC_CONFIG_FILES([\
src/builtin/null_code/Makefile \
src/builtin/xor_codes/Makefile \
src/builtin/rs_vand/Makefile \
src/Makefile \
test/Makefile \
doc/Makefile \
Makefile \
erasurecode.pc \
Xorcode.pc
])
AC_CONFIG_FILES([\
erasurecode-${LIBERASURECODE_API_VERSION}.pc:erasurecode.pc], [],
[LIBERASURECODE_API_VERSION='$LIBERASURECODE_API_VERSION'])
AM_CONDITIONAL([HAVE_DOXYGEN], [test -n "$DOXYGEN"])
AM_COND_IF([HAVE_DOXYGEN],
[AC_CONFIG_FILES([doc/doxygen.cfg])])
AC_OUTPUT
AC_MSG_NOTICE([
$PACKAGE configured:
--------------------------
version: $LIBERASURECODE_VERSION
interface revision: $LIBERASURECODE_VERSION_INFO
generate documentation: $DOXYGEN
installation prefix: $prefix
CFLAGS: $CXXFLAGS $CFLAGS
LDFLAGS: $LIBS $LDFLAGS
type "make" followed by "make install" as root.
$DOXMAKE
])