commit:     61b6130343a41b49da1ffe7376ab5d2077a37411
Author:     Sebastian Pipping <sping <AT> gentoo <DOT> org>
AuthorDate: Sun Apr  6 01:54:52 2025 +0000
Commit:     Sebastian Pipping <sping <AT> gentoo <DOT> org>
CommitDate: Sun Apr  6 02:13:19 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=61b61303

dev-libs/xmlrpc-c: Unbundle dev-libs/expat

Bug: https://bugs.gentoo.org/952113
Signed-off-by: Sebastian Pipping <sping <AT> gentoo.org>

 .../files/xmlrpc-c-1.59.03-use-system-expat.patch  | 229 +++++++++++++++++++++
 dev-libs/xmlrpc-c/xmlrpc-c-1.59.03-r2.ebuild       |  90 ++++++++
 2 files changed, 319 insertions(+)

diff --git a/dev-libs/xmlrpc-c/files/xmlrpc-c-1.59.03-use-system-expat.patch 
b/dev-libs/xmlrpc-c/files/xmlrpc-c-1.59.03-use-system-expat.patch
new file mode 100644
index 000000000000..df25189042e5
--- /dev/null
+++ b/dev-libs/xmlrpc-c/files/xmlrpc-c-1.59.03-use-system-expat.patch
@@ -0,0 +1,229 @@
+From 5d276a95a6953c51ed4fd20cabc6eab3808755e5 Mon Sep 17 00:00:00 2001
+From: Sebastian Pipping <[email protected]>
+Date: Sun, 6 Apr 2025 02:19:15 +0200
+Subject: [PATCH] Use system libexpat rather than bundled lib/expat/ for
+ security
+
+---
+ common.mk                 | 31 +------------------------------
+ config.mk.in              |  1 +
+ lib/Makefile              |  3 ---
+ src/Makefile              |  8 +++-----
+ src/cpp/Makefile          |  6 ++----
+ src/xmlrpc_expat.c        | 18 ++++++++++--------
+ xmlrpc-c-config.test.main |  6 ++----
+ 7 files changed, 19 insertions(+), 54 deletions(-)
+
+diff --git a/common.mk b/common.mk
+index e6e79a0..4f8b8b7 100644
+--- a/common.mk
++++ b/common.mk
+@@ -216,22 +216,6 @@ LIBXMLRPC_SERVER_CGI_A   = 
$(BLDDIR)/src/libxmlrpc_server_cgi.a
+ 
+ endif
+ 
+-LIBXMLRPC_XMLTOK_DIR = $(BLDDIR)/lib/expat/xmltok
+-
+-ifneq ($(OMIT_XMLTOK_LIB_RULE),Y)
+-LIBXMLRPC_XMLTOK         = \
+-  $(call shliblefn, $(LIBXMLRPC_XMLTOK_DIR)/libxmlrpc_xmltok)
+-LIBXMLRPC_XMLTOK_A       = $(LIBXMLRPC_XMLTOK_DIR)/libxmlrpc_xmltok.a
+-endif
+-
+-LIBXMLRPC_XMLPARSE_DIR = $(BLDDIR)/lib/expat/xmlparse
+-
+-ifneq ($(OMIT_XMLPARSE_LIB_RULE),Y)
+-LIBXMLRPC_XMLPARSE       = \
+-  $(call shliblefn, $(LIBXMLRPC_XMLPARSE_DIR)/libxmlrpc_xmlparse)
+-LIBXMLRPC_XMLPARSE_A     = $(LIBXMLRPC_XMLPARSE_DIR)/libxmlrpc_xmlparse.a
+-endif
+-
+ LIBXMLRPC_ABYSS_DIR = $(BLDDIR)/lib/abyss/src
+ 
+ ifneq ($(OMIT_ABYSS_LIB_RULE),Y)
+@@ -270,16 +254,11 @@ LIBXMLRPC_SERVER_PSTREAMPP = \
+   $(call shliblefn, $(BLDDIR)/src/cpp/libxmlrpc_server_pstream++)
+ LIBXMLRPC_SERVER_PSTREAMPP_A = $(BLDDIR)/src/cpp/libxmlrpc_server_pstream++.a
+ 
+-# LIBXMLRPC_XML is the list of Xmlrpc-c libraries we need to parse
+-# XML.  If we're using an external library to parse XML, this is null.
+ # LDLIBS_XML is the corresponding -L/-l options
+ 
+ ifneq ($(ENABLE_LIBXML2_BACKEND),yes)
+   # We're using the internal Expat XML parser
+-  LIBXMLRPC_XML = $(LIBXMLRPC_XMLPARSE) $(LIBXMLRPC_XMLTOK)
+-  LDLIBS_XML = \
+-        -L$(BLDDIR)/lib/expat/xmlparse -lxmlrpc_xmlparse \
+-        -L$(BLDDIR)/lib/expat/xmltok   -lxmlrpc_xmltok
++  LDLIBS_XML = $(shell $(PKG_CONFIG) --libs expat)
+ else
+   LDLIBS_XML = $(shell xml2-config --libs)
+ endif
+@@ -472,14 +451,6 @@ $(LIBXMLRPC_UTILPP) $(LIBXMLRPC_UTILPP_A) : FORCE
+       $(MAKE) -C $(dir $@) -f $(SRCDIR)/lib/libutil++/Makefile \
+           $(notdir $@)
+ 
+-$(LIBXMLRPC_XMLPARSE) $(LIBXMLRPC_XMLPARSE_A) : FORCE
+-      $(MAKE) -C $(dir $@) -f $(SRCDIR)/lib/expat/xmlparse/Makefile \
+-          $(notdir $@)
+-
+-$(LIBXMLRPC_XMLTOK) $(LIBXMLRPC_XMLTOK_A) : FORCE
+-      $(MAKE) -C $(dir $@) -f $(SRCDIR)/lib/expat/xmltok/Makefile \
+-          $(notdir $@)
+-
+ $(LIBXMLRPC_ABYSS) $(LIBXMLRPC_ABYSS_A): FORCE
+       $(MAKE) -C $(dir $@) -f $(SRCDIR)/lib/abyss/src/Makefile \
+           $(notdir $@)
+diff --git a/config.mk.in b/config.mk.in
+index 725c063..5251c85 100644
+--- a/config.mk.in
++++ b/config.mk.in
+@@ -52,6 +52,7 @@ CXX = @CXX@
+ CCLD = $(CC)
+ CXXLD = $(CXX)
+ AR = @AR@
++PKG_CONFIG = pkg-config
+ RANLIB = @RANLIB@
+ LN_S = ln -s
+ INSTALL = $(SRCDIR)/install-sh
+diff --git a/lib/Makefile b/lib/Makefile
+index c0e7889..b573ed5 100644
+--- a/lib/Makefile
++++ b/lib/Makefile
+@@ -28,9 +28,6 @@ endif
+ ifeq ($(MUST_BUILD_LIBWWW_CLIENT),yes)
+   SUBDIRS += libwww_transport
+ endif
+-ifneq ($(ENABLE_LIBXML2_BACKEND),yes)
+-  SUBDIRS += expat
+-endif
+ 
+ ifeq ($(HAVE_OPENSSL),Y)
+   SUBDIRS += openssl
+diff --git a/src/Makefile b/src/Makefile
+index acd04dd..75ffafb 100644
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -73,10 +73,8 @@ ifeq ($(ENABLE_LIBXML2_BACKEND),yes)
+   XML_PKGCONFIG_REQ = libxml-2.0
+ else
+   XMLRPC_XML_PARSER = xmlrpc_expat
+-  XML_PARSER_LIBDEP = \
+-    -Lblddir/lib/expat/xmlparse -lxmlrpc_xmlparse \
+-    -Lblddir/lib/expat/xmltok -lxmlrpc_xmltok
+-  XML_PARSER_LIBDEP_DEP = $(LIBXMLRPC_XMLPARSE) $(LIBXMLRPC_XMLTOK)
++  XML_PARSER_LIBDEP = $(shell $(PKG_CONFIG) expat --libs)
++  XML_PARSER_LIBDEP_DEP =
+   XML_PKGCONFIG_REQ = xmlrpc_expat
+ endif
+ 
+@@ -278,7 +276,7 @@ BASIC_INCLUDES = \
+ ifeq ($(ENABLE_LIBXML2_BACKEND),yes)
+   LIBXML_INCLUDES = $(shell xml2-config --cflags)
+ else
+-  LIBXML_INCLUDES = -Isrcdir/lib/expat/xmlparse
++  LIBXML_INCLUDES = $(shell $(PKG_CONFIG) --cflags expat)
+ endif
+ 
+ $(LIBXMLRPC_MODS:%=%.o) \
+diff --git a/src/cpp/Makefile b/src/cpp/Makefile
+index 184b254..986af46 100644
+--- a/src/cpp/Makefile
++++ b/src/cpp/Makefile
+@@ -44,3 +44,3 @@ DEP_SOURCES = *.cpp
+ else
+-  LIBXML_INCLUDES = -Isrcdir/lib/expat/xmlparse
++  LIBXML_INCLUDES = $(shell $(PKG_CONFIG) --cflags expat)
+ endif
+@@ -51,5 +51,3 @@ DEP_SOURCES = *.cpp
+ else
+-  XML_PARSER_LIBDEP = \
+-    -L$(BLDDIR)/lib/expat/xmlparse -lxmlrpc_xmlparse \
+-    -L$(BLDDIR)/lib/expat/xmltok -lxmlrpc_xmltok
++  XML_PARSER_LIBDEP = $(shell $(PKG_CONFIG) --libs expat)
+ endif
+diff --git a/src/xmlrpc_expat.c b/src/xmlrpc_expat.c
+index 30fae15..2e01ec3 100644
+--- a/src/xmlrpc_expat.c
++++ b/src/xmlrpc_expat.c
+@@ -6,7 +6,7 @@
+ #include <stdlib.h>
+ #include <string.h>
+ 
+-#include <xmlparse.h> /* Expat */
++#include <expat.h>
+ 
+ #include "bool.h"
+ 
+@@ -419,18 +419,18 @@ createParser(xmlrpc_env *      const envP,
+ 
-----------------------------------------------------------------------------*/
+     XML_Parser parser;
+ 
+-    parser = xmlrpc_XML_ParserCreate(NULL);
++    parser = XML_ParserCreate(NULL);
+     if (parser == NULL)
+         xmlrpc_faultf(envP, "Could not create expat parser");
+     else {
+         initParseContext(contextP, memPoolP);
+ 
+-        xmlrpc_XML_SetUserData(parser, contextP);
+-        xmlrpc_XML_SetElementHandler(
++        XML_SetUserData(parser, contextP);
++        XML_SetElementHandler(
+             parser,
+             (XML_StartElementHandler) startElement,
+             (XML_EndElementHandler) endElement);
+-        xmlrpc_XML_SetCharacterDataHandler(
++        XML_SetCharacterDataHandler(
+             parser,
+             (XML_CharacterDataHandler) characterData);
+     }
+@@ -445,7 +445,7 @@ destroyParser(XML_Parser     const parser,
+ 
+     termParseContext(contextP);
+ 
+-    xmlrpc_XML_ParserFree(parser);
++    XML_ParserFree(parser);
+ }
+ 
+ 
+@@ -483,15 +483,17 @@ xml_parse(xmlrpc_env *      const envP,
+     if (!envP->fault_occurred) {
+         bool ok;
+ 
+-        ok = xmlrpc_XML_Parse(parser, xmlData, xmlDataLen, 1);
++        ok = XML_Parse(parser, xmlData, xmlDataLen, 1);
+             /* sets 'context', *envP */
+         if (!ok) {
+             /* Expat failed on its own to parse it -- this is not an error
+                that our handlers detected.
+             */
++            const enum XML_Error error_code = XML_GetErrorCode(parser);
++            const char * const error_string = (error_code == XML_ERROR_NONE) 
? NULL : XML_ErrorString(error_code);
+             xmlrpc_env_set_fault(
+                 envP, XMLRPC_PARSE_ERROR,
+-                xmlrpc_XML_GetErrorString(parser));
++                error_string);
+             if (!context.env.fault_occurred) {
+                 /* Have to clean up what our handlers built before Expat
+                    barfed.
+diff --git a/xmlrpc-c-config.test.main b/xmlrpc-c-config.test.main
+index d184534..0e53b12 100644
+--- a/xmlrpc-c-config.test.main
++++ b/xmlrpc-c-config.test.main
+@@ -22,10 +22,8 @@ packetsocket_lib=
+ if test "${ENABLE_LIBXML2_BACKEND}" = "yes"; then
+   LIBXML=`xml2-config --libs`
+ else
+-  LIBXML="${BLDDIR}/lib/expat/xmlparse/libxmlrpc_xmlparse.a"
+-  sopath="${BLDDIR}/lib/expat/xmlparse:$sopath"
+-  LIBXML="${LIBXML} ${BLDDIR}/lib/expat/xmltok/libxmlrpc_xmltok.a"
+-  sopath="${BLDDIR}/lib/expat/xmltok:$sopath"
++  [ -n "${PKG_CONFIG}" ] || PKG_CONFIG=pkg-config
++  LIBXML=`${PKG_CONFIG} --libs expat`
+ fi
+ 
+ needCpp=no
+-- 
+2.48.1
+

diff --git a/dev-libs/xmlrpc-c/xmlrpc-c-1.59.03-r2.ebuild 
b/dev-libs/xmlrpc-c/xmlrpc-c-1.59.03-r2.ebuild
new file mode 100644
index 000000000000..ed0f2fcb69a7
--- /dev/null
+++ b/dev-libs/xmlrpc-c/xmlrpc-c-1.59.03-r2.ebuild
@@ -0,0 +1,90 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools toolchain-funcs
+
+# Upstream maintains 3 release channels: 
https://xmlrpc-c.sourceforge.net/release.html
+# 1. Only the "Super Stable" series is released as a tarball
+# 2. SVN tagging of releases seems spotty: 
https://svn.code.sf.net/p/xmlrpc-c/code/release_number/
+# Because of this, we are following the "Super Stable" release channel
+
+DESCRIPTION="A lightweight RPC library based on XML and HTTP"
+HOMEPAGE="https://xmlrpc-c.sourceforge.net/";
+SRC_URI="https://downloads.sourceforge.net/${PN}/${P}.tgz";
+
+LICENSE="BSD"
+SLOT="0/4.59"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~mips ~ppc ~ppc64 ~riscv ~s390 
~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-solaris"
+IUSE="abyss +cgi +curl +cxx +libxml2 static-libs threads test"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="test? ( abyss curl cxx )"
+
+RDEPEND="
+       dev-libs/openssl:=
+       sys-libs/ncurses:=
+       sys-libs/readline:=
+       curl? ( net-misc/curl )
+       libxml2? ( dev-libs/libxml2 )
+"
+DEPEND="${RDEPEND}"
+
+# configure calls curl-config, hence curl in BDEPEND
+BDEPEND="
+       virtual/pkgconfig
+       curl? ( net-misc/curl )
+"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-1.51.06-pkg-config-libxml2.patch
+       "${FILESDIR}"/${PN}-1.51.06-pkg-config-openssl.patch
+       "${FILESDIR}"/${PN}-1.59.03-use-system-expat.patch
+)
+
+pkg_setup() {
+       use curl || ewarn "Curl support disabled: No client library will be 
built"
+}
+
+src_prepare() {
+       rm -R lib/expat/ || die
+
+       default
+
+       sed -i \
+               -e "/CFLAGS_COMMON/s|-g -O3$||" \
+               -e "/CXXFLAGS_COMMON/s|-g$||" \
+               common.mk || die
+       eautoconf
+}
+
+src_configure() {
+       tc-export PKG_CONFIG
+
+       econf \
+               --disable-libwww-client \
+               --disable-wininet-client \
+               --without-libwww-ssl \
+               $(use_enable abyss abyss-server) \
+               $(use_enable cgi cgi-server) \
+               $(use_enable curl curl-client) \
+               $(use_enable cxx cplusplus) \
+               $(use_enable libxml2 libxml2-backend) \
+               $(use_enable threads abyss-threads)
+}
+
+src_compile() {
+       default
+
+       # Tools building is broken in this release
+       #use tools && emake -rC "${S}"/tools
+}
+
+src_install() {
+       default
+
+       use static-libs || find "${D}" -type f -name \*.a -delete
+
+       # Tools building is broken in this release
+       #use tools && emake DESTDIR="${D}" -rC "${S}"/tools install
+}

Reply via email to