2011-05-23 17:18:52 +10:00
|
|
|
AC_INIT([libgim], [0.1.0], [danny@nerdcruft.net])
|
2012-04-27 17:54:26 +10:00
|
|
|
## Explicitly set an empty CXXFLAGS if not present to prevent AC_PROG_CXX from
|
|
|
|
## generating a default -O2. This allows us to manually select -O0 when
|
|
|
|
## debugging is enabled.
|
|
|
|
: ${CXXFLAGS=""}
|
2011-05-23 17:18:52 +10:00
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
###############################################################################
|
|
|
|
## Build environment discovery
|
2011-05-23 17:18:52 +10:00
|
|
|
|
2013-02-27 15:11:51 +11:00
|
|
|
AC_CONFIG_AUX_DIR([build-aux])
|
2014-05-20 15:21:29 +10:00
|
|
|
AC_REQUIRE_AUX_FILE([tap-driver.sh])
|
2011-05-23 17:18:52 +10:00
|
|
|
AC_CONFIG_MACRO_DIR([m4])
|
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
AC_USE_SYSTEM_EXTENSIONS
|
|
|
|
AC_CANONICAL_HOST
|
2011-05-23 17:18:52 +10:00
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
AC_LANG([C++])
|
|
|
|
AC_PROG_CXX
|
|
|
|
AC_PROG_CXXCPP
|
2011-05-23 17:18:52 +10:00
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
AX_CXX_COMPILE_STDCXX_11([noext])
|
2011-05-23 17:18:52 +10:00
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
LT_INIT
|
2011-05-23 17:18:52 +10:00
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
AM_INIT_AUTOMAKE([1.14 dist-bzip2 dist-xz foreign subdir-objects])
|
|
|
|
AM_SILENT_RULES([yes])
|
2012-05-26 17:58:36 +10:00
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
AC_CONFIG_HEADERS([config.h])
|
2011-05-23 17:18:52 +10:00
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
###############################################################################
|
|
|
|
## Major compilation options
|
2011-05-23 17:18:52 +10:00
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
AC_ARG_ENABLE([debugging],
|
|
|
|
[AS_HELP_STRING([--enable-debugging], [enables developer debugging support])]
|
|
|
|
)
|
2011-05-23 17:18:52 +10:00
|
|
|
|
2013-09-18 13:42:35 +10:00
|
|
|
AC_ARG_ENABLE([sanitizer], [
|
|
|
|
AS_HELP_STRING([--enable-sanitizer], [enable memory sanitizer])
|
|
|
|
])
|
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
###############################################################################
|
|
|
|
## Warnings
|
2011-05-23 17:18:52 +10:00
|
|
|
|
2014-07-15 19:43:17 +10:00
|
|
|
# Compound warnings
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wall], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wextra], [], [-Werror])
|
2014-07-02 15:35:59 +10:00
|
|
|
|
2014-07-15 19:43:17 +10:00
|
|
|
# General warnings
|
2014-07-02 15:35:59 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wcast-align], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wcast-qual], [], [-Werror])
|
2014-07-15 19:43:17 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wfloat-conversion], [], [-Werror])
|
2014-07-02 15:35:59 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wfloat-equal], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-Winline], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wno-aggressive-loop-optimizations], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wnoexcept], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wnon-virtual-dtor], [], [-Werror])
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wno-parentheses], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wpointer-arith], [], [-Werror])
|
2014-07-02 15:35:59 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wredundant-decls], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wshadow], [], [-Werror])
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wsign-compare], [], [-Werror])
|
2014-07-02 15:35:59 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wsign-promo], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wstrict-aliasing], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wstrict-overflow], [], [-Werror])
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wtype-limits], [], [-Werror])
|
2014-07-02 15:35:59 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wunsafe-loop-optimizations], [], [-Werror])
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wunused-but-set-variable], [], [-Werror])
|
2014-07-02 15:35:59 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wunused-parameter], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wuseless-cast], [], [-Werror])
|
|
|
|
|
2014-07-15 19:43:17 +10:00
|
|
|
# Required extensions
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wgnu-flexible-array-union-member], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wno-c99-extensions], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wno-gnu-zero-variadic-macro-arguments], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wno-nested-anon-types], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wno-vla-extension], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wno-vla], [], [-Werror])
|
|
|
|
|
|
|
|
# Excessive warnings
|
|
|
|
#AX_APPEND_COMPILE_FLAGS([-Wconversion], [], [-Werror])
|
2014-07-02 15:35:59 +10:00
|
|
|
#AX_APPEND_COMPILE_FLAGS([-Wdouble-promotion], [], [-Werror])
|
2014-07-15 19:43:17 +10:00
|
|
|
#AX_APPEND_COMPILE_FLAGS([-Wold-style-cast], [], [-Werror])
|
2014-07-02 15:35:59 +10:00
|
|
|
#AX_APPEND_COMPILE_FLAGS([-Woverloaded-virtual], [], [-Werror])
|
|
|
|
#AX_APPEND_COMPILE_FLAGS([-Wsign-conversion], [], [-Werror])
|
2014-05-09 12:58:57 +10:00
|
|
|
|
2014-07-15 19:43:17 +10:00
|
|
|
# Strict warnings
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-pedantic], [], [-Werror])
|
2013-07-30 01:44:28 +10:00
|
|
|
|
|
|
|
######################################################################
|
|
|
|
## Platform compilation helpers
|
|
|
|
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-fno-common], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-fno-nonansi-builtins], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-fno-deduce-init-list], [], [-Werror])
|
2013-07-30 01:44:28 +10:00
|
|
|
|
|
|
|
###############################################################################
|
2011-05-23 17:18:52 +10:00
|
|
|
## Compiler features
|
2013-07-30 01:44:28 +10:00
|
|
|
|
2011-05-23 17:18:52 +10:00
|
|
|
AC_C_CONST
|
|
|
|
AC_C_RESTRICT
|
|
|
|
AC_C_INLINE
|
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([struct A { virtual void C (void) = 0; };
|
|
|
|
struct B : A { void C (void) override; }; ],
|
|
|
|
[])],
|
|
|
|
[], [AC_DEFINE([override], [], [Pretend about override keyword support])])
|
|
|
|
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([struct A final { }; ],
|
|
|
|
[])],
|
|
|
|
[], [AC_DEFINE([final], [], [Pretend about final keyword support])])
|
|
|
|
|
|
|
|
###############################################################################
|
2011-06-21 23:36:51 +10:00
|
|
|
## Architecture features
|
2013-07-30 01:44:28 +10:00
|
|
|
|
2011-06-21 23:36:51 +10:00
|
|
|
AC_C_BIGENDIAN
|
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
###############################################################################
|
2011-07-04 16:17:50 +10:00
|
|
|
## Useful headers or platform features
|
2013-07-30 01:44:28 +10:00
|
|
|
|
2011-07-04 16:17:50 +10:00
|
|
|
AC_TYPE_SIZE_T
|
|
|
|
AC_TYPE_SSIZE_T
|
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
###############################################################################
|
|
|
|
## Platform features
|
2011-05-23 17:18:52 +10:00
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
AS_CASE([$host_os],
|
|
|
|
[mingw32], [
|
2012-05-10 16:53:29 +10:00
|
|
|
AM_CONDITIONAL([PLATFORM_WIN32], [true])
|
|
|
|
AM_CONDITIONAL([PLATFORM_LINUX], [false])
|
2012-08-07 18:33:44 +10:00
|
|
|
|
|
|
|
AC_CHECK_HEADERS([winsock2.h ws2tcpip.h])
|
|
|
|
AC_SUBST([NET_LIBS], [-lws2_32])
|
2013-07-30 01:44:28 +10:00
|
|
|
],
|
2012-08-07 18:33:44 +10:00
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
[linux-gnu], [
|
2012-05-10 16:53:29 +10:00
|
|
|
AM_CONDITIONAL([PLATFORM_WIN32], [false])
|
|
|
|
AM_CONDITIONAL([PLATFORM_LINUX], [true])
|
2013-07-30 01:44:28 +10:00
|
|
|
],
|
2012-05-08 15:00:48 +10:00
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
[AC_ERROR([Unknown host_os])]
|
|
|
|
)
|
2012-05-08 15:00:48 +10:00
|
|
|
|
2011-07-04 16:17:12 +10:00
|
|
|
AC_FUNC_MMAP
|
2011-06-25 12:40:57 +10:00
|
|
|
|
2013-02-26 17:50:56 +11:00
|
|
|
AC_CHECK_FUNC([strndup], [
|
2013-08-05 16:45:25 +10:00
|
|
|
AC_DEFINE([HAVE_STRNDUP], [], [strndup appears to be present])
|
2013-02-26 17:50:56 +11:00
|
|
|
])
|
|
|
|
|
2011-07-04 16:17:12 +10:00
|
|
|
AC_CHECK_HEADER([execinfo.h], [break])
|
2011-06-25 12:40:57 +10:00
|
|
|
AM_CONDITIONAL([HAVE_EXECINFO], [test x$ac_cv_header_execinfo_h = "xyes"])
|
|
|
|
|
2011-11-04 17:28:04 +11:00
|
|
|
AC_SEARCH_LIBS([clock_gettime], [rt])
|
2013-07-30 01:44:28 +10:00
|
|
|
AS_IF([test "x$ac_cv_search_clock_gettime" == "x-*"], [
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_LINK_FLAGS([$ac_cv_search_clock_gettime], [], [-Werror])
|
2013-07-30 01:44:28 +10:00
|
|
|
])
|
2011-07-04 16:17:12 +10:00
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
###############################################################################
|
2011-06-30 21:45:02 +10:00
|
|
|
## Debug features
|
2013-07-30 01:44:28 +10:00
|
|
|
|
|
|
|
AS_IF([test "x$enable_debugging" = "xyes"], [
|
2013-09-18 13:42:35 +10:00
|
|
|
AS_IF([test "x$enable_sanitizer" = "xyes"], [
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-fsanitize=address], [], [-Werror])
|
2014-07-07 15:19:28 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-fsanitize=undefined], [], [-Werror])
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_LINK_FLAGS([-fsanitize=address], [], [-Werror])
|
2014-07-07 15:19:28 +10:00
|
|
|
AX_APPEND_LINK_FLAGS([-fsanitize=undefined], [], [-Werror])
|
2013-09-18 13:42:35 +10:00
|
|
|
])
|
|
|
|
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-ggdb], [], [-Werror])
|
2013-07-30 01:44:28 +10:00
|
|
|
|
2014-05-09 12:58:57 +10:00
|
|
|
AC_DEFINE([ENABLE_DEBUGGING], [], [Debugging support enabled], [], [-Werror])
|
|
|
|
AC_DEFINE([_GLIBCXX_DEBUG], [], [Use glibcxx debugging mode], [], [-Werror])
|
2013-07-30 01:44:28 +10:00
|
|
|
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-O0], [], [-Werror])
|
2013-07-30 01:44:28 +10:00
|
|
|
], [
|
2014-07-02 15:36:11 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-O2], [], [-Werror])
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-flto=8], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-flto-partition=none], [], [-Werror])
|
2013-07-30 01:44:28 +10:00
|
|
|
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_LINK_FLAGS([-flto=8], [], [-Werror])
|
|
|
|
AX_APPEND_LINK_FLAGS([-flto-partition=none], [], [-Werror])
|
|
|
|
AX_APPEND_LINK_FLAGS([-fwhole-program], [], [-Werror])
|
2013-07-30 01:44:28 +10:00
|
|
|
])
|
|
|
|
|
|
|
|
AS_CASE([$host_os],
|
|
|
|
[mingw32], [
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-gstabs], [], [-Werror])
|
2013-07-30 01:44:28 +10:00
|
|
|
|
|
|
|
## HACK: Stop multiple defines from boost exception rethrowers
|
|
|
|
## terminating the build. Works around boost bug #4258.
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-Wl,--allow-multiple-definition], [], [-Werror])
|
2013-07-30 01:44:28 +10:00
|
|
|
],
|
|
|
|
|
|
|
|
[linux-gnu], [
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-g], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-ggdb], [], [-Werror])
|
2013-07-30 01:44:28 +10:00
|
|
|
],
|
|
|
|
|
|
|
|
[AC_MSG_WARN([Unknown host_os])]
|
|
|
|
)
|
|
|
|
|
|
|
|
###############################################################################
|
2011-05-23 17:18:52 +10:00
|
|
|
## Documentation
|
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
###############################################################################
|
2011-05-23 17:18:52 +10:00
|
|
|
## Required packages
|
2011-06-30 20:33:55 +10:00
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
CHECK_RAGEL([ip.cpp])
|
2011-05-23 17:18:52 +10:00
|
|
|
|
2013-07-30 16:17:47 +10:00
|
|
|
AX_BOOST_BASE([1.53], [], [AC_MSG_ERROR([Boost version >= 1.53 required])])
|
2011-07-05 21:34:44 +10:00
|
|
|
AC_SUBST(BOOST_CPPFLAGS)
|
|
|
|
AC_SUBST(BOOST_LDFLAGS)
|
|
|
|
|
2011-09-25 14:25:24 +10:00
|
|
|
# boost-system isn't a hard requirement, it's only really used to fulfill
|
|
|
|
# some other dependency I've since forgotten about...
|
|
|
|
AX_BOOST_SYSTEM
|
|
|
|
|
2011-05-23 17:18:52 +10:00
|
|
|
AX_BOOST_FILESYSTEM
|
2011-07-05 21:34:44 +10:00
|
|
|
AC_SUBST(BOOST_FILESYSTEM_LIB)
|
|
|
|
|
2013-07-30 16:26:11 +10:00
|
|
|
AS_IF([test "x$ax_cv_boost_filesystem" != "xyes"], [
|
2011-06-30 20:34:24 +10:00
|
|
|
AC_MSG_ERROR("boost-filesystem is a hard requirement")
|
2013-07-30 01:44:28 +10:00
|
|
|
])
|
2011-06-30 20:34:24 +10:00
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
###############################################################################
|
2011-05-23 17:18:52 +10:00
|
|
|
## Optional packages
|
2013-07-30 01:44:28 +10:00
|
|
|
|
2013-07-13 15:28:29 +10:00
|
|
|
PKG_CHECK_MODULES([ZLIB], [zlib >= 1.2.0])
|
2013-07-30 01:44:28 +10:00
|
|
|
AC_SUBST(ZLIB_CFLAGS)
|
|
|
|
AC_SUBST(ZLIB_LIBS)
|
2011-05-23 17:18:52 +10:00
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
###############################################################################
|
|
|
|
## Performance and build optimisations
|
|
|
|
|
|
|
|
AS_CASE([$host_cpu],
|
|
|
|
[x86_64], [
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-mtune=generic], [], [-Werror])
|
2013-07-30 01:44:28 +10:00
|
|
|
],
|
2011-05-23 17:18:52 +10:00
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
[i686], [
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-march=prescott], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-mtune=generic], [], [-Werror])
|
|
|
|
AX_APPEND_COMPILE_FLAGS([-mfpmath=sse], [], [-Werror])
|
2013-07-30 01:44:28 +10:00
|
|
|
],
|
2011-05-23 17:18:52 +10:00
|
|
|
|
2013-07-30 01:44:28 +10:00
|
|
|
[AC_MSG_WARN([unknown host_cpu])]
|
|
|
|
)
|
|
|
|
|
2014-05-09 12:58:57 +10:00
|
|
|
AX_APPEND_COMPILE_FLAGS([-pipe], [], [-Werror])
|
2013-07-30 01:44:28 +10:00
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
## Output
|
2011-05-23 17:18:52 +10:00
|
|
|
|
2013-07-30 16:17:47 +10:00
|
|
|
# inclusion of config.h has to go after compilation tests otherwise we risk
|
|
|
|
# failure on a clean build
|
|
|
|
AX_APPEND_FLAG([-include config.h])
|
|
|
|
|
2012-04-24 12:59:13 +10:00
|
|
|
AC_CONFIG_FILES([
|
2011-05-23 17:18:52 +10:00
|
|
|
Doxyfile
|
|
|
|
Makefile
|
|
|
|
test/Makefile
|
2014-05-26 17:34:23 +10:00
|
|
|
test/json.test
|
|
|
|
], [
|
|
|
|
chmod a+x test/json.test
|
2011-05-23 17:18:52 +10:00
|
|
|
])
|
2012-04-24 12:59:13 +10:00
|
|
|
AC_OUTPUT
|