qt6: new packages (#29555)
* qt6: initial commit of several basic qt6 packages * Qt6: fix style issues * [qt6] fix style issues, trailing spaces * [qt6] rename to qt-* ecosystem; remove imports * [qt6] rename dependencies; change version strings * [qt6] list_urls * [qt6] homepage links * [qt6] missing closing quotes failed style check * qt-declarative: use private _versions Co-authored-by: Seth R. Johnson <johnsonsr@ornl.gov> * qt-quick3d, qt-quicktimeline, qt-shadertools: use private _versions * qt-base: rework feature defines and use run_tests * qt: new version 6.2.4 * flake8 whitespace before comma * qt-base: variant opengl when +gui Co-authored-by: Seth R. Johnson <johnsonsr@ornl.gov> * qt6: rebase and apply new black style * qt6: apply style isort fixes * qt6: new version 6.3.0 and 6.3.1 * qt6: add 6.3.0 and 6.3.1 to versions list * qt6: multi-argument join_path Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com> * qt-base: fix isort * qt-shadertools: no cmake_args needed * qt-declarative: imports up front * qt-quick3d: fix import * qt-declarative: remove useless cmake_args * qt-shadertools: imports and join_path fixes * qt-quick3d: join_path fixes * qt-declarative: join_path fixes * Update features based on gui usage * Update dependencies, cmake args, mac support * Update features based on linux * More updates * qt-base: fix style * qt-base: archive_files join_path * qt-base: new version 6.3.2 * qt-{declarative,quick3d,quicktimeline,shadertools}@6.3.2 * qt-base: require libxcb@1.13: and use system xcb_xinput when on linux Co-authored-by: Seth R. Johnson <johnsonsr@ornl.gov> Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
This commit is contained in:
		
							
								
								
									
										193
									
								
								var/spack/repos/builtin/packages/qt-base/package.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								var/spack/repos/builtin/packages/qt-base/package.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,193 @@ | ||||
| # 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) | ||||
| 
 | ||||
| import os | ||||
| import shutil | ||||
| import sys | ||||
| 
 | ||||
| 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, ...)""" | ||||
| 
 | ||||
|     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" | ||||
| 
 | ||||
|     maintainers = ["wdconinc", "sethrj"] | ||||
| 
 | ||||
|     version("6.3.2", sha256="95b78830a99f417ff34ee784ab78f5eeb7bb12adb16d137c3026434c44a904dd") | ||||
|     version("6.3.1", sha256="4393e8cea0c58b1e0e901735fcffad141261576a0fa414ed6309910ac3d49df9") | ||||
|     version("6.3.0", sha256="c50dc73f633e6c0f6ee3f51980c698800f1a0cadb423679bcef18e446ac72138") | ||||
|     version("6.2.4", sha256="657d1405b5e15afcf322cc75b881f62d6a56f16383707742a99eb87f53cb63de") | ||||
|     version("6.2.3", sha256="2dd095fa82bff9e0feb7a9004c1b2fb910f79ecc6111aa64637c95a02b7a8abb") | ||||
| 
 | ||||
|     variant("dbus", default=False, description="Build with D-Bus support.") | ||||
|     variant( | ||||
|         "framework", default=bool(MACOS_VERSION), description="Build as a macOS Framework package." | ||||
|     ) | ||||
|     variant("gui", default=True, description="Build the Qt GUI module and dependencies.") | ||||
|     variant("shared", default=True, description="Build shared libraries.") | ||||
|     variant("sql", default=True, description="Build with SQL support.") | ||||
|     variant("network", default=True, description="Build with SSL support.") | ||||
| 
 | ||||
|     # GUI-only dependencies | ||||
|     variant( | ||||
|         "accessibility", default=True, when="+gui", description="Build with accessibility support." | ||||
|     ) | ||||
|     variant("gtk", default=False, when="+gui", description="Build with gtkplus.") | ||||
|     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") | ||||
|     depends_on("libxml2") | ||||
|     depends_on("pcre2+multibyte") | ||||
|     depends_on("zlib") | ||||
|     depends_on("zstd") | ||||
|     with when("platform=linux"): | ||||
|         depends_on("libdrm") | ||||
| 
 | ||||
|     depends_on("at-spi2-core", when="+accessibility") | ||||
|     depends_on("dbus", when="+dbus") | ||||
|     depends_on("gl", when="+opengl") | ||||
|     depends_on("sqlite", when="+sql") | ||||
| 
 | ||||
|     with when("+gui"): | ||||
|         depends_on("fontconfig") | ||||
|         depends_on("freetype") | ||||
|         depends_on("harfbuzz") | ||||
|         depends_on("jpeg") | ||||
|         depends_on("libpng") | ||||
|         with when("platform=linux"): | ||||
|             depends_on("libxkbcommon") | ||||
|             depends_on("libxcb@1.13:")  # requires xinput | ||||
|             depends_on("libxrender") | ||||
| 
 | ||||
|     with when("+network"): | ||||
|         depends_on("libproxy") | ||||
|         depends_on("openssl") | ||||
| 
 | ||||
|     @property | ||||
|     def archive_files(self): | ||||
|         """Save both the CMakeCache and the config summary.""" | ||||
|         return [ | ||||
|             join_path(self.build_directory, filename) | ||||
|             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) | ||||
| 
 | ||||
|     def cmake_args(self): | ||||
|         spec = self.spec | ||||
|         args = [] | ||||
| 
 | ||||
|         def define(cmake_var, value): | ||||
|             args.append(self.define(cmake_var, value)) | ||||
| 
 | ||||
|         def define_from_variant(cmake_var, variant=None): | ||||
|             result = self.define_from_variant(cmake_var, variant) | ||||
|             if result: | ||||
|                 # Not a conditional variant | ||||
|                 args.append(result) | ||||
| 
 | ||||
|         def define_feature(key, variant=None): | ||||
|             if variant is None: | ||||
|                 variant = key | ||||
|             define_from_variant("FEATURE_" + key, variant) | ||||
| 
 | ||||
|         define_from_variant("BUILD_SHARED_LIBS", "shared") | ||||
|         define("FEATURE_optimize_size", spec.satisfies("build_type=MinSizeRel")) | ||||
| 
 | ||||
|         # Top-level features | ||||
|         define_feature("accessibility") | ||||
|         # concurrent: default to on | ||||
|         define_feature("dbus") | ||||
|         define_feature("framework") | ||||
|         define_feature("gui") | ||||
|         define_feature("network")  # note: private feature | ||||
|         # testlib: default to on | ||||
|         # thread: default to on | ||||
|         define_feature("widgets")  # note: private feature | ||||
|         define_feature("sql")  # note: private feature | ||||
|         # xml: default to on | ||||
| 
 | ||||
|         # Extra FEATURE_ toggles | ||||
|         features = [] | ||||
|         if "+dbus" in spec: | ||||
|             features.append("dbus_linked") | ||||
|         if "+network" in spec: | ||||
|             features += ["openssl_linked", "openssl", "libproxy"] | ||||
|         for k in features: | ||||
|             define("FEATURE_" + k, True) | ||||
| 
 | ||||
|         # INPUT_* arguments: undefined/no/qt/system | ||||
|         sys_inputs = ["doubleconversion"] | ||||
|         if "+sql" in spec: | ||||
|             sys_inputs.append("sqlite") | ||||
|         for k in sys_inputs: | ||||
|             define("INPUT_" + k, "system") | ||||
| 
 | ||||
|         # FEATURE_system_* arguments: on/off | ||||
|         sys_features = [ | ||||
|             ("doubleconversion", True), | ||||
|             ("pcre2", True), | ||||
|             ("zlib", True), | ||||
|             ("libb2", False), | ||||
|         ] | ||||
|         if "+gui" in spec: | ||||
|             sys_features += [ | ||||
|                 ("jpeg", True), | ||||
|                 ("png", True), | ||||
|                 ("sqlite", True), | ||||
|                 ("freetype", True), | ||||
|                 ("harfbuzz", True), | ||||
|                 ("textmarkdownreader", False), | ||||
|             ] | ||||
|             with when("platform=linux"): | ||||
|                 sys_features += [ | ||||
|                     ("xcb_xinput", True), | ||||
|                 ] | ||||
|         if "+network" in spec: | ||||
|             sys_features += [ | ||||
|                 ("proxies", True), | ||||
|             ] | ||||
|         for k, v in sys_features: | ||||
|             define("FEATURE_system_" + k, v) | ||||
| 
 | ||||
|         return args | ||||
							
								
								
									
										55
									
								
								var/spack/repos/builtin/packages/qt-declarative/package.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								var/spack/repos/builtin/packages/qt-declarative/package.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | ||||
| # 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) | ||||
| 
 | ||||
| 
 | ||||
| import os | ||||
| import shutil | ||||
| 
 | ||||
| from spack.package import * | ||||
| 
 | ||||
| 
 | ||||
| class QtDeclarative(CMakePackage): | ||||
|     """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"] | ||||
| 
 | ||||
|     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", | ||||
|     ) | ||||
| 
 | ||||
|     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: | ||||
|         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) | ||||
							
								
								
									
										67
									
								
								var/spack/repos/builtin/packages/qt-quick3d/package.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								var/spack/repos/builtin/packages/qt-quick3d/package.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,67 @@ | ||||
| # 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) | ||||
| 
 | ||||
| 
 | ||||
| import os | ||||
| import shutil | ||||
| 
 | ||||
| from spack.package import * | ||||
| 
 | ||||
| 
 | ||||
| class QtQuick3d(CMakePackage): | ||||
|     """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"] | ||||
| 
 | ||||
|     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:") | ||||
| 
 | ||||
|     _versions = ["6.3.2", "6.3.1", "6.3.0", "6.2.4", "6.2.3"] | ||||
|     for v in _versions: | ||||
|         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), | ||||
|             self.define("FEATURE_quick3d_assimp", True), | ||||
|             self.define("FEATURE_system_assimp", True), | ||||
|         ] | ||||
|         return args | ||||
							
								
								
									
										42
									
								
								var/spack/repos/builtin/packages/qt-quicktimeline/package.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								var/spack/repos/builtin/packages/qt-quicktimeline/package.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | ||||
| # 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 QtQuicktimeline(CMakePackage): | ||||
|     """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"] | ||||
| 
 | ||||
|     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: | ||||
|         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 | ||||
							
								
								
									
										56
									
								
								var/spack/repos/builtin/packages/qt-shadertools/package.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								var/spack/repos/builtin/packages/qt-shadertools/package.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| # 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) | ||||
| 
 | ||||
| 
 | ||||
| import os | ||||
| import shutil | ||||
| 
 | ||||
| from spack.package import * | ||||
| 
 | ||||
| 
 | ||||
| class QtShadertools(CMakePackage): | ||||
|     """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"] | ||||
| 
 | ||||
|     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("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: | ||||
|         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) | ||||
		Reference in New Issue
	
	Block a user
	 Wouter Deconinck
					Wouter Deconinck