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
This commit is contained in:
Wouter Deconinck 2023-02-05 21:38:05 -06:00 committed by GitHub
parent 017a15988c
commit 07d7c32d79
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 129 additions and 162 deletions

View File

@ -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 @@ def archive_files(self):
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",
vendor_deps_to_remove = [
"double-conversion",
"freetype",
"harfbuzz-ng",
"libjpeg",
"libpng",
"libpsl",
]
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):
spec = self.spec
args = []
args = super().cmake_args()
def define(cmake_var, value):
args.append(self.define(cmake_var, value))

View File

@ -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"
# Testing requires +network
depends_on("qt-base +network", type="test")
# 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")
_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)

View File

@ -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:")
_versions = ["6.3.2", "6.3.1", "6.3.0", "6.2.4", "6.2.3"]
for v in _versions:
vendor_deps_to_remove = ["assimp", "embree"]
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),
]

View File

@ -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

View File

@ -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"
depends_on("qt-base +gui")
# 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")
_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)