13
0
livetrax/libs/glibmm2/scripts/cxx_std.m4
Paul Davis 449aab3c46 rollback to 3428, before the mysterious removal of libs/* at 3431/3432
git-svn-id: svn://localhost/ardour2/branches/3.0@3435 d708f5d6-7413-0410-9779-e7cbd77b26cf
2008-06-02 21:41:35 +00:00

196 lines
5.4 KiB
Plaintext

cv_cxx_has_namespace_std
## 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],
[gtkmm_cv_cxx_has_namespace_std],
[
AC_TRY_COMPILE(
[
#include <algorithm>
#include <iterator>
#include <iostream>
#include <string>
],[
using std::min;
using std::find;
using std::copy;
using std::bidirectional_iterator_tag;
using std::string;
using std::istream;
using std::cout;
],
[gtkmm_cv_cxx_has_namespace_std="yes"],
[gtkmm_cv_cxx_has_namespace_std="no"]
)
])
if test "x${gtkmm_cv_cxx_has_namespace_std}" = "xyes"; then
{
AC_DEFINE([GLIBMM_HAVE_NAMESPACE_STD],[1], [Defined when the libstdc++ declares the std-namespace])
}
fi
])
## 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],
[gtkmm_cv_cxx_has_std_iterator_traits],
[
AC_TRY_COMPILE(
[
#include <iterator>
#ifdef GLIBMM_HAVE_NAMESPACE_STD
using namespace std;
#endif
],[
typedef iterator_traits<char*>::value_type ValueType;
],
[gtkmm_cv_cxx_has_std_iterator_traits="yes"],
[gtkmm_cv_cxx_has_std_iterator_traits="no"]
)
])
if test "x${gtkmm_cv_cxx_has_std_iterator_traits}" = "xyes"; then
{
AC_DEFINE([GLIBMM_HAVE_STD_ITERATOR_TRAITS],[1], [Defined if std::iterator_traits<> is standard-conforming])
}
fi
])
## 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],
[gtkmm_cv_cxx_has_sun_reverse_iterator],
[
AC_TRY_COMPILE(
[
#include <iterator>
#ifdef GLIBMM_HAVE_NAMESPACE_STD
using namespace std;
#endif
],[
typedef reverse_iterator<char*,random_access_iterator_tag,char,char&,char*,int> ReverseIter;
],
[gtkmm_cv_cxx_has_sun_reverse_iterator="yes"],
[gtkmm_cv_cxx_has_sun_reverse_iterator="no"]
)
])
if test "x${gtkmm_cv_cxx_has_sun_reverse_iterator}" = "xyes"; then
{
AC_DEFINE([GLIBMM_HAVE_SUN_REVERSE_ITERATOR],[1], [Defined if std::reverse_iterator is in Sun libCstd style])
}
fi
])
## 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],
[gtkmm_cv_cxx_has_template_sequence_ctors],
[
AC_TRY_COMPILE(
[
#include <vector>
#include <deque>
#include <list>
#ifdef GLIBMM_HAVE_NAMESPACE_STD
using namespace std;
#endif
],[
const int array[8] = { 0, };
vector<int> test_vector (&array[0], &array[8]);
deque<short> test_deque (test_vector.begin(), test_vector.end());
list<long> test_list (test_deque.begin(), test_deque.end());
test_vector.assign(test_list.begin(), test_list.end());
],
[gtkmm_cv_cxx_has_template_sequence_ctors="yes"],
[gtkmm_cv_cxx_has_template_sequence_ctors="no"]
)
])
if test "x${gtkmm_cv_cxx_has_template_sequence_ctors}" = "xyes"; then
{
AC_DEFINE([GLIBMM_HAVE_TEMPLATE_SEQUENCE_CTORS],[1], [Defined if the STL containers have templated sequence ctors])
}
fi
])
## 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],
[gtkmm_cv_cxx_has_allows_static_inline_npos],
[
AC_TRY_COMPILE(
[
#include <string>
#include <iostream>
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;
],
[gtkmm_cv_cxx_has_allows_static_inline_npos="yes"],
[gtkmm_cv_cxx_has_allows_static_inline_npos="no"]
)
])
if test "x${gtkmm_cv_cxx_has_allows_static_inline_npos}" = "xyes"; then
{
AC_DEFINE([GLIBMM_HAVE_ALLOWS_STATIC_INLINE_NPOS],[1], [Defined if a static member variable may be initialized inline to std::string::npos])
}
fi
])