From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id F399615808B for ; Sat, 28 Sep 2024 14:50:56 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 0B0D4E2AF5; Sat, 28 Sep 2024 14:50:56 +0000 (UTC) Received: from smtp.gentoo.org (dev.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id DCA15E2AF5 for ; Sat, 28 Sep 2024 14:50:55 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 1EC4B342FF7 for ; Sat, 28 Sep 2024 14:50:55 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 7E358ACC for ; Sat, 28 Sep 2024 14:50:53 +0000 (UTC) From: "Pacho Ramos" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Pacho Ramos" Message-ID: <1727535045.5a1dfcc8986e29f5157bc9f706aaeb23307c4b68.pacho@gentoo> Subject: [gentoo-commits] repo/gentoo:master commit in: sci-chemistry/pymol/, sci-chemistry/pymol/files/ X-VCS-Repository: repo/gentoo X-VCS-Files: sci-chemistry/pymol/files/pymol-3.0.0-SceneGetDrawFlag-indexing.patch sci-chemistry/pymol/files/pymol-3.0.0-distutils-py3.12.patch sci-chemistry/pymol/files/pymol-3.0.0-eof-maeffplugin.patch sci-chemistry/pymol/files/pymol-3.0.0-lto-molfile-plugin.patch sci-chemistry/pymol/files/pymol-3.0.0-numpy2.patch sci-chemistry/pymol/files/pymol-3.0.0-py3.12-progress.patch sci-chemistry/pymol/pymol-3.0.0-r1.ebuild X-VCS-Directories: sci-chemistry/pymol/ sci-chemistry/pymol/files/ X-VCS-Committer: pacho X-VCS-Committer-Name: Pacho Ramos X-VCS-Revision: 5a1dfcc8986e29f5157bc9f706aaeb23307c4b68 X-VCS-Branch: master Date: Sat, 28 Sep 2024 14:50:53 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: d1cb27ac-cf47-4c3c-adf6-bcdc18383923 X-Archives-Hash: 603f0a7582eb8a45dcd88c4666f1a176 commit: 5a1dfcc8986e29f5157bc9f706aaeb23307c4b68 Author: Pacho Ramos gentoo org> AuthorDate: Sat Sep 28 14:42:14 2024 +0000 Commit: Pacho Ramos gentoo org> CommitDate: Sat Sep 28 14:50:45 2024 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5a1dfcc8 sci-chemistry/pymol: Multiple bugfixes Upstream fixes for multiple bugs, also fixing python 3.12 and numpy2 compat, and fixing LTO building. Format-security patch looks to not be needed anymore (at least I couldn't reproduce the problem). If the problem reappears, please report the bug to upstream to follow its progress properly. Use icon from the pymol tarball and update desktop file. Update ebuild to try to run the tests, but keep them restricted for now as they keep failing. Bug: https://bugs.gentoo.org/932127 Signed-off-by: Pacho Ramos gentoo.org> .../pymol-3.0.0-SceneGetDrawFlag-indexing.patch | 22 +++ .../pymol/files/pymol-3.0.0-distutils-py3.12.patch | 70 ++++++++ .../pymol/files/pymol-3.0.0-eof-maeffplugin.patch | 22 +++ .../files/pymol-3.0.0-lto-molfile-plugin.patch | 187 +++++++++++++++++++++ sci-chemistry/pymol/files/pymol-3.0.0-numpy2.patch | 35 ++++ .../pymol/files/pymol-3.0.0-py3.12-progress.patch | 26 +++ sci-chemistry/pymol/pymol-3.0.0-r1.ebuild | 123 ++++++++++++++ 7 files changed, 485 insertions(+) diff --git a/sci-chemistry/pymol/files/pymol-3.0.0-SceneGetDrawFlag-indexing.patch b/sci-chemistry/pymol/files/pymol-3.0.0-SceneGetDrawFlag-indexing.patch new file mode 100644 index 000000000000..c23bf79d6166 --- /dev/null +++ b/sci-chemistry/pymol/files/pymol-3.0.0-SceneGetDrawFlag-indexing.patch @@ -0,0 +1,22 @@ +From 50be59fb4bd6706c7939a659f4477041e2f0619e Mon Sep 17 00:00:00 2001 +From: Jarrett Johnson <36459667+JarrettSJohnson@users.noreply.github.com> +Date: Sat, 6 Apr 2024 22:49:41 -0400 +Subject: [PATCH] PYMOL-4849: Fix SceneGetDrawFlag slot indexing + +--- + layer1/Scene.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/layer1/Scene.cpp b/layer1/Scene.cpp +index e4888db6d..ed211bdd6 100644 +--- a/layer1/Scene.cpp ++++ b/layer1/Scene.cpp +@@ -4448,7 +4448,7 @@ int SceneGetDrawFlag(GridInfo * grid, int *slot_vla, int slot) + { + if(((slot < 0) && grid->slot) || + ((slot == 0) && (grid->slot == 0)) || +- (slot_vla && (slot_vla[slot] == grid->slot))) { ++ (slot_vla && (slot >= 0 && slot_vla[slot] == grid->slot))) { + draw_flag = true; + } + } diff --git a/sci-chemistry/pymol/files/pymol-3.0.0-distutils-py3.12.patch b/sci-chemistry/pymol/files/pymol-3.0.0-distutils-py3.12.patch new file mode 100644 index 000000000000..3ab0384bd5f6 --- /dev/null +++ b/sci-chemistry/pymol/files/pymol-3.0.0-distutils-py3.12.patch @@ -0,0 +1,70 @@ +From 3d3c8963798d426e70675c3c40df146e12869b0a Mon Sep 17 00:00:00 2001 +From: Branch Vincent +Date: Fri, 10 May 2024 22:12:58 -0700 +Subject: [PATCH] replace distutils for python 3.12 (#362) + +Co-authored-by: Jarrett Johnson +--- + create_shadertext.py | 3 +-- + modules/pymol/plugins/installation.py | 7 +++---- + testing/tests/system/pymolwin.py | 1 - + 3 files changed, 4 insertions(+), 7 deletions(-) + +diff --git a/create_shadertext.py b/create_shadertext.py +index 7bae72180..f6857087e 100644 +--- a/create_shadertext.py ++++ b/create_shadertext.py +@@ -7,7 +7,6 @@ + from collections import defaultdict + from os.path import dirname + from subprocess import Popen, PIPE +-from distutils import dir_util + + def create_all(generated_dir, pymoldir="."): + ''' +@@ -30,7 +29,7 @@ def __init__(self, filename): + self.out = cStringIO.StringIO() + self.filename = filename + else: +- dir_util.mkpath(os.path.dirname(filename)) ++ os.makedirs(os.path.dirname(filename), exist_ok=True) + self.out = open(filename, "w") + self.filename = None + def close(self): +diff --git a/modules/pymol/plugins/installation.py b/modules/pymol/plugins/installation.py +index 3a980545b..2fb8f6f03 100644 +--- a/modules/pymol/plugins/installation.py ++++ b/modules/pymol/plugins/installation.py +@@ -45,8 +45,6 @@ def cmp_version(v1, v2): + ''' + Compares two version strings. An empty version string is always considered + smaller than a non-empty version string. +- +- Uses distutils.version.StrictVersion to evaluate non-empty version strings. + ''' + if v1 == v2: + return 0 +@@ -55,8 +53,9 @@ def cmp_version(v1, v2): + if v2 == '': + return 1 + try: +- from distutils.version import StrictVersion as Version +- return cmp(Version(v1), Version(v2)) ++ v1_parts = list(map(int, v1.split('.'))) ++ v2_parts = list(map(int, v2.split('.'))) ++ return (v1_parts > v2_parts) - (v1_parts < v2_parts) + except: + print(' Warning: Version parsing failed for', v1, 'and/or', v2) + return 0 +diff --git a/testing/tests/system/pymolwin.py b/testing/tests/system/pymolwin.py +index 429fd28aa..e7885bd38 100644 +--- a/testing/tests/system/pymolwin.py ++++ b/testing/tests/system/pymolwin.py +@@ -7,7 +7,6 @@ + import subprocess + import sys + import unittest +-from distutils.spawn import find_executable + from pymol import cmd, CmdException, testing, stored + + @unittest.skipIf(not sys.platform.startswith('win'), 'windows only') diff --git a/sci-chemistry/pymol/files/pymol-3.0.0-eof-maeffplugin.patch b/sci-chemistry/pymol/files/pymol-3.0.0-eof-maeffplugin.patch new file mode 100644 index 000000000000..8eb8fbde318b --- /dev/null +++ b/sci-chemistry/pymol/files/pymol-3.0.0-eof-maeffplugin.patch @@ -0,0 +1,22 @@ +From f005dde377e3e50b6e3f405939435c5061fa8b63 Mon Sep 17 00:00:00 2001 +From: Jarrett Johnson <36459667+JarrettSJohnson@users.noreply.github.com> +Date: Mon, 22 Apr 2024 11:12:21 -0400 +Subject: [PATCH] PYMOL-4869: Only compare eof token in maeffplugin parser + +--- + contrib/uiuc/plugins/molfile_plugin/src/maeffplugin.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/contrib/uiuc/plugins/molfile_plugin/src/maeffplugin.cpp b/contrib/uiuc/plugins/molfile_plugin/src/maeffplugin.cpp +index efaede65b..0547ff91b 100644 +--- a/contrib/uiuc/plugins/molfile_plugin/src/maeffplugin.cpp ++++ b/contrib/uiuc/plugins/molfile_plugin/src/maeffplugin.cpp +@@ -248,7 +248,7 @@ const char * Tokenizer::token(bool ignore_single) { + char c = peek(); + bool good = false; + ssize_t diff; +- while(state != DONE && c >= 0) { ++ while(state != DONE && c != std::char_traits::eof()) { + // make sure we have space in m_token for 2 more characters + if ((diff = ptr-m_token) >= max_token_size-1) { + m_token = (char *)realloc( m_token, 2*max_token_size ); diff --git a/sci-chemistry/pymol/files/pymol-3.0.0-lto-molfile-plugin.patch b/sci-chemistry/pymol/files/pymol-3.0.0-lto-molfile-plugin.patch new file mode 100644 index 000000000000..445fc6bc3a10 --- /dev/null +++ b/sci-chemistry/pymol/files/pymol-3.0.0-lto-molfile-plugin.patch @@ -0,0 +1,187 @@ +From 9d3061ca58d8b69d7dad74a68fc13fe81af0ff8e Mon Sep 17 00:00:00 2001 +From: Jarrett Johnson +Date: Thu, 5 Sep 2024 11:20:02 -0400 +Subject: [PATCH] Symbol renaming in molfile_plugin and internal linkage + +Fixes #395 +--- + contrib/uiuc/plugins/molfile_plugin/src/ReadPARM7.h | 10 +++++----- + .../uiuc/plugins/molfile_plugin/src/parm7plugin.cpp | 8 +++++--- + contrib/uiuc/plugins/molfile_plugin/src/parmplugin.cpp | 2 ++ + layer0/Isosurf.cpp | 6 ++++-- + layer0/Tetsurf.cpp | 6 ++++-- + ov/src/OVOneToAny.cpp | 2 ++ + ov/src/OVOneToOne.cpp | 2 ++ + 7 files changed, 24 insertions(+), 12 deletions(-) + +diff --git a/contrib/uiuc/plugins/molfile_plugin/src/ReadPARM7.h b/contrib/uiuc/plugins/molfile_plugin/src/ReadPARM7.h +index 21d967d79..6bd6ddb08 100644 +--- a/contrib/uiuc/plugins/molfile_plugin/src/ReadPARM7.h ++++ b/contrib/uiuc/plugins/molfile_plugin/src/ReadPARM7.h +@@ -59,7 +59,7 @@ + #endif + + +-typedef struct parm { ++typedef struct parm7 { + char title[85]; + char version[85]; + int IfBox, Nmxrs, IfCap, +@@ -70,7 +70,7 @@ typedef struct parm { + Ipatm, Natcap,Ifpert,Nbper,Ngper,Ndper,Mbper,Mgper,Mdper, + Numextra; + _REAL Box[3], Cutcap, Xcap, Ycap, Zcap; +-} parmstruct; ++} parm7struct; + + static int read_parm7_flag(FILE *file, const char *flag, const char *format) { + char buf[1024]; +@@ -359,10 +359,10 @@ static void close_parm7_file(FILE *fileptr, int popn) { + + static const char *parm7 = "%8d%8d%8d%8d%8d%8d%8d%8d%8d%8d\n"; + +-static parmstruct *read_parm7_header(FILE *file) { ++static parm7struct *read_parm7_header(FILE *file) { + char sdum[512]; +- parmstruct *prm; +- prm = new parmstruct; ++ parm7struct *prm; ++ prm = new parm7struct; + + /* READ VERSION */ + fgets(sdum, 512, file); +diff --git a/contrib/uiuc/plugins/molfile_plugin/src/parm7plugin.cpp b/contrib/uiuc/plugins/molfile_plugin/src/parm7plugin.cpp +index faf2717c6..2d46553b4 100644 +--- a/contrib/uiuc/plugins/molfile_plugin/src/parm7plugin.cpp ++++ b/contrib/uiuc/plugins/molfile_plugin/src/parm7plugin.cpp +@@ -24,13 +24,15 @@ + #include "molfile_plugin.h" + #include "ReadPARM7.h" + ++namespace { + typedef struct { +- parmstruct *prm; ++ parm7struct *prm; + int popn; + FILE *fd; + int nbonds; + int *from, *to; + } parmdata; ++} + + static void *open_parm7_read(const char *filename, const char *,int *natoms) { + FILE *fd; +@@ -39,7 +41,7 @@ static void *open_parm7_read(const char *filename, const char *,int *natoms) { + fprintf(stderr, "parm7plugin) Cannot open parm file '%s'\n", filename); + return NULL; + } +- parmstruct *prm = read_parm7_header(fd); ++ parm7struct *prm = read_parm7_header(fd); + if (!prm) { + close_parm7_file(fd, popn); + return NULL; +@@ -58,7 +60,7 @@ static void *open_parm7_read(const char *filename, const char *,int *natoms) { + + static int read_parm7_structure(void *mydata, int *optflags, molfile_atom_t *atoms) { + parmdata *p = (parmdata *)mydata; +- const parmstruct *prm = p->prm; ++ const parm7struct *prm = p->prm; + FILE *file = p->fd; + char buf[85]; + char field[85]; +diff --git a/contrib/uiuc/plugins/molfile_plugin/src/parmplugin.cpp b/contrib/uiuc/plugins/molfile_plugin/src/parmplugin.cpp +index acabcb1b5..4996383e1 100644 +--- a/contrib/uiuc/plugins/molfile_plugin/src/parmplugin.cpp ++++ b/contrib/uiuc/plugins/molfile_plugin/src/parmplugin.cpp +@@ -24,12 +24,14 @@ + #include "ReadPARM.h" + #include "molfile_plugin.h" + ++namespace { + typedef struct { + ReadPARM *rp; + FILE *parm; + int natoms; + int *from, *to; + } parmdata; ++} + + static void *open_parm_read(const char *filename, const char *, + int *natoms) { +diff --git a/layer0/Isosurf.cpp b/layer0/Isosurf.cpp +index 77cf42eeb..b2dfaedd7 100644 +--- a/layer0/Isosurf.cpp ++++ b/layer0/Isosurf.cpp +@@ -44,11 +44,13 @@ Z* ------------------------------------------------------------------- + + #define I4(field,P1,P2,P3,P4) ((field)->get(P1,P2,P3,P4)) + +-typedef struct PointType { ++namespace { ++struct PointType { + float Point[3]; + int NLink; + struct PointType* Link[4]; +-} PointType; ++}; ++} + + #define EdgePtPtr(field,P2,P3,P4,P5) ((field)->ptr(P2,P3,P4,P5)) + +diff --git a/layer0/Tetsurf.cpp b/layer0/Tetsurf.cpp +index 0d78b535e..cb2f5b37b 100644 +--- a/layer0/Tetsurf.cpp ++++ b/layer0/Tetsurf.cpp +@@ -38,12 +38,14 @@ Z* ------------------------------------------------------------------- + + #define I3(field,P1,P2,P3) ((field)->get(P1,P2,P3)) + +-typedef struct { ++namespace { ++struct PointType { + float Point[3]; + float Normal[3]; + int NormalFlag; + int Link; +-} PointType; ++}; ++} + + typedef struct { + PointType *p[3]; +diff --git a/ov/src/OVOneToAny.cpp b/ov/src/OVOneToAny.cpp +index 1a675a51b..5dbbc498c 100644 +--- a/ov/src/OVOneToAny.cpp ++++ b/ov/src/OVOneToAny.cpp +@@ -8,11 +8,13 @@ + + /* FYI: "up" stands for UniquePair -- a precursor to OneToAny */ + ++namespace { + typedef struct { + int active; + ov_word forward_value, reverse_value; + ov_size forward_next; + } up_element; ++} + + struct _OVOneToAny { + OVHeap *heap; +diff --git a/ov/src/OVOneToOne.cpp b/ov/src/OVOneToOne.cpp +index 6dfa8f457..4e9baf9c6 100644 +--- a/ov/src/OVOneToOne.cpp ++++ b/ov/src/OVOneToOne.cpp +@@ -8,11 +8,13 @@ + + /* FYI: "up" stands for UniquePair -- a precursor to OneToOne */ + ++namespace { + typedef struct { + int active; + ov_word forward_value, reverse_value; + ov_size forward_next, reverse_next; + } up_element; ++} + + struct _OVOneToOne { + OVHeap *heap; diff --git a/sci-chemistry/pymol/files/pymol-3.0.0-numpy2.patch b/sci-chemistry/pymol/files/pymol-3.0.0-numpy2.patch new file mode 100644 index 000000000000..7cf2884ee201 --- /dev/null +++ b/sci-chemistry/pymol/files/pymol-3.0.0-numpy2.patch @@ -0,0 +1,35 @@ +From 758cec338057b23007ffd14c960634ff0ee24af1 Mon Sep 17 00:00:00 2001 +From: Jarrett Johnson +Date: Tue, 27 Aug 2024 20:06:57 -0400 +Subject: [PATCH] Make numpy2 compatible + +--- + layer2/ObjectMap.cpp | 1 + + modules/chempy/brick.py | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/layer2/ObjectMap.cpp b/layer2/ObjectMap.cpp +index ada826f8a..62e3457a4 100644 +--- a/layer2/ObjectMap.cpp ++++ b/layer2/ObjectMap.cpp +@@ -5596,6 +5596,7 @@ static int ObjectMapNumPyArrayToMapState(PyMOLGlobals * G, ObjectMapState * ms, + void * ptr; + + #ifdef _PYMOL_NUMPY ++ import_array1(0); + PyArrayObject * pao = (PyArrayObject *) ary; + const int itemsize = PyArray_ITEMSIZE(pao); + #endif +diff --git a/modules/chempy/brick.py b/modules/chempy/brick.py +index fc514eb3a..e4c0f1bbb 100644 +--- a/modules/chempy/brick.py ++++ b/modules/chempy/brick.py +@@ -31,7 +31,7 @@ def from_numpy(cls, data, grid, origin=(0.0, 0.0, 0.0)): + @param range: 3f sequence + @param origin: 3f sequence + ''' +- data = numpy.asfarray(data) ++ data = numpy.asarray(data, dtype=numpy.float64) + assert len(data.shape) == 3 + + self = cls() diff --git a/sci-chemistry/pymol/files/pymol-3.0.0-py3.12-progress.patch b/sci-chemistry/pymol/files/pymol-3.0.0-py3.12-progress.patch new file mode 100644 index 000000000000..b09f36048b20 --- /dev/null +++ b/sci-chemistry/pymol/files/pymol-3.0.0-py3.12-progress.patch @@ -0,0 +1,26 @@ +From 11325a6014565700be9673236c9b7b6c856ea6d9 Mon Sep 17 00:00:00 2001 +From: Jarrett Johnson +Date: Wed, 28 Aug 2024 22:07:15 -0400 +Subject: [PATCH] Python 3.12 TypeError: convert progress to int for progress + bar + +--- + modules/pmg_qt/pymol_qt_gui.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/modules/pmg_qt/pymol_qt_gui.py b/modules/pmg_qt/pymol_qt_gui.py +index f2d663204..6e935b0d6 100644 +--- a/modules/pmg_qt/pymol_qt_gui.py ++++ b/modules/pmg_qt/pymol_qt_gui.py +@@ -929,9 +929,9 @@ def command_set_cursor(self, i): + return self.lineedit.setCursorPosition(i) + + def update_progress(self): +- progress = self.cmd.get_progress() ++ progress = int(self.cmd.get_progress() * 100) + if progress >= 0: +- self.progressbar.setValue(progress * 100) ++ self.progressbar.setValue(progress) + self.progressbar.show() + self.abortbutton.show() + else: diff --git a/sci-chemistry/pymol/pymol-3.0.0-r1.ebuild b/sci-chemistry/pymol/pymol-3.0.0-r1.ebuild new file mode 100644 index 000000000000..aeb6bc85c7e1 --- /dev/null +++ b/sci-chemistry/pymol/pymol-3.0.0-r1.ebuild @@ -0,0 +1,123 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +PYTHON_COMPAT=( python3_{9..12} ) +DISTUTILS_USE_PEP517="setuptools" +DISTUTILS_EXT=1 + +inherit desktop flag-o-matic xdg distutils-r1 + +DESCRIPTION="A Python-extensible molecular graphics system" +HOMEPAGE="https://www.pymol.org/" +SRC_URI="https://github.com/schrodinger/pymol-open-source/archive/v${PV}.tar.gz -> ${P}.tar.gz" + +S="${WORKDIR}"/${PN}-open-source-${PV} + +LICENSE="BitstreamVera BSD freedist HPND OFL-1.0 public-domain UoI-NCSA" #844991 +SLOT="0" +KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux ~x64-macos" +IUSE="+netcdf web" + +DEPEND=" + dev-cpp/msgpack-cxx + dev-libs/mmtf-cpp + dev-python/numpy[${PYTHON_USEDEP}] + sys-libs/zlib + media-libs/freetype:2 + media-libs/glew:0= + media-libs/glm + media-libs/libpng:0= + netcdf? ( sci-libs/netcdf:0= ) +" +BDEPEND="test? ( >=dev-cpp/catch-2:0 )" +RDEPEND=" + ${DEPEND} + media-video/mpeg-tools + dev-python/pyopengl[${PYTHON_USEDEP}] + dev-python/PyQt5[opengl,${PYTHON_USEDEP}] + dev-python/pmw[${PYTHON_USEDEP}] + sci-chemistry/chemical-mime-data +" + +distutils_enable_tests pytest + +# FIXME: We need to still figure out about how to make all the tests pass +# https://bugs.gentoo.org/932127 +RESTRICT="test" + +PATCHES=( + "${FILESDIR}/${P}-distutils-py3.12.patch" + "${FILESDIR}/${P}-SceneGetDrawFlag-indexing.patch" + "${FILESDIR}/${P}-eof-maeffplugin.patch" + "${FILESDIR}/${P}-numpy2.patch" + "${FILESDIR}/${P}-py3.12-progress.patch" + "${FILESDIR}/${P}-lto-molfile-plugin.patch" +) + +python_prepare_all() { + sed \ + -e "s:\"/usr:\"${EPREFIX}/usr:g" \ + -e "/ext_comp_args.*+=/s:\[.*\]$:\[\]:g" \ + -i setup.py || die + + sed \ + -e "s:/opt/local:${EPREFIX}/usr:g" \ + -e '/ext_comp_args/s:\[.*\]:[]:g' \ + -i setup.py || die + sed \ + -e "s:\['msgpackc'\]:\['msgpack'\]:g" \ + -i setup.py || die + + append-cxxflags -std=c++17 + + distutils-r1_python_prepare_all +} + +python_configure_all() { + use !netcdf && DISTUTILS_ARGS=( --no-vmd-plugins ) +} + +python_install() { + distutils-r1_python_install \ + --pymol-path="${EPREFIX}/usr/share/pymol" + + sed \ + -e '1i#!/usr/bin/env python' \ + "${D}/$(python_get_sitedir)"/pymol/__init__.py > "${T}"/${PN} || die + python_doscript "${T}"/${PN} +} + +python_test() { + "${EPYTHON}" -m pymol -ckqy testing/testing.py --offline --no-mmlibs --no-undo --run all || die +} + +python_install_all() { + distutils-r1_python_install_all + + # Move data to correct location + dodir /usr/share/pymol + mv "${D}/$(python_get_sitedir)"/pymol/pymol_path/* "${ED}/usr/share/pymol" || die + + # These environment variables should not go in the wrapper script, or else + # it will be impossible to use the PyMOL libraries from Python. + cat >> "${T}"/20pymol <<- EOF || die + PYMOL_PATH="${EPREFIX}/usr/share/pymol" + PYMOL_DATA="${EPREFIX}/usr/share/pymol/data" + PYMOL_SCRIPTS="${EPREFIX}/usr/share/pymol/scripts" + EOF + + doenvd "${T}"/20pymol + + newicon "${S}"/data/pymol/icons/icon2.svg ${PN}.svg + make_desktop_entry "${PN} %u" PyMol ${PN} \ + "Graphics;Education;Science;Chemistry;" \ + "MimeType=chemical/x-pdb;chemical/pdby;chemical/x-mdl-sdfile;chemical/x-mdl-molfile;chemical/x-mol2;chemical/seq-aa-fasta;chemical/seq-na-fasta;chemical/x-xyz;chemical/x-mdl-sdf;chemical/x-macromodel-input;chemical/x-vmd;" + + if ! use web; then + rm -rf "${D}/$(python_get_sitedir)/web" || die + fi + + rm -f "${ED}"/usr/share/${PN}/LICENSE || die +}