## Copyright (c) 2009, 2011 Openismus GmbH ## ## This file is part of glibmm. ## ## glibmm is free software: you can redistribute it and/or modify it ## under the terms of the GNU Lesser General Public License as published ## by the Free Software Foundation, either version 2.1 of the License, ## or (at your option) any later version. ## ## glibmm 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 Lesser General Public License for more details. ## ## You should have received a copy of the GNU Lesser General Public License ## along with this library. If not, see . #serial 20110910 ## GLIBMM_CXX_HAS_NAMESPACE_STD() ## ## Test whether libstdc++ declares namespace std. For safety, ## also check whether several randomly selected STL symbols ## are available in namespace std. ## ## On success, #define GLIBMM_HAVE_NAMESPACE_STD to 1. ## AC_DEFUN([GLIBMM_CXX_HAS_NAMESPACE_STD], [ AC_CACHE_CHECK( [whether C++ library symbols are declared in namespace std], [glibmm_cv_cxx_has_namespace_std], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[ #include #include #include #include ]],[[ using std::min; using std::find; using std::copy; using std::bidirectional_iterator_tag; using std::string; using std::istream; using std::cout; ]])], [glibmm_cv_cxx_has_namespace_std='yes'], [glibmm_cv_cxx_has_namespace_std='no'] ) ]) AS_VAR_IF([glibmm_cv_cxx_has_namespace_std], ['yes'], [AC_DEFINE([GLIBMM_HAVE_NAMESPACE_STD], [1], [Defined when the libstdc++ declares the std-namespace])])[]dnl ]) ## GLIBMM_CXX_HAS_STD_ITERATOR_TRAITS() ## ## Check for standard-conform std::iterator_traits<>, and ## #define GLIBMM_HAVE_STD_ITERATOR_TRAITS on success. ## AC_DEFUN([GLIBMM_CXX_HAS_STD_ITERATOR_TRAITS], [ AC_REQUIRE([GLIBMM_CXX_HAS_NAMESPACE_STD]) AC_CACHE_CHECK( [whether the C++ library supports std::iterator_traits], [glibmm_cv_cxx_has_std_iterator_traits], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[ #include #ifdef GLIBMM_HAVE_NAMESPACE_STD using namespace std; #endif ]],[[ typedef iterator_traits::value_type ValueType; ]])], [glibmm_cv_cxx_has_std_iterator_traits='yes'], [glibmm_cv_cxx_has_std_iterator_traits='no'] ) ]) AS_VAR_IF([glibmm_cv_cxx_has_std_iterator_traits], ['yes'], [AC_DEFINE([GLIBMM_HAVE_STD_ITERATOR_TRAITS], [1], [Defined if std::iterator_traits<> is standard-conforming])])[]dnl ]) ## GLIBMM_CXX_HAS_SUN_REVERSE_ITERATOR() ## ## Check for Sun libCstd style std::reverse_iterator, ## and #define GLIBMM_HAVE_SUN_REVERSE_ITERATOR if found. ## AC_DEFUN([GLIBMM_CXX_HAS_SUN_REVERSE_ITERATOR], [ AC_REQUIRE([GLIBMM_CXX_HAS_NAMESPACE_STD]) AC_CACHE_CHECK( [for non-standard Sun libCstd reverse_iterator], [glibmm_cv_cxx_has_sun_reverse_iterator], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[ #include #ifdef GLIBMM_HAVE_NAMESPACE_STD using namespace std; #endif ]],[[ typedef reverse_iterator ReverseIter; ]])], [glibmm_cv_cxx_has_sun_reverse_iterator='yes'], [glibmm_cv_cxx_has_sun_reverse_iterator='no'] ) ]) AS_VAR_IF([glibmm_cv_cxx_has_sun_reverse_iterator], ['yes'], [AC_DEFINE([GLIBMM_HAVE_SUN_REVERSE_ITERATOR], [1], [Defined if std::reverse_iterator is in Sun libCstd style])])[]dnl ]) ## GLIBMM_CXX_HAS_TEMPLATE_SEQUENCE_CTORS() ## ## Check whether the STL containers have templated sequence ctors, ## and #define GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS on success. ## AC_DEFUN([GLIBMM_CXX_HAS_TEMPLATE_SEQUENCE_CTORS], [ AC_REQUIRE([GLIBMM_CXX_HAS_NAMESPACE_STD]) AC_CACHE_CHECK( [whether STL containers have templated sequence constructors], [glibmm_cv_cxx_has_template_sequence_ctors], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[ #include #include #include #ifdef GLIBMM_HAVE_NAMESPACE_STD using namespace std; #endif ]],[[ const int array[8] = { 0, }; vector test_vector (&array[0], &array[8]); deque test_deque (test_vector.begin(), test_vector.end()); list test_list (test_deque.begin(), test_deque.end()); test_vector.assign(test_list.begin(), test_list.end()); ]])], [glibmm_cv_cxx_has_template_sequence_ctors='yes'], [glibmm_cv_cxx_has_template_sequence_ctors='no'] ) ]) AS_VAR_IF([glibmm_cv_cxx_has_template_sequence_ctors], ['yes'], [AC_DEFINE([GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS], [1], [Defined if the STL containers have templated sequence ctors])])[]dnl ]) ## GLIBMM_CXX_ALLOWS_STATIC_INLINE_NPOS() ## ## Check whether the a static member variable may be initialized inline to std::string::npos. ## The MipsPro (IRIX) compiler does not like this. ## and #define GLIBMM_HAVE_ALLOWS_STATIC_INLINE_NPOS on success. ## AC_DEFUN([GLIBMM_CXX_ALLOWS_STATIC_INLINE_NPOS], [ AC_REQUIRE([GLIBMM_CXX_HAS_NAMESPACE_STD]) AC_CACHE_CHECK( [whether the compiler allows a static member variable to be initialized inline to std::string::npos], [glibmm_cv_cxx_has_allows_static_inline_npos], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[ #include #include class ustringtest { public: //The MipsPro compiler (IRIX) says "The indicated constant value is not known", //so we need to initalize the static member data elsewhere. static const std::string::size_type ustringnpos = std::string::npos; }; ]],[[ std::cout << "npos=" << ustringtest::ustringnpos << std::endl; ]])], [glibmm_cv_cxx_has_allows_static_inline_npos='yes'], [glibmm_cv_cxx_has_allows_static_inline_npos='no'] ) ]) AS_VAR_IF([glibmm_cv_cxx_has_allows_static_inline_npos], ['yes'], [AC_DEFINE([GLIBMM_HAVE_ALLOWS_STATIC_INLINE_NPOS], [1], [Defined if a static member variable may be initialized inline to std::string::npos])])[]dnl ])