diff options
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) |