diff --git a/include/boost/config/abi/borland_prefix.hpp b/include/boost/config/abi/borland_prefix.hpp new file mode 100644 index 00000000..e6de6ff2 --- /dev/null +++ b/include/boost/config/abi/borland_prefix.hpp @@ -0,0 +1,26 @@ +// (C) Copyright John Maddock 2003. Permission to copy, use, modify, sell and +// distribute this software is granted provided this copyright notice appears +// in all copies. This software is provided "as is" without express or implied +// warranty, and with no claim as to its suitability for any purpose. + +// for C++ Builder the following options effect the ABI: +// +// -b (on or off - effect emum sizes) +// -Vx (on or off - empty members) +// -Ve (on or off - empty base classes) +// -aX (alignment - 5 options). +// -pX (Calling convention - 4 options) +// -VmX (member pointer size and layout - 5 options) +// -VC (on or off, changes name mangling) +// -Vl (on or off, changes struct layout). + +// In addition the following warnings are sufficiently annoying (and +// unfixable) to have them turned off by default: +// +// 8027 - functions containing [for|while] loops are not expanded inline +// 8026 - functions taking class by value arguments are not expanded inline + +#pragma nopushoptwarn +# pragma option push -Vx -Ve -a8 -b -pc -Vmv -VC- -Vl- -w-8027 -w-8026 + + diff --git a/include/boost/config/abi/borland_suffix.hpp b/include/boost/config/abi/borland_suffix.hpp new file mode 100644 index 00000000..8bc76731 --- /dev/null +++ b/include/boost/config/abi/borland_suffix.hpp @@ -0,0 +1,11 @@ +// (C) Copyright John Maddock 2003. Permission to copy, use, modify, sell and +// distribute this software is granted provided this copyright notice appears +// in all copies. This software is provided "as is" without express or implied +// warranty, and with no claim as to its suitability for any purpose. + +# pragma option pop +#pragma nopushoptwarn + + + + diff --git a/include/boost/config/abi/msvc_prefix.hpp b/include/boost/config/abi/msvc_prefix.hpp new file mode 100644 index 00000000..40797140 --- /dev/null +++ b/include/boost/config/abi/msvc_prefix.hpp @@ -0,0 +1,7 @@ +// (C) Copyright John Maddock 2003. Permission to copy, use, modify, sell and +// distribute this software is granted provided this copyright notice appears +// in all copies. This software is provided "as is" without express or implied +// warranty, and with no claim as to its suitability for any purpose. + +#pragma pack(push,8) + diff --git a/include/boost/config/abi/msvc_suffix.hpp b/include/boost/config/abi/msvc_suffix.hpp new file mode 100644 index 00000000..97ddde76 --- /dev/null +++ b/include/boost/config/abi/msvc_suffix.hpp @@ -0,0 +1,7 @@ +// (C) Copyright John Maddock 2003. Permission to copy, use, modify, sell and +// distribute this software is granted provided this copyright notice appears +// in all copies. This software is provided "as is" without express or implied +// warranty, and with no claim as to its suitability for any purpose. + +#pragma pack(pop) + diff --git a/include/boost/config/auto_link.hpp b/include/boost/config/auto_link.hpp new file mode 100644 index 00000000..ba5f5f95 --- /dev/null +++ b/include/boost/config/auto_link.hpp @@ -0,0 +1,223 @@ +/* + * + * Copyright (c) 1998-2002 + * Dr John Maddock + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Dr John Maddock makes no representations + * about the suitability of this software for any purpose. + * It is provided "as is" without express or implied warranty. + * + */ + + /* + * LOCATION: see http://www.boost.org for most recent version. + * FILE auto_link.hpp + * VERSION see + * DESCRIPTION: Automatic library inclusion for Borland/Microsoft compilers. + */ + +/************************************************************************* + +USAGE: +~~~~~~ + +Before including this header you must one or more of define the following macros: + +BOOST_LIB_NAME: Required: A string containing the basename of the library, + for example "boost_regex". +BOOST_DYN_LINK: Optional: when set link to dll rather than static library. +BOOST_LIB_DIAGNOSTIC: Optional: when set the header will print out the name + of the library selected (useful for debugging). + +These macros will be undef'ed at the end of the header, further this header +has no include guards - so be sure to include it only once from your library! + +Algorithm: +~~~~~~~~~~ + +Libraries for Borland and Microsoft compilers are automatically +selected here, the name of the lib is selected according to the following +formula: + +BOOST_LIB_PREFIX + + BOOST_LIB_NAME + + "_" + + BOOST_LIB_TOOLSET + + "_" + + BOOST_LIB_THREAD_OPT + + BOOST_LIB_RT_OPT + + BOOST_LIB_DEBUG_OPT + +These are defined as: + +BOOST_LIB_PREFIX: "lib" for static libraries otherwise "". + +BOOST_LIB_NAME: The base name of the lib ( for example boost_regex). + +BOOST_LIB_TOOLSET: The compiler toolset name (vc6, vc7, bcb5 etc). + +BOOST_LIB_THREAD_OPT: "s" for single thread builds, + "m" for multithread builds. + +BOOST_LIB_RT_OPT: "s" for static runtime, + "d" for dynamic runtime. + +BOOST_LIB_DEBUG_OPT: nothing for release builds, + "d" for debug builds, + "dd" for debug-diagnostic builds (_STLP_DEBUG). + +***************************************************************************/ + +#if defined(_MSC_VER) || defined(__BORLANDC__) + +#ifndef BOOST_LIB_NAME +# error "Macro BOOST_LIB_NAME not set (internal error)" +#endif +// +// select toolset: +// +#if defined(BOOST_MSVC) && (BOOST_MSVC == 1200) && (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) + + // vc6-stlport: +# define BOOST_LIB_TOOLSET "vc6-stlport" + +#elif defined(BOOST_MSVC) && (BOOST_MSVC == 1200) + + // vc6: +# define BOOST_LIB_TOOLSET "vc6" + +#elif defined(BOOST_MSVC) && (BOOST_MSVC == 1300) && (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) + + // vc6-stlport: +# define BOOST_LIB_TOOLSET "vc7-stlport" + +#elif defined(BOOST_MSVC) && (BOOST_MSVC == 1300) + + // vc7: +# define BOOST_LIB_TOOLSET "vc7" + +#elif defined(BOOST_MSVC) && (BOOST_MSVC >= 1310) && (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) + + // vc71-stlport: +# define BOOST_LIB_TOOLSET "vc71-stlport" + +#elif defined(BOOST_MSVC) && (BOOST_MSVC >= 1310) + + // vc71: +# define BOOST_LIB_TOOLSET "vc71" + +#elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) + + // CBuilder 6: +# define BOOST_LIB_TOOLSET "bcb6" + +#elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x550) + + // CBuilder 6: +# define BOOST_LIB_TOOLSET "bcb5" + +#elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x540) + + // CBuilder 6: +# define BOOST_LIB_TOOLSET "bcb4" + +#endif + +// +// select thread opt: +// +#if defined(_MT) || defined(__MT__) +# define BOOST_LIB_THREAD_OPT "m" +#else +# define BOOST_LIB_THREAD_OPT "s" +#endif + +// +// select runtime opt: +// +#if defined(_DLL) || defined(_RTLDLL) +# define BOOST_LIB_RT_OPT "d" +#else +# define BOOST_LIB_RT_OPT "s" +#endif + +// +// select linkage opt: +// +#if (defined(_DLL) || defined(_RTLDLL)) && defined(BOOST_DYN_LINK) +# define BOOST_LIB_PREFIX +#elif defined(BOOST_DYN_LINK) +# error "Mixing a dll boost library with a static runtime is a really bad idea..." +#else +# define BOOST_LIB_PREFIX "lib" +#endif + +// +// select debug opt: +// +#if defined(BOOST_MSVC) && defined(_DEBUG) && (defined(_STLP_DEBUG) || defined(__STL_DEBUG)) +# define BOOST_LIB_DEBUG_OPT "dd" +#elif defined(BOOST_MSVC) && defined(_DEBUG) +# define BOOST_LIB_DEBUG_OPT "d" +#elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (defined(_STLP_DEBUG) || defined(__STL_DEBUG)) +# define BOOST_LIB_DEBUG_OPT "dd" +#else +# define BOOST_LIB_DEBUG_OPT +#endif + +// +// now include the lib: +// +#if defined(BOOST_LIB_NAME) \ + && defined(BOOST_LIB_PREFIX) \ + && defined(BOOST_LIB_TOOLSET) \ + && defined(BOOST_LIB_THREAD_OPT) \ + && defined(BOOST_LIB_RT_OPT) \ + && defined(BOOST_LIB_DEBUG_OPT) + +# pragma comment(lib, BOOST_LIB_PREFIX BOOST_LIB_NAME "_" BOOST_LIB_TOOLSET "_" BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_DEBUG_OPT ".lib") +#ifdef BOOST_LIB_DIAGNOSTIC +# pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_LIB_NAME "_" BOOST_LIB_TOOLSET "_" BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_DEBUG_OPT ".lib") +#endif + +#endif + +// +// finally undef any macros we may have set: +// +#if defined(BOOST_LIB_NAME) +# undef BOOST_LIB_NAME +#endif +#if defined(BOOST_LIB_TOOLSET) +# undef BOOST_LIB_TOOLSET +#endif +#if defined(BOOST_LIB_THREAD_OPT) +# undef BOOST_LIB_THREAD_OPT +#endif +#if defined(BOOST_LIB_RT_OPT) +# undef BOOST_LIB_RT_OPT +#endif +#if defined(BOOST_LIB_LINK_OPT) +# undef BOOST_LIB_LINK_OPT +#endif +#if defined(BOOST_LIB_DEBUG_OPT) +# undef BOOST_LIB_DEBUG_OPT +#endif +#if defined(BOOST_DYN_LINK) +# undef BOOST_DYN_LINK +#endif + +#endif // _MSC_VER || __BORLANDC__ + + + + + + + + + diff --git a/include/boost/config/compiler/borland.hpp b/include/boost/config/compiler/borland.hpp index 5602288b..326906a7 100644 --- a/include/boost/config/compiler/borland.hpp +++ b/include/boost/config/compiler/borland.hpp @@ -97,6 +97,15 @@ // #define BOOST_HAS_DIRENT_H // +// ABI fixing headers: +// +#ifndef BOOST_ABI_PREFIX +# define BOOST_ABI_PREFIX "boost/config/abi/borland_prefix.hpp" +#endif +#ifndef BOOST_ABI_SUFFIX +# define BOOST_ABI_SUFFIX "boost/config/abi/borland_suffix.hpp" +#endif +// // Disable Win32 support in ANSI mode: // #pragma defineonoption BOOST_DISABLE_WIN32 -A diff --git a/include/boost/config/compiler/visualc.hpp b/include/boost/config/compiler/visualc.hpp index 3bdc7cc9..d70c5700 100644 --- a/include/boost/config/compiler/visualc.hpp +++ b/include/boost/config/compiler/visualc.hpp @@ -89,6 +89,16 @@ # define BOOST_DISABLE_WIN32 #endif +// +// prefix and suffix headers: +// +#ifndef BOOST_ABI_PREFIX +# define BOOST_ABI_PREFIX "boost/config/abi/msvc_prefix.hpp" +#endif +#ifndef BOOST_ABI_SUFFIX +# define BOOST_ABI_SUFFIX "boost/config/abi/msvc_suffix.hpp" +#endif + # if _MSC_VER == 1200 # define BOOST_COMPILER_VERSION 6.0 # elif _MSC_VER == 1300 diff --git a/include/boost/config/suffix.hpp b/include/boost/config/suffix.hpp index b100b757..ff9e527b 100644 --- a/include/boost/config/suffix.hpp +++ b/include/boost/config/suffix.hpp @@ -238,6 +238,17 @@ # define BOOST_NO_HASH # endif +// BOOST_HAS_ABI_HEADERS +// This macro gets set if we have headers that fix the ABI, +// and prevent ODR violations when linking to external libraries: +#if defined(BOOST_ABI_PREFIX) && defined(BOOST_ABI_SUFFIX) && !defined(BOOST_HAS_ABI_HEADERS) +# define BOST_HAS_ABI_HEADERS +#endif + +#if defined(BOST_HAS_ABI_HEADERS) && defined(BOOST_DISABLE_ABI_HEADERS) +# undef BOST_HAS_ABI_HEADERS +#endif + // BOOST_NO_STDC_NAMESPACE workaround --------------------------------------// // Because std::size_t usage is so common, even in boost headers which do not // otherwise use the C library, the workaround is included here so