AC_INIT(src/object.cpp)
AC_CONFIG_AUX_DIR(ac)
AM_INIT_AUTOMAKE(msgpack, 0.5.7)
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([$enable_cxx])
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([$enable_debug])
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]]*\)\.\([[0-9]]*\).*/\1/'`
minor=`echo $VERSION | sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
AC_SUBST(VERSION_MAJOR, $major)
AC_SUBST(VERSION_MINOR, $minor)


AC_OUTPUT([Makefile
		   msgpack.pc
		   src/Makefile
		   src/msgpack/version.h
		   test/Makefile])

