Chris@16: // (C) Copyright Gennadiy Rozental 2005-2008. Chris@16: // Distributed under the Boost Software License, Version 1.0. Chris@16: // (See accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: // See http://www.boost.org/libs/test for the library home page. Chris@16: // Chris@16: // File : $RCSfile$ Chris@16: // Chris@101: // Version : $Revision$ Chris@16: // Chris@16: // Description : Runtime.Param library configuration Chris@16: // *************************************************************************** Chris@16: Chris@16: #ifndef BOOST_RT_CONFIG_HPP_062604GER Chris@16: #define BOOST_RT_CONFIG_HPP_062604GER Chris@16: Chris@16: // Boost Chris@16: #include Chris@16: #ifdef BOOST_MSVC Chris@16: # pragma warning(disable: 4511) // copy constructor could not be generated Chris@16: # pragma warning(disable: 4512) // assignment operator could not be generated Chris@16: # pragma warning(disable: 4181) // qualifier applied to reference type; ignored Chris@16: # pragma warning(disable: 4675) // resolved overload was found by argument-dependent lookup Chris@16: #endif Chris@16: Chris@16: // Boost.Test Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include // operator<<(boost::runtime::cstring) Chris@16: Chris@16: // STL Chris@16: #include Chris@16: #include Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: #ifndef BOOST_RT_PARAM_CUSTOM_STRING Chris@16: # ifndef BOOST_RT_PARAM_WIDE_STRING Chris@16: # define BOOST_RT_PARAM_NAMESPACE runtime Chris@16: # else Chris@16: # define BOOST_RT_PARAM_NAMESPACE wide_runtime Chris@16: # endif Chris@16: #endif Chris@16: Chris@16: #ifdef __SUNPRO_CC Chris@16: extern int putenv(char*); Chris@16: #endif Chris@16: Chris@16: namespace boost { Chris@16: Chris@16: namespace BOOST_RT_PARAM_NAMESPACE { Chris@16: Chris@16: #ifndef BOOST_RT_PARAM_CUSTOM_STRING Chris@16: # ifndef BOOST_RT_PARAM_WIDE_STRING Chris@16: Chris@16: typedef char char_type; Chris@16: typedef std::string dstring; Chris@16: typedef unit_test::const_string cstring; Chris@16: typedef unit_test::literal_string literal_cstring; Chris@16: typedef wrap_stringstream format_stream; Chris@16: Chris@16: #ifdef BOOST_CLASSIC_IOSTREAMS Chris@16: typedef std::ostream out_stream; Chris@16: #else Chris@16: typedef std::basic_ostream out_stream; Chris@16: #endif Chris@16: Chris@16: #ifdef BOOST_MSVC Chris@16: #pragma warning(push) Chris@16: #pragma warning(disable:4996) // putenv Chris@16: #endif Chris@16: Chris@16: #ifndef UNDER_CE Chris@16: #if defined(__COMO__) && 0 Chris@16: inline void Chris@16: putenv_impl( cstring name, cstring value ) Chris@16: { Chris@16: using namespace std; Chris@16: // !! this may actually fail. What should we do? Chris@16: setenv( name.begin(), value.begin(), 1 ); Chris@16: } Chris@16: #else Chris@16: inline void Chris@16: putenv_impl( cstring name, cstring value ) Chris@16: { Chris@16: format_stream fs; Chris@16: Chris@16: fs << name << '=' << value; Chris@16: Chris@16: // !! this may actually fail. What should we do? Chris@16: // const_cast is used to satisfy putenv interface Chris@16: using namespace std; Chris@16: putenv( const_cast( fs.str().c_str() ) ); Chris@16: } Chris@16: #endif Chris@16: #endif Chris@16: Chris@16: #ifdef BOOST_MSVC Chris@16: #pragma warning(pop) Chris@16: #endif Chris@16: Chris@16: #define BOOST_RT_PARAM_LITERAL( l ) l Chris@16: #define BOOST_RT_PARAM_CSTRING_LITERAL( l ) cstring( l, sizeof( l ) - 1 ) Chris@16: #define BOOST_RT_PARAM_GETENV getenv Chris@16: #define BOOST_RT_PARAM_PUTENV ::boost::BOOST_RT_PARAM_NAMESPACE::putenv_impl Chris@16: #define BOOST_RT_PARAM_EXCEPTION_INHERIT_STD Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: # else Chris@16: Chris@16: typedef wchar_t char_type; Chris@16: typedef std::basic_string dstring; Chris@16: typedef unit_test::basic_cstring cstring; Chris@16: typedef const unit_test::basic_cstring literal_cstring; Chris@16: typedef wrap_wstringstream format_stream; Chris@16: typedef std::wostream out_stream; Chris@16: Chris@16: #ifndef UNDER_CE Chris@16: inline void Chris@16: putenv_impl( cstring name, cstring value ) Chris@16: { Chris@16: format_stream fs; Chris@16: Chris@16: fs << name << '=' << value; Chris@16: Chris@16: // !! this may actually fail. What should we do? Chris@16: // const_cast is used to satisfy putenv interface Chris@16: using namespace std; Chris@16: wputenv( const_cast( fs.str().c_str() ) ); Chris@16: } Chris@16: #endif Chris@16: Chris@16: #define BOOST_RT_PARAM_LITERAL( l ) L ## l Chris@16: #define BOOST_RT_PARAM_CSTRING_LITERAL( l ) cstring( L ## l, sizeof( L ## l )/sizeof(wchar_t) - 1 ) Chris@16: #define BOOST_RT_PARAM_GETENV wgetenv Chris@16: #define BOOST_RT_PARAM_PUTENV putenv_impl Chris@16: Chris@16: # endif Chris@16: #endif Chris@16: Chris@16: #ifdef __GNUC__ Chris@16: #define BOOST_RT_PARAM_UNNEEDED_VIRTUAL virtual Chris@16: #else Chris@16: #define BOOST_RT_PARAM_UNNEEDED_VIRTUAL Chris@16: #endif Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: } // namespace BOOST_RT_PARAM_NAMESPACE Chris@16: Chris@16: } // namespace boost Chris@16: Chris@16: #endif // BOOST_RT_CONFIG_HPP_062604GER