X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=configure.ac;h=467fe718eda6906c591e5f5316393b7d29f93c31;hb=fd6e74b5cec5a9a99c54a92316b0630bf5cbf8ec;hp=76c28ede510e74b23e025771fb02d594cfdc2516;hpb=311bd0fafe1da7b5cc770a2ff4fac5472a801a40;p=m6w6%2Flibmemcached diff --git a/configure.ac b/configure.ac index 76c28ede..467fe718 100644 --- a/configure.ac +++ b/configure.ac @@ -1,21 +1,18 @@ -AC_INIT(src/memcat.c) -AC_CONFIG_AUX_DIR(config) -AM_CONFIG_HEADER(include/libmemcached_config.h) -AC_CANONICAL_SYSTEM - -MEMCACHED_LIBRARY_NAME=libmemcached - -#release versioning -MEMCACHED_MAJOR_VERSION=0 -MEMCACHED_MINOR_VERSION=12 -MEMCACHED_MICRO_VERSION=0 +# Gearman server and library +# Copyright (C) 2008 Brian Aker +# All rights reserved. +# +# Use and distribution licensed under the BSD license. See +# the COPYING file in this directory for full text. -#API version -MEMCACHED_API_VERSION=1.0 -AC_SUBST(MEMCACHED_API_VERSION) +AC_PREREQ(2.59) +AC_INIT([libmemcached],[0.30],[http://tangent.org/552/libmemcached.html]) +AC_CONFIG_SRCDIR([libmemcached/memcached.c]) +AC_CONFIG_AUX_DIR(config) +AM_CONFIG_HEADER(libmemcached/libmemcached_config.h) #shared library versioning -MEMCACHED_LIBRARY_VERSION=1:2:0 +MEMCACHED_LIBRARY_VERSION=2:0:0 # | | | # +------+ | +---+ # | | | @@ -26,47 +23,312 @@ MEMCACHED_LIBRARY_VERSION=1:2:0 # | +- increment if source code has changed # | set to zero if current is incremented # +- increment if interfaces have been added, removed or changed - AC_SUBST(MEMCACHED_LIBRARY_VERSION) +MEMCACHEDUTIL_LIBRARY_VERSION=0:0:0 +AC_SUBST(MEMCACHEDUTIL_LIBRARY_VERSION) -PACKAGE=$MEMCACHED_LIBRARY_NAME -AC_SUBST(MEMCACHED_LIBRARY_NAME) +# Setting CFLAGS here prevents AC_CANONICAL_TARGET from injecting them +SAVE_CFLAGS=${CFLAGS} +SAVE_CXXFLAGS=${CXXFLAGS} +CFLAGS= +CXXFLAGS= -MEMCACHED_VERSION=$MEMCACHED_MAJOR_VERSION.$MEMCACHED_MINOR_VERSION.$MEMCACHED_MICRO_VERSION -MEMCACHED_RELEASE=$MEMCACHED_MAJOR_VERSION.$MEMCACHED_MINOR_VERSION -AC_SUBST(MEMCACHED_RELEASE) -AC_SUBST(MEMCACHED_VERSION) +AC_CANONICAL_TARGET -VERSION=$MEMCACHED_RELEASE +CFLAGS=${SAVE_CFLAGS} +CXXFLAGS=${SAVE_CXXFLAGS} -AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define) +AM_INIT_AUTOMAKE([-Wall -Werror nostdinc subdir-objects]) + +if test "x${enable_dependency_tracking}" = "x" +then + enable_dependency_tracking=yes +fi + +if test -d "${srcdir}/.bzr" +then + building_from_bzr=yes +else + building_from_bzr=no +fi AC_PROG_CC +AC_PROG_CC_C99 +AM_PROG_CC_STDC AC_PROG_CXX + +ACX_USE_SYSTEM_EXTENSIONS + +AC_PROG_CPP +AM_PROG_CC_C_O + +AC_C_BIGENDIAN +AC_C_CONST +AC_HEADER_TIME +AC_TYPE_SIZE_T +AC_TYPE_SSIZE_T +AC_FUNC_MALLOC +AC_FUNC_REALLOC + +AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"]) + +# We use libtool AC_PROG_LIBTOOL -AM_SANITY_CHECK -LIBTOOL="$LIBTOOL --preserve-dup-deps" -AC_SUBST(LIBTOOL)dnl -AC_LANG_CPLUSPLUS -sinclude(config/debug.m4) -sinclude(config/dtrace.m4) +AC_MSG_CHECKING("C Compiler version") +if test "$GCC" = "yes" +then + CC_VERSION=`$CC --version | sed 1q` +elif test "$SUNCC" = "yes" +then + CC_VERSION=`$CC -V 2>&1 | sed 1q` +else + CC_VERSION="" +fi +AC_MSG_RESULT("$CC_VERSION") +AC_SUBST(CC_VERSION) -# We only support GCC and Sun's forte at the moment +# libmemcached versioning when linked with GNU ld. +if test "$lt_cv_prog_gnu_ld" = "yes" +then + LD_VERSION_SCRIPT="-Wl,--version-script=\$(top_srcdir)/libmemcached/libmemcached.ver" + LD_UTIL_VERSION_SCRIPT="-Wl,--version-script=\$(top_srcdir)/libmemcachedutil/libmemcachedutil.ver" +fi +AC_SUBST(LD_VERSION_SCRIPT) +AC_SUBST(LD_UTIL_VERSION_SCRIPT) + +# Use the C99 enabling flag found earlier +AS_IF([test "$ac_cv_prog_cc_c99" != "no"], + [CFLAGS="$ac_cv_prog_cc_c99 ${CFLAGS}"]) + +# Build optimized or debug version ? +# First check for gcc and g++ if test "$GCC" = "yes" then - if test "$ENABLE_DEBUG" = "yes" - then - CFLAGS="-Wall -ggdb -DHAVE_DEBUG" - else - CFLAGS="-Wall -O3" - fi + CFLAGS="-ggdb3 ${CFLAGS}" + DEBUG_CFLAGS="-O0" + OPTIMIZE_CFLAGS="-O3" +fi +if test "x$SUNCC" = "xyes" +then + CFLAGS="-g -mt ${CFLAGS}" + CXXFLAGS="-g -mt -xlang=c99 ${CXXFLAGS}" + OPTIMIZE_CFLAGS="-xO4 -xlibmil -xdepend -Xa -xstrconst" +fi + +SOLARIS_64BIT + +#-------------------------------------------------------------------- +# Check for libpthread +#-------------------------------------------------------------------- + +ACX_PTHREAD(,AC_MSG_ERROR(could not find libpthread)) +LIBS="${PTHREAD_LIBS} ${LIBS}" +CFLAGS="${PTHREAD_CFLAGS} ${CFLAGS}" +CC="$PTHREAD_CC" + + +AC_SEARCH_LIBS(getopt_long, gnugetopt) +AC_SEARCH_LIBS(socket, socket) +AC_SEARCH_LIBS(gethostbyname, nsl) + +save_LIBS="$LIBS" +LIBS="$LIBS -lm" +AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include + ]],[[ + float f= floorf((float) 1.0); + ]], + [LIBM="-lm"],[LIBM=""])]) + +AC_SUBST(LIBM) +LIBS="$save_LIBS" + +AC_SEARCH_LIBS(floorf, m) + +DETECT_BYTEORDER +ENABLE_UTILLIB +ENABLE_DTRACE +SETSOCKOPT_SANITY +ENABLE_HSIEH_HASH + +sinclude(m4/pod2man.m4) +sinclude(m4/protocol_binary.m4) +sinclude(m4/memcached.m4) + +dnl TODO: Remove this define once we are using 2.61 across the board. +# AX_HEADER_ASSERT +# ---------------- +# Check whether to enable assertions. +AC_DEFUN([AX_HEADER_ASSERT], +[ + AC_MSG_CHECKING([whether to enable assertions]) + AC_ARG_ENABLE([assert], + [AS_HELP_STRING([--disable-assert], + [Turn off assertions])], + [ac_cv_assert="no"], + [ac_cv_assert="yes"]) + AC_MSG_RESULT([$ac_cv_assert]) +]) +AX_HEADER_ASSERT + + +AC_ARG_WITH([debug], + [AS_HELP_STRING([--with-debug], + [Add debug code/turns off optimizations (yes|no) @<:@default=no@:>@])], + [with_debug=$withval], + [with_debug=no]) +if test "$with_debug" = "yes" +then + # Debugging. No optimization. + CFLAGS="${DEBUG_CFLAGS} -DDEBUG ${CFLAGS}" else - CFLAGS="-Xa -xstrconst -mt -D_FORTEC_ -fast -m64" - LDFLAGS="-lsocket -lnsl" - DTRACEFLAGS="-64" + # Optimized version. No debug + CFLAGS="${OPTIMIZE_CFLAGS} ${CFLAGS}" fi -AC_C_CONST -AC_TYPE_SIZE_T -AC_OUTPUT(Makefile src/Makefile tests/Makefile docs/Makefile lib/Makefile include/Makefile support/Makefile support/libmemcached.pc support/libmemcached.spec) +AC_ARG_ENABLE([profiling], + [AS_HELP_STRING([--enable-profiling], + [Toggle profiling @<:@default=off@:>@])], + [ac_profiling="$enableval"], + [ac_profiling="no"]) + +AC_ARG_ENABLE([coverage], + [AS_HELP_STRING([--enable-coverage], + [Toggle coverage @<:@default=off@:>@])], + [ac_coverage="$enableval"], + [ac_coverage="no"]) + +dnl We can't do this warning, so turn off +W_STRICT_ALIASING="-Wno-strict-aliasing" + +if test "$GCC" = "yes" +then + + + AS_IF([test "$ac_profiling" = "yes"], + [CC_PROFILING="-pg"]) + + AS_IF([test "$ac_coverage" = "yes"], + [CC_COVERAGE="-fprofile-arcs -ftest-coverage"]) + + AS_IF([test "$building_from_bzr" = "yes"], + [W_FAIL="-Werror"]) + + BASE_WARNINGS="-pedantic -W -Wall -Wextra ${W_FAIL} -Wundef -Wshadow -Wmissing-declarations ${W_STRICT_ALIASING}" + CC_WARNINGS="${BASE_WARNINGS} -Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls -Wswitch-default -Wswitch-enum -Wcast-align" + CXX_WARNINGS="${BASE_WARNINGS} -Woverloaded-virtual -Wnon-virtual-dtor -Wctor-dtor-privacy -Wold-style-cast -Weffc++ -Wno-long-long" + + + AC_CACHE_CHECK([whether it is safe to use -Wlogical-op], + [ac_cv_safe_to_use_Wlogical_op_], + [save_CFLAGS="$CFLAGS" + CFLAGS="-Wlogical-op" + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM( + [[ +#include + ]], [[]]) + ], + [ac_cv_safe_to_use_Wlogical_op_=yes], + [ac_cv_safe_to_use_Wlogical_op_=no]) + CFLAGS="$save_CFLAGS"]) + AS_IF([test "$ac_cv_safe_to_use_Wlogical_op_" = "yes"], + [CC_WARNINGS="${CC_WARNINGS} -Wlogical-op"]) + + AC_CACHE_CHECK([whether it is safe to use -Wredundant-decls from C++], + [ac_cv_safe_to_use_Wredundant_decls_], + [AC_LANG_PUSH(C++) + save_CXXFLAGS="${CXXFLAGS}" + CXXFLAGS="${CXXFLAGS} ${W_FAIL} -Wredundant-decls" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([ +template struct C { void foo(); }; +template void C::foo() { } +template <> void C::foo(); + AC_INCLUDES_DEFAULT])], + [ac_cv_safe_to_use_Wredundant_decls_=yes], + [ac_cv_safe_to_use_Wredundant_decls_=no]) + CXXFLAGS="${save_CXXFLAGS}" + AC_LANG_POP()]) + AS_IF([test "$ac_cv_safe_to_use_Wredundant_decls_" = "yes"], + [CXX_WARNINGS="${CXX_WARNINGS} -Wredundant-decls"], + [CXX_WARNINGS="${CXX_WARNINGS} -Wno-redundant-decls"]) + + NO_REDUNDANT_DECLS="-Wno-redundant-decls" +fi +if test "$SUNCC" = "yes" +then + + AS_IF([test "$ac_profiling" = "yes"], + [CC_PROFILING="-xinstrument=datarace"]) + + AS_IF([test "$building_from_bzr" = "yes"], + [W_FAIL="-errwarn=%all"]) + + AC_CACHE_CHECK([whether E_PASTE_RESULT_NOT_TOKEN is usable], + [ac_cv_paste_result], + [ + save_CFLAGS="${CFLAGS}" + CFLAGS="-errwarn=%all -erroff=E_PASTE_RESULT_NOT_TOKEN ${CFLAGS}" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([ + AC_INCLUDES_DEFAULT + ],[ + int x= 0;])], + [ac_cv_paste_result=yes], + [ac_cv_paste_result=no]) + CFLAGS="${save_CFLAGS}" + ]) + AS_IF([test $ac_cv_paste_result = yes], + [W_PASTE_RESULT=",E_PASTE_RESULT_NOT_TOKEN"]) + + + CC_WARNINGS="-v -errtags=yes ${W_FAIL} -erroff=E_INTEGER_OVERFLOW_DETECTED${W_PASTE_RESULT}" + CXX_WARNINGS="+w +w2 -xwe -xport64 -errtags=yes ${W_FAIL}" +fi + +AC_SUBST(NO_REDUNDANT_DECLS) + +AM_CPPFLAGS="-I\$(top_srcdir) -I\$(top_builddir) ${CPPFLAGS}" +AM_CFLAGS="${CC_WARNINGS} ${CC_PROFILING} ${CC_COVERAGE} ${CFLAGS}" +AM_CXXFLAGS="${CXX_WARNING} ${CC_PROFILING} ${CC_COVERAGE} ${CXXFLAGS}" + +AC_SUBST([AM_CPPFLAGS]) +AC_SUBST([AM_CFLAGS]) +AC_SUBST([AM_CXXFLAGS]) + +dnl We've collected the flags in AM_*FLAGS now, so blank these. +CFLAGS="" +CXXFLAGS="" +CPPFLAGS="" + +AC_CONFIG_FILES([ + Makefile + clients/Makefile + tests/Makefile + docs/Makefile + libmemcached/Makefile + libmemcachedutil/Makefile + support/Makefile + support/libmemcached.pc + support/libmemcached.spec + support/libmemcached-fc.spec + ]) +AC_OUTPUT + +echo "---" +echo "Configuration summary for $PACKAGE_NAME version $VERSION" +echo "" +echo " * Installation prefix: $prefix" +echo " * System type: $host_vendor-$host_os" +echo " * Host CPU: $host_cpu" +echo " * C Compiler: $CC_VERSION" +echo " * Assertions enabled: $ac_cv_assert" +echo " * Debug enabled: $with_debug" +echo " * Warnings as failure: $building_from_bzr" +echo "" +echo "---" +