qtshadertools(0.2.5): generate Qt6ShaderToolsTools cmake package

Qt6's standalone module build installs qsb binary but does not generate
the Qt6ShaderToolsTools cmake wrapper package needed by cross-compile.
Added a Python generator that creates the minimal cmake package files
(Config, Targets, Targets-release, Precheck, AdditionalTargetInfo,
VersionlessTargets, Dependencies, ConfigVersion) following the exact
pattern of Qt6WaylandScannerTools from qtbase host build.
This commit is contained in:
2026-07-02 18:01:51 +03:00
parent 5b42305568
commit 217ca485b7
+281
View File
@@ -72,6 +72,287 @@ if [ ! -f "${HOST_BUILD}/libexec/qsb" ] || [ ! -f "${HOST_QST_STAMP}" ]; then
printf '%s\n' "6.11.1" > "${HOST_QST_STAMP}"
fi
# ============================================================
# Step 1b: Generate Qt6ShaderToolsTools cmake package
# The host build installs qsb but doesn't generate the cross-compile
# tools wrapper package. Qt's cmake framework expects
# find_package(Qt6ShaderToolsTools) to provide Qt6::qsb.
# We generate the minimal cmake files following the same pattern
# as Qt6WaylandScannerTools (from qtbase host build).
# ============================================================
QSB_TOOLS_DIR="${HOST_BUILD}/lib/cmake/Qt6ShaderToolsTools"
if [ ! -f "${QSB_TOOLS_DIR}/Qt6ShaderToolsToolsConfig.cmake" ]; then
mkdir -p "${QSB_TOOLS_DIR}"
python3 - <<'PYGEN'
import os
from pathlib import Path
host = Path(os.environ["HOST_BUILD"])
qsb_path = host / "bin" / "qsb"
tools_dir = host / "lib" / "cmake" / "Qt6ShaderToolsTools"
tools_dir.mkdir(parents=True, exist_ok=True)
pkg_name = "ShaderToolsTools"
ns = "Qt6"
target = "qsb"
# Config.cmake
(tools_dir / f"{ns}{pkg_name}Config.cmake").write_text(f"""\
# Copyright (C) 2024 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
get_filename_component(PACKAGE_PREFIX_DIR "${{CMAKE_CURRENT_LIST_DIR}}/../../../" ABSOLUTE)
macro(set_and_check _var _file)
set(${{_var}} "${{_file}}")
if(NOT EXISTS "${{_file}}")
message(FATAL_ERROR "File or directory ${{_file}} referenced by variable ${{_var}} does not exist !")
endif()
endmacro()
macro(check_required_components _NAME)
foreach(comp ${{{_NAME}_FIND_COMPONENTS}})
if(NOT ${{_NAME}}_${{comp}}_FOUND)
if(${{_NAME}}_FIND_REQUIRED_${{comp}})
set(${{_NAME}}_FOUND FALSE)
endif()
endif()
endforeach()
endmacro()
cmake_minimum_required(VERSION 3.16...3.21)
include(CMakeFindDependencyMacro)
if(EXISTS "${{CMAKE_CURRENT_LIST_DIR}}/{ns}{pkg_name}Dependencies.cmake")
include("${{CMAKE_CURRENT_LIST_DIR}}/{ns}{pkg_name}Dependencies.cmake")
endif()
if(NOT DEFINED "{ns}{pkg_name}_FOUND")
set("{ns}{pkg_name}_FOUND" TRUE)
endif()
set(__qt_{pkg_name}_should_include_targets_code "TRUE")
if(__qt_{pkg_name}_should_include_targets_code)
include("${{CMAKE_CURRENT_LIST_DIR}}/{ns}{pkg_name}TargetsPrecheck.cmake")
endif()
if(NOT __qt_{pkg_name}_skip_include_targets_file
AND {ns}{pkg_name}_FOUND
AND __qt_{pkg_name}_should_include_targets_code
)
include("${{CMAKE_CURRENT_LIST_DIR}}/{ns}{pkg_name}Targets.cmake")
include("${{CMAKE_CURRENT_LIST_DIR}}/{ns}{pkg_name}AdditionalTargetInfo.cmake")
if(NOT QT_NO_CREATE_VERSIONLESS_TARGETS)
include("${{CMAKE_CURRENT_LIST_DIR}}/{ns}{pkg_name}VersionlessTargets.cmake")
endif()
set(__qt_{pkg_name}_targets_file_included ON)
endif()
if(__qt_{pkg_name}_targets_file_included AND {ns}{pkg_name}_FOUND)
__qt_internal_promote_target_to_global({ns}::{target})
endif()
set({ns}{pkg_name}_TARGETS "{ns}::{target}")
""")
# Targets.cmake
(tools_dir / f"{ns}{pkg_name}Targets.cmake").write_text(f"""\
# Generated by Red Bear OS qtshadertools recipe
if("${{CMAKE_MAJOR_VERSION}}.${{CMAKE_MINOR_VERSION}}" LESS 2.8)
message(FATAL_ERROR "CMake >= 2.8.3 required")
endif()
if(CMAKE_VERSION VERSION_LESS "2.8.3")
message(FATAL_ERROR "CMake >= 2.8.3 required")
endif()
cmake_policy(PUSH)
cmake_policy(VERSION 2.8.3...4.1)
set(CMAKE_IMPORT_FILE_VERSION 1)
set(_cmake_targets_defined "")
set(_cmake_targets_not_defined "")
set(_cmake_expected_targets "")
foreach(_cmake_expected_target IN ITEMS {ns}::{target})
list(APPEND _cmake_expected_targets "${{_cmake_expected_target}}")
if(TARGET "${{_cmake_expected_target}}")
list(APPEND _cmake_targets_defined "${{_cmake_expected_target}}")
else()
list(APPEND _cmake_targets_not_defined "${{_cmake_expected_target}}")
endif()
endforeach()
unset(_cmake_expected_target)
if(_cmake_targets_defined STREQUAL _cmake_expected_targets)
unset(_cmake_targets_defined)
unset(_cmake_targets_not_defined)
unset(_cmake_expected_targets)
unset(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)
return()
endif()
if(NOT _cmake_targets_defined STREQUAL "")
message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.")
endif()
unset(_cmake_targets_defined)
unset(_cmake_targets_not_defined)
unset(_cmake_expected_targets)
get_filename_component(_IMPORT_PREFIX "${{CMAKE_CURRENT_LIST_FILE}}" PATH)
get_filename_component(_IMPORT_PREFIX "${{_IMPORT_PREFIX}}" PATH)
get_filename_component(_IMPORT_PREFIX "${{_IMPORT_PREFIX}}" PATH)
get_filename_component(_IMPORT_PREFIX "${{_IMPORT_PREFIX}}" PATH)
if(_IMPORT_PREFIX STREQUAL "/")
set(_IMPORT_PREFIX "")
endif()
# Create imported target {ns}::{target}
add_executable({ns}::{target} IMPORTED)
set_target_properties({ns}::{target} PROPERTIES
COMPATIBLE_INTERFACE_STRING "QT_MAJOR_VERSION"
INTERFACE_QT_MAJOR_VERSION "6"
)
# Load information for each installed configuration.
file(GLOB _cmake_config_files "${{CMAKE_CURRENT_LIST_DIR}}/{ns}{pkg_name}Targets-*.cmake")
foreach(_cmake_config_file IN LISTS _cmake_config_files)
include("${{_cmake_config_file}}")
endforeach()
unset(_cmake_config_file)
unset(_cmake_config_files)
set(_IMPORT_PREFIX)
set(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)
""")
# Targets-release.cmake
rel = tools_dir / f"{ns}{pkg_name}Targets-release.cmake"
rel.write_text(f"""\
# Generated by Red Bear OS qtshadertools recipe
# Import target "{ns}::{target}" for configuration "Release"
set_property(TARGET {ns}::{target} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties({ns}::{target} PROPERTIES
IMPORTED_LOCATION_RELEASE "{qsb_path}"
)
set(_cmake_import_check_targets "{ns}::{target}")
set(_cmake_import_check_files_for_{ns}::{target} "{qsb_path}")
""")
# Precheck
(tools_dir / f"{ns}{pkg_name}TargetsPrecheck.cmake").write_text(f"""\
_qt_internal_should_include_targets(
TARGETS {target}
NAMESPACE {ns}::
OUT_VAR_SHOULD_SKIP __qt_{pkg_name}_skip_include_targets_file
)
""")
# AdditionalTargetInfo
(tools_dir / f"{ns}{pkg_name}AdditionalTargetInfo.cmake").write_text(f"""\
# Additional target information for {ns}{pkg_name}
if(NOT DEFINED QT_DEFAULT_IMPORT_CONFIGURATION)
set(QT_DEFAULT_IMPORT_CONFIGURATION RELEASE)
endif()
get_target_property(_qt_imported_location {ns}::{target} IMPORTED_LOCATION_RELEASE)
get_target_property(_qt_imported_location_default {ns}::{target} IMPORTED_LOCATION_${{QT_DEFAULT_IMPORT_CONFIGURATION}})
set_property(TARGET {ns}::{target} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELWITHDEBINFO)
if(_qt_imported_location)
set_property(TARGET {ns}::{target} PROPERTY IMPORTED_LOCATION_RELWITHDEBINFO "${{_qt_imported_location}}")
endif()
set_property(TARGET {ns}::{target} APPEND PROPERTY IMPORTED_CONFIGURATIONS MINSIZEREL)
if(_qt_imported_location)
set_property(TARGET {ns}::{target} PROPERTY IMPORTED_LOCATION_MINSIZEREL "${{_qt_imported_location}}")
endif()
if(_qt_imported_location_default)
set_property(TARGET {ns}::{target} PROPERTY IMPORTED_LOCATION "${{_qt_imported_location_default}}")
endif()
unset(_qt_imported_location)
unset(_qt_imported_location_default)
""")
# VersionlessTargets
(tools_dir / f"{ns}{pkg_name}VersionlessTargets.cmake").write_text(f"""\
# Copyright (C) 2024 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
foreach(__qt_tool {target})
if(NOT TARGET Qt::${{__qt_tool}} AND TARGET {ns}::${{__qt_tool}})
add_executable(Qt::${{__qt_tool}} IMPORTED GLOBAL)
foreach(__qt_imported_location_config
IMPORTED_LOCATION
IMPORTED_LOCATION_RELEASE
IMPORTED_LOCATION_RELWITHDEBINFO
IMPORTED_LOCATION_MINSIZEREL
IMPORTED_LOCATION_DEBUG)
get_target_property(__qt_imported_location
{ns}::${{__qt_tool}} ${{__qt_imported_location_config}})
if(__qt_imported_location AND EXISTS "${{__qt_imported_location}}")
break()
endif()
endforeach()
set_target_properties(Qt::${{__qt_tool}}
PROPERTIES IMPORTED_LOCATION "${{__qt_imported_location}}")
endif()
endforeach()
""")
# Dependencies
(tools_dir / f"{ns}{pkg_name}Dependencies.cmake").write_text(f"""\
# Copyright (C) 2024 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
set({ns}{pkg_name}_FOUND TRUE)
""")
# ConfigVersionImpl
(tools_dir / f"{ns}{pkg_name}ConfigVersionImpl.cmake").write_text(f"""\
# Copyright (C) 2024 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
set(PACKAGE_VERSION "6.11.1")
if(PACKAGE_FIND_VERSION_EXACT)
if(PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION)
set(PACKAGE_VERSION_COMPATIBLE TRUE)
else()
set(PACKAGE_VERSION_COMPATIBLE FALSE)
endif()
else()
if(PACKAGE_FIND_VERSION VERSION_LESS_EQUAL PACKAGE_VERSION)
set(PACKAGE_VERSION_COMPATIBLE TRUE)
else()
set(PACKAGE_VERSION_COMPATIBLE FALSE)
endif()
endif()
if(NOT PACKAGE_VERSION_COMPATIBLE)
set(PACKAGE_VERSION_UNSUITABLE TRUE)
endif()
""")
# ConfigVersion
(tools_dir / f"{ns}{pkg_name}ConfigVersion.cmake").write_text(f"""\
# Copyright (C) 2024 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
include("${{CMAKE_CURRENT_LIST_DIR}}/{ns}{pkg_name}ConfigVersionImpl.cmake")
set(__qt_disable_package_version_check FALSE)
if(__qt_disable_package_version_check)
set(PACKAGE_VERSION_COMPATIBLE TRUE)
unset(PACKAGE_VERSION_UNSUITABLE)
endif()
unset(__qt_disable_package_version_check)
""")
print(f"Generated Qt6ShaderToolsTools cmake package at {tools_dir}")
PYGEN
fi
# ============================================================
# Step 2: Cross-compile qtshadertools for Redox
# ============================================================