commit:     b3ae3157b4631d429a7a81893bbf4dad8158330d
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Mon Dec  1 03:17:55 2025 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Mon Dec  1 03:17:55 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b3ae3157

dev-python/pygraphviz: Backport graphviz-14 fixes

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 .../files/pygraphviz-1.14-graphviz-14.patch        | 115 +++++++++++++++++++++
 dev-python/pygraphviz/pygraphviz-1.14-r2.ebuild    |  53 ++++++++++
 2 files changed, 168 insertions(+)

diff --git a/dev-python/pygraphviz/files/pygraphviz-1.14-graphviz-14.patch 
b/dev-python/pygraphviz/files/pygraphviz-1.14-graphviz-14.patch
new file mode 100644
index 000000000000..98e85c4b9cdd
--- /dev/null
+++ b/dev-python/pygraphviz/files/pygraphviz-1.14-graphviz-14.patch
@@ -0,0 +1,115 @@
+From ad6a9d0eaa0942be7ece6bb253eeea5f7dd2e9e7 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Mat=C4=9Bj=20Cepl?= <[email protected]>
+Date: Wed, 22 Oct 2025 19:51:56 +0200
+Subject: [PATCH] fix: correct signature of gvRenderData() function
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+For compatibility with graphviz 14.*
+
+Fixes: https://github.com/pygraphviz/pygraphviz/issues/567
+Replaces: https://github.com/pygraphviz/pygraphviz/pull/566
+Signed-off-by: Matěj Cepl <[email protected]>
+--- a/pygraphviz/graphviz.i
++++ b/pygraphviz/graphviz.i
+@@ -338,7 +338,12 @@ int gvRenderFilename(GVC_t *gvc, Agraph_t* g, char 
*format, char *filename);
+ /* three lines are straight from the SWIG manual.  */
+ %include <cstring.i>
+ %include <typemaps.i>
++#if GRAPHVIZ_VERSION_MAJOR >= 14
++%cstring_output_allocate_size(char **result, size_t* size, free(*$1));
++int gvRenderData(GVC_t *gvc, Agraph_t* g, char *format, char **result, size_t 
*size);
++#else
+ %cstring_output_allocate_size(char **result, unsigned int* size, free(*$1));
+ int gvRenderData(GVC_t *gvc, Agraph_t* g, char *format, char **result, 
unsigned int *size);
++#endif
+ /* Free memory allocated and pointed to by *result in gvRenderData */
+ extern void gvFreeRenderData (char* data);
+--- a/setup.py
++++ b/setup.py
+@@ -1,15 +1,72 @@
+ import sys
++import os
++import re
+ from setuptools import setup, Extension
+ 
++def get_graphviz_version():
++    """
++    Reads GRAPHVIZ_VERSION_MAJOR from the header file.
++    Assumes the header is available at a known path during setup.
++    """
++    # NOTE: You may need to adjust this path based on your environment
++    # or rely on the build system to have already installed it.
++    header_path = '/usr/include/graphviz/graphviz_version.h'
++
++    if not os.path.exists(header_path):
++        # Fallback/default if header file cannot be read during setup.
++        # This should match your expected target version.
++        raise RuntimeError(f"Graphviz header file not found at 
{header_path}.")
++
++    with open(header_path, 'r') as f:
++        content = f.read()
++        match = re.search(r'#define\s+GRAPHVIZ_VERSION_MAJOR\s+(\d+)', 
content)
++        if match:
++            return int(match.group(1))
++        else:
++            match = re.search(r'#define\s+PACKAGE_VERSION\s+"([0-9.]+)"', 
content)
++            if match:
++                maj_ver = match.group(1).split('.')[0]
++                return int(maj_ver)
++
++    raise RuntimeError(f"GRAPHVIZ_VERSION_MAJOR macro not found in the header 
file!")
++
+ if __name__ == "__main__":
+-    define_macros = [("SWIG_PYTHON_STRICT_BYTE_CHAR", None)]
+-    if sys.platform == "win32":
++    WINDOWS = sys.platform == "win32"
++
++    # Get the target version number
++    gv_major_version = get_graphviz_version()
++
++    define_macros = []
++    swig_options = []
++
++    if WINDOWS:
+         define_macros.append(("GVDLL", None))
+ 
++    
swig_options.append("-DGRAPHVIZ_VERSION_MAJOR={}".format(str(gv_major_version)))
++    print(f"Defining GRAPHVIZ_VERSION_MAJOR as: {gv_major_version}")
++
++    # List of search paths for where graphviz libs may be installed.
++    # The graphviz library subdir contains the plugin libraries (e.g.
++    # gvplugin_*). The main graphviz libs (cgraph etc.) are in the
++    # parent dir
++    library_search_paths = [
++        "/usr/lib/x86_64-linux-gnu",  # Ubuntu x86_64
++        "/usr/lib/x86_64-linux-gnu/graphviz",
++        "/opt/homebrew/lib",  # Macos, homebrew aarch64
++        "/opt/homebrew/lib/graphviz",
++        "/usr/lib64",  # Fedora
++        "/usr/lib64/graphviz",
++        "/usr/local/lib",  # source install / macos homebrew x86_64
++        "/usr/local/lib/graphviz",
++    ]
++
++    # runtime_library_dirs must not be defined with windows else setup will 
fail
++    extra_kwargs = {} if WINDOWS else {"runtime_library_dirs": 
library_search_paths}
++
+     extension = [
+         Extension(
+             name="pygraphviz._graphviz",
+-            sources=["pygraphviz/graphviz_wrap.c"],
++            sources=["pygraphviz/graphviz.i"],
+             include_dirs=[],
+             library_dirs=[],
+             # cdt does not link to cgraph, whereas cgraph links to cdt.
+@@ -20,6 +77,8 @@ if __name__ == "__main__":
+             # undefined symbol errors. seen under PyPy on Linux.)
+             libraries=["cdt", "cgraph", "gvc"],
+             define_macros=define_macros,
++            swig_opts=swig_options,
++            **extra_kwargs,
+         )
+     ]
+ 

diff --git a/dev-python/pygraphviz/pygraphviz-1.14-r2.ebuild 
b/dev-python/pygraphviz/pygraphviz-1.14-r2.ebuild
new file mode 100644
index 000000000000..85f2a8967533
--- /dev/null
+++ b/dev-python/pygraphviz/pygraphviz-1.14-r2.ebuild
@@ -0,0 +1,53 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{11..14} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Python wrapper for the Graphviz Agraph data structure"
+HOMEPAGE="
+       https://pygraphviz.github.io/
+       https://github.com/pygraphviz/pygraphviz/
+       https://pypi.org/project/pygraphviz/
+"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~riscv ~x86 ~x86-linux ~ppc-macos 
~x64-macos"
+
+# Note: only C API of graphviz is used, PYTHON_USEDEP unnecessary.
+DEPEND="
+       media-gfx/graphviz:=
+"
+RDEPEND="
+       ${DEPEND}
+"
+BDEPEND="
+       dev-lang/swig:0
+"
+
+EPYTEST_PLUGINS=()
+distutils_enable_tests pytest
+
+PATCHES=(
+       # https://github.com/pygraphviz/pygraphviz/pull/573
+       # (includes some setup.py changes from main due to rebase)
+       "${FILESDIR}"/pygraphviz-1.14-graphviz-14.patch
+)
+
+python_test() {
+       rm -rf pygraphviz || die
+       epytest --pyargs pygraphviz
+}
+
+python_install_all() {
+       dodoc -r examples
+       docompress -x /usr/share/doc/${PF}/examples
+
+       distutils-r1_python_install_all
+}

Reply via email to