CppUnit project page FAQ CppUnit home page

Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Portability.h

Go to the documentation of this file.
00001 #ifndef CPPUNIT_PORTABILITY_H
00002 #define CPPUNIT_PORTABILITY_H
00003 
00004 #if defined(_WIN32) && !defined(WIN32)
00005 # define WIN32 1
00006 #endif
00007 
00008 /* include platform specific config */
00009 #if defined(__BORLANDC__)
00010 #    include <cppunit/config/config-bcb5.h>
00011 #elif defined (_MSC_VER)
00012 #    include <cppunit/config/config-msvc6.h>
00013 #else
00014 #    include <cppunit/config-auto.h>
00015 #endif
00016 
00017 // Version number of package
00018 #ifndef CPPUNIT_VERSION 
00019 #define CPPUNIT_VERSION  "1.10.2"
00020 #endif
00021  
00022 #include <cppunit/config/CppUnitApi.h>    // define CPPUNIT_API & CPPUNIT_NEED_DLL_DECL
00023 #include <cppunit/config/SelectDllLoader.h>
00024 
00025 
00026 /* Options that the library user may switch on or off.
00027  * If the user has not done so, we chose default values.
00028  */
00029 
00030 
00031 /* Define to 1 if you wish to have the old-style macros
00032    assert(), assertEqual(), assertDoublesEqual(), and assertLongsEqual() */
00033 #if !defined(CPPUNIT_ENABLE_NAKED_ASSERT)
00034 # define CPPUNIT_ENABLE_NAKED_ASSERT          0
00035 #endif
00036 
00037 /* Define to 1 if you wish to have the old-style CU_TEST family
00038    of macros. */
00039 #if !defined(CPPUNIT_ENABLE_CU_TEST_MACROS)
00040 # define CPPUNIT_ENABLE_CU_TEST_MACROS        0
00041 #endif
00042 
00043 /* Define to 1 if the preprocessor expands (#foo) to "foo" (quotes incl.) 
00044    I don't think there is any C preprocess that does NOT support this! */
00045 #if !defined(CPPUNIT_HAVE_CPP_SOURCE_ANNOTATION)
00046 # define CPPUNIT_HAVE_CPP_SOURCE_ANNOTATION   1
00047 #endif
00048 
00049 /* Assumes that STL and CppUnit are in global space if the compiler does not
00050    support namespace. */
00051 #if !defined(CPPUNIT_HAVE_NAMESPACES)
00052 # if !defined(CPPUNIT_NO_NAMESPACE)
00053 #  define CPPUNIT_NO_NAMESPACE 1
00054 # endif // !defined(CPPUNIT_NO_NAMESPACE)
00055 # if !defined(CPPUNIT_NO_STD_NAMESPACE)
00056 #  define CPPUNIT_NO_STD_NAMESPACE 1
00057 # endif // !defined(CPPUNIT_NO_STD_NAMESPACE)
00058 #endif // !defined(CPPUNIT_HAVE_NAMESPACES)
00059 
00060 /* Define CPPUNIT_STD_NEED_ALLOCATOR to 1 if you need to specify
00061  * the allocator you used when instantiating STL container. Typically
00062  * used for compilers that do not support template default parameter.
00063  * CPPUNIT_STD_ALLOCATOR will be used as the allocator. Default is
00064  * std::allocator. On some compilers, you may need to change this to
00065  * std::allocator<T>.
00066  */
00067 #if CPPUNIT_STD_NEED_ALLOCATOR
00068 # if !defined(CPPUNIT_STD_ALLOCATOR)
00069 #  define CPPUNIT_STD_ALLOCATOR std::allocator
00070 # endif // !defined(CPPUNIT_STD_ALLOCATOR)
00071 #endif // defined(CPPUNIT_STD_NEED_ALLOCATOR)
00072 
00073 
00074 // Compiler error location format for CompilerOutputter
00075 // If not define, assumes that it's gcc
00076 // See class CompilerOutputter for format.
00077 #if !defined(CPPUNIT_COMPILER_LOCATION_FORMAT)
00078 # define CPPUNIT_COMPILER_LOCATION_FORMAT "%f:%l:"
00079 #endif
00080 
00081 // If CPPUNIT_HAVE_CPP_CAST is defined, then c++ style cast will be used,
00082 // otherwise, C style cast are used.
00083 #if defined( CPPUNIT_HAVE_CPP_CAST )
00084 # define CPPUNIT_CONST_CAST( TargetType, pointer ) \
00085     const_cast<TargetType>( pointer )
00086 
00087 # define CPPUNIT_STATIC_CAST( TargetType, pointer ) \
00088     static_cast<TargetType>( pointer )
00089 #else // defined( CPPUNIT_HAVE_CPP_CAST )
00090 # define CPPUNIT_CONST_CAST( TargetType, pointer ) \
00091     ((TargetType)( pointer ))
00092 # define CPPUNIT_STATIC_CAST( TargetType, pointer ) \
00093     ((TargetType)( pointer ))
00094 #endif // defined( CPPUNIT_HAVE_CPP_CAST )
00095 
00096 // If CPPUNIT_NO_STD_NAMESPACE is defined then STL are in the global space.
00097 // => Define macro 'std' to nothing
00098 #if defined(CPPUNIT_NO_STD_NAMESPACE)
00099 # undef std
00100 # define std
00101 #endif  // defined(CPPUNIT_NO_STD_NAMESPACE)
00102 
00103 // If CPPUNIT_NO_NAMESPACE is defined, then put CppUnit classes in the
00104 // global namespace: the compiler does not support namespace.
00105 #if defined(CPPUNIT_NO_NAMESPACE)
00106 # define CPPUNIT_NS_BEGIN
00107 # define CPPUNIT_NS_END
00108 # define CPPUNIT_NS
00109 #else   // defined(CPPUNIT_NO_NAMESPACE)
00110 # define CPPUNIT_NS_BEGIN namespace CppUnit {
00111 # define CPPUNIT_NS_END }
00112 # define CPPUNIT_NS CppUnit
00113 #endif  // defined(CPPUNIT_NO_NAMESPACE)
00114 
00125 #define CPPUNIT_STRINGIZE( symbol ) _CPPUNIT_DO_STRINGIZE( symbol )
00126 
00128 #define _CPPUNIT_DO_STRINGIZE( symbol ) #symbol
00129 
00148 #define CPPUNIT_JOIN( symbol1, symbol2 ) _CPPUNIT_DO_JOIN( symbol1, symbol2 )
00149 
00151 #define _CPPUNIT_DO_JOIN( symbol1, symbol2 ) _CPPUNIT_DO_JOIN2( symbol1, symbol2 )
00152 
00154 #define _CPPUNIT_DO_JOIN2( symbol1, symbol2 ) symbol1##symbol2
00155 
00160 #define CPPUNIT_MAKE_UNIQUE_NAME( prefix ) CPPUNIT_JOIN( prefix, __LINE__ )
00161 
00164 #if !defined(CPPUNIT_WRAP_COLUMN)
00165 # define CPPUNIT_WRAP_COLUMN 79
00166 #endif
00167 
00168 
00169 /* perform portability hacks */
00170 
00171 
00172 /* Define CPPUNIT_SSTREAM as a stream with a "std::string str()"
00173  * method.
00174  */
00175 #if CPPUNIT_HAVE_SSTREAM
00176 # include <sstream>
00177     CPPUNIT_NS_BEGIN
00178 
00179     typedef std::ostringstream OStringStream;
00180 
00181     CPPUNIT_NS_END
00182 #elif CPPUNIT_HAVE_CLASS_STRSTREAM
00183 # include <string>
00184 # if CPPUNIT_HAVE_STRSTREAM
00185 #   include <strstream>
00186 # else // CPPUNIT_HAVE_STRSTREAM
00187 #  include <strstream.h>
00188 # endif // CPPUNIT_HAVE_CLASS_STRSTREAM
00189 
00190     CPPUNIT_NS_BEGIN
00191 
00192       class OStringStream : public std::ostrstream 
00193       {
00194       public:
00195           std::string str()
00196           {
00197 //            (*this) << '\0';
00198 //            std::string msg(std::ostrstream::str());
00199 //            std::ostrstream::freeze(false);
00200 //            return msg;
00201 // Alternative implementation that don't rely on freeze which is not
00202 // available on some platforms:
00203             return std::string( std::ostrstream::str(), pcount() );
00204           }
00205       };
00206 
00207     CPPUNIT_NS_END
00208 #else // CPPUNIT_HAVE_CLASS_STRSTREAM
00209 #   error Cannot define CppUnit::OStringStream.
00210 #endif // CPPUNIT_HAVE_SSTREAM
00211 
00212 
00213 #endif // CPPUNIT_PORTABILITY_H

SourceForge Logo hosts this site. Send comments to:
CppUnit Developers