123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524 |
- // (C) Copyright John Maddock 2003.
- // Use, modification and distribution are subject to the
- // Boost Software License, Version 1.0. (See accompanying file
- // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- /*
- * LOCATION: see http://www.boost.org for most recent version.
- * FILE auto_link.hpp
- * VERSION see <boost/version.hpp>
- * DESCRIPTION: Automatic library inclusion for Borland/Microsoft compilers.
- */
- /*************************************************************************
- USAGE:
- ~~~~~~
- Before including this header you must define 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_LIB_TOOLSET: Optional: the base name of the toolset.
- 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).
- BOOST_AUTO_LINK_NOMANGLE: Specifies that we should link to BOOST_LIB_NAME.lib,
- rather than a mangled-name version.
- BOOST_AUTO_LINK_TAGGED: Specifies that we link to libraries built with the --layout=tagged option.
- This is essentially the same as the default name-mangled version, but without
- the compiler name and version, or the Boost version. Just the build options.
- BOOST_AUTO_LINK_SYSTEM: Specifies that we link to libraries built with the --layout=system option.
- This is essentially the same as the non-name-mangled version, but with
- the prefix to differentiate static and dll builds
- 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_ARCH_AND_MODEL_OPT
- "-"
- + BOOST_LIB_VERSION
- + BOOST_LIB_SUFFIX
- 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: "-mt" for multithread builds, otherwise nothing.
- BOOST_LIB_RT_OPT: A suffix that indicates the runtime library used,
- contains one or more of the following letters after
- a hyphen:
- s static runtime (dynamic if not present).
- g debug/diagnostic runtime (release if not present).
- y Python debug/diagnostic runtime (release if not present).
- d debug build (release if not present).
- p STLport build.
- n STLport build without its IOStreams.
- BOOST_LIB_ARCH_AND_MODEL_OPT: The architecture and address model
- (-x32 or -x64 for x86/32 and x86/64 respectively)
- BOOST_LIB_VERSION: The Boost version, in the form x_y, for Boost version x.y.
- BOOST_LIB_SUFFIX: Static/import libraries extension (".lib", ".a") for the compiler.
- ***************************************************************************/
- #ifdef __cplusplus
- # ifndef BOOST_CONFIG_HPP
- # include <boost/config.hpp>
- # endif
- #elif defined(_MSC_VER) && !defined(__MWERKS__) && !defined(__EDG_VERSION__)
- //
- // C language compatability (no, honestly)
- //
- # define BOOST_MSVC _MSC_VER
- # define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X)
- # define BOOST_DO_STRINGIZE(X) #X
- #endif
- //
- // Only include what follows for known and supported compilers:
- //
- #if defined(BOOST_MSVC) \
- || defined(BOOST_EMBTC_WINDOWS) \
- || defined(BOOST_BORLANDC) \
- || (defined(__MWERKS__) && defined(_WIN32) && (__MWERKS__ >= 0x3000)) \
- || (defined(__ICL) && defined(_MSC_EXTENSIONS) && (_MSC_VER >= 1200)) \
- || (defined(BOOST_CLANG) && defined(BOOST_WINDOWS) && defined(_MSC_VER) && (__clang_major__ >= 4))
- #ifndef BOOST_VERSION_HPP
- # include <boost/version.hpp>
- #endif
- #ifndef BOOST_LIB_NAME
- # error "Macro BOOST_LIB_NAME not set (internal error)"
- #endif
- //
- // error check:
- //
- #if defined(__MSVC_RUNTIME_CHECKS) && !defined(_DEBUG)
- # pragma message("Using the /RTC option without specifying a debug runtime will lead to linker errors")
- # pragma message("Hint: go to the code generation options and switch to one of the debugging runtimes")
- # error "Incompatible build options"
- #endif
- //
- // select toolset if not defined already:
- //
- #ifndef BOOST_LIB_TOOLSET
- # if defined(BOOST_MSVC) && (BOOST_MSVC < 1200)
- // Note: no compilers before 1200 are supported
- # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
- # ifdef UNDER_CE
- // eVC4:
- # define BOOST_LIB_TOOLSET "evc4"
- # else
- // vc6:
- # define BOOST_LIB_TOOLSET "vc6"
- # endif
- # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1310)
- // vc7:
- # define BOOST_LIB_TOOLSET "vc7"
- # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1400)
- // vc71:
- # define BOOST_LIB_TOOLSET "vc71"
- # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1500)
- // vc80:
- # define BOOST_LIB_TOOLSET "vc80"
- # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1600)
- // vc90:
- # define BOOST_LIB_TOOLSET "vc90"
- # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1700)
- // vc10:
- # define BOOST_LIB_TOOLSET "vc100"
- # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1800)
- // vc11:
- # define BOOST_LIB_TOOLSET "vc110"
- # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1900)
- // vc12:
- # define BOOST_LIB_TOOLSET "vc120"
- # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1910)
- // vc14:
- # define BOOST_LIB_TOOLSET "vc140"
- # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1920)
- // vc14.1:
- # define BOOST_LIB_TOOLSET "vc141"
- # elif defined(BOOST_MSVC)
- // vc14.2:
- # define BOOST_LIB_TOOLSET "vc142"
- # elif defined(BOOST_EMBTC_WINDOWS)
- // Embarcadero Clang based compilers:
- # if defined(BOOST_EMBTC_WIN32C)
- # define BOOST_LIB_TOOLSET "bcb32"
- # elif defined(BOOST_EMBTC_WIN64)
- # define BOOST_LIB_TOOLSET "bcb64"
- # endif
- # elif defined(BOOST_BORLANDC)
- // CBuilder 6:
- # define BOOST_LIB_TOOLSET "bcb"
- # elif defined(__ICL)
- // Intel C++, no version number:
- # define BOOST_LIB_TOOLSET "iw"
- # elif defined(__MWERKS__) && (__MWERKS__ <= 0x31FF )
- // Metrowerks CodeWarrior 8.x
- # define BOOST_LIB_TOOLSET "cw8"
- # elif defined(__MWERKS__) && (__MWERKS__ <= 0x32FF )
- // Metrowerks CodeWarrior 9.x
- # define BOOST_LIB_TOOLSET "cw9"
- # elif defined(BOOST_CLANG) && defined(BOOST_WINDOWS) && defined(_MSC_VER) && (__clang_major__ >= 4)
- // Clang on Windows
- # define BOOST_LIB_TOOLSET "clangw" BOOST_STRINGIZE(__clang_major__)
- # endif
- #endif // BOOST_LIB_TOOLSET
- //
- // select thread opt:
- //
- #if defined(_MT) || defined(__MT__)
- # define BOOST_LIB_THREAD_OPT "-mt"
- #else
- # define BOOST_LIB_THREAD_OPT
- #endif
- #if defined(_MSC_VER) || defined(__MWERKS__)
- # ifdef _DLL
- # if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) && (defined(_STLP_OWN_IOSTREAMS) || defined(__STL_OWN_IOSTREAMS))
- # if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\
- && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
- # define BOOST_LIB_RT_OPT "-gydp"
- # elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))
- # define BOOST_LIB_RT_OPT "-gdp"
- # elif defined(_DEBUG)\
- && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
- # define BOOST_LIB_RT_OPT "-gydp"
- # pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1")
- # error "Build options aren't compatible with pre-built libraries"
- # elif defined(_DEBUG)
- # define BOOST_LIB_RT_OPT "-gdp"
- # pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1")
- # error "Build options aren't compatible with pre-built libraries"
- # else
- # define BOOST_LIB_RT_OPT "-p"
- # endif
- # elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
- # if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\
- && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
- # define BOOST_LIB_RT_OPT "-gydpn"
- # elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))
- # define BOOST_LIB_RT_OPT "-gdpn"
- # elif defined(_DEBUG)\
- && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
- # define BOOST_LIB_RT_OPT "-gydpn"
- # pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1")
- # error "Build options aren't compatible with pre-built libraries"
- # elif defined(_DEBUG)
- # define BOOST_LIB_RT_OPT "-gdpn"
- # pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1")
- # error "Build options aren't compatible with pre-built libraries"
- # else
- # define BOOST_LIB_RT_OPT "-pn"
- # endif
- # else
- # if defined(_DEBUG) && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
- # define BOOST_LIB_RT_OPT "-gyd"
- # elif defined(_DEBUG)
- # define BOOST_LIB_RT_OPT "-gd"
- # else
- # define BOOST_LIB_RT_OPT
- # endif
- # endif
- # else
- # if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) && (defined(_STLP_OWN_IOSTREAMS) || defined(__STL_OWN_IOSTREAMS))
- # if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\
- && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
- # define BOOST_LIB_RT_OPT "-sgydp"
- # elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))
- # define BOOST_LIB_RT_OPT "-sgdp"
- # elif defined(_DEBUG)\
- && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
- # define BOOST_LIB_RT_OPT "-sgydp"
- # pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1")
- # error "Build options aren't compatible with pre-built libraries"
- # elif defined(_DEBUG)
- # define BOOST_LIB_RT_OPT "-sgdp"
- # pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1")
- # error "Build options aren't compatible with pre-built libraries"
- # else
- # define BOOST_LIB_RT_OPT "-sp"
- # endif
- # elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
- # if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\
- && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
- # define BOOST_LIB_RT_OPT "-sgydpn"
- # elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))
- # define BOOST_LIB_RT_OPT "-sgdpn"
- # elif defined(_DEBUG)\
- && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
- # define BOOST_LIB_RT_OPT "-sgydpn"
- # pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1")
- # error "Build options aren't compatible with pre-built libraries"
- # elif defined(_DEBUG)
- # define BOOST_LIB_RT_OPT "-sgdpn"
- # pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1")
- # error "Build options aren't compatible with pre-built libraries"
- # else
- # define BOOST_LIB_RT_OPT "-spn"
- # endif
- # else
- # if defined(_DEBUG)\
- && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
- # define BOOST_LIB_RT_OPT "-sgyd"
- # elif defined(_DEBUG)
- # define BOOST_LIB_RT_OPT "-sgd"
- # else
- # define BOOST_LIB_RT_OPT "-s"
- # endif
- # endif
- # endif
- #elif defined(BOOST_EMBTC_WINDOWS)
- # ifdef _RTLDLL
- # if defined(_DEBUG)
- # define BOOST_LIB_RT_OPT "-d"
- # else
- # define BOOST_LIB_RT_OPT
- # endif
- # else
- # if defined(_DEBUG)
- # define BOOST_LIB_RT_OPT "-sd"
- # else
- # define BOOST_LIB_RT_OPT "-s"
- # endif
- # endif
- #elif defined(BOOST_BORLANDC)
- //
- // figure out whether we want the debug builds or not:
- //
- #if BOOST_BORLANDC > 0x561
- #pragma defineonoption BOOST_BORLAND_DEBUG -v
- #endif
- //
- // sanity check:
- //
- #if defined(__STL_DEBUG) || defined(_STLP_DEBUG)
- #error "Pre-built versions of the Boost libraries are not provided in STLport-debug form"
- #endif
- # ifdef _RTLDLL
- # if defined(BOOST_BORLAND_DEBUG)\
- && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
- # define BOOST_LIB_RT_OPT "-yd"
- # elif defined(BOOST_BORLAND_DEBUG)
- # define BOOST_LIB_RT_OPT "-d"
- # elif defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
- # define BOOST_LIB_RT_OPT "-y"
- # else
- # define BOOST_LIB_RT_OPT
- # endif
- # else
- # if defined(BOOST_BORLAND_DEBUG)\
- && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
- # define BOOST_LIB_RT_OPT "-syd"
- # elif defined(BOOST_BORLAND_DEBUG)
- # define BOOST_LIB_RT_OPT "-sd"
- # elif defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
- # define BOOST_LIB_RT_OPT "-sy"
- # else
- # define BOOST_LIB_RT_OPT "-s"
- # endif
- # endif
- #endif
- //
- // BOOST_LIB_ARCH_AND_MODEL_OPT
- //
- #if defined( _M_IX86 )
- # define BOOST_LIB_ARCH_AND_MODEL_OPT "-x32"
- #elif defined( _M_X64 )
- # define BOOST_LIB_ARCH_AND_MODEL_OPT "-x64"
- #elif defined( _M_ARM )
- # define BOOST_LIB_ARCH_AND_MODEL_OPT "-a32"
- #elif defined( _M_ARM64 )
- # define BOOST_LIB_ARCH_AND_MODEL_OPT "-a64"
- #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
- //
- // 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_ARCH_AND_MODEL_OPT) \
- && defined(BOOST_LIB_VERSION)
- #if defined(BOOST_EMBTC_WIN64)
- # define BOOST_LIB_SUFFIX ".a"
- #else
- # define BOOST_LIB_SUFFIX ".lib"
- #endif
- #ifdef BOOST_AUTO_LINK_NOMANGLE
- # pragma comment(lib, BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_SUFFIX)
- # ifdef BOOST_LIB_DIAGNOSTIC
- # pragma message ("Linking to lib file: " BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_SUFFIX)
- # endif
- #elif defined(BOOST_AUTO_LINK_TAGGED)
- # pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_ARCH_AND_MODEL_OPT BOOST_LIB_SUFFIX)
- # ifdef BOOST_LIB_DIAGNOSTIC
- # pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_ARCH_AND_MODEL_OPT BOOST_LIB_SUFFIX)
- # endif
- #elif defined(BOOST_AUTO_LINK_SYSTEM)
- # pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_SUFFIX)
- # ifdef BOOST_LIB_DIAGNOSTIC
- # pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_SUFFIX)
- # endif
- #elif defined(BOOST_LIB_BUILDID)
- # pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_ARCH_AND_MODEL_OPT "-" BOOST_LIB_VERSION "-" BOOST_STRINGIZE(BOOST_LIB_BUILDID) BOOST_LIB_SUFFIX)
- # ifdef BOOST_LIB_DIAGNOSTIC
- # pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_ARCH_AND_MODEL_OPT "-" BOOST_LIB_VERSION "-" BOOST_STRINGIZE(BOOST_LIB_BUILDID) BOOST_LIB_SUFFIX)
- # endif
- #else
- # pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_ARCH_AND_MODEL_OPT "-" BOOST_LIB_VERSION BOOST_LIB_SUFFIX)
- # ifdef BOOST_LIB_DIAGNOSTIC
- # pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_ARCH_AND_MODEL_OPT "-" BOOST_LIB_VERSION BOOST_LIB_SUFFIX)
- # endif
- #endif
- #else
- # error "some required macros where not defined (internal logic error)."
- #endif
- #endif // _MSC_VER || __BORLANDC__
- //
- // finally undef any macros we may have set:
- //
- #ifdef BOOST_LIB_PREFIX
- # undef BOOST_LIB_PREFIX
- #endif
- #if defined(BOOST_LIB_NAME)
- # undef BOOST_LIB_NAME
- #endif
- // Don't undef this one: it can be set by the user and should be the
- // same for all libraries:
- //#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_ARCH_AND_MODEL_OPT)
- # undef BOOST_LIB_ARCH_AND_MODEL_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
- #if defined(BOOST_LIB_SUFFIX)
- # undef BOOST_LIB_SUFFIX
- #endif
|