AC_INIT(msgpack/unpack_template.h)
AC_CONFIG_AUX_DIR(ac)
AM_INIT_AUTOMAKE(msgpack, 0.4.3)
AC_CONFIG_HEADER(config.h)

AC_SUBST(CFLAGS)
if test "" = "$CFLAGS"; then
	CFLAGS="-g -O4"
fi

AC_PROG_CC

CFLAGS="-O4 -Wall $CFLAGS -I.."

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_SUBST(CXXFLAGS)
	if test "" = "$CXXFLAGS"; then
		CXXFLAGS="-g -O4"
	fi
fi

# FIXME enable_cxx
AC_PROG_CXX

CXXFLAGS="-O4 -Wall $CXXFLAGS -I.. -I../c"

# FIXME enable_cxx
AC_LANG_PUSH([C++])
AC_CHECK_HEADERS(tr1/unordered_map)
AC_CHECK_HEADERS(tr1/unordered_set)
AC_LANG_POP([C++])

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); }
	], [], msgpack_cv_atomic_ops="yes")
	])
if test "$msgpack_cv_atomic_ops" != "yes"; then
	AC_MSG_ERROR([__sync_* atomic operations are not supported.

Note that gcc < 4.1 is not supported.

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

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

AM_CONDITIONAL(ENABLE_CXX, test "$enable_cxx" != "no")

AC_PROG_LIBTOOL

AC_OUTPUT([Makefile c/Makefile cpp/Makefile])