Using XalanCAPI.h to compile a transformer with Microsoft 'C' (not C++)
requires the
following patch to the new Xerces-C 3.0.1
(xercesc/src/xercesc/util/XercesDefs.hpp. I have no
such problem with Xerces-C.3.0.
A patch is required in order for XALAN-C 1.11 to use its C-APIs with
XERCES-C 3.0.1 using Microsoft C Compilers (not C++).
File: src/xercesc/util/XercesDefs.hpp
Old Section
//
---------------------------------------------------------------------------
// Define namespace symbols if the compiler supports it.
//
---------------------------------------------------------------------------
#if defined(XERCES_HAS_CPP_NAMESPACE)
#define XERCES_CPP_NAMESPACE_BEGIN namespace XERCES_CPP_NAMESPACE {
#define XERCES_CPP_NAMESPACE_END }
#define XERCES_CPP_NAMESPACE_USE using namespace XERCES_CPP_NAMESPACE;
#define XERCES_CPP_NAMESPACE_QUALIFIER XERCES_CPP_NAMESPACE::
namespace XERCES_CPP_NAMESPACE { }
namespace xercesc = XERCES_CPP_NAMESPACE;
#else
#define XERCES_CPP_NAMESPACE_BEGIN
#define XERCES_CPP_NAMESPACE_END
#define XERCES_CPP_NAMESPACE_USE
#define XERCES_CPP_NAMESPACE_QUALIFIER
#endif
===========================================================================
Edit Section: Add test for (__cplusplus)
This prevents 'C' compilers from trying to invoke the 'namespace' commands.
I found this issue when trying to build XALAN-C XSLT ransformation using the
XALAN C-APIs with Microsoft C (not C++) compilation. Adding the test
for defined(__cplusplus) resolves the C language compatibility issue.
===========================================================================
//
---------------------------------------------------------------------------
// Define namespace symbols if the compiler supports it.
//
---------------------------------------------------------------------------
#if defined(XERCES_HAS_CPP_NAMESPACE) && defined(__cplusplus)
#define XERCES_CPP_NAMESPACE_BEGIN namespace XERCES_CPP_NAMESPACE {
#define XERCES_CPP_NAMESPACE_END }
#define XERCES_CPP_NAMESPACE_USE using namespace XERCES_CPP_NAMESPACE;
#define XERCES_CPP_NAMESPACE_QUALIFIER XERCES_CPP_NAMESPACE::
namespace XERCES_CPP_NAMESPACE { }
namespace xercesc = XERCES_CPP_NAMESPACE;
#else
#define XERCES_CPP_NAMESPACE_BEGIN
#define XERCES_CPP_NAMESPACE_END
#define XERCES_CPP_NAMESPACE_USE
#define XERCES_CPP_NAMESPACE_QUALIFIER
#endif