commit:     4e42097df80ddaf3eb5ca2906bc2c8625785f6ba
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Mon Apr  1 06:44:09 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Apr  1 06:45:52 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=4e42097d

games-strategy/0ad: fix build w/ libxml2-2.12

Closes: https://bugs.gentoo.org/924387
Signed-off-by: Sam James <sam <AT> gentoo.org>

 games-strategy/0ad/0ad-0.0.26_alpha-r1.ebuild      |   4 +-
 .../0ad/files/0ad-0.0.26_alpha-libxml2-2.12.patch  | 274 +++++++++++++++++++++
 2 files changed, 277 insertions(+), 1 deletion(-)

diff --git a/games-strategy/0ad/0ad-0.0.26_alpha-r1.ebuild 
b/games-strategy/0ad/0ad-0.0.26_alpha-r1.ebuild
index 750458800c15..14311b6b04fe 100644
--- a/games-strategy/0ad/0ad-0.0.26_alpha-r1.ebuild
+++ b/games-strategy/0ad/0ad-0.0.26_alpha-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 2014-2023 Gentoo Authors
+# Copyright 2014-2024 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=8
@@ -99,6 +99,8 @@ PATCHES=(
        "${FILESDIR}"/${PN}-0.0.25b_alpha-fix-setuptools.patch
        # https://code.wildfiregames.com/D4997
        "${FILESDIR}"/${P}-add-missing-cstdint-include.patch
+       # https://code.wildfiregames.com/D5219
+       "${FILESDIR}"/${P}-libxml2-2.12.patch
 )
 
 pkg_setup() {

diff --git a/games-strategy/0ad/files/0ad-0.0.26_alpha-libxml2-2.12.patch 
b/games-strategy/0ad/files/0ad-0.0.26_alpha-libxml2-2.12.patch
new file mode 100644
index 000000000000..08ee1a11fdb2
--- /dev/null
+++ b/games-strategy/0ad/files/0ad-0.0.26_alpha-libxml2-2.12.patch
@@ -0,0 +1,274 @@
+https://bugs.gentoo.org/924387
+https://code.wildfiregames.com/D5219
+
+Index: ps/trunk/libraries/source/fcollada/src/FCollada/FUtils/FUXmlDocument.cpp
+===================================================================
+--- ps/libraries/source/fcollada/src/FCollada/FUtils/FUXmlDocument.cpp
++++ ps/libraries/source/fcollada/src/FCollada/FUtils/FUXmlDocument.cpp
+@@ -2,7 +2,7 @@
+       Copyright (C) 2005-2007 Feeling Software Inc.
+       Portions of the code are:
+       Copyright (C) 2005-2007 Sony Computer Entertainment America
+-      
++
+       MIT License: http://www.opensource.org/licenses/mit-license.php
+ */
+ 
+@@ -13,10 +13,12 @@
+ #include "FUFile.h"
+ #include "FCDocument/FCDocument.h"
+ 
++#include <libxml/parser.h>
++
+ #define MAX_FILE_SIZE 10240000
+ //
+ // FUXmlDocument
+-// 
++//
+ 
+ FUXmlDocument::FUXmlDocument(FUFileManager* manager, const fchar* _filename, 
bool _isParsing)
+ :     isParsing(_isParsing), filename(_filename)
+Index: 
ps/libraries/source/fcollada/src/FColladaPlugins/FArchiveXML/FArchiveXML.cpp
+===================================================================
+--- 
ps/libraries/source/fcollada/src/FColladaPlugins/FArchiveXML/FArchiveXML.cpp
++++ 
ps/libraries/source/fcollada/src/FColladaPlugins/FArchiveXML/FArchiveXML.cpp
+@@ -2,7 +2,7 @@
+       Copyright (C) 2005-2007 Feeling Software Inc.
+       Portions of the code are:
+       Copyright (C) 2005-2007 Sony Computer Entertainment America
+-      
++
+       MIT License: http://www.opensource.org/licenses/mit-license.php
+ */
+ 
+@@ -77,6 +77,7 @@
+ #include "FCDocument/FCDVersion.h"
+ #include "FUtils/FUXmlDocument.h"
+ 
++#include <libxml/xmlIO.h>
+ 
+ //
+ // Constants
+@@ -442,7 +443,7 @@
+       }
+ 
+       if (status) FUError::Error(FUError::DEBUG_LEVEL, 
FUError::DEBUG_LOAD_SUCCESSFUL);
+-      return status;  
++      return status;
+ }
+ 
+ bool FArchiveXML::ExportFile(FCDocument* fcdocument, const fchar* filePath)
+@@ -515,13 +516,13 @@
+       xmlOutputBufferPtr buf = xmlAllocOutputBuffer(NULL);
+       xmlNodeDumpOutput(buf, rootNode->doc, rootNode, 0, 0, NULL);
+ 
+-#ifdef LIBXML2_NEW_BUFFER
+-      outData.resize(xmlOutputBufferGetSize(buf) * sizeof(xmlChar));
+-      memcpy(outData.begin(), xmlOutputBufferGetContent(buf), outData.size());
+-#else
+-      outData.resize(buf->buffer->use * sizeof(xmlChar));
+-      memcpy(outData.begin(), buf->buffer->content, outData.size());
+-#endif
++#ifdef LIBXML2_NEW_BUFFER
++      outData.resize(xmlOutputBufferGetSize(buf) * sizeof(xmlChar));
++      memcpy(outData.begin(), xmlOutputBufferGetContent(buf), outData.size());
++#else
++      outData.resize(buf->buffer->use * sizeof(xmlChar));
++      memcpy(outData.begin(), buf->buffer->content, outData.size());
++#endif
+ 
+       xmlOutputBufferClose(buf);
+       daeDocument.ReleaseXmlData();
+@@ -591,7 +592,7 @@
+               else if (IsEquivalent(child->name, 
DAE_LIBRARY_PMATERIAL_ELEMENT)) n.order = PHYSICS_MATERIAL;
+               else if (IsEquivalent(child->name, DAE_LIBRARY_PMODEL_ELEMENT)) 
n.order = PHYSICS_MODEL;
+               else if (IsEquivalent(child->name, DAE_LIBRARY_PSCENE_ELEMENT)) 
n.order = PHYSICS_SCENE;
+-              else if (IsEquivalent(child->name, DAE_ASSET_ELEMENT)) 
++              else if (IsEquivalent(child->name, DAE_ASSET_ELEMENT))
+               {
+                       // Read in the asset information
+                       status &= 
(FArchiveXML::LoadAsset(theDocument->GetAsset(), child));
+@@ -679,9 +680,9 @@
+               case IMAGE: status &= 
(FArchiveXML::LoadImageLibrary(theDocument->GetImageLibrary(), n.node)); break;
+               case LIGHT: status &= 
(FArchiveXML::LoadLightLibrary(theDocument->GetLightLibrary(), n.node)); break;
+               case MATERIAL: status &= 
(FArchiveXML::LoadMaterialLibrary(theDocument->GetMaterialLibrary(), n.node)); 
break;
+-              case PHYSICS_MODEL: 
++              case PHYSICS_MODEL:
+                       {
+-                              status &= 
(FArchiveXML::LoadPhysicsModelLibrary(theDocument->GetPhysicsModelLibrary(), 
n.node)); 
++                              status &= 
(FArchiveXML::LoadPhysicsModelLibrary(theDocument->GetPhysicsModelLibrary(), 
n.node));
+                               size_t physicsModelCount = 
theDocument->GetPhysicsModelLibrary()->GetEntityCount();
+                               for (size_t physicsModelCounter = 0; 
physicsModelCounter < physicsModelCount; physicsModelCounter++)
+                               {
+@@ -790,7 +791,7 @@
+       {
+               // [staylor] Why is this done here?  Shouldn't it be in 
FCDExternalReferenceManager?
+               // If it is, change it, either way delete the FUAssert (thanks)
+-              //FUAssert(false == true, ;);  
++              // FUAssert(false == true, ;);
+               FArchiveXML::RegisterLoadedDocument(theDocument);
+               
//FCDExternalReferenceManager::RegisterLoadedDocument(theDocument);
+       }
+@@ -891,14 +892,14 @@
+                       // Export the emitter library
+                       xmlNode* libraryNode = AddChild(typedTechniqueNode, 
DAE_LIBRARY_EMITTER_ELEMENT);
+ 
+-                      if 
(!theDocument->GetEmitterLibrary()->GetTransientFlag()) 
++                      if 
(!theDocument->GetEmitterLibrary()->GetTransientFlag())
+                               
FArchiveXML::WriteLibrary(theDocument->GetEmitterLibrary(), libraryNode);
+               }
+ 
+               // Write out the animations
+               if (animationLibraryNode != NULL)
+               {
+-                      if 
(!theDocument->GetAnimationLibrary()->GetTransientFlag()) 
++                      if 
(!theDocument->GetAnimationLibrary()->GetTransientFlag())
+                               
FArchiveXML::WriteLibrary(theDocument->GetAnimationLibrary(), 
animationLibraryNode);
+               }
+ 
+@@ -978,7 +979,7 @@
+       {
+               return FArchiveXML::WriteSwitch(object, 
&objectType->GetParent(), node);
+       }
+-      else 
++      else
+       {
+               FUBreak;
+               return NULL;
+@@ -986,7 +987,7 @@
+ }
+ 
+ bool FArchiveXML::LoadAnimationLibrary(FCDObject* object, xmlNode* node)
+-{ 
++{
+       return FArchiveXML::LoadLibrary<FCDAnimation>(object, node);
+ }
+ 
+@@ -996,17 +997,17 @@
+ }
+ 
+ bool FArchiveXML::LoadCameraLibrary(FCDObject* object, xmlNode* node)
+-{ 
++{
+       return FArchiveXML::LoadLibrary<FCDCamera>(object, node);
+ }
+ 
+ bool FArchiveXML::LoadControllerLibrary(FCDObject* object, xmlNode* node)
+-{ 
++{
+       return FArchiveXML::LoadLibrary<FCDController>(object, node);
+ }
+ 
+ bool FArchiveXML::LoadEffectLibrary(FCDObject* object, xmlNode* node)
+-{ 
++{
+       return FArchiveXML::LoadLibrary<FCDEffect>(object, node);
+ }
+ 
+@@ -1016,7 +1017,7 @@
+ }
+ 
+ bool FArchiveXML::LoadForceFieldLibrary(FCDObject* object, xmlNode* node)
+-{ 
++{
+       return FArchiveXML::LoadLibrary<FCDForceField>(object, node);
+ }
+ 
+Index: ps/source/collada/CommonConvert.cpp
+===================================================================
+--- ps/source/collada/CommonConvert.cpp
++++ ps/source/collada/CommonConvert.cpp
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2018 Wildfire Games.
++/* Copyright (C) 2023 Wildfire Games.
+  * This file is part of 0 A.D.
+  *
+  * 0 A.D. is free software: you can redistribute it and/or modify
+@@ -28,8 +28,9 @@
+ #include "FUtils/FUDaeSyntax.h"
+ #include "FUtils/FUFileManager.h"
+ 
+-#include <cassert>
+ #include <algorithm>
++#include <cassert>
++#include <libxml/xmlerror.h>
+ 
+ void require_(int line, bool value, const char* type, const char* message)
+ {
+Index: ps/source/collada/XMLFix.cpp
+===================================================================
+--- ps/source/collada/XMLFix.cpp
++++ ps/source/collada/XMLFix.cpp
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2009 Wildfire Games.
++/* Copyright (C) 2023 Wildfire Games.
+  * This file is part of 0 A.D.
+  *
+  * 0 A.D. is free software: you can redistribute it and/or modify
+@@ -23,6 +23,8 @@
+ 
+ #include "FUtils/FUXmlParser.h"
+ 
++#include <libxml/parser.h>
++
+ /*
+ 
+ Things that are fixed here:
+Index: ps/source/ps/XML/RelaxNG.cpp
+===================================================================
+--- ps/source/ps/XML/RelaxNG.cpp
++++ ps/source/ps/XML/RelaxNG.cpp
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2021 Wildfire Games.
++/* Copyright (C) 2023 Wildfire Games.
+  * This file is part of 0 A.D.
+  *
+  * 0 A.D. is free software: you can redistribute it and/or modify
+@@ -25,9 +25,11 @@
+ #include "ps/CStr.h"
+ #include "ps/Filesystem.h"
+ 
++#include <libxml/parser.h>
+ #include <libxml/relaxng.h>
+ #include <map>
+ #include <mutex>
++#include <type_traits>
+ 
+ TIMER_ADD_CLIENT(xml_validation);
+ 
+@@ -46,7 +48,8 @@
+       g_SchemaCache.clear();
+ }
+ 
+-static void relaxNGErrorHandler(void* UNUSED(userData), xmlErrorPtr error)
++static void relaxNGErrorHandler(void* UNUSED(userData),
++      std::conditional_t<LIBXML_VERSION >= 21200, const xmlError, xmlError>* 
error)
+ {
+       // Strip a trailing newline
+       std::string message = error->message;
+Index: ps/source/ps/XML/Xeromyces.cpp
+===================================================================
+--- ps/source/ps/XML/Xeromyces.cpp
++++ ps/source/ps/XML/Xeromyces.cpp
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2021 Wildfire Games.
++/* Copyright (C) 2023 Wildfire Games.
+  * This file is part of 0 A.D.
+  *
+  * 0 A.D. is free software: you can redistribute it and/or modify
+@@ -33,12 +33,14 @@
+ #include "Xeromyces.h"
+ 
+ #include <libxml/parser.h>
++#include <type_traits>
+ 
+ static std::mutex g_ValidatorCacheLock;
+ static std::map<const std::string, RelaxNGValidator> g_ValidatorCache;
+ static bool g_XeromycesStarted = false;
+ 
+-static void errorHandler(void* UNUSED(userData), xmlErrorPtr error)
++static void errorHandler(void* UNUSED(userData),
++      std::conditional_t<LIBXML_VERSION >= 21200, const xmlError, xmlError>* 
error)
+ {
+       // Strip a trailing newline
+       std::string message = error->message;

Reply via email to