AC_INIT(msgpack, m4_esyscmd([cat include/msgpack/version_master.h | tr -d “n” | sed -e ‘s/#define MSGPACK_VERSION_MAJOR[]*([[:alnum:]]*)/1./g’ -e ‘s/#define MSGPACK_VERSION_MINOR[]*([[:alnum:]]*)/1./g’ -e ‘s/#define MSGPACK_VERSION_REVISION[]*([[:alnum:]]*)/1/g’ | tr -d “n”])) AC_CONFIG_AUX_DIR(ac) AM_INIT_AUTOMAKE AC_CONFIG_HEADER(config.h) AC_SUBST(CFLAGS) CFLAGS=“-O3 -Wall $CFLAGS”

AC_SUBST(CXXFLAGS) CXXFLAGS=“-O3 -Wall $CXXFLAGS”

AC_PROG_CC

AC_MSG_CHECKING([if C++ API is enabled]) AC_ARG_ENABLE(cxx,

AS_HELP_STRING([--disable-cxx],
                           [don't build C++ API]) )   #'

AC_MSG_RESULT() if test “$enable_cxx” != “no”; then

AC_PROG_CXX
AM_PROG_CC_C_O

fi AM_CONDITIONAL(ENABLE_CXX, test “$enable_cxx” != “no”)

AC_PROG_LIBTOOL AM_PROG_AS

AC_MSG_CHECKING([if debug option is enabled]) AC_ARG_ENABLE(debug,

AS_HELP_STRING([--disable-debug],
                           [disable assert macros and omit -g option]) )

AC_MSG_RESULT() if test “$enable_debug” != “no”; then

CXXFLAGS="$CXXFLAGS -g"
CFLAGS="$CFLAGS -g"

else

CXXFLAGS="$CXXFLAGS -DNDEBUG"
CFLAGS="$CFLAGS -DNDEBUG"

fi

AC_CACHE_CHECK([for _sync* atomic operations], msgpack_cv_atomic_ops, [

AC_TRY_LINK([
        int atomic_sub(int i) { return __sync_sub_and_fetch(&i, 1); }
        int atomic_add(int i) { return __sync_add_and_fetch(&i, 1); }
], [atomic_sub(1); atomic_add(1);], msgpack_cv_atomic_ops="yes")
])

if test “$msgpack_cv_atomic_ops” != “yes”; then

if test "$enable_cxx" = "no"; then
        AC_MSG_ERROR([__sync_* atomic operations are not found. Try to enable C++ support.

If you are using gcc >= 4.1 and the default target CPU architecture is “i386”, try to add CFLAGS=“-march=i686” and CXXFLAGS=“-march=i686” options to ./configure as follows:

$ ./configure CFLAGS="-march=i686" CXXFLAGS="-march=i686"
                                        ])
      fi

      AC_LANG_PUSH([C++])
      AC_CACHE_CHECK([for __gnu_cxx::__exchange_and_add], msgpack_cv_gcc_cxx_atomic_ops, [
              AC_TRY_LINK([
                      #include <bits/atomicity.h>
                      int atomic_sub(int i) { return __gnu_cxx::__exchange_and_add(&i, -1) - 1; }
                      int atomic_add(int i) { return __gnu_cxx::__exchange_and_add(&i, 1) + 1; }
              ], [atomic_sub(1); atomic_add(1);], msgpack_cv_gcc_cxx_atomic_ops="yes")
              ])
      AC_LANG_POP([C++])

      if test "$msgpack_cv_gcc_cxx_atomic_ops" != "yes"; then
              AC_MSG_ERROR([__sync_* atomic operations nor __gnu_cxx::__exchange_and_add are not found.

If you are using gcc >= 4.1 and the default target CPU architecture is “i386”, try to add CFLAGS=“-march=i686” and CXXFLAGS=“-march=i686” options to ./configure as follows:

$ ./configure CFLAGS="-march=i686" CXXFLAGS="-march=i686"

])

else
        enable_gcc_cxx_atomic=yes
fi

fi

AM_CONDITIONAL(ENABLE_GCC_CXX_ATOMIC, test “$enable_gcc_cxx_atomic” = “yes”)

major=‘echo $VERSION | sed ’s/([]*).([[0-9]]*).([]*).*/1/‘` minor=`echo $VERSION | sed ’s/([]*).([[0-9]]*).([]*).*/2/‘` revision=`echo $VERSION | sed ’s/([]*).([[0-9]]*).([]*).*/3/‘` AC_SUBST(VERSION_MAJOR, $major) AC_SUBST(VERSION_MINOR, $minor) AC_SUBST(VERSION_REVISION, $revision)

AC_OUTPUT([Makefile

msgpack.pc
src/Makefile
test/Makefile])