| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570 |
- dnl
- dnl autoconf for Corosync
- dnl
- dnl License: GNU General Public License (GPL)
- dnl ===============================================
- dnl Bootstrap
- dnl ===============================================
- dnl Initialiase, with sanity check of a unique file in the hierarchy
- AC_INIT(configure.in)
- AC_PREREQ(2.53)
- AC_CONFIG_AUX_DIR(.)
- AC_CANONICAL_HOST
- AC_MSG_NOTICE(Host: $host)
- AC_MSG_NOTICE(Host OS: $host_os)
- AC_MSG_NOTICE(Host CPU: $host_cpu)
- AC_MSG_NOTICE(Host Vendor: $host_vendor)
- dnl Where #defines go (e.g. `AC_CHECK_HEADERS' below)
- dnl
- dnl Internal header: include/corosync/config.h
- dnl - Contains ALL defines
- dnl - include/config.h.in is generated automatically by autoheader
- dnl - NOT to be included in any header files except lha_internal.h
- dnl (which is also not to be included in any other header files)
- dnl
- dnl External header: include/corosync/cs_config.h
- dnl - Contains a subset of defines checked here
- dnl - Manually edit include/corosync/cs_config.h.in to have configure include
- dnl new defines
- dnl - Should not include HAVE_* defines
- dnl - Safe to include anywhere
- AM_CONFIG_HEADER(include/corosync/config.h include/corosync/cs_config.h)
- ALL_LINGUAS="en fr"
- AC_ARG_WITH(version,
- [ --with-version=name Override package version (if you're a packager needing to pretend) ],
- [ CS_VERSION="$withval" ],
- [ CS_VERSION="" ],
- )
- DTD_VERSION=1.0
- if test -z "$CS_VERSION" ; then
- CS_VERSION="1.0.0"
- fi
- PKG_NAME=corosync
- PKG_FEATURES=""
- AM_INIT_AUTOMAKE($PKG_NAME, $CS_VERSION)
- AC_DEFINE_UNQUOTED(CS_VERSION, "$CS_VERSION", Current corosync version)
- AC_SUBST(PKG_NAME)
- dnl Project wise library soname handling
- SOMAJOR=3
- SOMINOR=0
- SOMICRO=0
- SONAME=${SOMAJOR}.${SOMINOR}.${SOMICRO}
- AC_SUBST(SOMAJOR)
- AC_SUBST(SOMINOR)
- AC_SUBST(SOMICRO)
- AC_SUBST(SONAME)
- LDD=ldd
- dnl Which C compiler?
- dnl Defaults to GNU C compiler if available.
- dnl Always tries to set the compiler to ANSI C via options (AM)
- dnl Can force other with environment variable "CC".
- AC_PROG_CC
- AC_PROG_CC_STDC
- AM_PROG_CC_C_O
- AC_PROG_RANLIB
- dnl ===============================================
- dnl Helpers
- dnl ===============================================
- cc_supports_flag() {
- AC_MSG_CHECKING(whether $CC supports "$@")
- Cfile=/tmp/foo${$}
- touch ${Cfile}.c
- $CC -c "$@" ${Cfile}.c -o ${Cfile}.o >/dev/null 2>&1
- rc=$?
- rm -f ${Cfile}.c ${Cfile}.o
- case $rc in
- 0) AC_MSG_RESULT(yes);;
- *) AC_MSG_RESULT(no);;
- esac
- return $rc
- }
- extract_header_define() {
- AC_MSG_CHECKING(for $2 in $1)
- Cfile=/tmp/extract_define.$2.${$}
- printf "#include <stdio.h>\n" > ${Cfile}.c
- printf "#include <%s>\n" $1 >> ${Cfile}.c
- printf "int main(int argc, char **argv) { printf(\"%%s\", %s); return 0; }\n" $2 >> ${Cfile}.c
- $CC $CFLAGS ${Cfile}.c -o ${Cfile}
- value=`${Cfile}`
- AC_MSG_RESULT($value)
- printf $value
- rm -f ${Cfile}.c ${Cfile}
- }
- check_for_type() {
- type="$1"
- headers=""
- shift
- for arg
- do
- headers="${headers}${arg}
- "
- done
- program="if ((${type} *) 0) return 0;
- if (sizeof(${type})) return 0;
- return 0;"
- have="HAVE_`echo "$type" | tr ' ' '_' | dd conv=ucase 2>/dev/null`"
- varhave="heartbeat_cv_$have"
- AC_CACHE_CHECK([for type $type ],$varhave,[
- AC_TRY_COMPILE([$headers], [$program], eval $varhave=yes, eval $varhave=no
- , eval $varhave=cross)
- ])
- if test x"`eval echo '${'$varhave'}'`" = xyes; then
- return 0
- fi
- return 1
- }
- check_for_type_member() {
- type="$1"
- member="$2"
- headers=""
- shift
- shift
- for arg
- do
- headers="${headers}${arg}
- "
- done
- program="${type} foo;
- if ((${type} *) 0) return 0;
- if (sizeof(${type})) return 0;
- if (sizeof(foo)) return 0;
- (void*)foo.${member};
- return 0;"
- have="HAVE_`echo "$type" | tr ' ' '_' | dd conv=ucase 2>/dev/null`"
- varhave="heartbeat_cv_$have"
- AC_CACHE_CHECK([for type $type ],$varhave,[
- AC_TRY_COMPILE([$headers], [$program], eval $varhave=yes, eval $varhave=no
- , eval $varhave=cross)
- ])
- if test x"`eval echo '${'$varhave'}'`" = xyes; then
- return 0
- fi
- return 1
- }
- dnl ===============================================
- dnl Configure Options
- dnl ===============================================
- AC_ARG_ENABLE([ansi],
- [ --enable-ansi force GCC to compile to ANSI/ANSI standard for older compilers.
- [default=no]])
- AC_ARG_ENABLE([fatal-warnings],
- [ --enable-fatal-warnings very pedantic and fatal warnings for gcc
- [default=no]])
- AC_ARG_WITH(lcrso-dir,
- [ --with-lcrso-dir=DIR Corosync lcrso files. ],
- [ LCRSODIR="$withval" ])
- AC_ARG_ENABLE(static,
- [ --enable-static Dont produce dynamic libraries. ],
- [ default="no" ])
- AC_ARG_ENABLE(coverage,
- [ --enable-coverage Coverage analysis of the codebase. ],
- [ default="no" ])
- dnl ===============================================
- dnl General Processing
- dnl ===============================================
- CC_IN_CONFIGURE=yes
- export CC_IN_CONFIGURE
- AC_MSG_NOTICE(Sanitizing prefix: ${prefix})
- case $prefix in
- NONE) prefix=/usr;;
- esac
- AC_MSG_NOTICE(Sanitizing exec_prefix: ${exec_prefix})
- case $exec_prefix in
- dnl For consistency with Heartbeat, map NONE->$prefix
- NONE) exec_prefix=$prefix;;
- prefix) exec_prefix=$prefix;;
- esac
- AC_MSG_NOTICE(Sanitizing ais_prefix: ${AISPREFIX})
- case $AISPREFIX in
- dnl For consistency with Heartbeat, map NONE->$prefix
- NONE) AISPREFIX=$prefix;;
- prefix) AISPREFIX=$prefix;;
- esac
- AC_MSG_NOTICE(Sanitizing libdir: ${libdir})
- case $libdir in
- dnl For consistency with Heartbeat, map NONE->$prefix
- prefix|NONE|*exec_prefix*)
- AC_MSG_CHECKING(which lib directory to use)
- for aDir in lib64 lib
- do
- trydir="${exec_prefix}/${aDir}"
- if
- test -d ${trydir}
- then
- libdir=${trydir}
- break
- fi
- done
- AC_MSG_RESULT($libdir);
- ;;
- esac
- dnl Expand autoconf variables so that we dont end up with '${prefix}'
- dnl in #defines and python scripts
- dnl NOTE: Autoconf deliberately leaves them unexpanded to allow
- dnl make exec_prefix=/foo install
- dnl No longer being able to do this seems like no great loss to me...
- eval prefix="`eval echo ${prefix}`"
- eval exec_prefix="`eval echo ${exec_prefix}`"
- eval bindir="`eval echo ${bindir}`"
- eval sbindir="`eval echo ${sbindir}`"
- eval libexecdir="`eval echo ${libexecdir}`"
- eval datadir="`eval echo ${datadir}`"
- eval sysconfdir="`eval echo ${sysconfdir}`"
- eval sharedstatedir="`eval echo ${sharedstatedir}`"
- eval localstatedir="`eval echo ${localstatedir}`"
- eval libdir="`eval echo ${libdir}`"
- eval includedir="`eval echo ${includedir}`"
- eval oldincludedir="`eval echo ${oldincludedir}`"
- eval infodir="`eval echo ${infodir}`"
- eval mandir="`eval echo ${mandir}`"
- eval docdir="`eval echo ${docdir}`"
- for j in prefix exec_prefix bindir sbindir libexecdir datadir sysconfdir \
- sharedstatedir localstatedir libdir includedir oldincludedir infodir \
- mandir docdir
- do
- dirname=`eval echo '${'${j}'}'`
- if
- test ! -d "$dirname"
- then
- AC_MSG_WARN([$j directory ($dirname) does not exist!])
- fi
- done
- dnl This OS-based decision-making is poor autotools practice;
- dnl feature-based mechanisms are strongly preferred.
- dnl
- dnl So keep this section to a bare minimum; regard as a "necessary evil".
- ON_DARWIN=0
- DYFLAGS=
- case "$host_os" in
- *bsd*) LIBS="-L/usr/local/lib"
- CPPFLAGS="$CPPFLAGS -I/usr/local/include"
- AC_DEFINE_UNQUOTED(COROSYNC_BSD, 1, Compiling for BSD platform)
- DYFLAGS="$DYFLAGS -export-dynamic"
- ;;
- *solaris*)
- AC_DEFINE_UNQUOTED(COROSYNC_SOLARIS, 1, Compiling for Solaris platform)
- AC_DEFINE_UNQUOTED(TS_CLASS, 1, Prevent being scheduled RR)
- CFLAGS="$CFLAGS -D_REENTRANT"
- LDFLAGS="$LDFLAGS -Wl,--export-dynamic -Wl,-rpath-link=/usr/lib"
- ;;
- *linux*)
- AC_DEFINE_UNQUOTED(COROSYNC_LINUX, 1, Compiling for Linux platform)
- DYFLAGS="$DYFLAGS -rdynamic"
- ;;
- darwin*)
- ON_DARWIN=1
- AC_DEFINE_UNQUOTED(COROSYNC_DARWIN, 1, Compiling for Darwin platform)
- # LIBS="$LIBS -L${prefix}/lib"
- # CFLAGS="$CFLAGS -I${prefix}/include"
- ;;
- esac
- AC_SUBST(DYFLAGS)
- case "$host_cpu" in
- ppc64|powerpc64)
- case $CFLAGS in
- *powerpc64*) ;;
- *) if test "$GCC" = yes; then
- CFLAGS="$CFLAGS -m64"
- fi ;;
- esac
- esac
- AC_MSG_CHECKING(which format is needed to print uint64_t)
- case "$host_cpu" in
- s390x)U64T="%lu";;
- *64*) U64T="%lu";;
- *) U64T="%llu";;
- esac
- AC_MSG_RESULT($U64T)
- AC_DEFINE_UNQUOTED(U64T, "$U64T", Correct printf format for logging uint64_t)
- dnl Variables needed for substitution
- case x$LCRSODIR in
- x) LCRSODIR=$libexecdir/lcrso;;
- esac
- AC_DEFINE_UNQUOTED(LCRSODIR, "$LCRSODIR", Location of Corosync lcrso plugins)
- AC_SUBST(LCRSODIR)
- dnl *************************************************************************
- PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin"
- export PATH
- dnl ===============================================
- dnl Program Paths - Most of these need to go away
- dnl ===============================================
- AC_CHECK_PROGS(MAKE, gmake make)
- AC_PATH_PROGS(PKGCONFIG, pkg-config)
- AC_PATH_PROGS(SSH, ssh, /usr/bin/ssh)
- if test x"${MAKE}" = x""; then
- AC_MSG_ERROR(You need (g)make installed in order to build ${PKG_NAME})
- fi
- AC_SUBST(MAKE)
- AC_SUBST(CC)
- dnl ===============================================
- dnl Libraries
- dnl ===============================================
- AC_CHECK_LIB(dl, dlopen)
- AC_CHECK_LIB(nsl, t_open)
- AC_CHECK_LIB(socket, socket)
- AC_CHECK_LIB(c, getpeereid)
- AC_CHECK_LIB(rt, sched_getscheduler)
- AC_CHECK_LIB(pthread, pthread_create)
- dnl if test x"${PKGCONFIG}" = x""; then
- dnl AC_MSG_ERROR(You need pkgconfig installed in order to build ${PKG_NAME})
- dnl fi
- dnl
- dnl if test $PKGCONFIG --exists $GPKGNAME; then
- dnl CFLAGS="$CFLAGS `$GLIBCONFIG --cflags`"
- dnl LIBS="$LIBS `$GLIBCONFIG --libs`"
- dnl fi
- dnl ===============================================
- dnl Functions
- dnl ===============================================
- AC_CHECK_FUNCS(alphasort)
- AC_CHECK_FUNCS(scandir)
- AC_CHECK_FUNCS(getpeerucred)
- dnl ===============================================
- dnl Headers
- dnl ===============================================
- AC_HEADER_STDC
- AC_CHECK_HEADERS(sys/sockio.h)
- AC_CHECK_HEADERS(sys/types.h)
- AC_CHECK_HEADERS(sys/socket.h)
- AC_CHECK_HEADERS(malloc.h)
- AC_CHECK_HEADERS(getopt.h)
- dnl ===============================================
- dnl Typedefs
- dnl ===============================================
- dnl Check syslog.h for 'facilitynames' table
- dnl
- AC_CACHE_CHECK([for facilitynames in syslog.h],ac_cv_HAVE_SYSLOG_FACILITYNAMES,[
- AC_TRY_COMPILE([
- #define SYSLOG_NAMES
- #include <stdlib.h>
- #include <syslog.h>
- ],
- [ void *fnames; fnames = facilitynames; ],
- ac_cv_HAVE_SYSLOG_FACILITYNAMES=yes,ac_cv_HAVE_SYSLOG_FACILITYNAMES=no,ac_cv_HAVE_SYSLOG_FACILITYNAMES=cross)])
- if test x"$ac_cv_HAVE_SYSLOG_FACILITYNAMES" = x"yes"; then
- AC_DEFINE(HAVE_SYSLOG_FACILITYNAMES,1,[ ])
- fi
- dnl ===============================================
- dnl Compiler Characteristics
- dnl ===============================================
- dnl if not known on this system, #define size_t unsigned
- AC_TYPE_SIZE_T
- AC_CHECK_SIZEOF(char)
- AC_CHECK_SIZEOF(short)
- AC_CHECK_SIZEOF(int)
- AC_CHECK_SIZEOF(long)
- AC_CHECK_SIZEOF(long long)
- AC_C_STRINGIZE
- CC_WARNINGS=""
- dnl AC_CHECK_FUNCS(fcntl)
- dnl
- dnl Make sure that CFLAGS is not exported. If the user did
- dnl not have CFLAGS in their environment then this should have
- dnl no effect. However if CFLAGS was exported from the user's
- dnl environment, then the new CFLAGS will also be exported
- dnl to sub processes.
- dnl
- if export | fgrep " CFLAGS=" > /dev/null; then
- export -n CFLAGS || true # We don't want to bomb out if this fails
- fi
- if test "$GCC" != yes; then
- CFLAGS="$CFLAGS -g"
- else
- CFLAGS="$CFLAGS -ggdb3"
- EXTRA_WARNINGS=""
- # We had to eliminate -Wnested-externs because of libtool changes
- WARNLIST="all missing-prototypes
- missing-declarations
- strict-prototypes
- declaration-after-statement
- pointer-arith
- write-strings
- cast-qual cast-align
- bad-function-cast
- missing-format-attribute
- format=2
- format-security
- format-nonliteral
- no-long-long
- unsigned-char
- gnu89-inline
- no-strict-aliasing"
- for j in $WARNLIST
- do
- if
- cc_supports_flag -W$j
- then
- EXTRA_WARNINGS="$EXTRA_WARNINGS -W$j"
- fi
- done
- dnl Add any system specific options here.
- case "$host_os" in
- *linux*|*bsd*)
- if test "${enable_fatal_warnings}" = "unknown"; then
- enable_fatal_warnings=yes
- fi
- ;;
- *solaris*)
- ;;
- esac
- if test "x${enable_coverage}" = xyes && cc_supports_flag -ftest-coverage && cc_supports_flag -fprofile-arcs ; then
- echo "Enabling Coverage"
- CFLAGS="$CFLAGS -O0 -g -ftest-coverage -fprofile-arcs"
- LDFLAGS="$LDFLAGS -g -ftest-coverage -fprofile-arcs"
- enable_static=yes
- PKG_FEATURES="$PKG_FEATURES coverage"
- fi
- if test "x${enable_ansi}" = xyes && cc_supports_flag -std=iso9899:199409 ; then
- echo "Enabling ANSI Compatibility"
- ANSI="-ansi -D_GNU_SOURCE -DANSI_ONLY"
- PKG_FEATURES="$PKG_FEATURES ansi"
- fi
- if test "x${enable_fatal_warnings}" = xyes && cc_supports_flag -Werror ; then
- echo "Enabling Fatal Warnings (-Werror)"
- FATAL_WARNINGS="-Werror"
- PKG_FEATURES="$PKG_FEATURES fatal-warnings"
- fi
-
- CC_WARNINGS="$EXTRA_WARNINGS $FATAL_WARNINGS $ANSI"
- NON_FATAL_CC_WARNINGS="$EXTRA_WARNINGS"
- fi
- dnl AC_SUBST(CC_WARNINGS)
- NON_FATAL_CFLAGS="$CFLAGS $NON_FATAL_CC_WARNINGS"
- AC_SUBST(NON_FATAL_CFLAGS)
- dnl
- dnl We reset CFLAGS to include our warnings *after* all function
- dnl checking goes on, so that our warning flags don't keep the
- dnl AC_*FUNCS() calls above from working. In particular, -Werror will
- dnl *always* cause us troubles if we set it before here.
- dnl
- dnl
- CFLAGS="$CFLAGS $CC_WARNINGS"
- AC_SUBST(CFLAGS)
- dnl This is useful for use in Makefiles that need to remove one specific flag
- CFLAGS_COPY="$CFLAGS"
- AC_SUBST(CFLAGS_COPY)
- AM_CONDITIONAL(BUILD_DARWIN, test $ON_DARWIN = 1)
- AM_CONDITIONAL(BUILD_DYNAMIC, test "x${enable_static}" != xyes)
- if test "x${enable_static}" != xyes; then
- PKG_FEATURES="$PKG_FEATURES static"
- fi
- LINT_FLAGS="-weak -unrecog +posixlib +ignoresigns -fcnuse -badflag -D__gnuc_va_list=va_list -D__attribute\(x\)="
- AC_SUBST(LINT_FLAGS)
- dnl ************************************************************************
- AC_SUBST(LOCALE)
- dnl The Makefiles and shell scripts we output
- AC_CONFIG_FILES(Makefile \
- include/Makefile \
- lib/Makefile \
- lcr/Makefile \
- exec/Makefile \
- test/Makefile \
- tools/Makefile \
- services/Makefile \
- pkgconfig/Makefile \
- )
- dnl Now process the entire list of files added by previous
- dnl calls to AC_CONFIG_FILES()
- AC_OUTPUT()
- dnl *****************
- dnl Configure summary
- dnl *****************
- AC_MSG_RESULT([])
- AC_MSG_RESULT([$PACKAGE configuration:])
- AC_MSG_RESULT([ Version = ${VERSION}])
- AC_MSG_RESULT([ Prefix = ${prefix}])
- AC_MSG_RESULT([ Executables = ${sbindir}])
- AC_MSG_RESULT([ Man pages = ${mandir}])
- AC_MSG_RESULT([ Libraries = ${libdir}])
- AC_MSG_RESULT([ Header files = ${includedir}])
- AC_MSG_RESULT([ Arch-independent files = ${datadir}])
- AC_MSG_RESULT([ State information = ${localstatedir}])
- AC_MSG_RESULT([ System configuration = ${sysconfdir}])
- AC_MSG_RESULT([ Features =${PKG_FEATURES}])
- AC_MSG_RESULT([ CC_WARNINGS = ${CC_WARNINGS}])
- AC_MSG_RESULT([ Mangled CFLAGS = ${CFLAGS}])
- AC_MSG_RESULT([ Libraries = ${LIBS}])
|