diff options
author | V3n3RiX <venerix@koprulu.sector> | 2024-02-06 11:42:16 +0000 |
---|---|---|
committer | V3n3RiX <venerix@koprulu.sector> | 2024-02-06 11:42:16 +0000 |
commit | a03b2fe2d845ae950995bf1c5255da420cbd92d2 (patch) | |
tree | 7c05b96187cce0c598ea9af9fe03ab294f4df6e5 /dev-python/pygraphviz | |
parent | 9e0addc1cf71ebec277b59e38eb3fa30e650cf9f (diff) |
gentoo auto-resync : 06:02:2024 - 11:42:15
Diffstat (limited to 'dev-python/pygraphviz')
-rw-r--r-- | dev-python/pygraphviz/Manifest | 2 | ||||
-rw-r--r-- | dev-python/pygraphviz/files/pygraphviz-1.12-swig-4.2.0.patch | 290 | ||||
-rw-r--r-- | dev-python/pygraphviz/pygraphviz-1.12-r1.ebuild | 54 |
3 files changed, 346 insertions, 0 deletions
diff --git a/dev-python/pygraphviz/Manifest b/dev-python/pygraphviz/Manifest index 2f82810f4357..eb2b186af9e7 100644 --- a/dev-python/pygraphviz/Manifest +++ b/dev-python/pygraphviz/Manifest @@ -1,3 +1,5 @@ +AUX pygraphviz-1.12-swig-4.2.0.patch 8922 BLAKE2B 64923595e4dc3839af98ca5705faa4bbe1aa5227d09a5bb4e7b50e8d3309744028a90098f84486fd032fae4c28931fde6923f93697ad65cc2c866078d227431d SHA512 176a31e430b0469ea77bb3cac296933c8d19428d2e893467b7a272093d5184374ffd04bfc56c36a0a183e15518fe2d3bbd540b48f0d4cf3c22d549208808d91f DIST pygraphviz-1.12.tar.gz 104941 BLAKE2B 5c2d119c66837d13511ef4756093b159f45ccb2888eb2b86c1d016837059ed34bdc5cb7e69eeff013642d92ec0c2b4a1149316b0baaa742c49a34945fd2563e0 SHA512 2407fdd7de3b2f7f1d9f9e3e3fe0f19c4faad4a72db33a0b4341a01f98eecd4d240079f2d0ea5cf68a5e10236f11fd84e55fd44518611efde2fab7590e3aae90 +EBUILD pygraphviz-1.12-r1.ebuild 1010 BLAKE2B 5b950cbc6758dd6d9728617cb68464e95a5acf5d4e0eb465234cc75d8fc164f922859637e6a0b1ed4851270be9e8bae260afde4be58b6e00de5d488c5ea37bae SHA512 7da728f707de032159a03ce722ef2c8d0542459cda162a1bd0352f26fa689fb5da405f13100ef8a4b396350f61608354289f6be70d42499b58046026eaaeb526 EBUILD pygraphviz-1.12.ebuild 957 BLAKE2B da310bbcd652b5449cb9c7757d57be6ce322a8fab765e6978b989fd003bf2773c8980367a9f878714fcd81cabb63317d2768a48be333b67b63f599330b219a64 SHA512 97b08b4c6a0ba3398796d854b813347f9c909ba353d6a3bb8d6c2928f9382d4615d157eefccf8b47bfa86058b65d5b03b358c27f19de8f7421a0f8194d682481 MISC metadata.xml 682 BLAKE2B 50dc3c55cac525fce3a396c94bdb48eb6e2c0b43636ae53c8ddbce2c9d3f82d8a080d881d4e6ac61ee71f88779c560d38fba3e10424fcd30af0dc80f979df081 SHA512 87e124765948529b7444fb1ad1ae655e18478ca46631a11a6613b289e2ac39600cdc00cc7af82b40694fb1e90c0ccad98be2fb457c5d7f74d5b087a6b3319aff diff --git a/dev-python/pygraphviz/files/pygraphviz-1.12-swig-4.2.0.patch b/dev-python/pygraphviz/files/pygraphviz-1.12-swig-4.2.0.patch new file mode 100644 index 000000000000..3daa485044ce --- /dev/null +++ b/dev-python/pygraphviz/files/pygraphviz-1.12-swig-4.2.0.patch @@ -0,0 +1,290 @@ +https://bugs.gentoo.org/921637 +https://github.com/swig/swig/issues/2778 +https://github.com/pygraphviz/pygraphviz/commit/6ecae22cc382407652f9d3b57e9da89a3a03043b + +From 6ecae22cc382407652f9d3b57e9da89a3a03043b Mon Sep 17 00:00:00 2001 +From: William S Fulton <wsf@fultondesigns.co.uk> +Date: Fri, 26 Jan 2024 00:52:44 +0000 +Subject: [PATCH] Remove outdated pystrings.swg (#508) + +Remove pystring.swg - a very ancient copy from SWIG which does not +compile when using swig-4.2.0. Instead SWIG's version of pystrings.swg +that is kept up to date in SWIG is used. SWIG_PYTHON_STRICT_BYTE_CHAR +needs to be defined in order to maintain the current behaviour of only +allowing Python 3 byte type instead of Python 3 string type as input. + +As the output of swig is in graphviz_wrap.c and is committed to the +repo, the updates committed in this file (keeping the current swig-4.1.1 +version). A later commit could update it to swig-4.2.0. + +Fixes build problems on Fedora where SWIG_Python_str_AsChar no longer exists, +as reported at https://github.com/swig/swig/issues/2778. +--- + pygraphviz/graphviz.i | 4 ++ + pygraphviz/graphviz_wrap.c | 106 ++++++++++++++++++++++++++++--------- + pystrings.swg | 86 ------------------------------ + 3 files changed, 84 insertions(+), 112 deletions(-) + delete mode 100644 pystrings.swg + +diff --git a/pygraphviz/graphviz.i b/pygraphviz/graphviz.i +index c63eb2d3..d7c49330 100644 +--- a/pygraphviz/graphviz.i ++++ b/pygraphviz/graphviz.i +@@ -1,5 +1,9 @@ + %module graphviz + ++%begin %{ ++#define SWIG_PYTHON_STRICT_BYTE_CHAR ++%} ++ + %{ + #include "graphviz/cgraph.h" + #include "graphviz/gvc.h" +diff --git a/pygraphviz/graphviz_wrap.c b/pygraphviz/graphviz_wrap.c +index 8f4d3a62..cb06da79 100644 +--- a/pygraphviz/graphviz_wrap.c ++++ b/pygraphviz/graphviz_wrap.c +@@ -6,6 +6,9 @@ + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + ++#define SWIG_PYTHON_STRICT_BYTE_CHAR ++ ++ + + #define SWIG_VERSION 0x040101 + #define SWIGPYTHON +@@ -3038,49 +3041,96 @@ SWIGINTERN int + SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) + { + #if PY_VERSION_HEX>=0x03000000 ++#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) + if (PyBytes_Check(obj)) + #else ++ if (PyUnicode_Check(obj)) ++#endif ++#else + if (PyString_Check(obj)) + #endif + { + char *cstr; Py_ssize_t len; ++ int ret = SWIG_OK; + #if PY_VERSION_HEX>=0x03000000 +- PyBytes_AsStringAndSize(obj, &cstr, &len); +- if(alloc) *alloc = SWIG_NEWOBJ; ++#if !defined(SWIG_PYTHON_STRICT_BYTE_CHAR) ++ if (!alloc && cptr) { ++ /* We can't allow converting without allocation, since the internal ++ representation of string in Python 3 is UCS-2/UCS-4 but we require ++ a UTF-8 representation. ++ TODO(bhy) More detailed explanation */ ++ return SWIG_RuntimeError; ++ } ++ obj = PyUnicode_AsUTF8String(obj); ++ if (!obj) ++ return SWIG_TypeError; ++ if (alloc) ++ *alloc = SWIG_NEWOBJ; ++#endif ++ if (PyBytes_AsStringAndSize(obj, &cstr, &len) == -1) ++ return SWIG_TypeError; + #else +- PyString_AsStringAndSize(obj, &cstr, &len); ++ if (PyString_AsStringAndSize(obj, &cstr, &len) == -1) ++ return SWIG_TypeError; + #endif + if (cptr) { + if (alloc) { +- /* +- In python the user should not be able to modify the inner +- string representation. To warranty that, if you define +- SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string +- buffer is always returned. +- +- The default behavior is just to return the pointer value, +- so, be careful. +- */ +-#if defined(SWIG_PYTHON_SAFE_CSTRINGS) +- if (*alloc != SWIG_OLDOBJ) +-#else +- if (*alloc == SWIG_NEWOBJ) +-#endif +- { +- *cptr = (char *)memcpy(malloc((len + 1)*sizeof(char)), cstr, sizeof(char)*(len + 1)); +- *alloc = SWIG_NEWOBJ; +- } +- else { ++ if (*alloc == SWIG_NEWOBJ) { ++ *cptr = (char *)memcpy(malloc((len + 1)*sizeof(char)), cstr, sizeof(char)*(len + 1)); ++ *alloc = SWIG_NEWOBJ; ++ } else { + *cptr = cstr; + *alloc = SWIG_OLDOBJ; + } + } else { ++#if PY_VERSION_HEX>=0x03000000 ++#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) ++ *cptr = PyBytes_AsString(obj); ++#else ++ assert(0); /* Should never reach here with Unicode strings in Python 3 */ ++#endif ++#else + *cptr = SWIG_Python_str_AsChar(obj); ++ if (!*cptr) ++ ret = SWIG_TypeError; ++#endif + } + } + if (psize) *psize = len + 1; +- return SWIG_OK; ++#if PY_VERSION_HEX>=0x03000000 && !defined(SWIG_PYTHON_STRICT_BYTE_CHAR) ++ Py_XDECREF(obj); ++#endif ++ return ret; + } else { ++#if defined(SWIG_PYTHON_2_UNICODE) ++#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) ++#error "Cannot use both SWIG_PYTHON_2_UNICODE and SWIG_PYTHON_STRICT_BYTE_CHAR at once" ++#endif ++#if PY_VERSION_HEX<0x03000000 ++ if (PyUnicode_Check(obj)) { ++ char *cstr; Py_ssize_t len; ++ if (!alloc && cptr) { ++ return SWIG_RuntimeError; ++ } ++ obj = PyUnicode_AsUTF8String(obj); ++ if (!obj) ++ return SWIG_TypeError; ++ if (PyString_AsStringAndSize(obj, &cstr, &len) != -1) { ++ if (cptr) { ++ if (alloc) *alloc = SWIG_NEWOBJ; ++ *cptr = (char *)memcpy(malloc((len + 1)*sizeof(char)), cstr, sizeof(char)*(len + 1)); ++ } ++ if (psize) *psize = len + 1; ++ ++ Py_XDECREF(obj); ++ return SWIG_OK; ++ } else { ++ Py_XDECREF(obj); ++ } ++ } ++#endif ++#endif ++ + swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); + if (pchar_descriptor) { + void* vptr = 0; +@@ -3311,13 +3361,17 @@ SWIG_FromCharPtrAndSize(const char* carray, size_t size) + if (carray) { + if (size > INT_MAX) { + swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); +- return pchar_descriptor ? ++ return pchar_descriptor ? + SWIG_InternalNewPointerObj((char *)(carray), pchar_descriptor, 0) : SWIG_Py_Void(); + } else { + #if PY_VERSION_HEX >= 0x03000000 +- return PyBytes_FromStringAndSize(carray, (int)(size)); ++#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) ++ return PyBytes_FromStringAndSize(carray, (Py_ssize_t)(size)); ++#else ++ return PyUnicode_DecodeUTF8(carray, (Py_ssize_t)(size), "surrogateescape"); ++#endif + #else +- return PyString_FromStringAndSize(carray, (int)(size)); ++ return PyString_FromStringAndSize(carray, (Py_ssize_t)(size)); + #endif + } + } else { +diff --git a/pystrings.swg b/pystrings.swg +deleted file mode 100644 +index 7988a353..00000000 +--- a/pystrings.swg ++++ /dev/null +@@ -1,86 +0,0 @@ +-/* Fixed fragments for work with bytes in Python 3. */ +- +-%fragment("SWIG_AsCharPtrAndSize","header",fragment="SWIG_pchar_descriptor") { +-SWIGINTERN int +-SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) +-{ +-%#if PY_VERSION_HEX>=0x03000000 +- if (PyBytes_Check(obj)) +-%#else +- if (PyString_Check(obj)) +-%#endif +- { +- char *cstr; Py_ssize_t len; +-%#if PY_VERSION_HEX>=0x03000000 +- PyBytes_AsStringAndSize(obj, &cstr, &len); +- if(alloc) *alloc = SWIG_NEWOBJ; +-%#else +- PyString_AsStringAndSize(obj, &cstr, &len); +-%#endif +- if (cptr) { +- if (alloc) { +- /* +- In python the user should not be able to modify the inner +- string representation. To warranty that, if you define +- SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string +- buffer is always returned. +- +- The default behavior is just to return the pointer value, +- so, be careful. +- */ +-%#if defined(SWIG_PYTHON_SAFE_CSTRINGS) +- if (*alloc != SWIG_OLDOBJ) +-%#else +- if (*alloc == SWIG_NEWOBJ) +-%#endif +- { +- *cptr = %new_copy_array(cstr, len + 1, char); +- *alloc = SWIG_NEWOBJ; +- } +- else { +- *cptr = cstr; +- *alloc = SWIG_OLDOBJ; +- } +- } else { +- *cptr = SWIG_Python_str_AsChar(obj); +- } +- } +- if (psize) *psize = len + 1; +- return SWIG_OK; +- } else { +- swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); +- if (pchar_descriptor) { +- void* vptr = 0; +- if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) { +- if (cptr) *cptr = (char *) vptr; +- if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0; +- if (alloc) *alloc = SWIG_OLDOBJ; +- return SWIG_OK; +- } +- } +- } +- return SWIG_TypeError; +-} +-} +- +-%fragment("SWIG_FromCharPtrAndSize","header",fragment="SWIG_pchar_descriptor") { +-SWIGINTERNINLINE PyObject * +-SWIG_FromCharPtrAndSize(const char* carray, size_t size) +-{ +- if (carray) { +- if (size > INT_MAX) { +- swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); +- return pchar_descriptor ? +- SWIG_InternalNewPointerObj(%const_cast(carray,char *), pchar_descriptor, 0) : SWIG_Py_Void(); +- } else { +-%#if PY_VERSION_HEX >= 0x03000000 +- return PyBytes_FromStringAndSize(carray, %numeric_cast(size,int)); +-%#else +- return PyString_FromStringAndSize(carray, %numeric_cast(size,int)); +-%#endif +- } +- } else { +- return SWIG_Py_Void(); +- } +-} +-} + diff --git a/dev-python/pygraphviz/pygraphviz-1.12-r1.ebuild b/dev-python/pygraphviz/pygraphviz-1.12-r1.ebuild new file mode 100644 index 000000000000..1c4a2634cd78 --- /dev/null +++ b/dev-python/pygraphviz/pygraphviz-1.12-r1.ebuild @@ -0,0 +1,54 @@ +# Copyright 1999-2024 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_{10..12} ) + +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 ~ppc ~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 +" + +distutils_enable_tests pytest + +PATCHES=( + "${FILESDIR}"/${P}-swig-4.2.0.patch +) + +src_configure() { + swig -python pygraphviz/graphviz.i || die +} + +python_test() { + cd "${BUILD_DIR}"/install || die + epytest +} + +python_install_all() { + dodoc -r examples + docompress -x /usr/share/doc/${PF}/examples + + distutils-r1_python_install_all +} |