From a5afdfab99a5679deb20a3151713226fe03f85fa Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Tue, 30 Jul 2013 01:44:28 +1000 Subject: [PATCH] configure.ac cleanup, move to ax_append_*_flags --- configure.ac | 263 +++++++++++++++++---------------- m4/as_compiler_flag.m4 | 64 -------- m4/ax_append_compile_flags.m4 | 65 ++++++++ m4/ax_append_flag.m4 | 69 +++++++++ m4/ax_append_link_flags.m4 | 63 ++++++++ m4/ax_cxx_compile_stdcxx_11.m4 | 107 ++++++++++++++ 6 files changed, 436 insertions(+), 195 deletions(-) delete mode 100644 m4/as_compiler_flag.m4 create mode 100644 m4/ax_append_compile_flags.m4 create mode 100644 m4/ax_append_flag.m4 create mode 100644 m4/ax_append_link_flags.m4 create mode 100644 m4/ax_cxx_compile_stdcxx_11.m4 diff --git a/configure.ac b/configure.ac index 9105f25e..41c0547b 100644 --- a/configure.ac +++ b/configure.ac @@ -4,119 +4,113 @@ AC_INIT([libgim], [0.1.0], [danny@nerdcruft.net]) ## debugging is enabled. : ${CXXFLAGS=""} -AC_CANONICAL_HOST - -AC_PROG_CXX -AC_LANG([C++]) -LT_INIT -AM_PROG_CC_C_O +############################################################################### +## Build environment discovery AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([m4]) -AC_CONFIG_HEADERS([config.h]) -AM_INIT_AUTOMAKE([1.11 silent-rules]) +AC_USE_SYSTEM_EXTENSIONS +AC_CANONICAL_HOST + +AC_LANG([C++]) +AC_PROG_CXX +AC_PROG_CXXCPP + +AX_CXX_COMPILE_STDCXX_11([noext]) + +LT_INIT + +AM_INIT_AUTOMAKE([1.14 dist-bzip2 dist-xz foreign subdir-objects]) AM_SILENT_RULES([yes]) +AC_CONFIG_HEADERS([config.h]) +AX_APPEND_FLAG([-include config.h]) + +############################################################################### +## Major compilation options AC_ARG_ENABLE([debugging], - [AS_HELP_STRING([--enable-debugging], - [enables developer debugging support])], - [ case "${enableval}" in - yes) ac_cv_debugging=yes ;; - no) ac_cv_debugging=no ;; - *) AC_MSG_ERROR([bad value for --enable-debugging=[yes|no]]) ;; - esac ], - [ac_cv_debugging=no]) + [AS_HELP_STRING([--enable-debugging], [enables developer debugging support])] +) AC_ARG_ENABLE([mudflap], - [AS_HELP_STRING([--enable-mudflap], - [enable mudflap runtime debugging])], - [ case "${enableval}" in - yes) ac_cv_mudflap=yes ;; - no) ac_cv_mudflap=no ;; - *) AC_MSG_ERROR([bad value for --enable-mudflap[yes|no]]) ;; - esac ], - [ac_cv_mudflap=no]) + [AS_HELP_STRING([--enable-mudflap], [enable mudflap runtime debugging])] +) -## +############################################################################### ## Warnings -WARNING_FLAGS="" -AS_CXX_COMPILER_FLAG([-Wall], [WARNING_FLAGS="$WARNING_FLAGS -Wall"]) -AS_CXX_COMPILER_FLAG([-Wextra], [WARNING_FLAGS="$WARNING_FLAGS -Wextra"]) -AS_CXX_COMPILER_FLAG([-Wno-parentheses], [WARNING_FLAGS="$WARNING_FLAGS -Wno-parentheses"]) +AX_APPEND_COMPILE_FLAGS([-Wall]) +AX_APPEND_COMPILE_FLAGS([-Wextra]) +AX_APPEND_COMPILE_FLAGS([-Wno-parentheses]) +AX_APPEND_COMPILE_FLAGS([-Wpointer-arith]) +AX_APPEND_COMPILE_FLAGS([-Wcast-qual]) +AX_APPEND_COMPILE_FLAGS([-Wcast-align]) +AX_APPEND_COMPILE_FLAGS([-Wsign-compare]) +AX_APPEND_COMPILE_FLAGS([-Wsign-conversion]) +AX_APPEND_COMPILE_FLAGS([-Wtype-limits]) +AX_APPEND_COMPILE_FLAGS([-Wfloat-equal]) +AX_APPEND_COMPILE_FLAGS([-Wunused-parameter]) +AX_APPEND_COMPILE_FLAGS([-Wunused-but-set-variable]) +AX_APPEND_COMPILE_FLAGS([-Wshadwo]) +AX_APPEND_COMPILE_FLAGS([-Wredundant-decls]) -AS_CXX_COMPILER_FLAG([-Wpointer-arith], [WARNING_FLAGS="$WARNING_FLAGS -Wpointer-arith"]) -AS_CXX_COMPILER_FLAG([-Wcast-qual], [WARNING_FLAGS="$WARNING_FLAGS -Wcast-qual"]) -AS_CXX_COMPILER_FLAG([-Wcast-align], [WARNING_FLAGS="$WARNING_FLAGS -Wcast-align"]) +AX_APPEND_COMPILE_FLAGS([-pedantic]) -AS_CXX_COMPILER_FLAG([-Wsign-compare], [WARNING_FLAGS="$WARNING_FLAGS -Wsign-compare"]) -AS_CXX_COMPILER_FLAG([-Wsign-conversion], [WARNING_FLAGS="$WARNING_FLAGS -Wsign-conversion"]) -AS_CXX_COMPILER_FLAG([-Wtype-limits], [WARNING_FLAGS="$WARNING_FLAGS -Wtype-limits"]) -AS_CXX_COMPILER_FLAG([-Wfloat-equal], [WARNING_FLAGS="$WARNING_FLAGS -Wfloat-equal"]) +###################################################################### +## Platform compilation helpers -AS_CXX_COMPILER_FLAG([-Wswitch-default], [COMMON_CFLAGS="$COMMON_CFLAGS -Wswitch-default"]) -#AS_CXX_COMPILER_FLAG([-Wswitch-enum], [COMMON_CFLAGS="$COMMON_CFLAGS -Wswitch-enum"]) +AX_APPEND_COMPILE_FLAGS([-fno-common]) +AX_APPEND_COMPILE_FLAGS([-fno-nonansi-builtins]) +AX_APPEND_COMPILE_FLAGS([-fno-deduce-init-list]) -#AS_CXX_COMPILER_FLAG([-Wzero-as-null-pointer-constant], [WARNING_FLAGS="$WARNING_FLAGS -Wzero-as-null-pointer-constant"]) - -AS_CXX_COMPILER_FLAG([-Wunused-parameter], [WARNING_FLAGS="$WARNING_FLAGS -Wunused-parameter"]) -AS_CXX_COMPILER_FLAG([-Wunused-but-set-variable], [WARNING_FLAGS="$WARNING_FLAGS -Wunused-parameter"]) -AS_CXX_COMPILER_FLAG([-Wshadow], [WARNING_FLAGS="$WARNING_FLAGS -Wshadow"]) -AS_CXX_COMPILER_FLAG([-Wredundant-decls], [WARNING_FLAGS="$WARNING_FLAGS -Wredundant-decls"]) - -AS_CXX_COMPILER_FLAG([-pedantic], [COMMON_CFLAGS="$COMMON_CFLAGS -pedantic"]) - -## -## Compilation -AS_CXX_COMPILER_FLAG([-fno-common ], [COMMON_CFLAGS="$COMMON_CFLAGS -fno-common "]) -AS_CXX_COMPILER_FLAG([-fno-nonansi-builtins], - [COMMON_CFLAGS="$COMMON_CFLAGS -fno-nonansi-builtins"]) -##AS_CXX_COMPILER_FLAG([-fno-rtti], [COMMON_CFLAGS="$COMMON_CFLAGS -fno-rtti"]) - -AS_CXX_COMPILER_FLAG([-fno-deduce-init-list], [COMMON_CFLAGS="$COMMON_CFLAGS -fno-deduce-init-list "]) - - -## +############################################################################### ## Compiler features + AC_C_CONST AC_C_RESTRICT AC_C_INLINE -## +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])]) + +############################################################################### ## Architecture features + AC_C_BIGENDIAN -## +############################################################################### ## Useful headers or platform features + AC_TYPE_SIZE_T AC_TYPE_SSIZE_T -## -## platform features -#AC_DEFINE([_GNU_SOURCE], [], [Description]) +############################################################################### +## Platform features -case $host_os in - mingw32) +AS_CASE([$host_os], + [mingw32], [ AM_CONDITIONAL([PLATFORM_WIN32], [true]) AM_CONDITIONAL([PLATFORM_LINUX], [false]) AC_CHECK_HEADERS([winsock2.h ws2tcpip.h]) AC_SUBST([NET_LIBS], [-lws2_32]) + ], - #COMMON_LDFLAGS="$COMMON_LDFLAGS -ldbghelp" - ;; - - linux-gnu) + [linux-gnu], [ AM_CONDITIONAL([PLATFORM_WIN32], [false]) AM_CONDITIONAL([PLATFORM_LINUX], [true]) - ;; + ], - *) - AC_ERROR([Unknown host_os]) - ;; -esac + [AC_ERROR([Unknown host_os])] +) AC_FUNC_MMAP @@ -128,72 +122,61 @@ AC_CHECK_HEADER([execinfo.h], [break]) AM_CONDITIONAL([HAVE_EXECINFO], [test x$ac_cv_header_execinfo_h = "xyes"]) AC_SEARCH_LIBS([clock_gettime], [rt]) -if [[ "x$ac_cv_search_clock_gettime" == "x-*" ]]; then - COMMON_LDFLAGS="$COMMON_LDFLAGS $ac_cv_search_clock_gettime" -fi +AS_IF([test "x$ac_cv_search_clock_gettime" == "x-*"], [ + AX_APPEND_LINK_FLAGS([$ac_cv_search_clock_gettime]) +]) - -## +############################################################################### ## Debug features -if test "x$ac_cv_debugging" = "xyes"; then - COMMON_CFLAGS="$COMMON_CFLAGS -O0" - if test "x$ac_cv_mudflap" = "xyes"; then - AS_CXX_COMPILER_FLAG([-fmudflapth], [ - COMMON_CFLAGS="$COMMON_CFLAGS -fmudflapth"; - COMMON_LDFLAGS="$COMMON_LDFLAGS -lmudflapth" - ]) - fi +AS_IF([test "x$enable_debugging" = "xyes"], [ + AS_IF([test "x$enable_mudflap" = "xyes"], [ + AX_APPEND_COMPILE_FLAGS([-fmudflapth]) + AX_APPEND_LINK_FLAGS([-lmudflapth]) + ]) - AC_DEFINE([ENABLE_DEBUGGING], [], [Description]) - AC_DEFINE([_GLIBCXX_DEBUG], [], [Description]) + AX_APPEND_COMPILE_FLAGS([-ggdb]) -else - ## Use 'none' LTO partitioning to avoid discarded section linker errors - ## against boost - COMMON_CFLAGS="$COMMON_CFLAGS -O2 -flto=8 -flto-partition=none" - COMMON_LDFLAGS="$COMMON_LDFLAGS -flto=8 -flto-partition=none" -fi + AC_DEFINE([ENABLE_DEBUGGING], [], [Debugging support enabled]) + AC_DEFINE([_GLIBCXX_DEBUG], [], [Use glibcxx debugging mode]) -case $host_os in - mingw32) - COMMON_CFLAGS="$COMMON_CFLAGS -gstabs" - ;; + AX_APPEND_COMPILE_FLAGS([-O0]) +], [ + AX_APPEND_COMPILE_FLAGS([-02]) + AX_APPEND_COMPILE_FLAGS([-flto=8]) + AX_APPEND_COMPILE_FLAGS([-flto-partition=none]) - linux-gnu) - COMMON_CFLAGS="$COMMON_CFLAGS -g" - AS_CXX_COMPILER_FLAG([-ggdb], [COMMON_CFLAGS="$COMMON_CFLAGS -ggdb"]) - ;; + AX_APPEND_LINK_FLAGS([-flto=8]) + AX_APPEND_LINK_FLAGS([-flto-partition=none]) + AX_APPEND_LINK_FLAGS([-fwhole-program]) +]) - *) - AC_ERROR([Unknown host_os]) - ;; -esac +AS_CASE([$host_os], + [mingw32], [ + AX_APPEND_COMPILE_FLAGS([-gstabs]) -case $host_cpu in - x86_64) - OPTIMISATION_FLAGS="$OPTIMISATION_FLAGS -mtune=generic" - ;; + ## HACK: Stop multiple defines from boost exception rethrowers + ## terminating the build. Works around boost bug #4258. + AX_APPEND_COMPILE_FLAGS([-Wl,--allow-multiple-definition]) + ], - i686) - OPTIMISATION_FLAGS="$OPTIMISATION_FLAGS -march=prescott -mtune=generic -mfpmath=sse" - ;; + [linux-gnu], [ + AX_APPEND_COMPILE_FLAGS([-g]) + AX_APPEND_COMPILE_FLAGS([-ggdb]) + ], - *) - AC_MSG_ERROR([Unknown target CPU]) - ;; -esac + [AC_MSG_WARN([Unknown host_os])] +) - -## +############################################################################### ## Documentation -## +############################################################################### ## Required packages + CHECK_RAGEL([ip.cpp]) - -AX_BOOST_BASE([1.49], [], [AC_MSG_ERROR([Boost version >= 1.42 required])]) +AX_BOOST_BASE([1.52], [], [AC_MSG_ERROR([Boost version >= 1.52 required])]) AC_SUBST(BOOST_CPPFLAGS) AC_SUBST(BOOST_LDFLAGS) @@ -204,21 +187,39 @@ AX_BOOST_SYSTEM AX_BOOST_FILESYSTEM AC_SUBST(BOOST_FILESYSTEM_LIB) -if test "x$ax_cv_boost_filesystem" != "xyes"; then +AS_IF([text "x$ax_cv_boost_filesystem" != "xyes"], [ AC_MSG_ERROR("boost-filesystem is a hard requirement") -fi +]) +############################################################################### ## Optional packages + PKG_CHECK_MODULES([ZLIB], [zlib >= 1.2.0]) +AC_SUBST(ZLIB_CFLAGS) +AC_SUBST(ZLIB_LIBS) +############################################################################### +## Performance and build optimisations + +AS_CASE([$host_cpu], + [x86_64], [ + AX_APPEND_COMPILE_FLAGS([-mtune=generic]) + ], + + [i686], [ + AX_APPEND_COMPILE_FLAGS([-march=prescott]) + AX_APPEND_COMPILE_FLAGS([-mtune=generic]) + AX_APPEND_COMPILE_FLAGS([-mfpmath=sse]) + ], + + [AC_MSG_WARN([unknown host_cpu])] +) + +AX_APPEND_COMPILE_FLAGS([-pipe]) + +############################################################################### ## Output -COMMON_CXXFLAGS="-std=c++0x -pipe -include config.h $WARNING_FLAGS $OPTIMISATION_FLAGS $COMMON_CFLAGS" -COMMON_LDFLAGS="$COMMON_LDFLAGS " - -AC_SUBST(COMMON_CXXFLAGS) -AC_SUBST(COMMON_LDFLAGS) - AC_CONFIG_FILES([ Doxyfile Makefile diff --git a/m4/as_compiler_flag.m4 b/m4/as_compiler_flag.m4 deleted file mode 100644 index 882a4c7f..00000000 --- a/m4/as_compiler_flag.m4 +++ /dev/null @@ -1,64 +0,0 @@ -dnl as-compiler-flag.m4 0.1.0 - -dnl autostars m4 macro for detection of compiler flags - -dnl David Schleef -dnl Tim-Philipp Müller - -dnl AS_COMPILER_FLAG(CFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED]) -dnl Tries to compile with the given CFLAGS. -dnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags, -dnl and ACTION-IF-NOT-ACCEPTED otherwise. - -AC_DEFUN([AS_COMPILER_FLAG], -[ - AC_MSG_CHECKING([to see if compiler understands $1]) - - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $1" - - AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no]) - CFLAGS="$save_CFLAGS" - - if test "X$flag_ok" = Xyes ; then - $2 - true - else - $3 - true - fi - AC_MSG_RESULT([$flag_ok]) -]) - -dnl AS_CXX_COMPILER_FLAG(CPPFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED]) -dnl Tries to compile with the given CPPFLAGS. -dnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags, -dnl and ACTION-IF-NOT-ACCEPTED otherwise. - -AC_DEFUN([AS_CXX_COMPILER_FLAG], -[ - AC_REQUIRE([AC_PROG_CXX]) - - AC_MSG_CHECKING([to see if c++ compiler understands $1]) - - save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $1" - - AC_LANG_PUSH(C++) - - AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no]) - CPPFLAGS="$save_CPPFLAGS" - - if test "X$flag_ok" = Xyes ; then - $2 - true - else - $3 - true - fi - - AC_LANG_POP(C++) - - AC_MSG_RESULT([$flag_ok]) -]) - diff --git a/m4/ax_append_compile_flags.m4 b/m4/ax_append_compile_flags.m4 new file mode 100644 index 00000000..1f8e7084 --- /dev/null +++ b/m4/ax_append_compile_flags.m4 @@ -0,0 +1,65 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_append_compile_flags.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_APPEND_COMPILE_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS]) +# +# DESCRIPTION +# +# For every FLAG1, FLAG2 it is checked whether the compiler works with the +# flag. If it does, the flag is added FLAGS-VARIABLE +# +# If FLAGS-VARIABLE is not specified, the current language's flags (e.g. +# CFLAGS) is used. During the check the flag is always added to the +# current language's flags. +# +# If EXTRA-FLAGS is defined, it is added to the current language's default +# flags (e.g. CFLAGS) when the check is done. The check is thus made with +# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to +# force the compiler to issue an error when a bad flag is given. +# +# NOTE: This macro depends on the AX_APPEND_FLAG and +# AX_CHECK_COMPILE_FLAG. Please keep this macro in sync with +# AX_APPEND_LINK_FLAGS. +# +# LICENSE +# +# Copyright (c) 2011 Maarten Bosmans +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 3 + +AC_DEFUN([AX_APPEND_COMPILE_FLAGS], +[AC_REQUIRE([AX_CHECK_COMPILE_FLAG]) +AC_REQUIRE([AX_APPEND_FLAG]) +for flag in $1; do + AX_CHECK_COMPILE_FLAG([$flag], [AX_APPEND_FLAG([$flag], [$2])], [], [$3]) +done +])dnl AX_APPEND_COMPILE_FLAGS diff --git a/m4/ax_append_flag.m4 b/m4/ax_append_flag.m4 new file mode 100644 index 00000000..1d38b76f --- /dev/null +++ b/m4/ax_append_flag.m4 @@ -0,0 +1,69 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_append_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_APPEND_FLAG(FLAG, [FLAGS-VARIABLE]) +# +# DESCRIPTION +# +# FLAG is appended to the FLAGS-VARIABLE shell variable, with a space +# added in between. +# +# If FLAGS-VARIABLE is not specified, the current language's flags (e.g. +# CFLAGS) is used. FLAGS-VARIABLE is not changed if it already contains +# FLAG. If FLAGS-VARIABLE is unset in the shell, it is set to exactly +# FLAG. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 2 + +AC_DEFUN([AX_APPEND_FLAG], +[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX +AS_VAR_PUSHDEF([FLAGS], [m4_default($2,_AC_LANG_PREFIX[FLAGS])])dnl +AS_VAR_SET_IF(FLAGS, + [case " AS_VAR_GET(FLAGS) " in + *" $1 "*) + AC_RUN_LOG([: FLAGS already contains $1]) + ;; + *) + AC_RUN_LOG([: FLAGS="$FLAGS $1"]) + AS_VAR_SET(FLAGS, ["AS_VAR_GET(FLAGS) $1"]) + ;; + esac], + [AS_VAR_SET(FLAGS,["$1"])]) +AS_VAR_POPDEF([FLAGS])dnl +])dnl AX_APPEND_FLAG diff --git a/m4/ax_append_link_flags.m4 b/m4/ax_append_link_flags.m4 new file mode 100644 index 00000000..48cbd4bb --- /dev/null +++ b/m4/ax_append_link_flags.m4 @@ -0,0 +1,63 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_append_link_flags.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_APPEND_LINK_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS]) +# +# DESCRIPTION +# +# For every FLAG1, FLAG2 it is checked whether the linker works with the +# flag. If it does, the flag is added FLAGS-VARIABLE +# +# If FLAGS-VARIABLE is not specified, the linker's flags (LDFLAGS) is +# used. During the check the flag is always added to the linker's flags. +# +# If EXTRA-FLAGS is defined, it is added to the linker's default flags +# when the check is done. The check is thus made with the flags: "LDFLAGS +# EXTRA-FLAGS FLAG". This can for example be used to force the linker to +# issue an error when a bad flag is given. +# +# NOTE: This macro depends on the AX_APPEND_FLAG and AX_CHECK_LINK_FLAG. +# Please keep this macro in sync with AX_APPEND_COMPILE_FLAGS. +# +# LICENSE +# +# Copyright (c) 2011 Maarten Bosmans +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 3 + +AC_DEFUN([AX_APPEND_LINK_FLAGS], +[AC_REQUIRE([AX_CHECK_LINK_FLAG]) +AC_REQUIRE([AX_APPEND_FLAG]) +for flag in $1; do + AX_CHECK_LINK_FLAG([$flag], [AX_APPEND_FLAG([$flag], [m4_default([$2], [LDFLAGS])])], [], [$3]) +done +])dnl AX_APPEND_LINK_FLAGS diff --git a/m4/ax_cxx_compile_stdcxx_11.m4 b/m4/ax_cxx_compile_stdcxx_11.m4 new file mode 100644 index 00000000..0d96c073 --- /dev/null +++ b/m4/ax_cxx_compile_stdcxx_11.m4 @@ -0,0 +1,107 @@ +# ============================================================================ +# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html +# ============================================================================ +# +# SYNOPSIS +# +# AX_CXX_COMPILE_STDCXX_11([ext|noext]) +# +# DESCRIPTION +# +# Check for baseline language coverage in the compiler for the C++11 +# standard; if necessary, add switches to CXXFLAGS to enable support. +# Errors out if no mode that supports C++11 baseline syntax can be found. +# The argument, if specified, indicates whether you insist on an extended +# mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. -std=c++11). +# If neither is specified, you get whatever works, with preference for an +# extended mode. +# +# LICENSE +# +# Copyright (c) 2008 Benjamin Kosnik +# Copyright (c) 2012 Zack Weinberg +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 1 + +m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody], [ + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + typedef check> right_angle_brackets; + + int a; + decltype(a) b; + + typedef check check_type; + check_type c; + check_type&& cr = static_cast(c); +]) + +AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [dnl + m4_if([$1], [], [], + [$1], [ext], [], + [$1], [noext], [], + [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])dnl + AC_LANG_ASSERT([C++])dnl + ac_success=no + AC_CACHE_CHECK(whether $CXX supports C++11 features by default, + ax_cv_cxx_compile_cxx11, + [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], + [ax_cv_cxx_compile_cxx11=yes], + [ax_cv_cxx_compile_cxx11=no])]) + if test x$ax_cv_cxx_compile_cxx11 = xyes; then + ac_success=yes + fi + + m4_if([$1], [noext], [], [dnl + if test x$ac_success = xno; then + for switch in -std=gnu++11 -std=gnu++0x; do + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch, + $cachevar, + [ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXXFLAGS="$ac_save_CXXFLAGS"]) + if eval test x\$$cachevar = xyes; then + CXXFLAGS="$CXXFLAGS $switch" + ac_success=yes + break + fi + done + fi]) + + m4_if([$1], [ext], [], [dnl + if test x$ac_success = xno; then + for switch in -std=c++11 -std=c++0x; do + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch, + $cachevar, + [ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXXFLAGS="$ac_save_CXXFLAGS"]) + if eval test x\$$cachevar = xyes; then + CXXFLAGS="$CXXFLAGS $switch" + ac_success=yes + break + fi + done + fi]) + + if test x$ac_success = xno; then + AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.]) + fi +])