summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam J. Stewart <ajstewart426@gmail.com>2023-08-04 18:49:54 -0500
committerGitHub <noreply@github.com>2023-08-04 18:49:54 -0500
commit4eed83265395ab52532765c3ae9448283e9ff55b (patch)
tree6e9434eb5b102c31374a57924f31c6f3c09b5f72
parent5996aaa4e3b8b37f847da356489bb27958b968f1 (diff)
downloadspack-4eed83265395ab52532765c3ae9448283e9ff55b.tar.gz
spack-4eed83265395ab52532765c3ae9448283e9ff55b.tar.bz2
spack-4eed83265395ab52532765c3ae9448283e9ff55b.tar.xz
spack-4eed83265395ab52532765c3ae9448283e9ff55b.zip
py-pyqt6: add new package (#32696)
-rw-r--r--lib/spack/docs/build_systems/sippackage.rst34
-rw-r--r--lib/spack/spack/build_systems/sip.py62
-rw-r--r--var/spack/repos/builtin/packages/py-matplotlib/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-pyqt-builder/package.py3
-rw-r--r--var/spack/repos/builtin/packages/py-pyqt4/package.py43
-rw-r--r--var/spack/repos/builtin/packages/py-pyqt5-sip/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-pyqt5/package.py62
-rw-r--r--var/spack/repos/builtin/packages/py-pyqt6-sip/package.py17
-rw-r--r--var/spack/repos/builtin/packages/py-pyqt6/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-sip/package.py50
-rw-r--r--var/spack/repos/builtin/packages/qgis/package.py3
-rw-r--r--var/spack/repos/builtin/packages/qscintilla/package.py2
12 files changed, 189 insertions, 138 deletions
diff --git a/lib/spack/docs/build_systems/sippackage.rst b/lib/spack/docs/build_systems/sippackage.rst
index 710334f283..a4f52bf186 100644
--- a/lib/spack/docs/build_systems/sippackage.rst
+++ b/lib/spack/docs/build_systems/sippackage.rst
@@ -32,7 +32,7 @@ By default, these phases run:
.. code-block:: console
- $ python configure.py --bindir ... --destdir ...
+ $ sip-build --verbose --target-dir ...
$ make
$ make install
@@ -41,30 +41,30 @@ By default, these phases run:
Important files
^^^^^^^^^^^^^^^
-Each SIP package comes with a custom ``configure.py`` build script,
-written in Python. This script contains instructions to build the project.
+Each SIP package comes with a custom configuration file written in Python.
+For newer packages, this is called ``project.py``, while in older packages,
+it may be called ``configure.py``. This script contains instructions to build
+the project.
^^^^^^^^^^^^^^^^^^^^^^^^^
Build system dependencies
^^^^^^^^^^^^^^^^^^^^^^^^^
-``SIPPackage`` requires several dependencies. Python is needed to run
-the ``configure.py`` build script, and to run the resulting Python
-libraries. Qt is needed to provide the ``qmake`` command. SIP is also
-needed to build the package. All of these dependencies are automatically
-added via the base class
+``SIPPackage`` requires several dependencies. Python and SIP are needed at build-time
+to run the aforementioned configure script. Python is also needed at run-time to
+actually use the installed Python library. And as we are building Python bindings
+for C/C++ libraries, Python is also needed as a link dependency. All of these
+dependencies are automatically added via the base class.
.. code-block:: python
- extends('python')
+ extends("python", type=("build", "link", "run"))
+ depends_on("py-sip", type="build")
- depends_on('qt', type='build')
- depends_on('py-sip', type='build')
-
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Passing arguments to ``configure.py``
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Passing arguments to ``sip-build``
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Each phase comes with a ``<phase_args>`` function that can be used to pass
arguments to that particular phase. For example, if you need to pass
@@ -73,10 +73,10 @@ arguments to the configure phase, you can use:
.. code-block:: python
def configure_args(self):
- return ['--no-python-dbus']
+ return ["--no-python-dbus"]
-A list of valid options can be found by running ``python configure.py --help``.
+A list of valid options can be found by running ``sip-build --help``.
^^^^^^^
Testing
diff --git a/lib/spack/spack/build_systems/sip.py b/lib/spack/spack/build_systems/sip.py
index 3ec43f5f82..884c740d56 100644
--- a/lib/spack/spack/build_systems/sip.py
+++ b/lib/spack/spack/build_systems/sip.py
@@ -7,13 +7,14 @@ import os
import re
import llnl.util.tty as tty
-from llnl.util.filesystem import find, join_path, working_dir
+from llnl.util.filesystem import find, working_dir
import spack.builder
import spack.install_test
import spack.package_base
from spack.directives import build_system, depends_on, extends
from spack.multimethod import when
+from spack.util.executable import Executable
from ._checks import BaseBuilder, execute_install_time_tests
@@ -39,9 +40,8 @@ class SIPPackage(spack.package_base.PackageBase):
build_system("sip")
with when("build_system=sip"):
- extends("python")
- depends_on("qt")
- depends_on("py-sip")
+ extends("python", type=("build", "link", "run"))
+ depends_on("py-sip", type="build")
@property
def import_modules(self):
@@ -113,13 +113,13 @@ class SIPBuilder(BaseBuilder):
* install
The configure phase already adds a set of default flags. To see more
- options, run ``python configure.py --help``.
+ options, run ``sip-build --help``.
"""
phases = ("configure", "build", "install")
#: Names associated with package methods in the old build-system format
- legacy_methods = ("configure_file", "configure_args", "build_args", "install_args")
+ legacy_methods = ("configure_args", "build_args", "install_args")
#: Names associated with package attributes in the old build-system format
legacy_attributes = (
@@ -130,34 +130,17 @@ class SIPBuilder(BaseBuilder):
"build_directory",
)
- def configure_file(self):
- """Returns the name of the configure file to use."""
- return "configure.py"
+ build_directory = "build"
def configure(self, pkg, spec, prefix):
"""Configure the package."""
- configure = self.configure_file()
-
- args = self.configure_args()
-
- args.extend(
- [
- "--verbose",
- "--confirm-license",
- "--qmake",
- spec["qt"].prefix.bin.qmake,
- "--sip",
- spec["py-sip"].prefix.bin.sip,
- "--sip-incdir",
- join_path(spec["py-sip"].prefix, spec["python"].package.include),
- "--bindir",
- prefix.bin,
- "--destdir",
- inspect.getmodule(self.pkg).python_platlib,
- ]
- )
-
- self.pkg.python(configure, *args)
+
+ # https://www.riverbankcomputing.com/static/Docs/sip/command_line_tools.html
+ args = ["--verbose", "--target-dir", inspect.getmodule(self.pkg).python_platlib]
+ args.extend(self.configure_args())
+
+ sip_build = Executable(spec["py-sip"].prefix.bin.join("sip-build"))
+ sip_build(*args)
def configure_args(self):
"""Arguments to pass to configure."""
@@ -167,7 +150,8 @@ class SIPBuilder(BaseBuilder):
"""Build the package."""
args = self.build_args()
- inspect.getmodule(self.pkg).make(*args)
+ with working_dir(self.build_directory):
+ inspect.getmodule(self.pkg).make(*args)
def build_args(self):
"""Arguments to pass to build."""
@@ -177,21 +161,11 @@ class SIPBuilder(BaseBuilder):
"""Install the package."""
args = self.install_args()
- inspect.getmodule(self.pkg).make("install", parallel=False, *args)
+ with working_dir(self.build_directory):
+ inspect.getmodule(self.pkg).make("install", *args)
def install_args(self):
"""Arguments to pass to install."""
return []
spack.builder.run_after("install")(execute_install_time_tests)
-
- @spack.builder.run_after("install")
- def extend_path_setup(self):
- # See github issue #14121 and PR #15297
- module = self.pkg.spec["py-sip"].variants["module"].value
- if module != "sip":
- module = module.split(".")[0]
- with working_dir(inspect.getmodule(self.pkg).python_platlib):
- with open(os.path.join(module, "__init__.py"), "a") as f:
- f.write("from pkgutil import extend_path\n")
- f.write("__path__ = extend_path(__path__, __name__)\n")
diff --git a/var/spack/repos/builtin/packages/py-matplotlib/package.py b/var/spack/repos/builtin/packages/py-matplotlib/package.py
index 0c6f99dd85..a56508d339 100644
--- a/var/spack/repos/builtin/packages/py-matplotlib/package.py
+++ b/var/spack/repos/builtin/packages/py-matplotlib/package.py
@@ -177,13 +177,16 @@ class PyMatplotlib(PythonPackage):
depends_on("tk@8.4:8.5,8.6.2:", when="backend=" + backend, type="run")
depends_on("python+tkinter", when="backend=" + backend, type="run")
# Qt
+ # matplotlib/backends/qt_compat.py
for backend in ["qt4agg", "qt4cairo"]:
depends_on("py-pyqt4@4.6:", when="backend=" + backend, type="run")
+ depends_on("qt+gui", when="backend=" + backend, type="run")
for backend in ["qt5agg", "qt5cairo"]:
depends_on("py-pyqt5", when="backend=" + backend, type="run")
- # https://github.com/spack/spack/pull/32696
- # for backend in ["qtagg", "qtcairo"]:
- # depends_on("py-pyqt6@6.1:", when="backend=" + backend, type="run")
+ depends_on("qt+gui", when="backend=" + backend, type="run")
+ for backend in ["qtagg", "qtcairo"]:
+ depends_on("py-pyqt6@6.1:", when="backend=" + backend, type="run")
+ depends_on("qt-base+gui+widgets", when="backend=" + backend, type="run")
# GTK
for backend in ["gtk", "gtkagg", "gtkcairo", "gtk3agg", "gtk3cairo", "gtk4agg", "gtk4cairo"]:
depends_on("py-pygobject", when="backend=" + backend, type="run")
diff --git a/var/spack/repos/builtin/packages/py-pyqt-builder/package.py b/var/spack/repos/builtin/packages/py-pyqt-builder/package.py
index 25674c3142..74f31161d3 100644
--- a/var/spack/repos/builtin/packages/py-pyqt-builder/package.py
+++ b/var/spack/repos/builtin/packages/py-pyqt-builder/package.py
@@ -12,9 +12,10 @@ class PyPyqtBuilder(PythonPackage):
homepage = "https://www.riverbankcomputing.com/hg/PyQt-builder/"
pypi = "PyQt-builder/PyQt-builder-1.12.2.tar.gz"
+ version("1.15.1", sha256="a2bd3cfbf952e959141dfe55b44b451aa945ca8916d1b773850bb2f9c0fa2985")
version("1.12.2", sha256="f62bb688d70e0afd88c413a8d994bda824e6cebd12b612902d1945c5a67edcd7")
- depends_on("python@3.5:", type=("build", "run"))
depends_on("py-setuptools@30.3:", type="build")
depends_on("py-packaging", type=("build", "run"))
+ depends_on("py-sip@6.7:6", when="@1.15:", type=("build", "run"))
depends_on("py-sip@6.3:6", type=("build", "run"))
diff --git a/var/spack/repos/builtin/packages/py-pyqt4/package.py b/var/spack/repos/builtin/packages/py-pyqt4/package.py
index 6de10982ab..4ce26a7829 100644
--- a/var/spack/repos/builtin/packages/py-pyqt4/package.py
+++ b/var/spack/repos/builtin/packages/py-pyqt4/package.py
@@ -13,11 +13,7 @@ class PyPyqt4(SIPPackage):
against Qt v5."""
homepage = "https://www.riverbankcomputing.com/software/pyqt/intro"
- url = (
- "http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.12.3/PyQt4_gpl_x11-4.12.3.tar.gz"
- )
-
- sip_module = "PyQt4.sip"
+ url = "https://www.riverbankcomputing.com/static/Downloads/PyQt4/4.12.3/PyQt4_gpl_x11-4.12.3.tar.gz"
version("4.12.3", sha256="a00f5abef240a7b5852b7924fa5fdf5174569525dc076cd368a566619e56d472")
version(
@@ -33,16 +29,28 @@ class PyPyqt4(SIPPackage):
# Requires distutils
depends_on("python@:3.11", type=("build", "link", "run"))
- depends_on("qt@4")
- depends_on("qt@4.1:", when="@4.12.3")
+ depends_on("qt@4.1:4")
+
+ # configure-ng.py
depends_on("py-sip@4.19.12:4.19.18 module=PyQt4.sip")
- # https://www.riverbankcomputing.com/static/Docs/PyQt4/installation.html
- def configure_file(self):
- return "configure-ng.py"
+ build_directory = "."
def configure_args(self):
+ # https://www.riverbankcomputing.com/static/Docs/PyQt4/installation.html
args = [
+ "--verbose",
+ "--confirm-license",
+ "--qmake",
+ self.spec["qt"].prefix.bin.qmake,
+ "--sip",
+ self.spec["py-sip"].prefix.bin.sip,
+ "--sip-incdir",
+ join_path(self.spec["py-sip"].prefix, self.spec["python"].package.include),
+ "--bindir",
+ self.prefix.bin,
+ "--destdir",
+ python_platlib,
"--pyuic4-interpreter",
self.spec["python"].command.path,
"--sipdir",
@@ -53,3 +61,18 @@ class PyPyqt4(SIPPackage):
if "+qsci_api" in self.spec:
args.extend(["--qsci-api", "--qsci-api-destdir", self.prefix.share.qsci])
return args
+
+ def configure(self, spec, prefix):
+ python("configure-ng.py", *self.configure_args())
+
+ @run_after("install")
+ def extend_path_setup(self):
+ # https://github.com/spack/spack/issues/14121
+ # https://github.com/spack/spack/pull/15297
+ # Same code comes by default with py-pyqt5 and py-pyqt6
+ text = """
+# Support PyQt4 sub-packages that have been created by setuptools.
+__path__ = __import__('pkgutil').extend_path(__path__, __name__)
+"""
+ with open(join_path(python_platlib, "PyQt4", "__init__.py"), "a") as f:
+ f.write(text)
diff --git a/var/spack/repos/builtin/packages/py-pyqt5-sip/package.py b/var/spack/repos/builtin/packages/py-pyqt5-sip/package.py
index 89bd9833a3..04f46ccd0a 100644
--- a/var/spack/repos/builtin/packages/py-pyqt5-sip/package.py
+++ b/var/spack/repos/builtin/packages/py-pyqt5-sip/package.py
@@ -10,9 +10,9 @@ class PyPyqt5Sip(PythonPackage):
"""The sip module support for PyQt5."""
homepage = "https://www.riverbankcomputing.com/software/sip/"
- pypi = "PyQt5_sip/PyQt5_sip-12.9.0.tar.gz"
+ pypi = "PyQt5-sip/PyQt5_sip-12.9.0.tar.gz"
+ version("12.12.1", sha256="8fdc6e0148abd12d977a1d3828e7b79aae958e83c6cb5adae614916d888a6b10")
version("12.9.0", sha256="d3e4489d7c2b0ece9d203ae66e573939f7f60d4d29e089c9f11daa17cfeaae32")
- depends_on("python@3.5:", type=("build", "run"))
- depends_on("py-setuptools", type="build")
+ depends_on("py-setuptools@30.3:", type="build")
diff --git a/var/spack/repos/builtin/packages/py-pyqt5/package.py b/var/spack/repos/builtin/packages/py-pyqt5/package.py
index af8b33af46..55a63dce74 100644
--- a/var/spack/repos/builtin/packages/py-pyqt5/package.py
+++ b/var/spack/repos/builtin/packages/py-pyqt5/package.py
@@ -12,44 +12,36 @@ class PyPyqt5(SIPPackage):
Windows, OS X, Linux, iOS and Android. PyQt5 supports Qt v5."""
homepage = "https://www.riverbankcomputing.com/software/pyqt/intro"
- url = (
- "https://www.riverbankcomputing.com/static/Downloads/PyQt5/5.13.0/PyQt5_gpl-5.13.0.tar.gz"
+ url = "https://files.pythonhosted.org/packages/source/P/PyQt5/PyQt5-5.15.9.tar.gz"
+ list_url = "https://pypi.org/simple/PyQt5/"
+
+ version("5.15.9", sha256="dc41e8401a90dc3e2b692b411bd5492ab559ae27a27424eed4bd3915564ec4c0")
+ version(
+ "5.13.1",
+ sha256="54b7f456341b89eeb3930e786837762ea67f235e886512496c4152ebe106d4af",
+ deprecated=True,
+ )
+ version(
+ "5.13.0",
+ sha256="0cdbffe5135926527b61cc3692dd301cd0328dd87eeaf1313e610787c46faff9",
+ deprecated=True,
+ )
+ version(
+ "5.12.3",
+ sha256="0db0fa37debab147450f9e052286f7a530404e2aaddc438e97a7dcdf56292110",
+ deprecated=True,
)
- list_url = "https://www.riverbankcomputing.com/software/pyqt/download5"
-
- sip_module = "PyQt5.sip"
- version("5.13.1", sha256="54b7f456341b89eeb3930e786837762ea67f235e886512496c4152ebe106d4af")
- version("5.13.0", sha256="0cdbffe5135926527b61cc3692dd301cd0328dd87eeaf1313e610787c46faff9")
- version("5.12.3", sha256="0db0fa37debab147450f9e052286f7a530404e2aaddc438e97a7dcdf56292110")
+ # pyproject.toml
+ depends_on("py-sip@6.6.2:6", type="build")
+ depends_on("py-pyqt-builder@1.14.1:1", type="build")
- # API files can be installed regardless if Qscintilla is installed or not
- variant("qsci_api", default=False, description="Install PyQt API file for QScintilla")
+ # PKG-INFO
+ depends_on("py-pyqt5-sip@12.11:12", type=("build", "run"))
- # Without opengl support, I got the following error:
- # sip: QOpenGLFramebufferObject is undefined
- depends_on("qt@5:+opengl")
- depends_on("python@2.6:", type=("build", "run"))
- depends_on("py-sip module=PyQt5.sip", type=("build", "run"))
- depends_on("py-sip@:4.19.18 module=PyQt5.sip", type=("build", "run"), when="@:5.13.0")
+ # README
+ depends_on("qt@5+opengl")
- # https://www.riverbankcomputing.com/static/Docs/PyQt5/installation.html
def configure_args(self):
- args = [
- "--pyuic5-interpreter",
- self.spec["python"].command.path,
- "--sipdir",
- self.prefix.share.sip.PyQt5,
- "--designer-plugindir",
- self.prefix.plugins.designer,
- "--qml-plugindir",
- self.prefix.plugins.PyQt5,
- "--stubsdir",
- join_path(python_platlib, "PyQt5"),
- ]
- if "+qsci_api" in self.spec:
- args.extend(["--qsci-api", "--qsci-api-destdir", self.prefix.share.qsci])
- return args
-
- def setup_run_environment(self, env):
- env.prepend_path("QT_PLUGIN_PATH", self.prefix.plugins)
+ # https://www.riverbankcomputing.com/static/Docs/PyQt5/installation.html
+ return ["--confirm-license", "--no-make", "--qmake", self.spec["qt"].prefix.bin.qmake]
diff --git a/var/spack/repos/builtin/packages/py-pyqt6-sip/package.py b/var/spack/repos/builtin/packages/py-pyqt6-sip/package.py
new file mode 100644
index 0000000000..63d711eb92
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pyqt6-sip/package.py
@@ -0,0 +1,17 @@
+# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+from spack.package import *
+
+
+class PyPyqt6Sip(PythonPackage):
+ """The sip module support for PyQt6."""
+
+ homepage = "https://www.riverbankcomputing.com/software/sip/"
+ pypi = "PyQt6-sip/PyQt6_sip-13.5.1.tar.gz"
+
+ version("13.5.1", sha256="d1e9141752966669576d04b37ba0b122abbc41cc9c35493751028d7d91c4dd49")
+
+ depends_on("py-setuptools@30.3:", type="build")
diff --git a/var/spack/repos/builtin/packages/py-pyqt6/package.py b/var/spack/repos/builtin/packages/py-pyqt6/package.py
new file mode 100644
index 0000000000..cdef126332
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pyqt6/package.py
@@ -0,0 +1,36 @@
+# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+from spack.package import *
+
+
+class PyPyqt6(SIPPackage):
+ """PyQt6 is a comprehensive set of Python bindings for Qt v6."""
+
+ homepage = "https://www.riverbankcomputing.com/software/pyqt/"
+ url = "https://files.pythonhosted.org/packages/source/P/PyQt6/PyQt6-6.5.1.tar.gz"
+ list_url = "https://pypi.org/simple/PyQt6/"
+
+ version("6.5.1", sha256="e166a0568c27bcc8db00271a5043936226690b6a4a74ce0a5caeb408040a97c3")
+
+ # pyproject.toml
+ depends_on("py-sip@6.5:6", type="build")
+ depends_on("py-pyqt-builder@1.15:1", type="build")
+
+ # PKG-INFO
+ depends_on("py-pyqt6-sip@13.4:13", type=("build", "run"))
+
+ # README
+ depends_on("qt-base@6")
+
+ def setup_build_environment(self, env):
+ # Detected system locale encoding (US-ASCII, locale "C") is not UTF-8.
+ # Qt shall use a UTF-8 locale ("UTF-8") instead. If this causes problems,
+ # reconfigure your locale. See the locale(1) manual for more information.
+ env.set("LC_ALL", "en_US.UTF-8")
+
+ def configure_args(self):
+ # https://www.riverbankcomputing.com/static/Docs/PyQt6/installation.html
+ return ["--confirm-license", "--no-make", "--qmake", self.spec["qt-base"].prefix.bin.qmake]
diff --git a/var/spack/repos/builtin/packages/py-sip/package.py b/var/spack/repos/builtin/packages/py-sip/package.py
index 031c04ca8b..e85f442127 100644
--- a/var/spack/repos/builtin/packages/py-sip/package.py
+++ b/var/spack/repos/builtin/packages/py-sip/package.py
@@ -14,9 +14,11 @@ class PySip(PythonPackage):
homepage = "https://www.riverbankcomputing.com/software/sip"
pypi = "sip/sip-6.4.0.tar.gz"
+ version("6.7.9", sha256="35d51fc10f599d3696abb50f29d068ad04763df7b77808c76b74597660f99b17")
version("6.6.2", sha256="0e3efac1c5dfd8e525ae57140927df26993e13f58b89d1577c314f4105bfd90d")
version("6.4.0", sha256="42ec368520b8da4a0987218510b1b520b4981e4405086c1be384733affc2bcb0")
version("5.5.0", sha256="5d024c419b30fea8a6de8c71a560c7ab0bc3c221fbfb14d55a5b865bd58eaac5")
+ version("4.19.25", sha256="3d36986f7327b7b966bb6eacf22bcf6e4d0a3d24e392276ef92af89988818062")
version("4.19.21", sha256="3bfd58e875a87471c00e008f25a01d8312885aa01efc4f688e5cac861c8676e4")
version("4.19.20", sha256="475f85277a6601c406ade508b6c935b9f2a170c16fd3ae9dd4cdee7a4f7f340d")
version("4.19.19", sha256="348cd6229b095a3090e851555814f5147bffcb601cec891f1038eb6b38c9d856")
@@ -33,27 +35,25 @@ class PySip(PythonPackage):
multi=False,
)
- depends_on("python@3.7:", when="@6.6:", type=("build", "link", "run"))
- depends_on("python@3.6:", when="@6:", type=("build", "link", "run"))
-
depends_on("py-ply", when="@6.6:", type=("build", "run"))
with when("@5:"):
- depends_on("python@3.5.1:", type=("build", "link", "run"))
- depends_on("py-packaging", type="build")
- depends_on("py-setuptools@30.3:", type="build")
- depends_on("py-toml", type="build")
+ depends_on("python", type=("build", "link", "run"))
+ depends_on("py-packaging", type=("build", "run"))
+ depends_on("py-setuptools@30.3:", type=("build", "run"))
+ depends_on("py-tomli", when="@6.7: ^python@:3.10", type=("build", "run"))
+ depends_on("py-toml", when="@:6.6", type=("build", "run"))
with when("@:4"):
- depends_on("python", type=("build", "link", "run"))
+ # Requires distutils
+ depends_on("python@:3.11", type=("build", "link", "run"))
depends_on("flex", type="build")
depends_on("bison", type="build")
def url_for_version(self, version):
- if version < Version("5.0.0"):
- return "https://www.riverbankcomputing.com/hg/sip/archive/{0}.tar.gz".format(
- version.dotted
- )
+ if version < Version("5"):
+ url = "https://www.riverbankcomputing.com/hg/sip/archive/{0}.tar.gz"
+ return url.format(version.dotted)
return super().url_for_version(version)
@when("@:4")
@@ -75,12 +75,20 @@ class PySip(PythonPackage):
@run_after("install")
def extend_path_setup(self):
- if self.spec.satisfies("@:4"):
- # See github issue #14121 and PR #15297
- module = self.spec.variants["module"].value
- if module != "sip":
- module = module.split(".")[0]
- with working_dir(python_platlib):
- with open(os.path.join(module, "__init__.py"), "w") as f:
- f.write("from pkgutil import extend_path\n")
- f.write("__path__ = extend_path(__path__, __name__)\n")
+ # https://github.com/spack/spack/issues/14121
+ # https://github.com/spack/spack/pull/15297
+ # Same code comes by default with py-pyqt5 and py-pyqt6
+ if self.spec.satisfies("@5:"):
+ return
+
+ module = self.spec.variants["module"].value
+ if module == "sip":
+ return
+
+ module = module.split(".")[0]
+ text = f"""
+# Support {module} sub-packages that have been created by setuptools.
+__path__ = __import__('pkgutil').extend_path(__path__, __name__)
+"""
+ with open(join_path(python_platlib, module, "__init__.py"), "w") as f:
+ f.write(text)
diff --git a/var/spack/repos/builtin/packages/qgis/package.py b/var/spack/repos/builtin/packages/qgis/package.py
index fb9d22a244..a269ba95a1 100644
--- a/var/spack/repos/builtin/packages/qgis/package.py
+++ b/var/spack/repos/builtin/packages/qgis/package.py
@@ -161,9 +161,6 @@ class Qgis(CMakePackage):
depends_on("qt@5.9.0:", when="@3.10.0:")
depends_on("qtkeychain@:1.5", when="^qt@4")
depends_on("qt@:4", when="@2")
- # Help concretizer
- # +qsci_api is implied by qscintilla+python dependency
- depends_on("py-pyqt5@5.3: +qsci_api", when="@3")
patch("pyqt5.patch", when="@:3.14 ^qt@5")
patch("pyqt5_3165x.patch", when="@3.16.5:3.21 ^qt@5")
diff --git a/var/spack/repos/builtin/packages/qscintilla/package.py b/var/spack/repos/builtin/packages/qscintilla/package.py
index dea8ae886c..90a17030c7 100644
--- a/var/spack/repos/builtin/packages/qscintilla/package.py
+++ b/var/spack/repos/builtin/packages/qscintilla/package.py
@@ -46,7 +46,7 @@ class Qscintilla(QMakePackage):
depends_on("qt+opengl", when="+python")
depends_on("qt")
- depends_on("py-pyqt5 +qsci_api", type=("build", "run"), when="+python ^qt@5")
+ depends_on("py-pyqt5", type=("build", "run"), when="+python ^qt@5")
depends_on("py-pyqt4 +qsci_api", type=("build", "run"), when="+python ^qt@4")
depends_on("python", type=("build", "run"), when="+python")
# adter install inquires py-sip variant : so we need to have it