diff --git a/FreeCAD.changes b/FreeCAD.changes index 6b17328..7324971 100644 --- a/FreeCAD.changes +++ b/FreeCAD.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Sun Nov 17 00:03:18 UTC 2024 - Stefan Brüns + +- Add patch for Xerces 3.3 compatibility (upstream with changes): + * freecad-xerces_3_3_compat.patch + ------------------------------------------------------------------- Wed Sep 18 09:35:46 UTC 2024 - Stefan Brüns diff --git a/FreeCAD.spec b/FreeCAD.spec index 8acae80..bef1df4 100644 --- a/FreeCAD.spec +++ b/FreeCAD.spec @@ -60,6 +60,8 @@ Patch13: https://github.com/FreeCAD/FreeCAD/commit/91457bbdee2422c7f03726 Patch14: freecad-opengl.patch # PATCH-FIX-UPSTREAM - patch from master, modified for 0.21.1 - https://github.com/FreeCAD/FreeCAD/commit/98888241920ad04fa3c2f56bdf196debf8cfb39c.patch Patch15: boost_1_86_fixes.patch +# PATCH-FIX-UPSTREAM - patch from master, modified for 0.21.2 - https://github.com/FreeCAD/FreeCAD/commit/7a6a82e2ca858c24d97e1f34c77777b25a9e0859.patch +Patch16: freecad-xerces_3_3_compat.patch # Test suite fails on 32bit and I don't want to debug that anymore ExcludeArch: %ix86 %arm ppc s390 s390x diff --git a/freecad-xerces_3_3_compat.patch b/freecad-xerces_3_3_compat.patch new file mode 100644 index 0000000..2894e2e --- /dev/null +++ b/freecad-xerces_3_3_compat.patch @@ -0,0 +1,335 @@ +diff --git a/src/App/Metadata.cpp b/src/App/Metadata.cpp +index 05d58b4..bac6822 100644 +--- a/src/App/Metadata.cpp ++++ b/src/App/Metadata.cpp +@@ -58,7 +58,12 @@ directly. If you did not intend to use a system-defined macro + + using namespace App; + namespace fs = boost::filesystem; ++#ifndef XERCES_CPP_NAMESPACE_BEGIN ++#define XERCES_CPP_NAMESPACE_QUALIFIER ++using namespace XERCES_CPP_NAMESPACE; ++#else + XERCES_CPP_NAMESPACE_USE ++#endif + + namespace MetadataInternal + { +diff --git a/src/App/MetadataPyImp.cpp b/src/App/MetadataPyImp.cpp +index d3708ad..be478d6 100644 +--- a/src/App/MetadataPyImp.cpp ++++ b/src/App/MetadataPyImp.cpp +@@ -30,7 +30,12 @@ + #include "MetadataPy.cpp" + + using namespace Base; ++#ifndef XERCES_CPP_NAMESPACE_BEGIN ++#define XERCES_CPP_NAMESPACE_QUALIFIER ++using namespace XERCES_CPP_NAMESPACE; ++#else + XERCES_CPP_NAMESPACE_USE ++#endif + + // Returns a string which represents the object e.g. when printed in Python + std::string MetadataPy::representation() const +diff --git a/src/Base/InputSource.cpp b/src/Base/InputSource.cpp +index 0c4039a..bf73486 100644 +--- a/src/Base/InputSource.cpp ++++ b/src/Base/InputSource.cpp +@@ -35,8 +35,12 @@ + #include "InputSource.h" + #include "XMLTools.h" + +- ++#ifndef XERCES_CPP_NAMESPACE_BEGIN ++#define XERCES_CPP_NAMESPACE_QUALIFIER ++using namespace XERCES_CPP_NAMESPACE; ++#else + XERCES_CPP_NAMESPACE_USE ++#endif + + using namespace Base; + using namespace std; +diff --git a/src/Base/InputSource.h b/src/Base/InputSource.h +index 321b741..9969f6b 100644 +--- a/src/Base/InputSource.h ++++ b/src/Base/InputSource.h +@@ -32,10 +32,18 @@ + #include + #endif + +- ++#ifndef XERCES_CPP_NAMESPACE_BEGIN ++#define XERCES_CPP_NAMESPACE_QUALIFIER ++using namespace XERCES_CPP_NAMESPACE; ++namespace XERCES_CPP_NAMESPACE ++{ ++class BinInputStream; ++} ++#else + XERCES_CPP_NAMESPACE_BEGIN + class BinInputStream; + XERCES_CPP_NAMESPACE_END ++#endif + + namespace Base + { +diff --git a/src/Base/Parameter.cpp b/src/Base/Parameter.cpp +index 93d45a9..5af8fb7 100644 +--- a/src/Base/Parameter.cpp ++++ b/src/Base/Parameter.cpp +@@ -54,11 +54,12 @@ + + FC_LOG_LEVEL_INIT("Parameter", true, true) + +-//#ifdef XERCES_HAS_CPP_NAMESPACE +-// using namespace xercesc; +-//#endif +- ++#ifndef XERCES_CPP_NAMESPACE_BEGIN ++#define XERCES_CPP_NAMESPACE_QUALIFIER ++using namespace XERCES_CPP_NAMESPACE; ++#else + XERCES_CPP_NAMESPACE_USE ++#endif + using namespace Base; + + +diff --git a/src/Base/Parameter.h b/src/Base/Parameter.h +index 72a2391..71f38a7 100644 +--- a/src/Base/Parameter.h ++++ b/src/Base/Parameter.h +@@ -65,7 +65,18 @@ using PyObject = struct _object; + # pragma warning( disable : 4275 ) + #endif + +- ++#ifndef XERCES_CPP_NAMESPACE_BEGIN ++#define XERCES_CPP_NAMESPACE_QUALIFIER ++using namespace XERCES_CPP_NAMESPACE; ++namespace XERCES_CPP_NAMESPACE ++{ ++class DOMNode; ++class DOMElement; ++class DOMDocument; ++class XMLFormatTarget; ++class InputSource; ++} // namespace XERCES_CPP_NAMESPACE ++#else + XERCES_CPP_NAMESPACE_BEGIN + class DOMNode; + class DOMElement; +@@ -73,6 +84,7 @@ class DOMDocument; + class XMLFormatTarget; + class InputSource; + XERCES_CPP_NAMESPACE_END ++#endif + + class ParameterManager; + +diff --git a/src/Base/Reader.cpp b/src/Base/Reader.cpp +index 3231d26..8d5f889 100644 +--- a/src/Base/Reader.cpp ++++ b/src/Base/Reader.cpp +@@ -45,8 +45,12 @@ + #include + #include + +- ++#ifndef XERCES_CPP_NAMESPACE_BEGIN ++#define XERCES_CPP_NAMESPACE_QUALIFIER ++using namespace XERCES_CPP_NAMESPACE; ++#else + XERCES_CPP_NAMESPACE_USE ++#endif + + using namespace std; + +diff --git a/src/Base/Reader.h b/src/Base/Reader.h +index aa66f53..be6943e 100644 +--- a/src/Base/Reader.h ++++ b/src/Base/Reader.h +@@ -41,11 +41,20 @@ + namespace zipios { + class ZipInputStream; + } +- ++#ifndef XERCES_CPP_NAMESPACE_BEGIN ++#define XERCES_CPP_NAMESPACE_QUALIFIER ++using namespace XERCES_CPP_NAMESPACE; ++namespace XERCES_CPP_NAMESPACE ++{ ++class DefaultHandler; ++class SAX2XMLReader; ++} // namespace XERCES_CPP_NAMESPACE ++#else + XERCES_CPP_NAMESPACE_BEGIN + class DefaultHandler; + class SAX2XMLReader; + XERCES_CPP_NAMESPACE_END ++#endif + + namespace Base + { +diff --git a/src/Base/XMLTools.cpp b/src/Base/XMLTools.cpp +index 84b5a8e..7fe8d14 100644 +--- a/src/Base/XMLTools.cpp ++++ b/src/Base/XMLTools.cpp +@@ -26,15 +26,21 @@ + #include "XMLTools.h" + + using namespace Base; ++ ++#ifndef XERCES_CPP_NAMESPACE_BEGIN ++#define XERCES_CPP_NAMESPACE_QUALIFIER ++using namespace XERCES_CPP_NAMESPACE; ++#else ++XERCES_CPP_NAMESPACE_USE ++#endif + +-std::unique_ptr XMLTools::transcoder; ++std::unique_ptr XMLTools::transcoder; + + void XMLTools::initialize() + { +- XERCES_CPP_NAMESPACE_USE; + if (!transcoder.get()) { + XMLTransService::Codes res; +- transcoder.reset(XERCES_CPP_NAMESPACE_QUALIFIER XMLPlatformUtils::fgTransService->makeNewTranscoderFor(XERCES_CPP_NAMESPACE_QUALIFIER XMLRecognizer::UTF_8, res, 4096, XERCES_CPP_NAMESPACE_QUALIFIER XMLPlatformUtils::fgMemoryManager)); ++ transcoder.reset(XMLPlatformUtils::fgTransService->makeNewTranscoderFor(XMLRecognizer::UTF_8, res, 4096, XMLPlatformUtils::fgMemoryManager)); + if (res != XMLTransService::Ok) + throw Base::UnicodeError("Can\'t create transcoder"); + } +@@ -44,7 +50,6 @@ std::string XMLTools::toStdString(const XMLCh* const toTranscode) + { + std::string str; + +- XERCES_CPP_NAMESPACE_USE; + initialize(); + + //char outBuff[128]; +@@ -75,7 +80,6 @@ std::basic_string XMLTools::toXMLString(const char* const fromTranscode) + if (!fromTranscode) + return str; + +- XERCES_CPP_NAMESPACE_USE; + initialize(); + + static XMLCh outBuff[128]; +diff --git a/src/Base/XMLTools.h b/src/Base/XMLTools.h +index d0dc66c..1a0e083 100644 +--- a/src/Base/XMLTools.h ++++ b/src/Base/XMLTools.h +@@ -31,12 +31,22 @@ + + #include + +- ++#ifndef XERCES_CPP_NAMESPACE_BEGIN ++#define XERCES_CPP_NAMESPACE_QUALIFIER ++using namespace XERCES_CPP_NAMESPACE; ++namespace XERCES_CPP_NAMESPACE ++{ ++class DOMNode; ++class DOMElement; ++class DOMDocument; ++} // namespace XERCES_CPP_NAMESPACE ++#else + XERCES_CPP_NAMESPACE_BEGIN + class DOMNode; + class DOMElement; + class DOMDocument; + XERCES_CPP_NAMESPACE_END ++#endif + + // Helper class + class BaseExport XMLTools +diff --git a/src/Mod/Mesh/App/Core/IO/Reader3MF.cpp b/src/Mod/Mesh/App/Core/IO/Reader3MF.cpp +index 5dbe53d..a7e7742 100644 +--- a/src/Mod/Mesh/App/Core/IO/Reader3MF.cpp ++++ b/src/Mod/Mesh/App/Core/IO/Reader3MF.cpp +@@ -41,7 +41,12 @@ + + + using namespace MeshCore; ++#ifndef XERCES_CPP_NAMESPACE_BEGIN ++#define XERCES_CPP_NAMESPACE_QUALIFIER ++using namespace XERCES_CPP_NAMESPACE; ++#else + XERCES_CPP_NAMESPACE_USE ++#endif + + Reader3MF::Reader3MF(std::istream &str) + { +diff --git a/src/Mod/Mesh/App/Core/IO/Reader3MF.h b/src/Mod/Mesh/App/Core/IO/Reader3MF.h +index 439e70d..7f54495 100644 +--- a/src/Mod/Mesh/App/Core/IO/Reader3MF.h ++++ b/src/Mod/Mesh/App/Core/IO/Reader3MF.h +@@ -31,10 +31,20 @@ + #include + #include + ++#ifndef XERCES_CPP_NAMESPACE_BEGIN ++#define XERCES_CPP_NAMESPACE_QUALIFIER ++using namespace XERCES_CPP_NAMESPACE; ++namespace XERCES_CPP_NAMESPACE ++{ ++class DOMDocument; ++class DOMNodeList; ++} // namespace XERCES_CPP_NAMESPACE ++#else + XERCES_CPP_NAMESPACE_BEGIN + class DOMDocument; + class DOMNodeList; + XERCES_CPP_NAMESPACE_END ++#endif + + namespace MeshCore + { +diff --git a/tests/src/App/Metadata.cpp b/tests/src/App/Metadata.cpp +index fa045cc..b91e4ad 100644 +--- a/tests/src/App/Metadata.cpp ++++ b/tests/src/App/Metadata.cpp +@@ -24,6 +24,7 @@ + #include "gtest/gtest.h" + + #include "App/Metadata.h" ++#include + + // NOLINTBEGIN(readability-named-parameter) + +@@ -192,11 +193,11 @@ class MetadataTest: public ::testing::Test + protected: + void SetUp() override + { +- xercesc_3_2::XMLPlatformUtils::Initialize(); ++ XERCES_CPP_NAMESPACE::XMLPlatformUtils::Initialize(); + } + void TearDown() override + { +- xercesc_3_2::XMLPlatformUtils::Terminate(); ++ XERCES_CPP_NAMESPACE::XMLPlatformUtils::Terminate(); + } + std::string GivenSimpleMetadataXMLString() + { +diff --git a/tests/src/Base/Reader.cpp b/tests/src/Base/Reader.cpp +index 64fbc92..2329a05 100644 +--- a/tests/src/Base/Reader.cpp ++++ b/tests/src/Base/Reader.cpp +@@ -8,6 +8,7 @@ + #include + #include + #include ++#include + + namespace fs = std::filesystem; + +@@ -16,7 +17,7 @@ class ReaderTest: public ::testing::Test + protected: + void SetUp() override + { +- xercesc_3_2::XMLPlatformUtils::Initialize(); ++ XERCES_CPP_NAMESPACE::XMLPlatformUtils::Initialize(); + _tempDir = fs::temp_directory_path(); + std::string filename = "unit_test_Reader.xml"; + _tempFile = _tempDir / filename;