summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorWouter Deconinck <wdconinc@gmail.com>2023-02-05 21:38:05 -0600
committerGitHub <noreply@github.com>2023-02-05 22:38:05 -0500
commit07d7c32d79eb2f8a843aafc78e1d3ad4711b8ede (patch)
tree9552e9c78c09d84c9dfb8bf0330c0e1be89a3d98 /var
parent017a15988c4acdb0cb517bcc4a27dfd93ea947f4 (diff)
downloadspack-07d7c32d79eb2f8a843aafc78e1d3ad4711b8ede.tar.gz
spack-07d7c32d79eb2f8a843aafc78e1d3ad4711b8ede.tar.bz2
spack-07d7c32d79eb2f8a843aafc78e1d3ad4711b8ede.tar.xz
spack-07d7c32d79eb2f8a843aafc78e1d3ad4711b8ede.zip
qt: new versions 6.4.0, 6.4.1, 6.4.2 (#34698)
* qt: new versions 6.4.0, 6.4.1 - New libpsl vendored dependency in qt-base. - New embree and tinyexr dependency in qt-quick3d. We need to figure out a better way to deal with these vendored dependencies in src/3rdparty. Removing them was a way to make sure they are not used unintentionally. Many of these dependencies cannot be overridden with a QT_FEATURE_system_* flag and are included directly in cpp files. Many change versions from release to release, so even if they use system (ie spack managed) versions we need to support this in the depends_on lines. What we can rely on? - src/3rdparty is where vendored stuff is stored - not much else... Possible ways to deal with this: - Change vendor_deps_to_keep to dict with versions, eg ``` vendor_deps_to_keep = { "xatlas": "@6:", "embree": "@6.4:", "tinyexr": "@6.4:", } ``` - Similarly introduce system_deps_to_use: ``` system_deps_to_use = { "assimp@5.2:": "@6:", } ``` and derive depends_on and QT_FEATURE_system_* from this dict. * qt-*: new version 6.4.2, invert vendored pkgs logic * qt-base: fix vendor_deps_to_avoid typo * qt-*: move lots into QtPackage base layer
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/qt-base/package.py120
-rw-r--r--var/spack/repos/builtin/packages/qt-declarative/package.py45
-rw-r--r--var/spack/repos/builtin/packages/qt-quick3d/package.py51
-rw-r--r--var/spack/repos/builtin/packages/qt-quicktimeline/package.py31
-rw-r--r--var/spack/repos/builtin/packages/qt-shadertools/package.py44
5 files changed, 129 insertions, 162 deletions
diff --git a/var/spack/repos/builtin/packages/qt-base/package.py b/var/spack/repos/builtin/packages/qt-base/package.py
index e83ccafb22..0f069807e3 100644
--- a/var/spack/repos/builtin/packages/qt-base/package.py
+++ b/var/spack/repos/builtin/packages/qt-base/package.py
@@ -4,24 +4,96 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
+import re
import shutil
import sys
+import llnl.util.tty as tty
+
from spack.operating_systems.mac_os import macos_version
from spack.package import *
MACOS_VERSION = macos_version() if sys.platform == "darwin" else None
-class QtBase(CMakePackage):
- """Qt Base (Core, Gui, Widgets, Network, ...)"""
+class QtPackage(CMakePackage):
+ """Base package for Qt6 components"""
homepage = "https://www.qt.io"
- url = "https://github.com/qt/qtbase/archive/refs/tags/v6.3.1.tar.gz"
- list_url = "https://github.com/qt/qtbase/tags"
+
+ @staticmethod
+ def get_url(qualname):
+ _url = "https://github.com/qt/{}/archive/refs/tags/v6.2.3.tar.gz"
+ return _url.format(qualname.lower())
+
+ @staticmethod
+ def get_list_url(qualname):
+ _list_url = "https://github.com/qt/{}/tags"
+ return _list_url.format(qualname.lower())
+
+ generator = "Ninja"
maintainers("wdconinc", "sethrj")
+ # Default dependencies for all qt-* components
+ depends_on("cmake@3.16:", type="build")
+ depends_on("ninja", type="build")
+ depends_on("pkgconfig", type="build")
+ depends_on("python", type="build")
+
+ # List of unnecessary directories in src/3rdparty
+ vendor_deps_to_remove = []
+
+ @run_after("patch")
+ def remove_vendor_deps(self, vendor_dir, vendor_deps_to_remove):
+ """Remove src/3rdparty libraries that are provided by spack"""
+ vendor_dir = join_path(self.stage.source_path, "src", "3rdparty")
+ with working_dir(vendor_dir):
+ for dep in os.listdir():
+ if os.path.isdir(dep):
+ if dep in vendor_deps_to_remove:
+ shutil.rmtree(dep)
+
+ def cmake_args(self):
+ # Start with upstream cmake_args
+ args = super().cmake_args()
+
+ # Qt components typically install cmake config files in a single prefix,
+ # so we have to point them to the cmake config files of dependencies
+ qt_prefix_path = []
+ re_qt = re.compile("qt-.*")
+ for dep in self.spec.dependencies():
+ if re_qt.match(dep.name):
+ qt_prefix_path.append(self.spec[dep.name].prefix)
+
+ # Now append all qt-* dependency prefixex into a prefix path
+ args.append(self.define("QT_ADDITIONAL_PACKAGES_PREFIX_PATH", ":".join(qt_prefix_path)))
+
+ return args
+
+ @run_after("install")
+ def install_config_summary(self):
+ """Copy the config.summary into the prefix"""
+
+ # Copy to package-name-prefixed file to avoid clashes in views
+ with working_dir(self.build_directory):
+ copy("config.summary", self.name + ".config.summary")
+ install(self.name + ".config.summary", self.prefix)
+
+ # Warn users that this config summary is only for info purpose,
+ # and should not be relied upon for downstream parsing.
+ tty.warn("config.summary in prefix is a temporary feature only")
+
+
+class QtBase(QtPackage):
+ """Qt Base (Core, Gui, Widgets, Network, ...)"""
+
+ url = QtPackage.get_url(__qualname__)
+ list_url = QtPackage.get_list_url(__qualname__)
+
+ version("6.4.2", sha256="c138ae734cfcde7a92a7efd97a902e53f3cd2c2f89606dfc482d0756f60cdc23")
+ version("6.4.1", sha256="0ef6db6b3e1074e03dcae7e689144af66fd51b95a6efe949d40281cc43e6fecf")
+ version("6.4.0", sha256="fbc462816bf5b87d521e9f69cebe0ce331de2258396e0932fa580283f07fce0c")
version("6.3.2", sha256="95b78830a99f417ff34ee784ab78f5eeb7bb12adb16d137c3026434c44a904dd")
version("6.3.1", sha256="4393e8cea0c58b1e0e901735fcffad141261576a0fa414ed6309910ac3d49df9")
version("6.3.0", sha256="c50dc73f633e6c0f6ee3f51980c698800f1a0cadb423679bcef18e446ac72138")
@@ -45,13 +117,6 @@ class QtBase(CMakePackage):
variant("opengl", default=False, when="+gui", description="Build with OpenGL support.")
variant("widgets", default=True, when="+gui", description="Build with widgets.")
- generator = "Ninja"
-
- depends_on("cmake@3.16:", type="build")
- depends_on("ninja", type="build")
- depends_on("pkgconfig", type="build")
- depends_on("python", type="build")
-
# Dependencies, then variant- and version-specific dependencies
depends_on("double-conversion")
depends_on("icu4c")
@@ -93,32 +158,19 @@ class QtBase(CMakePackage):
for filename in ["CMakeCache.txt", "config.summary"]
]
- def patch(self):
- vendor_dir = join_path(self.stage.source_path, "src", "3rdparty")
- vendor_deps_to_keep = [
- "blake2",
- "easing",
- "forkfd",
- "freebsd",
- "icc",
- "md4",
- "md4c",
- "md5",
- "rfc6234",
- "sha1",
- "sha3",
- "tinycbor",
- "VulkanMemoryAllocator",
- ]
- with working_dir(vendor_dir):
- for dep in os.listdir():
- if os.path.isdir(dep):
- if dep not in vendor_deps_to_keep:
- shutil.rmtree(dep)
+ vendor_deps_to_remove = [
+ "double-conversion",
+ "freetype",
+ "harfbuzz-ng",
+ "libjpeg",
+ "libpng",
+ "libpsl",
+ ]
def cmake_args(self):
spec = self.spec
- args = []
+
+ args = super().cmake_args()
def define(cmake_var, value):
args.append(self.define(cmake_var, value))
diff --git a/var/spack/repos/builtin/packages/qt-declarative/package.py b/var/spack/repos/builtin/packages/qt-declarative/package.py
index 34f2aa4658..d9c50a83dd 100644
--- a/var/spack/repos/builtin/packages/qt-declarative/package.py
+++ b/var/spack/repos/builtin/packages/qt-declarative/package.py
@@ -4,52 +4,29 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
-import os
-import shutil
-
from spack.package import *
+from spack.pkg.builtin.qt_base import QtBase, QtPackage
-class QtDeclarative(CMakePackage):
+class QtDeclarative(QtPackage):
"""Qt Declarative (Quick 2)."""
- homepage = "https://www.qt.io"
- url = "https://github.com/qt/qtdeclarative/archive/refs/tags/v6.2.3.tar.gz"
- list_url = "https://github.com/qt/qtdeclarative/tags"
-
- maintainers("wdconinc", "sethrj")
+ url = QtPackage.get_url(__qualname__)
+ list_url = QtPackage.get_list_url(__qualname__)
+ version("6.4.2", sha256="dec3599b55f75cff044cc6384fa2f7e9505f8a48af1b4c185c2789e2dafabda6")
+ version("6.4.1", sha256="23b5c91e98ec2b8a4118a3d3ace0c2e61b355cc8f2ccb87d189708b69446f917")
+ version("6.4.0", sha256="daf7b97be51451af5afa35e1c0421fb8964003852088b0293c144a12bd664cd1")
version("6.3.2", sha256="140a3c4973d56d79abf5fea9ae5cf13b3ef7693ed1d826b263802926a4ba84b6")
version("6.3.1", sha256="1606723c2cc150c9b7339fd33ca5e2ca00d6e738e119c52a1d37ca12d3329ba9")
version("6.3.0", sha256="b7316d6c195fdc31ecbf5ca2acf2888737539919a02ff8f11a911432d50c17ac")
version("6.2.4", sha256="cd939d99c37e7723268804b9516e32f8dd64b985d847469c78b66b5f4481c548")
version("6.2.3", sha256="eda82abfe685a6ab5664e4268954622ccd05cc9ec8fb16eaa453c54900591baf")
- generator = "Ninja"
-
- # Changing default to Release for typical use in HPC contexts
- variant(
- "build_type",
- default="Release",
- values=("Release", "Debug", "RelWithDebInfo", "MinSizeRel"),
- description="CMake build type",
- )
+ # Testing requires +network
+ depends_on("qt-base +network", type="test")
- depends_on("cmake@3.16:", type="build")
- depends_on("ninja", type="build")
- depends_on("pkgconfig", type="build")
- depends_on("python", when="@5.7.0:", type="build")
-
- _versions = ["6.3.2", "6.3.1", "6.3.0", "6.2.4", "6.2.3"]
- for v in _versions:
+ for _v in QtBase.versions:
+ v = str(_v)
depends_on("qt-base@" + v, when="@" + v)
depends_on("qt-shadertools@" + v, when="@" + v)
-
- def patch(self):
- vendor_dir = join_path(self.stage.source_path, "src", "3rdparty")
- vendor_deps_to_keep = ["masm"]
- with working_dir(vendor_dir):
- for dep in os.listdir():
- if os.path.isdir(dep):
- if dep not in vendor_deps_to_keep:
- shutil.rmtree(dep)
diff --git a/var/spack/repos/builtin/packages/qt-quick3d/package.py b/var/spack/repos/builtin/packages/qt-quick3d/package.py
index 8ba06d999f..dad09ddeef 100644
--- a/var/spack/repos/builtin/packages/qt-quick3d/package.py
+++ b/var/spack/repos/builtin/packages/qt-quick3d/package.py
@@ -4,63 +4,38 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
-import os
-import shutil
-
from spack.package import *
+from spack.pkg.builtin.qt_base import QtBase, QtPackage
-class QtQuick3d(CMakePackage):
+class QtQuick3d(QtPackage):
"""A new module and API for defining 3D content in Qt Quick."""
- homepage = "https://www.qt.io"
- url = "https://github.com/qt/qtquick3d/archive/refs/tags/v6.2.3.tar.gz"
- list_url = "https://github.com/qt/qtquick3d/tags"
-
- maintainers("wdconinc", "sethrj")
+ url = QtPackage.get_url(__qualname__)
+ list_url = QtPackage.get_list_url(__qualname__)
+ version("6.4.2", sha256="940145615fe3c4c8fb346c5bfc10f94fc7a4005c8c187886e0f3088ea0ce0778")
+ version("6.4.1", sha256="67daeed69b9e7b3da516c6205e737fdba30a267978c1fb9d34723a6dc5588585")
+ version("6.4.0", sha256="37987536da151b7c2cddabfde734759ebe6173708d32cb85aa008e151751270e")
version("6.3.2", sha256="a3ec81393f1cd45eb18ee3d47582998679eef141b856bdd2baa2d41f019a0eea")
version("6.3.1", sha256="79f0813ff776dc2aa07a8513ecd9d550dd8d449dc8fcd834fb0c9b22ea4a1893")
version("6.3.0", sha256="413dec87828155ea0c0424e6b40c777bf0710f1ffaf98969c5d8b19ad3992823")
version("6.2.4", sha256="7292ed4373a92913c6811f2faa5191f0426f84bd93a3f6eb7d54b62626b56db5")
version("6.2.3", sha256="35d06edbdd83b7d781b70e0bada18911fa9b774b6403589d5b21813a73584d80")
- generator = "Ninja"
-
- # Changing default to Release for typical use in HPC contexts
- variant(
- "build_type",
- default="Release",
- values=("Release", "Debug", "RelWithDebInfo", "MinSizeRel"),
- description="CMake build type",
- )
-
- depends_on("cmake@3.16:", type="build")
- depends_on("ninja", type="build")
- depends_on("pkgconfig", type="build")
- depends_on("python", when="@5.7.0:", type="build")
-
depends_on("assimp@5.0.1:")
+ depends_on("embree", when="@6.4:")
+
+ vendor_deps_to_remove = ["assimp", "embree"]
- _versions = ["6.3.2", "6.3.1", "6.3.0", "6.2.4", "6.2.3"]
- for v in _versions:
+ for _v in QtBase.versions:
+ v = str(_v)
depends_on("qt-base@" + v, when="@" + v)
depends_on("qt-declarative@" + v, when="@" + v)
depends_on("qt-quicktimeline@" + v, when="@" + v)
- def patch(self):
- vendor_dir = join_path(self.stage.source_path, "src", "3rdparty")
- vendor_deps_to_keep = ["xatlas"]
- with working_dir(vendor_dir):
- for dep in os.listdir():
- if os.path.isdir(dep):
- if dep not in vendor_deps_to_keep:
- shutil.rmtree(dep)
-
def cmake_args(self):
- args = [
- # Qt components typically install cmake config files in a single prefix
- self.define("QT_ADDITIONAL_PACKAGES_PREFIX_PATH", self.spec["qt-declarative"].prefix),
+ args = super().cmake_args() + [
self.define("FEATURE_quick3d_assimp", True),
self.define("FEATURE_system_assimp", True),
]
diff --git a/var/spack/repos/builtin/packages/qt-quicktimeline/package.py b/var/spack/repos/builtin/packages/qt-quicktimeline/package.py
index a3401a3263..d35b0acefa 100644
--- a/var/spack/repos/builtin/packages/qt-quicktimeline/package.py
+++ b/var/spack/repos/builtin/packages/qt-quicktimeline/package.py
@@ -5,38 +5,25 @@
from spack.package import *
+from spack.pkg.builtin.qt_base import QtBase, QtPackage
-class QtQuicktimeline(CMakePackage):
+class QtQuicktimeline(QtPackage):
"""Module for keyframe-based timeline construction."""
- homepage = "https://www.qt.io"
- url = "https://github.com/qt/qtquicktimeline/archive/refs/tags/v6.2.3.tar.gz"
- list_url = "https://github.com/qt/qtquicktimeline/tags"
-
- maintainers("wdconinc", "sethrj")
+ url = QtPackage.get_url(__qualname__)
+ list_url = QtPackage.get_list_url(__qualname__)
+ version("6.4.2", sha256="af7449bf5954d2309081d6d65af7fd31cb11a5f8dc5f414163120d582f82353f")
+ version("6.4.1", sha256="20450687941e6e12e1adf428114776c304d14447d61a4e8b08050c7c18463ee7")
+ version("6.4.0", sha256="b5f88beaa726032141fab91b84bc3b268f6213518301c4ddcfa7d116fd08bdab")
version("6.3.2", sha256="ca6e53a92b022b49098c15f2cc5897953644de8477310696542a03bbbe5666aa")
version("6.3.1", sha256="ba1e808d4c0fce899c235942df34ae5d349632f61a302d14feeae7465cf1f197")
version("6.3.0", sha256="09e27bbdefbbf50d15525d26119a00d86eba76d2d1bc9421557d1ed86edcacdf")
version("6.2.4", sha256="d73cb33e33f0b7a1825b863c22e6b552ae86aa841bcb805a41aca02526a4e8bc")
version("6.2.3", sha256="bbb913398d8fb6b5b20993b5e02317de5c1e4b23a5357dd5d08a237ada6cc7e2")
- generator = "Ninja"
-
- depends_on("cmake@3.16:", type="build")
- depends_on("ninja", type="build")
- depends_on("pkgconfig", type="build")
- depends_on("python", when="@5.7.0:", type="build")
-
- _versions = ["6.3.2", "6.3.1", "6.3.0", "6.2.4", "6.2.3"]
- for v in _versions:
+ for _v in QtBase.versions:
+ v = str(_v)
depends_on("qt-base@" + v, when="@" + v)
depends_on("qt-declarative@" + v, when="@" + v)
-
- def cmake_args(self):
- args = [
- # Qt components typically install cmake config files in a single prefix
- self.define("QT_ADDITIONAL_PACKAGES_PREFIX_PATH", self.spec["qt-declarative"].prefix)
- ]
- return args
diff --git a/var/spack/repos/builtin/packages/qt-shadertools/package.py b/var/spack/repos/builtin/packages/qt-shadertools/package.py
index f043d43ffd..a92609da3b 100644
--- a/var/spack/repos/builtin/packages/qt-shadertools/package.py
+++ b/var/spack/repos/builtin/packages/qt-shadertools/package.py
@@ -4,53 +4,29 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
-import os
-import shutil
-
from spack.package import *
+from spack.pkg.builtin.qt_base import QtBase, QtPackage
-class QtShadertools(CMakePackage):
+class QtShadertools(QtPackage):
"""APIs and tools in this module provide the producer functionality for the
shader pipeline that allows Qt Quick to operate on Vulkan, Metal, and
Direct3D, in addition to OpenGL."""
- homepage = "https://www.qt.io"
- url = "https://github.com/qt/qtshadertools/archive/refs/tags/v6.2.3.tar.gz"
- list_url = "https://github.com/qt/qtshadertools/tags"
-
- maintainers("wdconinc", "sethrj")
+ url = QtPackage.get_url(__qualname__)
+ list_url = QtPackage.get_list_url(__qualname__)
+ version("6.4.2", sha256="7f29a78769f454fe529595acb693aa67812e80d894162ddad3f0444f65a22268")
+ version("6.4.1", sha256="d325724c4ed79c759ac8cbbca5f9fd4b0e6e8d61a9ac58921cb1dac75c104687")
+ version("6.4.0", sha256="51bf312965bd673193221cd49019f504feb79c0bf0ff01d6a6ca5c8d15f9d7c1")
version("6.3.2", sha256="ec73303e6c91cddae402b1ac0d18a0d35619f348785514be30cec2791cd63faa")
version("6.3.1", sha256="1b8b18b6ece4d92d0bf60a3b2a9924b45c369968cc77217796434ac7c5c6628f")
version("6.3.0", sha256="3c36d83fc036a144722ce056b2840260005dcbd338e11b9c527d7266a54afd45")
version("6.2.4", sha256="c3332d91e0894086634d5f8d40638439e6e3653a3a185e1b5f5d23ae3b9f51a1")
version("6.2.3", sha256="658c4acc2925e57d35bbd38cdf49c08297555ed7d632f9e86bfef76e6d861562")
- generator = "Ninja"
-
- # Changing default to Release for typical use in HPC contexts
- variant(
- "build_type",
- default="Release",
- values=("Release", "Debug", "RelWithDebInfo", "MinSizeRel"),
- description="CMake build type",
- )
+ depends_on("qt-base +gui")
- depends_on("cmake@3.16:", type="build")
- depends_on("ninja", type="build")
- depends_on("pkgconfig", type="build")
- depends_on("python", when="@5.7.0:", type="build")
-
- _versions = ["6.3.2", "6.3.1", "6.3.0", "6.2.4", "6.2.3"]
- for v in _versions:
+ for _v in QtBase.versions:
+ v = str(_v)
depends_on("qt-base@" + v, when="@" + v)
-
- def patch(self):
- vendor_dir = join_path(self.stage.source_path, "src", "3rdparty")
- vendor_deps_to_keep = ["glslang", "patches", "SPIRV-Cross"]
- with working_dir(vendor_dir):
- for dep in os.listdir():
- if os.path.isdir(dep):
- if dep not in vendor_deps_to_keep:
- shutil.rmtree(dep)