[gnome-builder/wip/chergert/libidemm-merge: 25/27] build: fix build for libidemm
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/chergert/libidemm-merge: 25/27] build: fix build for libidemm
- Date: Mon, 25 Apr 2016 01:50:35 +0000 (UTC)
commit d3c4e8d5ad1b09c426a5c30b05266b5b7721c4b3
Author: Christian Hergert <christian hergert me>
Date: Sun Apr 24 17:04:40 2016 -0700
build: fix build for libidemm
Makefile.am | 2 +
build/autotools/ax_append_compile_flags.m4 | 8 +-
build/autotools/ax_cxx_compile_stdcxx.m4 | 556 +++++++++++++++++++++++
build/autotools/ax_cxx_compile_stdcxx_11.m4 | 157 +------
build/autotools/mm-ax_cxx_compile_stdcxx.m4 | 561 ++++++++++++++++++++++++
build/autotools/mm-ax_cxx_compile_stdcxx_11.m4 | 171 +++++++
build/autotools/mm-common.m4 | 47 ++
build/autotools/mm-common.m4.in | 47 ++
build/autotools/mm-dietlib.m4 | 118 +++++
build/autotools/mm-doc.m4 | 252 +++++++++++
build/autotools/mm-module.m4 | 87 ++++
build/autotools/mm-pkg.m4 | 123 ++++++
build/autotools/mm-warnings.m4 | 123 ++++++
configure.ac | 5 +-
libidemm/configure.ac | 9 +-
libidemm/idemm/Makefile.am | 5 +
libidemm/tools/Makefile.am | 2 -
plugins/hello-cpp/configure.ac | 2 +-
18 files changed, 2118 insertions(+), 157 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index e840a5d..bc679e6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,5 +1,7 @@
SUBDIRS = . build contrib data libide libidemm src plugins tools po tests doc help
+ACLOCAL_AMFLAGS = -I build/autotools
+
INTLTOOL_FILES = \
intltool-extract.in \
intltool-merge.in \
diff --git a/build/autotools/ax_append_compile_flags.m4 b/build/autotools/ax_append_compile_flags.m4
index dc7b866..2bb27ef 100644
--- a/build/autotools/ax_append_compile_flags.m4
+++ b/build/autotools/ax_append_compile_flags.m4
@@ -4,7 +4,7 @@
#
# SYNOPSIS
#
-# AX_APPEND_COMPILE_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS])
+# AX_APPEND_COMPILE_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS], [INPUT])
#
# DESCRIPTION
#
@@ -20,6 +20,8 @@
# 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.
#
+# INPUT gives an alternative input source to AC_COMPILE_IFELSE.
+#
# 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.
@@ -54,12 +56,12 @@
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.
-#serial 4
+#serial 5
AC_DEFUN([AX_APPEND_COMPILE_FLAGS],
[AX_REQUIRE_DEFINED([AX_CHECK_COMPILE_FLAG])
AX_REQUIRE_DEFINED([AX_APPEND_FLAG])
for flag in $1; do
- AX_CHECK_COMPILE_FLAG([$flag], [AX_APPEND_FLAG([$flag], [$2])], [], [$3])
+ AX_CHECK_COMPILE_FLAG([$flag], [AX_APPEND_FLAG([$flag], [$2])], [], [$3], [$4])
done
])dnl AX_APPEND_COMPILE_FLAGS
diff --git a/build/autotools/ax_cxx_compile_stdcxx.m4 b/build/autotools/ax_cxx_compile_stdcxx.m4
new file mode 100644
index 0000000..8adc765
--- /dev/null
+++ b/build/autotools/ax_cxx_compile_stdcxx.m4
@@ -0,0 +1,556 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional])
+#
+# DESCRIPTION
+#
+# Check for baseline language coverage in the compiler for the specified
+# version of the C++ standard. If necessary, add switches to CXX to
+# enable support. VERSION may be '11' (for the C++11 standard) or '14'
+# (for the C++14 standard).
+#
+# The second 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.
+#
+# The third argument, if specified 'mandatory' or if left unspecified,
+# indicates that baseline support for the specified C++ standard is
+# required and that the macro should error out if no mode with that
+# support is found. If specified 'optional', then configuration proceeds
+# regardless, after defining HAVE_CXX${VERSION} if and only if a
+# supporting mode is found.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Benjamin Kosnik <bkoz redhat com>
+# Copyright (c) 2012 Zack Weinberg <zackw panix com>
+# Copyright (c) 2013 Roy Stogner <roystgnr ices utexas edu>
+# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov google com>
+# Copyright (c) 2015 Paul Norman <penorman mac com>
+# Copyright (c) 2015 Moritz Klammler <moritz klammler eu>
+#
+# 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 3
+
+dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro
+dnl (serial version number 13).
+
+AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
+ m4_if([$1], [11], [],
+ [$1], [14], [],
+ [$1], [17], [m4_fatal([support for C++17 not yet implemented in AX_CXX_COMPILE_STDCXX])],
+ [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl
+ m4_if([$2], [], [],
+ [$2], [ext], [],
+ [$2], [noext], [],
+ [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX])])dnl
+ m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true],
+ [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true],
+ [$3], [optional], [ax_cxx_compile_cxx$1_required=false],
+ [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])])
+ AC_LANG_PUSH([C++])dnl
+ ac_success=no
+ AC_CACHE_CHECK(whether $CXX supports C++$1 features by default,
+ ax_cv_cxx_compile_cxx$1,
+ [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
+ [ax_cv_cxx_compile_cxx$1=yes],
+ [ax_cv_cxx_compile_cxx$1=no])])
+ if test x$ax_cv_cxx_compile_cxx$1 = xyes; then
+ ac_success=yes
+ fi
+
+ m4_if([$2], [noext], [], [dnl
+ if test x$ac_success = xno; then
+ for switch in -std=gnu++$1 -std=gnu++0x; do
+ cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
+ AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
+ $cachevar,
+ [ac_save_CXX="$CXX"
+ CXX="$CXX $switch"
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
+ [eval $cachevar=yes],
+ [eval $cachevar=no])
+ CXX="$ac_save_CXX"])
+ if eval test x\$$cachevar = xyes; then
+ CXX="$CXX $switch"
+ ac_success=yes
+ break
+ fi
+ done
+ fi])
+
+ m4_if([$2], [ext], [], [dnl
+ if test x$ac_success = xno; then
+ dnl HP's aCC needs +std=c++11 according to:
+ dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf
+ dnl Cray's crayCC needs "-h std=c++11"
+ for switch in -std=c++$1 -std=c++0x +std=c++$1 "-h std=c++$1"; do
+ cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
+ AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
+ $cachevar,
+ [ac_save_CXX="$CXX"
+ CXX="$CXX $switch"
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
+ [eval $cachevar=yes],
+ [eval $cachevar=no])
+ CXX="$ac_save_CXX"])
+ if eval test x\$$cachevar = xyes; then
+ CXX="$CXX $switch"
+ ac_success=yes
+ break
+ fi
+ done
+ fi])
+ AC_LANG_POP([C++])
+ if test x$ax_cxx_compile_cxx$1_required = xtrue; then
+ if test x$ac_success = xno; then
+ AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.])
+ fi
+ fi
+ if test x$ac_success = xno; then
+ HAVE_CXX$1=0
+ AC_MSG_NOTICE([No compiler with C++$1 support was found])
+ else
+ HAVE_CXX$1=1
+ AC_DEFINE(HAVE_CXX$1,1,
+ [define if the compiler supports basic C++$1 syntax])
+ fi
+ AC_SUBST(HAVE_CXX$1)
+])
+
+
+dnl Test body for checking C++11 support
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11],
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
+)
+
+
+dnl Test body for checking C++14 support
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14],
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
+)
+
+
+dnl Tests for new features in C++11
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[
+
+// If the compiler admits that it is not ready for C++11, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201103L
+
+#error "This is not a C++11 compiler"
+
+#else
+
+namespace cxx11
+{
+
+ namespace test_static_assert
+ {
+
+ template <typename T>
+ struct check
+ {
+ static_assert(sizeof(int) <= sizeof(T), "not big enough");
+ };
+
+ }
+
+ namespace test_final_override
+ {
+
+ struct Base
+ {
+ virtual void f() {}
+ };
+
+ struct Derived : public Base
+ {
+ virtual void f() override {}
+ };
+
+ }
+
+ namespace test_double_right_angle_brackets
+ {
+
+ template < typename T >
+ struct check {};
+
+ typedef check<void> single_type;
+ typedef check<check<void>> double_type;
+ typedef check<check<check<void>>> triple_type;
+ typedef check<check<check<check<void>>>> quadruple_type;
+
+ }
+
+ namespace test_decltype
+ {
+
+ int
+ f()
+ {
+ int a = 1;
+ decltype(a) b = 2;
+ return a + b;
+ }
+
+ }
+
+ namespace test_type_deduction
+ {
+
+ template < typename T1, typename T2 >
+ struct is_same
+ {
+ static const bool value = false;
+ };
+
+ template < typename T >
+ struct is_same<T, T>
+ {
+ static const bool value = true;
+ };
+
+ template < typename T1, typename T2 >
+ auto
+ add(T1 a1, T2 a2) -> decltype(a1 + a2)
+ {
+ return a1 + a2;
+ }
+
+ int
+ test(const int c, volatile int v)
+ {
+ static_assert(is_same<int, decltype(0)>::value == true, "");
+ static_assert(is_same<int, decltype(c)>::value == false, "");
+ static_assert(is_same<int, decltype(v)>::value == false, "");
+ auto ac = c;
+ auto av = v;
+ auto sumi = ac + av + 'x';
+ auto sumf = ac + av + 1.0;
+ static_assert(is_same<int, decltype(ac)>::value == true, "");
+ static_assert(is_same<int, decltype(av)>::value == true, "");
+ static_assert(is_same<int, decltype(sumi)>::value == true, "");
+ static_assert(is_same<int, decltype(sumf)>::value == false, "");
+ static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
+ return (sumf > 0.0) ? sumi : add(c, v);
+ }
+
+ }
+
+ namespace test_noexcept
+ {
+
+ int f() { return 0; }
+ int g() noexcept { return 0; }
+
+ static_assert(noexcept(f()) == false, "");
+ static_assert(noexcept(g()) == true, "");
+
+ }
+
+ namespace test_constexpr
+ {
+
+ template < typename CharT >
+ unsigned long constexpr
+ strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
+ {
+ return *s ? strlen_c_r(s + 1, acc + 1) : acc;
+ }
+
+ template < typename CharT >
+ unsigned long constexpr
+ strlen_c(const CharT *const s) noexcept
+ {
+ return strlen_c_r(s, 0UL);
+ }
+
+ static_assert(strlen_c("") == 0UL, "");
+ static_assert(strlen_c("1") == 1UL, "");
+ static_assert(strlen_c("example") == 7UL, "");
+ static_assert(strlen_c("another\0example") == 7UL, "");
+
+ }
+
+ namespace test_rvalue_references
+ {
+
+ template < int N >
+ struct answer
+ {
+ static constexpr int value = N;
+ };
+
+ answer<1> f(int&) { return answer<1>(); }
+ answer<2> f(const int&) { return answer<2>(); }
+ answer<3> f(int&&) { return answer<3>(); }
+
+ void
+ test()
+ {
+ int i = 0;
+ const int c = 0;
+ static_assert(decltype(f(i))::value == 1, "");
+ static_assert(decltype(f(c))::value == 2, "");
+ static_assert(decltype(f(0))::value == 3, "");
+ }
+
+ }
+
+ namespace test_uniform_initialization
+ {
+
+ struct test
+ {
+ static const int zero {};
+ static const int one {1};
+ };
+
+ static_assert(test::zero == 0, "");
+ static_assert(test::one == 1, "");
+
+ }
+
+ namespace test_lambdas
+ {
+
+ void
+ test1()
+ {
+ auto lambda1 = [](){};
+ auto lambda2 = lambda1;
+ lambda1();
+ lambda2();
+ }
+
+ int
+ test2()
+ {
+ auto a = [](int i, int j){ return i + j; }(1, 2);
+ auto b = []() -> int { return '0'; }();
+ auto c = [=](){ return a + b; }();
+ auto d = [&](){ return c; }();
+ auto e = [a, &b](int x) mutable {
+ const auto identity = [](int y){ return y; };
+ for (auto i = 0; i < a; ++i)
+ a += b--;
+ return x + identity(a + b);
+ }(0);
+ return a + b + c + d + e;
+ }
+
+ int
+ test3()
+ {
+ const auto nullary = [](){ return 0; };
+ const auto unary = [](int x){ return x; };
+ using nullary_t = decltype(nullary);
+ using unary_t = decltype(unary);
+ const auto higher1st = [](nullary_t f){ return f(); };
+ const auto higher2nd = [unary](nullary_t f1){
+ return [unary, f1](unary_t f2){ return f2(unary(f1())); };
+ };
+ return higher1st(nullary) + higher2nd(nullary)(unary);
+ }
+
+ }
+
+ namespace test_variadic_templates
+ {
+
+ template <int...>
+ struct sum;
+
+ template <int N0, int... N1toN>
+ struct sum<N0, N1toN...>
+ {
+ static constexpr auto value = N0 + sum<N1toN...>::value;
+ };
+
+ template <>
+ struct sum<>
+ {
+ static constexpr auto value = 0;
+ };
+
+ static_assert(sum<>::value == 0, "");
+ static_assert(sum<1>::value == 1, "");
+ static_assert(sum<23>::value == 23, "");
+ static_assert(sum<1, 2>::value == 3, "");
+ static_assert(sum<5, 5, 11>::value == 21, "");
+ static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
+
+ }
+
+ // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
+ // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
+ // because of this.
+ namespace test_template_alias_sfinae
+ {
+
+ struct foo {};
+
+ template<typename T>
+ using member = typename T::member_type;
+
+ template<typename T>
+ void func(...) {}
+
+ template<typename T>
+ void func(member<T>*) {}
+
+ void test();
+
+ void test() { func<foo>(0); }
+
+ }
+
+} // namespace cxx11
+
+#endif // __cplusplus >= 201103L
+
+]])
+
+
+dnl Tests for new features in C++14
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[
+
+// If the compiler admits that it is not ready for C++14, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201402L
+
+#error "This is not a C++14 compiler"
+
+#else
+
+namespace cxx14
+{
+
+ namespace test_polymorphic_lambdas
+ {
+
+ int
+ test()
+ {
+ const auto lambda = [](auto&&... args){
+ const auto istiny = [](auto x){
+ return (sizeof(x) == 1UL) ? 1 : 0;
+ };
+ const int aretiny[] = { istiny(args)... };
+ return aretiny[0];
+ };
+ return lambda(1, 1L, 1.0f, '1');
+ }
+
+ }
+
+ namespace test_binary_literals
+ {
+
+ constexpr auto ivii = 0b0000000000101010;
+ static_assert(ivii == 42, "wrong value");
+
+ }
+
+ namespace test_generalized_constexpr
+ {
+
+ template < typename CharT >
+ constexpr unsigned long
+ strlen_c(const CharT *const s) noexcept
+ {
+ auto length = 0UL;
+ for (auto p = s; *p; ++p)
+ ++length;
+ return length;
+ }
+
+ static_assert(strlen_c("") == 0UL, "");
+ static_assert(strlen_c("x") == 1UL, "");
+ static_assert(strlen_c("test") == 4UL, "");
+ static_assert(strlen_c("another\0test") == 7UL, "");
+
+ }
+
+ namespace test_lambda_init_capture
+ {
+
+ int
+ test()
+ {
+ auto x = 0;
+ const auto lambda1 = [a = x](int b){ return a + b; };
+ const auto lambda2 = [a = lambda1(x)](){ return a; };
+ return lambda2();
+ }
+
+ }
+
+ namespace test_digit_seperators
+ {
+
+ constexpr auto ten_million = 100'000'000;
+ static_assert(ten_million == 100000000, "");
+
+ }
+
+ namespace test_return_type_deduction
+ {
+
+ auto f(int& x) { return x; }
+ decltype(auto) g(int& x) { return x; }
+
+ template < typename T1, typename T2 >
+ struct is_same
+ {
+ static constexpr auto value = false;
+ };
+
+ template < typename T >
+ struct is_same<T, T>
+ {
+ static constexpr auto value = true;
+ };
+
+ int
+ test()
+ {
+ auto x = 0;
+ static_assert(is_same<int, decltype(f(x))>::value, "");
+ static_assert(is_same<int&, decltype(g(x))>::value, "");
+ return x;
+ }
+
+ }
+
+} // namespace cxx14
+
+#endif // __cplusplus >= 201402L
+
+]])
diff --git a/build/autotools/ax_cxx_compile_stdcxx_11.m4 b/build/autotools/ax_cxx_compile_stdcxx_11.m4
index 516da37..b3d4bfd 100644
--- a/build/autotools/ax_cxx_compile_stdcxx_11.m4
+++ b/build/autotools/ax_cxx_compile_stdcxx_11.m4
@@ -4,23 +4,19 @@
#
# SYNOPSIS
#
-# AX_CXX_COMPILE_STDCXX_11([ext|noext],[mandatory|optional])
+# AX_CXX_COMPILE_STDCXX_11([ext|noext], [mandatory|optional])
#
# DESCRIPTION
#
# Check for baseline language coverage in the compiler for the C++11
-# standard; if necessary, add switches to CXXFLAGS to enable support.
+# standard; if necessary, add switches to CXX to enable support.
#
-# The first 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.
-#
-# The second argument, if specified 'mandatory' or if left unspecified,
-# indicates that baseline C++11 support is required and that the macro
-# should error out if no mode with that support is found. If specified
-# 'optional', then configuration proceeds regardless, after defining
-# HAVE_CXX11 if and only if a supporting mode is found.
+# This macro is a convenience alias for calling the AX_CXX_COMPILE_STDCXX
+# macro with the version set to C++11. The two optional arguments are
+# forwarded literally as the second and third argument respectively.
+# Please see the documentation for the AX_CXX_COMPILE_STDCXX macro for
+# more information. If you want to use this macro, you also need to
+# download the ax_cxx_compile_stdcxx.m4 file.
#
# LICENSE
#
@@ -29,144 +25,15 @@
# Copyright (c) 2013 Roy Stogner <roystgnr ices utexas edu>
# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov google com>
# Copyright (c) 2015 Paul Norman <penorman mac com>
+# Copyright (c) 2015 Moritz Klammler <moritz klammler eu>
#
# 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 13
-
-m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody], [[
- template <typename T>
- struct check
- {
- static_assert(sizeof(int) <= sizeof(T), "not big enough");
- };
-
- struct Base {
- virtual void f() {}
- };
- struct Child : public Base {
- virtual void f() override {}
- };
-
- typedef check<check<bool>> right_angle_brackets;
-
- int a;
- decltype(a) b;
-
- typedef check<int> check_type;
- check_type c;
- check_type&& cr = static_cast<check_type&&>(c);
-
- auto d = a;
- auto l = [](){};
- // Prevent Clang error: unused variable 'l' [-Werror,-Wunused-variable]
- struct use_l { use_l() { l(); } };
-
- // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
- // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function because of this
- namespace test_template_alias_sfinae {
- struct foo {};
-
- template<typename T>
- using member = typename T::member_type;
-
- template<typename T>
- void func(...) {}
-
- template<typename T>
- void func(member<T>*) {}
-
- void test();
-
- void test() {
- func<foo>(0);
- }
- }
-
- // Check for C++11 attribute support
- void noret [[noreturn]] () { throw 0; }
-]])
-
-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
- m4_if([$2], [], [ax_cxx_compile_cxx11_required=true],
- [$2], [mandatory], [ax_cxx_compile_cxx11_required=true],
- [$2], [optional], [ax_cxx_compile_cxx11_required=false],
- [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_11])])
- AC_LANG_PUSH([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])
+#serial 15
- m4_if([$1], [ext], [], [dnl
- if test x$ac_success = xno; then
- dnl HP's aCC needs +std=c++11 according to:
- dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf
- dnl Cray's crayCC needs "-h std=c++11"
- for switch in -std=c++11 -std=c++0x +std=c++11 "-h std=c++11"; 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])
- AC_LANG_POP([C++])
- if test x$ax_cxx_compile_cxx11_required = xtrue; then
- if test x$ac_success = xno; then
- AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.])
- fi
- else
- if test x$ac_success = xno; then
- HAVE_CXX11=0
- AC_MSG_NOTICE([No compiler with C++11 support was found])
- else
- HAVE_CXX11=1
- AC_DEFINE(HAVE_CXX11,1,
- [define if the compiler supports basic C++11 syntax])
- fi
+include([ax_cxx_compile_stdcxx.m4])
- AC_SUBST(HAVE_CXX11)
- fi
-])
+AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [AX_CXX_COMPILE_STDCXX([11], [$1], [$2])])
diff --git a/build/autotools/mm-ax_cxx_compile_stdcxx.m4 b/build/autotools/mm-ax_cxx_compile_stdcxx.m4
new file mode 100644
index 0000000..7cc8e3e
--- /dev/null
+++ b/build/autotools/mm-ax_cxx_compile_stdcxx.m4
@@ -0,0 +1,561 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# MM_AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional])
+#
+# DESCRIPTION
+#
+# Check for baseline language coverage in the compiler for the specified
+# version of the C++ standard. If necessary, add switches to CXXFLAGS to
+# enable support. VERSION may be '11' (for the C++11 standard) or '14'
+# (for the C++14 standard).
+#
+# The second 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.
+#
+# The third argument, if specified 'mandatory' or if left unspecified,
+# indicates that baseline support for the specified C++ standard is
+# required and that the macro should error out if no mode with that
+# support is found. If specified 'optional', then configuration proceeds
+# regardless, after defining HAVE_CXX${VERSION} if and only if a
+# supporting mode is found.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Benjamin Kosnik <bkoz redhat com>
+# Copyright (c) 2012 Zack Weinberg <zackw panix com>
+# Copyright (c) 2013 Roy Stogner <roystgnr ices utexas edu>
+# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov google com>
+# Copyright (c) 2015 Paul Norman <penorman mac com>
+# Copyright (c) 2015 Moritz Klammler <moritz klammler eu>
+#
+# 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.
+
+# Copied from ax_cxx_compile_stdcxx.m4 and added MM_ prefix to avoid
+# possible conflict with AX_CXX_COMPILE_STDCXX in other modules.
+
+#serial 1
+
+dnl This macro is based on the code from the MM_AX_CXX_COMPILE_STDCXX_11 macro
+dnl (serial version number 13).
+
+AC_DEFUN([MM_AX_CXX_COMPILE_STDCXX], [dnl
+ m4_if([$1], [11], [],
+ [$1], [14], [],
+ [$1], [17], [m4_fatal([support for C++17 not yet implemented in MM_AX_CXX_COMPILE_STDCXX])],
+ [m4_fatal([invalid first argument `$1' to MM_AX_CXX_COMPILE_STDCXX])])dnl
+ m4_if([$2], [], [],
+ [$2], [ext], [],
+ [$2], [noext], [],
+ [m4_fatal([invalid second argument `$2' to MM_AX_CXX_COMPILE_STDCXX])])dnl
+ m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true],
+ [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true],
+ [$3], [optional], [ax_cxx_compile_cxx$1_required=false],
+ [m4_fatal([invalid third argument `$3' to MM_AX_CXX_COMPILE_STDCXX])])
+ AC_LANG_PUSH([C++])dnl
+ ac_success=no
+ AC_CACHE_CHECK(whether $CXX supports C++$1 features by default,
+ ax_cv_cxx_compile_cxx$1,
+ [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_MM_AX_CXX_COMPILE_STDCXX_testbody_$1])],
+ [ax_cv_cxx_compile_cxx$1=yes],
+ [ax_cv_cxx_compile_cxx$1=no])])
+ if test x$ax_cv_cxx_compile_cxx$1 = xyes; then
+ ac_success=yes
+ fi
+
+ m4_if([$2], [noext], [], [dnl
+ if test x$ac_success = xno; then
+ for switch in -std=gnu++$1 -std=gnu++0x; do
+ cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
+ AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
+ $cachevar,
+ [ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS $switch"
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([_MM_AX_CXX_COMPILE_STDCXX_testbody_$1])],
+ [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([$2], [ext], [], [dnl
+ if test x$ac_success = xno; then
+ dnl HP's aCC needs +std=c++11 according to:
+ dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf
+ dnl Cray's crayCC needs "-h std=c++11"
+ for switch in -std=c++$1 -std=c++0x +std=c++$1 "-h std=c++$1"; do
+ cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
+ AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
+ $cachevar,
+ [ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS $switch"
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([_MM_AX_CXX_COMPILE_STDCXX_testbody_$1])],
+ [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])
+ AC_LANG_POP([C++])
+ if test x$ax_cxx_compile_cxx$1_required = xtrue; then
+ if test x$ac_success = xno; then
+ AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.])
+ fi
+ else
+ if test x$ac_success = xno; then
+ HAVE_CXX$1=0
+ AC_MSG_NOTICE([No compiler with C++$1 support was found])
+ else
+ HAVE_CXX$1=1
+ AC_DEFINE(HAVE_CXX$1,1,
+ [define if the compiler supports basic C++$1 syntax])
+ fi
+
+ AC_SUBST(HAVE_CXX$1)
+ fi
+])
+
+
+dnl Test body for checking C++11 support
+
+m4_define([_MM_AX_CXX_COMPILE_STDCXX_testbody_11],
+ _MM_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
+)
+
+
+dnl Test body for checking C++14 support
+
+m4_define([_MM_AX_CXX_COMPILE_STDCXX_testbody_14],
+ _MM_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
+ _MM_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
+)
+
+
+dnl Tests for new features in C++11
+
+m4_define([_MM_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[
+
+// If the compiler admits that it is not ready for C++11, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201103L
+
+#error "This is not a C++11 compiler"
+
+#else
+
+namespace cxx11
+{
+
+ namespace test_static_assert
+ {
+
+ template <typename T>
+ struct check
+ {
+ static_assert(sizeof(int) <= sizeof(T), "not big enough");
+ };
+
+ }
+
+ namespace test_final_override
+ {
+
+ struct Base
+ {
+ virtual void f() {}
+ };
+
+ struct Derived : public Base
+ {
+ virtual void f() override {}
+ };
+
+ }
+
+ namespace test_double_right_angle_brackets
+ {
+
+ template < typename T >
+ struct check {};
+
+ typedef check<void> single_type;
+ typedef check<check<void>> double_type;
+ typedef check<check<check<void>>> triple_type;
+ typedef check<check<check<check<void>>>> quadruple_type;
+
+ }
+
+ namespace test_decltype
+ {
+
+ int
+ f()
+ {
+ int a = 1;
+ decltype(a) b = 2;
+ return a + b;
+ }
+
+ }
+
+ namespace test_type_deduction
+ {
+
+ template < typename T1, typename T2 >
+ struct is_same
+ {
+ static const bool value = false;
+ };
+
+ template < typename T >
+ struct is_same<T, T>
+ {
+ static const bool value = true;
+ };
+
+ template < typename T1, typename T2 >
+ auto
+ add(T1 a1, T2 a2) -> decltype(a1 + a2)
+ {
+ return a1 + a2;
+ }
+
+ int
+ test(const int c, volatile int v)
+ {
+ static_assert(is_same<int, decltype(0)>::value == true, "");
+ static_assert(is_same<int, decltype(c)>::value == false, "");
+ static_assert(is_same<int, decltype(v)>::value == false, "");
+ auto ac = c;
+ auto av = v;
+ auto sumi = ac + av + 'x';
+ auto sumf = ac + av + 1.0;
+ static_assert(is_same<int, decltype(ac)>::value == true, "");
+ static_assert(is_same<int, decltype(av)>::value == true, "");
+ static_assert(is_same<int, decltype(sumi)>::value == true, "");
+ static_assert(is_same<int, decltype(sumf)>::value == false, "");
+ static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
+ return (sumf > 0.0) ? sumi : add(c, v);
+ }
+
+ }
+
+ namespace test_noexcept
+ {
+
+ int f() { return 0; }
+ int g() noexcept { return 0; }
+
+ static_assert(noexcept(f()) == false, "");
+ static_assert(noexcept(g()) == true, "");
+
+ }
+
+ namespace test_constexpr
+ {
+
+ template < typename CharT >
+ unsigned long constexpr
+ strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
+ {
+ return *s ? strlen_c_r(s + 1, acc + 1) : acc;
+ }
+
+ template < typename CharT >
+ unsigned long constexpr
+ strlen_c(const CharT *const s) noexcept
+ {
+ return strlen_c_r(s, 0UL);
+ }
+
+ static_assert(strlen_c("") == 0UL, "");
+ static_assert(strlen_c("1") == 1UL, "");
+ static_assert(strlen_c("example") == 7UL, "");
+ static_assert(strlen_c("another\0example") == 7UL, "");
+
+ }
+
+ namespace test_rvalue_references
+ {
+
+ template < int N >
+ struct answer
+ {
+ static constexpr int value = N;
+ };
+
+ answer<1> f(int&) { return answer<1>(); }
+ answer<2> f(const int&) { return answer<2>(); }
+ answer<3> f(int&&) { return answer<3>(); }
+
+ void
+ test()
+ {
+ int i = 0;
+ const int c = 0;
+ static_assert(decltype(f(i))::value == 1, "");
+ static_assert(decltype(f(c))::value == 2, "");
+ static_assert(decltype(f(0))::value == 3, "");
+ }
+
+ }
+
+ namespace test_uniform_initialization
+ {
+
+ struct test
+ {
+ static const int zero {};
+ static const int one {1};
+ };
+
+ static_assert(test::zero == 0, "");
+ static_assert(test::one == 1, "");
+
+ }
+
+ namespace test_lambdas
+ {
+
+ void
+ test1()
+ {
+ auto lambda1 = [](){};
+ auto lambda2 = lambda1;
+ lambda1();
+ lambda2();
+ }
+
+ int
+ test2()
+ {
+ auto a = [](int i, int j){ return i + j; }(1, 2);
+ auto b = []() -> int { return '0'; }();
+ auto c = [=](){ return a + b; }();
+ auto d = [&](){ return c; }();
+ auto e = [a, &b](int x) mutable {
+ const auto identity = [](int y){ return y; };
+ for (auto i = 0; i < a; ++i)
+ a += b--;
+ return x + identity(a + b);
+ }(0);
+ return a + b + c + d + e;
+ }
+
+ int
+ test3()
+ {
+ const auto nullary = [](){ return 0; };
+ const auto unary = [](int x){ return x; };
+ using nullary_t = decltype(nullary);
+ using unary_t = decltype(unary);
+ const auto higher1st = [](nullary_t f){ return f(); };
+ const auto higher2nd = [unary](nullary_t f1){
+ return [unary, f1](unary_t f2){ return f2(unary(f1())); };
+ };
+ return higher1st(nullary) + higher2nd(nullary)(unary);
+ }
+
+ }
+
+ namespace test_variadic_templates
+ {
+
+ template <int...>
+ struct sum;
+
+ template <int N0, int... N1toN>
+ struct sum<N0, N1toN...>
+ {
+ static constexpr auto value = N0 + sum<N1toN...>::value;
+ };
+
+ template <>
+ struct sum<>
+ {
+ static constexpr auto value = 0;
+ };
+
+ static_assert(sum<>::value == 0, "");
+ static_assert(sum<1>::value == 1, "");
+ static_assert(sum<23>::value == 23, "");
+ static_assert(sum<1, 2>::value == 3, "");
+ static_assert(sum<5, 5, 11>::value == 21, "");
+ static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
+
+ }
+
+ // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
+ // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
+ // because of this.
+ namespace test_template_alias_sfinae
+ {
+
+ struct foo {};
+
+ template<typename T>
+ using member = typename T::member_type;
+
+ template<typename T>
+ void func(...) {}
+
+ template<typename T>
+ void func(member<T>*) {}
+
+ void test();
+
+ void test() { func<foo>(0); }
+
+ }
+
+} // namespace cxx11
+
+#endif // __cplusplus >= 201103L
+
+]])
+
+
+dnl Tests for new features in C++14
+
+m4_define([_MM_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[
+
+// If the compiler admits that it is not ready for C++14, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201402L
+
+#error "This is not a C++14 compiler"
+
+#else
+
+namespace cxx14
+{
+
+ namespace test_polymorphic_lambdas
+ {
+
+ int
+ test()
+ {
+ const auto lambda = [](auto&&... args){
+ const auto istiny = [](auto x){
+ return (sizeof(x) == 1UL) ? 1 : 0;
+ };
+ const int aretiny[] = { istiny(args)... };
+ return aretiny[0];
+ };
+ return lambda(1, 1L, 1.0f, '1');
+ }
+
+ }
+
+ namespace test_binary_literals
+ {
+
+ constexpr auto ivii = 0b0000000000101010;
+ static_assert(ivii == 42, "wrong value");
+
+ }
+
+ namespace test_generalized_constexpr
+ {
+
+ template < typename CharT >
+ constexpr unsigned long
+ strlen_c(const CharT *const s) noexcept
+ {
+ auto length = 0UL;
+ for (auto p = s; *p; ++p)
+ ++length;
+ return length;
+ }
+
+ static_assert(strlen_c("") == 0UL, "");
+ static_assert(strlen_c("x") == 1UL, "");
+ static_assert(strlen_c("test") == 4UL, "");
+ static_assert(strlen_c("another\0test") == 7UL, "");
+
+ }
+
+ namespace test_lambda_init_capture
+ {
+
+ int
+ test()
+ {
+ auto x = 0;
+ const auto lambda1 = [a = x](int b){ return a + b; };
+ const auto lambda2 = [a = lambda1(x)](){ return a; };
+ return lambda2();
+ }
+
+ }
+
+ namespace test_digit_seperators
+ {
+
+ constexpr auto ten_million = 100'000'000;
+ static_assert(ten_million == 100000000, "");
+
+ }
+
+ namespace test_return_type_deduction
+ {
+
+ auto f(int& x) { return x; }
+ decltype(auto) g(int& x) { return x; }
+
+ template < typename T1, typename T2 >
+ struct is_same
+ {
+ static constexpr auto value = false;
+ };
+
+ template < typename T >
+ struct is_same<T, T>
+ {
+ static constexpr auto value = true;
+ };
+
+ int
+ test()
+ {
+ auto x = 0;
+ static_assert(is_same<int, decltype(f(x))>::value, "");
+ static_assert(is_same<int&, decltype(g(x))>::value, "");
+ return x;
+ }
+
+ }
+
+} // namespace cxx14
+
+#endif // __cplusplus >= 201402L
+
+]])
diff --git a/build/autotools/mm-ax_cxx_compile_stdcxx_11.m4 b/build/autotools/mm-ax_cxx_compile_stdcxx_11.m4
new file mode 100644
index 0000000..47aa97a
--- /dev/null
+++ b/build/autotools/mm-ax_cxx_compile_stdcxx_11.m4
@@ -0,0 +1,171 @@
+# ============================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html
+# ============================================================================
+#
+# SYNOPSIS
+#
+# MM_AX_CXX_COMPILE_STDCXX_11([ext|noext],[mandatory|optional])
+#
+# DESCRIPTION
+#
+# Check for baseline language coverage in the compiler for the C++11
+# standard; if necessary, add switches to CXXFLAGS to enable support.
+#
+# The first 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.
+#
+# The second argument, if specified 'mandatory' or if left unspecified,
+# indicates that baseline C++11 support is required and that the macro
+# should error out if no mode with that support is found. If specified
+# 'optional', then configuration proceeds regardless, after defining
+# HAVE_CXX11 if and only if a supporting mode is found.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Benjamin Kosnik <bkoz redhat com>
+# Copyright (c) 2012 Zack Weinberg <zackw panix com>
+# Copyright (c) 2013 Roy Stogner <roystgnr ices utexas edu>
+# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov google com>
+#
+# 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.
+
+# Copied from ax_cxx_compile_stdcxx_11.m4 and added MM_ prefix to avoid
+# possible conflict with AX_CXX_COMPILE_STDCXX_11 in other modules.
+
+#serial 11
+
+m4_define([_MM_AX_CXX_COMPILE_STDCXX_11_testbody], [[
+ template <typename T>
+ struct check
+ {
+ static_assert(sizeof(int) <= sizeof(T), "not big enough");
+ };
+
+ struct Base {
+ virtual void f() {}
+ };
+ struct Child : public Base {
+ virtual void f() override {}
+ };
+
+ typedef check<check<bool>> right_angle_brackets;
+
+ int a;
+ decltype(a) b;
+
+ typedef check<int> check_type;
+ check_type c;
+ check_type&& cr = static_cast<check_type&&>(c);
+
+ auto d = a;
+ auto l = [](){};
+ // Prevent Clang error: unused variable 'l' [-Werror,-Wunused-variable]
+ struct use_l { use_l() { l(); } };
+
+ // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
+ // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function because of this
+ namespace test_template_alias_sfinae {
+ struct foo {};
+
+ template<typename T>
+ using member = typename T::member_type;
+
+ template<typename T>
+ void func(...) {}
+
+ template<typename T>
+ void func(member<T>*) {}
+
+ void test();
+
+ void test() {
+ func<foo>(0);
+ }
+ }
+]])
+
+AC_DEFUN([MM_AX_CXX_COMPILE_STDCXX_11], [dnl
+ m4_if([$1], [], [],
+ [$1], [ext], [],
+ [$1], [noext], [],
+ [m4_fatal([invalid argument `$1' to MM_AX_CXX_COMPILE_STDCXX_11])])dnl
+ m4_if([$2], [], [ax_cxx_compile_cxx11_required=true],
+ [$2], [mandatory], [ax_cxx_compile_cxx11_required=true],
+ [$2], [optional], [ax_cxx_compile_cxx11_required=false],
+ [m4_fatal([invalid second argument `$2' to MM_AX_CXX_COMPILE_STDCXX_11])])
+ AC_LANG_PUSH([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([_MM_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([_MM_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
+ dnl HP's aCC needs +std=c++11 according to:
+ dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf
+ for switch in -std=c++11 -std=c++0x +std=c++11; 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([_MM_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])
+ AC_LANG_POP([C++])
+ if test x$ax_cxx_compile_cxx11_required = xtrue; then
+ if test x$ac_success = xno; then
+ AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.])
+ fi
+ else
+ if test x$ac_success = xno; then
+ HAVE_CXX11=0
+ AC_MSG_NOTICE([No compiler with C++11 support was found])
+ else
+ HAVE_CXX11=1
+ AC_DEFINE(HAVE_CXX11,1,
+ [define if the compiler supports basic C++11 syntax])
+ fi
+
+ AC_SUBST(HAVE_CXX11)
+ fi
+])
+
diff --git a/build/autotools/mm-common.m4 b/build/autotools/mm-common.m4
new file mode 100644
index 0000000..f753d1b
--- /dev/null
+++ b/build/autotools/mm-common.m4
@@ -0,0 +1,47 @@
+## Copyright (c) 2009 Openismus GmbH <http://www.openismus.com/>
+##
+## macros/mm-common.m4. Generated from mm-common.m4.in by configure.
+##
+## mm-common 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 2 of the License,
+## or (at your option) any later version.
+##
+## mm-common 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 mm-common. If not, see <http://www.gnu.org/licenses/>.
+
+#serial 20090814
+
+## _MM_PRE_INIT
+##
+## Private pre-initialization macro for use with AC_REQUIRE(). For now,
+## all it does is register a forbidden token pattern with autom4te, so
+## that unexpanded macro calls in the output can be caught.
+##
+AC_DEFUN([_MM_PRE_INIT], [m4_pattern_forbid([^_?MM_])])
+
+## _MM_PREREQ(this-package, this-version, min-version, user-package)
+##
+m4_define([_MM_PREREQ],
+[dnl
+m4_if(m4_quote(m4_version_compare([$2], [$3])), [-1],
+ [m4_fatal([$4 requires $1 $3 (version $2 is installed)])])[]dnl
+])
+
+## MM_PREREQ(min-version)
+##
+## Require at least mm-common <min-version> to be installed, otherwise
+## abort with a fatal error message. The version is checked statically
+## at the time the configure script is generated.
+##
+AC_DEFUN([MM_PREREQ],
+[dnl
+m4_assert([$# >= 1])[]dnl
+AC_REQUIRE([_MM_PRE_INIT])[]dnl
+_MM_PREREQ([mm-common], [0.9.9], [$1], m4_defn([AC_PACKAGE_NAME]))[]dnl
+])
diff --git a/build/autotools/mm-common.m4.in b/build/autotools/mm-common.m4.in
new file mode 100644
index 0000000..b616327
--- /dev/null
+++ b/build/autotools/mm-common.m4.in
@@ -0,0 +1,47 @@
+## Copyright (c) 2009 Openismus GmbH <http://www.openismus.com/>
+##
+## @configure_input@
+##
+## mm-common 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 2 of the License,
+## or (at your option) any later version.
+##
+## mm-common 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 mm-common. If not, see <http://www.gnu.org/licenses/>.
+
+#serial 20090814
+
+## _MM_PRE_INIT
+##
+## Private pre-initialization macro for use with AC_REQUIRE(). For now,
+## all it does is register a forbidden token pattern with autom4te, so
+## that unexpanded macro calls in the output can be caught.
+##
+AC_DEFUN([_MM_PRE_INIT], [m4_pattern_forbid([^_?MM_])])
+
+## _MM_PREREQ(this-package, this-version, min-version, user-package)
+##
+m4_define([_MM_PREREQ],
+[dnl
+m4_if(m4_quote(m4_version_compare([$2], [$3])), [-1],
+ [m4_fatal([$4 requires $1 $3 (version $2 is installed)])])[]dnl
+])
+
+## MM_PREREQ(min-version)
+##
+## Require at least mm-common <min-version> to be installed, otherwise
+## abort with a fatal error message. The version is checked statically
+## at the time the configure script is generated.
+##
+AC_DEFUN([MM_PREREQ],
+[dnl
+m4_assert([$# >= 1])[]dnl
+AC_REQUIRE([_MM_PRE_INIT])[]dnl
+_MM_PREREQ([ PACKAGE_NAME@], [ PACKAGE_VERSION@], [$1], m4_defn([AC_PACKAGE_NAME]))[]dnl
+])
diff --git a/build/autotools/mm-dietlib.m4 b/build/autotools/mm-dietlib.m4
new file mode 100644
index 0000000..4a2b360
--- /dev/null
+++ b/build/autotools/mm-dietlib.m4
@@ -0,0 +1,118 @@
+## Copyright (c) 2009 Openismus GmbH <http://www.openismus.com/>
+##
+## This file is part of mm-common.
+##
+## mm-common 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 2 of the License,
+## or (at your option) any later version.
+##
+## mm-common 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 mm-common. If not, see <http://www.gnu.org/licenses/>.
+
+#serial 20091224
+
+## _MM_PROG_GCC_VISIBILITY_CHECK
+##
+## Implementation helper macro of MM_PROG_GCC_VISIBILITY(). Pulled
+## in through AC_REQUIRE() so that it will only be expanded once.
+##
+m4_define([_MM_PROG_GCC_VISIBILITY_CHECK],
+[dnl
+AC_PROVIDE([$0])[]dnl
+AC_CACHE_CHECK([for GCC symbol visibility options],
+ [mm_cv_gcc_visibility_cxxflags],
+[dnl
+mm_save_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="$CXXFLAGS -fvisibility=hidden -fvisibility-inlines-hidden"
+dnl
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+#pragma GCC visibility push(default)
+namespace Mm { void __attribute__((__visibility__("hidden"))) mmfunc(); }
+void Mm::mmfunc() {}
+#pragma GCC visibility pop
+]], [[Mm::mmfunc();]])],
+[mm_cv_gcc_visibility_cxxflags='-fvisibility=hidden -fvisibility-inlines-hidden'],
+[mm_cv_gcc_visibility_cxxflags=none])
+dnl
+CXXFLAGS=$mm_save_CXXFLAGS])[]dnl
+])
+
+## MM_PROG_GCC_VISIBILITY(variable-name)
+##
+## Check whether the compiler supports the GNU C++ symbol visibility
+## attributes and command-line options. If explicit symbol visibility is
+## supported, the compiler command-line options for hiding all symbols by
+## default are made available through the specified substitution variable
+## <variable-name>.
+##
+## See also <http://gcc.gnu.org/wiki/Visibility> for more information on
+## symbol visibility and the attributes supported by GCC.
+##
+AC_DEFUN([MM_PROG_GCC_VISIBILITY],
+[dnl
+m4_assert([$# >= 1])[]dnl
+AC_LANG_ASSERT([C++])[]dnl
+AC_REQUIRE([_MM_PRE_INIT])[]dnl
+AC_REQUIRE([_MM_PROG_GCC_VISIBILITY_CHECK])[]dnl
+AS_IF([test "x$mm_cv_gcc_visibility_cxxflags" != xnone],
+ [$1=$mm_cv_gcc_visibility_cxxflags], [$1=])
+AC_SUBST([$1])[]dnl
+])
+
+## _MM_ARG_DISABLE_DEPRECATED_API_OPTION
+##
+## Implementation helper macro of MM_ARG_DISABLE_DEPRECATED_API(). Pulled
+## in through AC_REQUIRE() so that it will only be expanded once.
+##
+m4_define([_MM_ARG_DISABLE_DEPRECATED_API_OPTION],
+[dnl
+AC_PROVIDE([$0])[]dnl
+AC_ARG_ENABLE([deprecated-api],
+ [AS_HELP_STRING([--disable-deprecated-api],
+ [omit deprecated API from the library])],
+ [mm_enable_deprecated_api=$enableval],
+ [mm_enable_deprecated_api=yes])[]dnl
+AS_IF([test "x$mm_enable_deprecated_api" = xno],
+ [AC_MSG_WARN([[Deprecated API will not be built, breaking compatibility.
+Do not use this option for distribution packages.]])],
+ [AC_MSG_NOTICE([[Deprecated API will be built, for backwards-compatibility.]])])
+AM_CONDITIONAL([DISABLE_DEPRECATED_API], [test "x$mm_enable_deprecated_api" = xno])[]dnl
+])
+
+## _MM_ARG_DISABLE_DEPRECATED_API_DEFINE(define-prefix [define-prefix ...])
+##
+## Implementation helper macro of MM_ARG_DISABLE_DEPRECATED_API(). Expands
+## to a list of AC_DEFINE() calls, one for each prefix in the argument list.
+##
+m4_define([_MM_ARG_DISABLE_DEPRECATED_API_DEFINE],
+[m4_foreach_w([mm_prefix], [$1],
+[AC_DEFINE(m4_defn([mm_prefix])[_DISABLE_DEPRECATED], [1],
+ [Define to omit deprecated API from the library.])
+])])
+
+## MM_ARG_DISABLE_DEPRECATED_API([define-prefix [define-prefix ...]])
+##
+## Provide the --disable-deprecated-api configure option, which may be used
+## to trim the size of the resulting library at the cost of breaking binary
+## compatibility. By default, deprecated API will be built.
+##
+## Each <define-prefix> in the whitespace-separated argument list is expanded
+## to a C preprocessor macro name <define-prefix>_DISABLE_DEPRECATED, which
+## will be defined to 1 in the generated configuration header if the option
+## to disable deprecated API is used. The DISABLE_DEPRECATED_API Automake
+## conditional is provided as well.
+##
+AC_DEFUN([MM_ARG_DISABLE_DEPRECATED_API],
+[dnl
+AC_REQUIRE([_MM_PRE_INIT])[]dnl
+AC_REQUIRE([_MM_ARG_DISABLE_DEPRECATED_API_OPTION])[]dnl
+AS_IF([test "x$mm_enable_deprecated_api" = xno],
+ [_MM_ARG_DISABLE_DEPRECATED_API_DEFINE(
+ m4_ifval([$1], [[$1]], [AS_TR_CPP(m4_defn([AC_PACKAGE_TARNAME]))]))])[]dnl
+])
diff --git a/build/autotools/mm-doc.m4 b/build/autotools/mm-doc.m4
new file mode 100644
index 0000000..1e89f7d
--- /dev/null
+++ b/build/autotools/mm-doc.m4
@@ -0,0 +1,252 @@
+## Copyright (c) 2009, 2010, 2011 Openismus GmbH <http://www.openismus.com/>
+##
+## This file is part of mm-common.
+##
+## mm-common 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 2 of the License,
+## or (at your option) any later version.
+##
+## mm-common 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 mm-common. If not, see <http://www.gnu.org/licenses/>.
+
+#serial 20110327
+
+## _MM_CONFIG_DOCTOOL_DIR
+##
+## Query pkg-config for the location of the documentation utilities
+## shared by the GNOME C++ bindings. This is the code path invoked
+## from MM_CONFIG_DOCTOOL_DIR when called without a directory name.
+##
+m4_define([_MM_CONFIG_DOCTOOL_DIR],
+[dnl
+AC_PROVIDE([$0])[]dnl
+AC_REQUIRE([PKG_PROG_PKG_CONFIG])[]dnl
+dnl
+AC_MSG_CHECKING([location of documentation utilities])
+AS_IF([test "x$MMDOCTOOLDIR" = x],
+[
+ MMDOCTOOLDIR=`$PKG_CONFIG --variable=doctooldir mm-common-util 2>&AS_MESSAGE_LOG_FD`
+ AS_IF([test "[$]?" -ne 0],
+ [AC_MSG_ERROR([[not found
+The required module mm-common-util could not be found on this system. If you
+are running a binary distribution and the mm-common package is installed,
+make sure that any separate development package for mm-common is installed
+as well. If you built mm-common yourself, it may be necessary to adjust
+the PKG_CONFIG_PATH environment variable for pkg-config to find it.
+]])])
+])
+AC_MSG_RESULT([$MMDOCTOOLDIR])[]dnl
+])
+
+## MM_CONFIG_DOCTOOL_DIR([directory])
+##
+## Define the location of the documentation utilities shared by the
+## GNOME C++ binding modules. If the <directory> argument is given,
+## it should name a directory relative to the toplevel directory of
+## the source tree.
+##
+## The directory name is used by mm-common-prepare as the destination
+## for copying the required files into the source tree. The files are not
+## distributed if first parameter is empty.
+##
+AC_DEFUN([MM_CONFIG_DOCTOOL_DIR],
+[dnl
+AC_REQUIRE([_MM_PRE_INIT])[]dnl
+AC_REQUIRE([MM_CHECK_GNU_MAKE])[]dnl
+m4_ifval([$1], [MMDOCTOOLDIR='[$]{top_srcdir}/$1'], [AC_REQUIRE([_MM_CONFIG_DOCTOOL_DIR])])
+AM_CONDITIONAL([DIST_DOCTOOLS], [test 'x$1' != 'x'])dnl
+AC_SUBST([MMDOCTOOLDIR])[]dnl
+])
+
+## _MM_ARG_ENABLE_DOCUMENTATION
+##
+## Implementation of MM_ARG_ENABLE_DOCUMENTATION, pulled in indirectly
+## through AC_REQUIRE() to make sure it is expanded only once.
+##
+m4_define([_MM_ARG_ENABLE_DOCUMENTATION],
+[dnl
+AC_PROVIDE([$0])[]dnl
+dnl
+AC_ARG_VAR([DOT], [path to dot utility])[]dnl
+AC_ARG_VAR([DOXYGEN], [path to Doxygen utility])[]dnl
+AC_ARG_VAR([XSLTPROC], [path to xsltproc utility])[]dnl
+dnl
+AC_PATH_PROG([DOT], [dot], [dot])
+AC_PATH_PROG([DOXYGEN], [doxygen], [doxygen])
+AC_PATH_PROG([XSLTPROC], [xsltproc], [xsltproc])
+dnl
+AC_ARG_ENABLE([documentation],
+ [AS_HELP_STRING([--disable-documentation],
+ [do not build or install the documentation])],
+ [ENABLE_DOCUMENTATION=$enableval],
+ [ENABLE_DOCUMENTATION=auto])
+AS_IF([test "x$ENABLE_DOCUMENTATION" != xno],
+[
+ mm_err=
+ AS_IF([test "x$MMDOCTOOLDIR" = x], [mm_err='dnl
+The mm-common-util module is available, but the installation of mm-common on this
+machine is missing the shared documentation utilities of the GNOME C++
+bindings. It may be necessary to upgrade to a more recent release of
+mm-common in order to build '$PACKAGE_NAME' and install the documentation.'],
+ [test "x$PERL" = xperl], [mm_err='Perl is required for installing the documentation.'],
+ [test "x$USE_MAINTAINER_MODE" != xno],
+ [
+ test "x$DOT" != xdot || mm_err=' dot'
+ test "x$DOXYGEN" != xdoxygen || mm_err="$mm_err doxygen"
+ test "x$XSLTPROC" != xxsltproc || mm_err="$mm_err xsltproc"
+ test -z "$mm_err" || mm_err='The documentation cannot be generated because
+not all of the required tools are available:'$mm_err
+ ])
+ AS_IF([test -z "$mm_err"], [ENABLE_DOCUMENTATION=yes],
+ [test "x$ENABLE_DOCUMENTATION" = xyes], [AC_MSG_FAILURE([[$mm_err]])],
+ [ENABLE_DOCUMENTATION=no; AC_MSG_WARN([[$mm_err]])])
+])
+AM_CONDITIONAL([ENABLE_DOCUMENTATION], [test "x$ENABLE_DOCUMENTATION" = xyes])
+AC_SUBST([DOXYGEN_TAGFILES], [[]])
+AC_SUBST([DOCINSTALL_FLAGS], [[]])[]dnl
+])
+
+## MM_ARG_ENABLE_DOCUMENTATION
+##
+## Provide the --disable-documentation configure option. By default,
+## the documentation will be included in the build. If not explicitly
+## disabled, also check whether the necessary tools are installed, and
+## abort if any are missing.
+##
+## The tools checked for are Perl, dot, Doxygen and xsltproc. The
+## substitution variables PERL, DOT, DOXYGEN and XSLTPROC are set to
+## the command paths, unless overridden in the user environment.
+##
+## If the package provides the --enable-maintainer-mode option, the
+## tools dot, Doxygen and xsltproc are mandatory only when maintainer
+## mode is enabled. Perl is required for the installdox utility even
+## if not in maintainer mode.
+##
+AC_DEFUN([MM_ARG_ENABLE_DOCUMENTATION],
+[dnl
+AC_BEFORE([$0], [MM_ARG_WITH_TAGFILE_DOC])[]dnl
+AC_REQUIRE([_MM_PRE_INIT])[]dnl
+AC_REQUIRE([MM_CONFIG_DOCTOOL_DIR])[]dnl
+AC_REQUIRE([MM_PATH_PERL])[]dnl
+AC_REQUIRE([_MM_ARG_ENABLE_DOCUMENTATION])[]dnl
+])
+
+## _MM_TR_URI(shell-expression)
+##
+## Internal macro that expands to a reusable shell construct which
+## functions as a poor man's filesystem path to URI translator.
+## The input <shell-expression> is expanded within double quotes.
+##
+m4_define([_MM_TR_URI],
+[dnl
+[`expr "X$1" : 'X\(.*[^\\/]\)[\\/]*' 2>&]AS_MESSAGE_LOG_FD[ |]dnl
+[ sed 's|[\\]|/|g;s| |%20|g;s|^/|file:///|;s|^.:/|file:///&|' 2>&]AS_MESSAGE_LOG_FD[`]dnl
+])
+
+## _MM_ARG_WITH_TAGFILE_DOC(option-basename, pkg-variable, tagfilename, [module])
+##
+m4_define([_MM_ARG_WITH_TAGFILE_DOC],
+[dnl
+ AC_MSG_CHECKING([for $1 documentation])
+ AC_ARG_WITH([$1-doc],
+ [AS_HELP_STRING([[--with-$1-doc=[TAGFILE ]HTMLREFDIR]],
+ [Link to external $1 documentation]m4_ifval([$4], [[ [auto]]]))],
+ [
+ mm_htmlrefdir=`[expr "X $withval" : ' * \(.*\)' 2>&]AS_MESSAGE_LOG_FD`
+ mm_tagname=`[expr "X/$withval" : '[^ ]*[\\/]\([^\\/@]*\)@' 2>&]AS_MESSAGE_LOG_FD`
+ mm_tagpath=`[expr "X$withval" : 'X\([^ ]*\)@' 2>&]AS_MESSAGE_LOG_FD`
+ test "x$mm_tagname" != x || mm_tagname="$3"
+ test "x$mm_tagpath" != x || mm_tagpath=$mm_tagname[]dnl
+ ], [
+ mm_htmlrefdir=
+ mm_tagname="$3"
+ mm_tagpath=$mm_tagname[]dnl
+ ])
+ # Prepend working direcory if the tag file path starts with ./ or ../
+ AS_CASE([$mm_tagpath], [[.[\\/]*|..[\\/]*]], [mm_tagpath=`pwd`/$mm_tagpath])
+
+m4_ifval([$4], [dnl
+ # If no local directory was specified, get the default from the .pc file
+ AS_IF([test "x$mm_htmlrefdir" = x],
+ [
+ mm_htmlrefdir=`$PKG_CONFIG --variable=htmlrefdir "$4" 2>&AS_MESSAGE_LOG_FD`dnl
+ ])
+ # If the user specified a Web URL, allow it to override the public location
+ AS_CASE([$mm_htmlrefdir], [[http://*|https://*]], [mm_htmlrefpub=$mm_htmlrefdir],
+ [
+ mm_htmlrefpub=`$PKG_CONFIG --variable=htmlrefpub "$4" 2>&AS_MESSAGE_LOG_FD`
+ test "x$mm_htmlrefpub" != x || mm_htmlrefpub=$mm_htmlrefdir
+ test "x$mm_htmlrefdir" != x || mm_htmlrefdir=$mm_htmlrefpub
+ ])
+ # The user-supplied tag-file name takes precedence if it includes the path
+ AS_CASE([$mm_tagpath], [[*[\\/]*]],,
+ [
+ mm_doxytagfile=`$PKG_CONFIG --variable=doxytagfile "$4" 2>&AS_MESSAGE_LOG_FD`
+ test "x$mm_doxytagfile" = x || mm_tagpath=$mm_doxytagfile
+ ])
+ # Remove trailing slashes and translate to URI
+ mm_htmlrefpub=_MM_TR_URI([$mm_htmlrefpub])
+])[]dnl
+ mm_htmlrefdir=_MM_TR_URI([$mm_htmlrefdir])
+
+ AC_MSG_RESULT([$mm_tagpath $mm_htmlrefdir])
+
+ AS_IF([test "x$USE_MAINTAINER_MODE" != xno && test ! -f "$mm_tagpath"],
+ [AC_MSG_WARN([Doxygen tag file $3 not found])])
+ AS_IF([test "x$mm_htmlrefdir" = x],
+ [AC_MSG_WARN([Location of external $1 documentation not set])],
+ [AS_IF([test "x$DOCINSTALL_FLAGS" = x],
+ [DOCINSTALL_FLAGS="-l '$mm_tagname $mm_htmlrefdir/'"],
+ [DOCINSTALL_FLAGS="$DOCINSTALL_FLAGS -l '$mm_tagname $mm_htmlrefdir/'"])])
+
+ AS_IF([test "x$mm_$2" = x], [mm_val=$mm_tagpath], [mm_val="$mm_tagpath=$mm_$2"])
+ AS_IF([test "x$DOXYGEN_TAGFILES" = x],
+ [DOXYGEN_TAGFILES=[\]"$mm_val[\]"],
+ [DOXYGEN_TAGFILES="$DOXYGEN_TAGFILES "[\]"$mm_val[\]"])[]dnl
+])
+
+## MM_ARG_WITH_TAGFILE_DOC(tagfilename, [module])
+##
+## Provide a --with-<tagfilebase>-doc=[/path/tagfile ]htmlrefdir configure
+## option, which may be used to specify the location of a tag file and the
+## path to the corresponding HTML reference documentation. If the project
+## provides the maintainer mode option and maintainer mode is not enabled,
+## the user does not have to provide the full path to the tag file. The
+## full path is only required for rebuilding the documentation.
+##
+## If the optional <module> argument has been specified, and either the tag
+## file or the HTML location have not been overridden by the user already,
+## try to retrieve the missing paths automatically via pkg-config. Also ask
+## pkg-config for the URI to the online documentation, for use as the preset
+## location when the documentation is generated.
+##
+## A warning message will be shown if the HTML path could not be determined.
+## If maintainer mode is active, a warning is also displayed if the tag file
+## could not be found.
+##
+## The results are appended to the substitution variables DOXYGEN_TAGFILES
+## and DOCINSTALL_FLAGS, using the following format:
+##
+## DOXYGEN_TAGFILES = "/path/tagfile=htmlrefpub" [...]
+## DOCINSTALL_FLAGS = -l 'tagfile htmlrefdir' [...]
+##
+## The substitutions are intended to be used for the Doxygen configuration,
+## and as argument list to the doc-install.pl or installdox utility.
+##
+AC_DEFUN([MM_ARG_WITH_TAGFILE_DOC],
+[dnl
+m4_assert([$# >= 1])[]dnl
+m4_ifval([$2], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])])[]dnl
+AC_REQUIRE([MM_CONFIG_DOCTOOL_DIR])[]dnl
+AC_REQUIRE([_MM_ARG_ENABLE_DOCUMENTATION])[]dnl
+dnl
+AS_IF([test "x$ENABLE_DOCUMENTATION" != xno],
+ [_MM_ARG_WITH_TAGFILE_DOC(m4_quote(m4_bpatsubst([$1], [[+]*\([-+][0123456789]\|[._]\).*$])),
+ [htmlref]m4_ifval([$2], [[pub]], [[dir]]), [$1], [$2])])[]dnl
+])
diff --git a/build/autotools/mm-module.m4 b/build/autotools/mm-module.m4
new file mode 100644
index 0000000..028edea
--- /dev/null
+++ b/build/autotools/mm-module.m4
@@ -0,0 +1,87 @@
+## Copyright (c) 2009 Openismus GmbH <http://www.openismus.com/>
+##
+## This file is part of mm-common.
+##
+## mm-common 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 2 of the License,
+## or (at your option) any later version.
+##
+## mm-common 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 mm-common. If not, see <http://www.gnu.org/licenses/>.
+
+#serial 20091228
+
+## _MM_INIT_MODULE_VERSION(basename, BASENAME, [major], [minor], [micro])
+##
+m4_define([_MM_INIT_MODULE_VERSION],
+[dnl
+m4_ifval([$3],
+[AC_SUBST([$2][_MAJOR_VERSION], [$3])
+AC_DEFINE([$2][_MAJOR_VERSION], [$3], [Major version number of $1.])
+])[]dnl
+m4_ifval([$4],
+[AC_SUBST([$2][_MINOR_VERSION], [$4])
+AC_DEFINE([$2][_MINOR_VERSION], [$4], [Minor version number of $1.])
+])[]dnl
+m4_ifval([$5],
+[AC_SUBST([$2][_MICRO_VERSION], [$5])
+AC_DEFINE([$2][_MICRO_VERSION], [$5], [Micro version number of $1.])
+])[]dnl
+])
+
+## _MM_INIT_MODULE_SUBST(module-name, module-version, basename, api-version, BASENAME)
+##
+m4_define([_MM_INIT_MODULE_SUBST],
+[dnl
+AC_SUBST([$5][_MODULE_NAME], ['$1'])
+AC_SUBST([$5][_VERSION], ['$2'])
+m4_ifval([$4],
+[AC_SUBST([$5][_API_VERSION], ['$4'])
+])[]dnl
+_MM_INIT_MODULE_VERSION([$3], [$5], m4_bpatsubst([$2], [[^0123456789]+], [,]))[]dnl
+])
+
+## _MM_INIT_MODULE_BASENAME(module-name, module-version, basename, api-version)
+##
+m4_define([_MM_INIT_MODULE_BASENAME],
+ [_MM_INIT_MODULE_SUBST([$1], [$2], [$3], [$4],
+ m4_quote(AS_TR_CPP(m4_quote(m4_translit([$3], [+], [X])))))])
+
+## MM_INIT_MODULE(module-name, [module-version])
+##
+## Set up substitution variables and macro definitions for a module with
+## the specified pkg-config <module-name> and <module-version> triplet.
+## If no <module-version> is specified, it defaults to the expansion of
+## AC_PACKAGE_VERSION.
+##
+## Substitutions: <BASENAME>_MODULE_NAME <module-name>
+## <BASENAME>_VERSION <module-version>
+## <BASENAME>_API_VERSION <api-version>
+## <BASENAME>_MAJOR_VERSION <major>
+## <BASENAME>_MINOR_VERSION <minor>
+## <BASENAME>_MICRO_VERSION <micro>
+##
+## Macro defines: <BASENAME>_MAJOR_VERSION <major>
+## <BASENAME>_MINOR_VERSION <minor>
+## <BASENAME>_MICRO_VERSION <micro>
+##
+## Where: <BASENAME> AS_TR_CPP(<basename> =~ tr/+/X/)
+## <basename>[-<api-version>] <module-name>
+## <major>.<minor>.<micro>[.*] <module-version>
+##
+AC_DEFUN([MM_INIT_MODULE],
+[dnl
+m4_assert([$# >= 1])[]dnl
+AC_REQUIRE([_MM_PRE_INIT])[]dnl
+AC_REQUIRE([MM_CHECK_GNU_MAKE])[]dnl
+_MM_INIT_MODULE_BASENAME([$1],
+ m4_quote(m4_ifval([$2], [$2], m4_defn([AC_PACKAGE_VERSION]))),
+ m4_quote(m4_bpatsubst([$1], [[-.0123456789]+$])),
+ m4_quote(m4_bregexp([$1], [-?\([.0123456789]+\)$], [\1])))[]dnl
+])
diff --git a/build/autotools/mm-pkg.m4 b/build/autotools/mm-pkg.m4
new file mode 100644
index 0000000..86f94d2
--- /dev/null
+++ b/build/autotools/mm-pkg.m4
@@ -0,0 +1,123 @@
+## Copyright (c) 2009 Openismus GmbH <http://www.openismus.com/>
+##
+## This file is part of mm-common.
+##
+## mm-common 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 2 of the License,
+## or (at your option) any later version.
+##
+## mm-common 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 mm-common. If not, see <http://www.gnu.org/licenses/>.
+
+#serial 20090822
+
+## _MM_CHECK_GNU_MAKE
+##
+## Implementation of MM_CHECK_GNU_MAKE.
+##
+m4_define([_MM_CHECK_GNU_MAKE],
+[dnl
+AC_PROVIDE([$0])[]dnl
+AC_MSG_CHECKING([whether [$]{MAKE-make} supports GNU make features])
+cat >conftest.make <<'_MMEOF'
+override reverse = [$](2)[$](subst ,, )[$](1)
+override result := [$](word 2,[$](call reverse,success,failure))
+all: ; test '[$](result)' = success
+.PHONY: all
+_MMEOF
+AS_IF([[$]{MAKE-make} -f conftest.make >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD],
+ [mm_gnu_make=yes], [mm_gnu_make=no])
+rm -f conftest.make
+AC_MSG_RESULT([$mm_gnu_make])
+AS_IF([test "x$mm_gnu_make" != xyes],
+ [AC_MSG_FAILURE([[The GNU make program is required to build $PACKAGE_NAME.]])])[]dnl
+])
+
+## MM_CHECK_GNU_MAKE
+##
+## Check whether the installed make program supports GNU make features.
+## If the test fails, display an error message and abort.
+##
+AC_DEFUN([MM_CHECK_GNU_MAKE],
+[dnl
+AC_REQUIRE([_MM_PRE_INIT])[]dnl
+AC_REQUIRE([_MM_CHECK_GNU_MAKE])[]dnl
+])
+
+## _MM_PATH_PERL
+##
+## Internal helper macro for MM_PATH_PERL.
+##
+m4_define([_MM_PATH_PERL],
+[dnl
+AC_PROVIDE([$0])[]dnl
+AC_ARG_VAR([PERL], [path to Perl interpreter])[]dnl
+AC_PATH_PROG([PERL], [perl], [perl])[]dnl
+])
+
+## MM_PATH_PERL
+##
+## Locate the Perl interpreter and set the substitution variable PERL
+## to the full path to the perl executable if found, or to 'perl' if
+## not found. Also call AC_ARG_VAR() on the PERL variable.
+##
+AC_DEFUN([MM_PATH_PERL],
+[dnl
+AC_REQUIRE([_MM_PRE_INIT])[]dnl
+AC_REQUIRE([_MM_PATH_PERL])[]dnl
+])
+
+## _MM_CHECK_PERL(min-version, [action-if-found], [action-if-not-found])
+##
+## Internal helper macro for MM_CHECK_PERL.
+##
+m4_define([_MM_CHECK_PERL],
+[dnl
+AS_IF([$PERL -e "require v$1; exit 0;" >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD],
+ [$2], m4_ifval([$2$3], [[$3]],
+ [[AC_MSG_FAILURE([[At least Perl ]$1[ is required to build $PACKAGE_NAME.]])]]))[]dnl
+])
+
+## MM_CHECK_PERL([min-version], [action-if-found], [action-if-not-found])
+##
+## Run MM_PATH_PERL and then check whether the Perl interpreter can be
+## executed and whether it meets the version requirement of <min-version>
+## or later. Execute <action-if-found> on success, otherwise execute
+## <action-if-not-found>. The default value of <min-version> is 5.6.0
+## if the argument is empty.
+##
+AC_DEFUN([MM_CHECK_PERL],
+[dnl
+AC_REQUIRE([_MM_PRE_INIT])[]dnl
+AC_REQUIRE([_MM_PATH_PERL])[]dnl
+_MM_CHECK_PERL(m4_ifval([$1], [[$1]], [[5.6.0]]), [$2], [$3])[]dnl
+])
+
+## MM_PKG_CONFIG_SUBST(variable, arguments, [action-if-found], [action-if-not-found])
+##
+## Run the pkg-config utility with the specified command-line <arguments>
+## and capture its standard output in the named shell <variable>. If the
+## command exited successfully, execute <action-if-found> in the shell if
+## specified. If the command failed, run <action-if-not-found> if given,
+## otherwise ignore the error.
+##
+AC_DEFUN([MM_PKG_CONFIG_SUBST],
+[dnl
+m4_assert([$# >= 2])[]dnl
+AC_REQUIRE([_MM_PRE_INIT])[]dnl
+AC_REQUIRE([PKG_PROG_PKG_CONFIG])[]dnl
+AC_MSG_CHECKING([for $1])
+dnl
+AS_IF([test -z "[$]{$1+set}"],
+ [$1=`$PKG_CONFIG $2 2>&AS_MESSAGE_LOG_FD`
+ AS_IF([test "[$]?" -eq 0], [$3], [$4])])
+dnl
+AC_MSG_RESULT([[$]$1])
+AC_SUBST([$1])[]dnl
+])
diff --git a/build/autotools/mm-warnings.m4 b/build/autotools/mm-warnings.m4
new file mode 100644
index 0000000..840a4fc
--- /dev/null
+++ b/build/autotools/mm-warnings.m4
@@ -0,0 +1,123 @@
+## Copyright (c) 2009 Openismus GmbH <http://www.openismus.com/>
+##
+## This file is part of mm-common.
+##
+## mm-common 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 2 of the License,
+## or (at your option) any later version.
+##
+## mm-common 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 mm-common. If not, see <http://www.gnu.org/licenses/>.
+
+#serial 20091103
+
+## _MM_ARG_ENABLE_WARNINGS_OPTION
+##
+## Implementation helper macro of MM_ARG_ENABLE_WARNINGS(). Pulled in
+## through AC_REQUIRE() so that it is only expanded once.
+##
+m4_define([_MM_ARG_ENABLE_WARNINGS_OPTION],
+[dnl
+AC_PROVIDE([$0])[]dnl
+AC_ARG_ENABLE([warnings],
+ [AS_HELP_STRING([[--enable-warnings[=min|max|fatal|no]]],
+ [set compiler pedantry level [default=min]])],
+ [mm_enable_warnings=$enableval],
+ [mm_enable_warnings=min])[]dnl
+])
+
+## MM_ARG_ENABLE_WARNINGS(variable, min-flags, max-flags, [deprecation-prefixes])
+##
+## Provide the --enable-warnings configure argument, set to "min" by default.
+## <min-flags> and <max-flags> should be space-separated lists of compiler
+## warning flags to use with --enable-warnings=min or --enable-warnings=max,
+## respectively. Warning level "fatal" is the same as "max" but in addition
+## enables -Werror mode.
+##
+## If not empty, <deprecation-prefixes> should be a list of module prefixes
+## which is expanded to -D<module>_DISABLE_DEPRECATED flags if fatal warnings
+## are enabled, too.
+##
+## For instance, your configure.ac file might use the macro like this:
+##
+## MM_ARG_ENABLE_WARNINGS([EXAMPLE_WFLAGS],
+## [-Wall],
+## [-pedantic -Wall -Wextra],
+## [G PANGO ATK GDK GDK_PIXBUF GTK])
+##
+## Your Makefile.am could then contain a line such as this:
+##
+## AM_CFLAGS = $(EXAMPLE_WFLAGS)
+##
+## In order to determine the warning options to use with the C++ compiler,
+## call AC_LANG([C++]) first to change the current language. If different
+## output variables are used, it is also fine to call MM_ARG_ENABLE_WARNINGS
+## repeatedly, once for each language setting.
+##
+## You may force people to fix warnings when creating release tarballs by
+## adding this line to your Makefile.am:
+##
+## DISTCHECK_CONFIGURE_FLAGS = --enable-warnings=fatal
+##
+AC_DEFUN([MM_ARG_ENABLE_WARNINGS],
+[dnl
+m4_assert([$# >= 3])[]dnl
+AC_REQUIRE([_MM_PRE_INIT])[]dnl
+AC_REQUIRE([_MM_ARG_ENABLE_WARNINGS_OPTION])[]dnl
+dnl
+AS_CASE([$ac_compile],
+ [[*'$CXXFLAGS '*]], [mm_lang='C++' mm_cc=$CXX mm_conftest="conftest.[$]{ac_ext-cc}"],
+ [[*'$CFLAGS '*]], [mm_lang=C mm_cc=$CC mm_conftest="conftest.[$]{ac_ext-c}"],
+ [AC_MSG_ERROR([[current language is neither C nor C++]])])
+dnl
+AC_MSG_CHECKING([which $mm_lang compiler warning flags to use])
+m4_ifval([$4], [mm_deprecation_flags=
+])mm_tested_flags=
+dnl
+AS_CASE([$mm_enable_warnings],
+ [no], [mm_warning_flags=],
+ [max], [mm_warning_flags="$3"],
+ [fatal], [mm_warning_flags="$3 -Werror"[]m4_ifval([$4], [
+ for mm_prefix in $4
+ do
+ mm_deprecation_flags="$mm_deprecation_flags-D[$]{mm_prefix}_DISABLE_DEPRECATED "
+ done])],
+ [mm_warning_flags="$2"])
+dnl
+AS_IF([test "x$mm_warning_flags" != x],
+[
+ # Keep in mind that the dummy source must be devoid of any
+ # problems that might cause diagnostics.
+ AC_LANG_CONFTEST([AC_LANG_SOURCE([[
+int main(int argc, char** argv) { return !argv ? 0 : argc; }
+]])])
+ for mm_flag in $mm_warning_flags
+ do
+ # Test whether the compiler accepts the flag. Look at standard output,
+ # since GCC only shows a warning message if an option is not supported.
+ mm_cc_out=`$mm_cc $mm_tested_flags $mm_flag -c "$mm_conftest" 2>&1 || echo failed`
+ rm -f "conftest.[$]{OBJEXT-o}"
+
+ AS_IF([test "x$mm_cc_out" = x],
+ [AS_IF([test "x$mm_tested_flags" = x],
+ [mm_tested_flags=$mm_flag],
+ [mm_tested_flags="$mm_tested_flags $mm_flag"])],
+[cat <<_MMEOF >&AS_MESSAGE_LOG_FD
+$mm_cc: $mm_cc_out
+_MMEOF
+])
+ done
+ rm -f "$mm_conftest"
+])
+mm_all_flags=m4_ifval([$4], [$mm_deprecation_flags])$mm_tested_flags
+AC_SUBST([$1], [$mm_all_flags])
+dnl
+test "x$mm_all_flags" != x || mm_all_flags=none
+AC_MSG_RESULT([$mm_all_flags])[]dnl
+])
diff --git a/configure.ac b/configure.ac
index 7ece79e..f411000 100644
--- a/configure.ac
+++ b/configure.ac
@@ -546,7 +546,6 @@ echo " Global File Search ................... : ${enable_file_search_plugin}"
echo " GNOME Code Assistance ................ : ${enable_gnome_code_assistance_plugin}"
echo " HTML Autocompletion .................. : ${enable_html_completion_plugin}"
echo " HTML and Markdown Preview ............ : ${enable_html_preview_plugin}"
-echo " Example C++.............. ............ : ${enable_hello_cpp_plugin}"
echo " JHBuild .............................. : ${enable_jhbuild_plugin}"
echo " MinGW ................................ : ${enable_mingw_plugin}"
echo " Project Creation ..................... : ${enable_create_project_plugin}"
@@ -563,6 +562,10 @@ echo " Vala Language Pack ................... : ${enable_vala_pack_plugin}"
echo " Xdg-App .............................. : ${enable_xdg_app_plugin}"
echo " XML Language Pack .................... : ${enable_xml_pack_plugin}"
echo ""
+echo " Example Plugins"
+echo ""
+echo " Example C++ .......................... : ${enable_hello_cpp_plugin}"
+echo ""
echo " Templates"
echo ""
echo " Autotools ............................ : ${enable_autotools_templates}"
diff --git a/libidemm/configure.ac b/libidemm/configure.ac
index aee3725..c6b506f 100644
--- a/libidemm/configure.ac
+++ b/libidemm/configure.ac
@@ -1,4 +1,5 @@
m4_define([gtkmm_required_version], [3.19.12])
+m4_define([glibmm_required_version], [2.48.0])
AC_SUBST([IDEMM_SO_VERSION], [0:0:0])
@@ -12,9 +13,6 @@ MM_ARG_ENABLE_DOCUMENTATION
MM_PKG_CONFIG_SUBST([GMMPROC_DIR], [--variable=gmmprocdir glibmm-2.4])
MM_PKG_CONFIG_SUBST([GMMPROC_EXTRA_M4_DIR], [--variable=gmmprocm4dir cairomm-1.0 pangomm-1.4 atkmm-1.6
gtkmm-3.0])
-PKG_CHECK_MODULES(IDEMM, [gtkmm-3.0 >= gtkmm_required_version])
-
-
AC_ARG_ENABLE([idemm],
[AS_HELP_STRING([--enable-idemm=@<:@yes/no@:>@],
[Build idemm library (C++ wrapper for libide])],
@@ -22,8 +20,9 @@ AC_ARG_ENABLE([idemm],
[enable_idemm=auto])
AS_IF([test x$enable_idemm != xno],[
- PKG_CHECK_MODULES(GTKMM,
- [gtkmm-3.0 >= gtkmm_required_version],
+ PKG_CHECK_MODULES(IDEMM,
+ [gtkmm-3.0 >= gtkmm_required_version
+ glibmm-2.4 >= glibmm_required_version],
[have_gtkmm=yes],
[have_gtkmm=no])
diff --git a/libidemm/idemm/Makefile.am b/libidemm/idemm/Makefile.am
index fb2adf0..3c4b528 100644
--- a/libidemm/idemm/Makefile.am
+++ b/libidemm/idemm/Makefile.am
@@ -1,8 +1,11 @@
if ENABLE_IDEMM
lib_LTLIBRARIES = libidemm-1.0.la
+
include $(srcdir)/../src/filelist.am
+
include $(srcdir)/filelist.am
+
include $(top_srcdir)/libidemm/compile-binding.am
local_cppflags = $(binding_includes) $(binding_cppflags) -DLIBIDEMM_BUILD=1
@@ -22,3 +25,5 @@ libidemm_1_0_la_LDFLAGS =
libidemm_1_0_la_LIBADD = $(IDEMM_LIBS)
endif
+
+-include $(top_srcdir)/git.mk
diff --git a/libidemm/tools/Makefile.am b/libidemm/tools/Makefile.am
index 1d4ce8d..c8a5a6a 100644
--- a/libidemm/tools/Makefile.am
+++ b/libidemm/tools/Makefile.am
@@ -1,7 +1,5 @@
if ENABLE_IDEMM
-AUTOMAKE_OPTIONS = subdir-objects
-
include $(srcdir)/m4/filelist.am
noinst_PROGRAMS = extra_defs_gen/generate_defs_libide
diff --git a/plugins/hello-cpp/configure.ac b/plugins/hello-cpp/configure.ac
index 39217bb..fe123fe 100644
--- a/plugins/hello-cpp/configure.ac
+++ b/plugins/hello-cpp/configure.ac
@@ -4,7 +4,7 @@ AC_ARG_ENABLE([hello-cpp-plugin],
[AS_HELP_STRING([--enable-hello-cpp-plugin=@<:@yes/no@:>@],
[Build example C++ plugin with gtkmm.])],
[enable_hello_cpp_plugin=$enableval],
- [enable_hello_cpp_plugin=auto])
+ [enable_hello_cpp_plugin=no])
AS_IF([test x$enable_hello_cpp_plugin != xno],[
AM_COND_IF([ENABLE_IDEMM], [have_idemm=yes], [have_idemm=no])
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]