//  (C) Copyright John Maddock 2001 - 2003.

//  (C) Copyright David Abrahams 2002 - 2003.

//  (C) Copyright Aleksey Gurtovoy 2002.

//  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)



//  See http://www.boost.org for most recent version.



//  Borland C++ compiler setup:



//

// versions check:

// we don't support Borland prior to version 5.4:

#if __BORLANDC__ < 0x540

#  error "Compiler not supported or configured - please reconfigure"

#endif



// last known and checked version is 0x600 (Builder X preview)

// or 0x593 (CodeGear C++ Builder 2007 December 2007 update):

#if (__BORLANDC__ > 0x593) && (__BORLANDC__ != 0x600)

#  if defined(BOOST_ASSERT_CONFIG)

#     error "Unknown compiler version - please run the configure tests and report the results"

#  else

#     pragma message( "Unknown compiler version - please run the configure tests and report the results")

#  endif

#endif



//

// Support macros to help with standard library detection

#if (__BORLANDC__ < 0x560) || defined(_USE_OLD_RW_STL)

#  define BOOST_BCB_WITH_ROGUE_WAVE

#elif __BORLANDC__ < 0x570

#  define BOOST_BCB_WITH_STLPORT

#else

#  define BOOST_BCB_WITH_DINKUMWARE

#endif



//

// Version 5.0 and below:

#   if __BORLANDC__ <= 0x0550

// Borland C++Builder 4 and 5:

#     define BOOST_NO_MEMBER_TEMPLATE_FRIENDS

#     if __BORLANDC__ == 0x0550

// Borland C++Builder 5, command-line compiler 5.5:

#       define BOOST_NO_OPERATORS_IN_NAMESPACE

#     endif

#   endif



// Version 5.51 and below:

#if (__BORLANDC__ <= 0x551)

#  define BOOST_NO_CV_SPECIALIZATIONS

#  define BOOST_NO_CV_VOID_SPECIALIZATIONS

#  define BOOST_NO_DEDUCED_TYPENAME

// workaround for missing WCHAR_MAX/WCHAR_MIN:

#include <climits>

#include <cwchar>

#ifndef WCHAR_MAX

#  define WCHAR_MAX 0xffff

#endif

#ifndef WCHAR_MIN

#  define WCHAR_MIN 0

#endif

#endif



// Borland C++ Builder 6 and below:

#if (__BORLANDC__ <= 0x564)

#  define BOOST_NO_INTEGRAL_INT64_T



#  ifdef NDEBUG

      // fix broken <cstring> so that Boost.test works:

#     include <cstring>

#     undef strcmp

#  endif

   // fix broken errno declaration:

#  include <errno.h>

#  ifndef errno

#     define errno errno

#  endif



#endif



//

// new bug in 5.61:

#if (__BORLANDC__ >= 0x561) && (__BORLANDC__ <= 0x580)

   // this seems to be needed by the command line compiler, but not the IDE:

#  define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS

#endif



// Borland C++ Builder 2006 Update 2 and below:

#if (__BORLANDC__ <= 0x582)

#  define BOOST_NO_SFINAE

#  define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG

#  define BOOST_NO_TEMPLATE_TEMPLATES



#  define BOOST_NO_PRIVATE_IN_AGGREGATE



#  ifdef _WIN32

#     define BOOST_NO_SWPRINTF

#  elif defined(linux) || defined(__linux__) || defined(__linux)

      // we should really be able to do without this

      // but the wcs* functions aren't imported into std::

#     define BOOST_NO_STDC_NAMESPACE

      // _CPPUNWIND doesn't get automatically set for some reason:

#     pragma defineonoption BOOST_CPPUNWIND -x

#  endif

#endif



// Borland C++ Builder 2007 December 2007 Update and below:

#if (__BORLANDC__ <= 0x593)

#  define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS

#  define BOOST_NO_USING_TEMPLATE

#  define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE

#  define BOOST_NO_MEMBER_TEMPLATE_FRIENDS

   // we shouldn't really need this - but too many things choke

   // without it, this needs more investigation:

#  define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS

#  define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL

#  define BOOST_NO_IS_ABSTRACT

#  define BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS

#  define BOOST_NO_TWO_PHASE_NAME_LOOKUP



// Temporary workaround

#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS



#endif



#if __BORLANDC__ >= 0x590

#  define BOOST_HAS_TR1_HASH



#  define BOOST_HAS_MACRO_USE_FACET

#endif



//

// Post 0x561 we have long long and stdint.h:

#if __BORLANDC__ >= 0x561

#  ifndef __NO_LONG_LONG

#     define BOOST_HAS_LONG_LONG

#  endif

   // On non-Win32 platforms let the platform config figure this out:

#  ifdef _WIN32

#      define BOOST_HAS_STDINT_H

#  endif

#endif



// Borland C++Builder 6 defaults to using STLPort.  If _USE_OLD_RW_STL is

// defined, then we have 0x560 or greater with the Rogue Wave implementation

// which presumably has the std::DBL_MAX bug.

#if defined( BOOST_BCB_WITH_ROGUE_WAVE )

// <climits> is partly broken, some macros define symbols that are really in

// namespace std, so you end up having to use illegal constructs like

// std::DBL_MAX, as a fix we'll just include float.h and have done with:

#include <float.h>

#endif

//

// __int64:

//

#if (__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__)

#  define BOOST_HAS_MS_INT64

#endif

//

// check for exception handling support:

//

#if !defined(_CPPUNWIND) && !defined(BOOST_CPPUNWIND) && !defined(__EXCEPTIONS)

#  define BOOST_NO_EXCEPTIONS

#endif

//

// all versions have a <dirent.h>:

//

#ifndef __STRICT_ANSI__

#  define BOOST_HAS_DIRENT_H

#endif

//

// all versions support __declspec:

//

#ifndef __STRICT_ANSI__

#  define BOOST_HAS_DECLSPEC

#endif

//

// ABI fixing headers:

//

#if __BORLANDC__ < 0x600 // not implemented for version 6 compiler yet

#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

#endif

//

// Disable Win32 support in ANSI mode:

//

#if __BORLANDC__ < 0x600

#  pragma defineonoption BOOST_DISABLE_WIN32 -A

#elif defined(__STRICT_ANSI__)

#  define BOOST_DISABLE_WIN32

#endif

//

// MSVC compatibility mode does some nasty things:

// TODO: look up if this doesn't apply to the whole 12xx range

//

#if defined(_MSC_VER) && (_MSC_VER <= 1200)

#  define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP

#  define BOOST_NO_VOID_RETURNS

#endif



#define BOOST_COMPILER "Borland C++ version " BOOST_STRINGIZE(__BORLANDC__)





