DEB: build the Release 2 scope instead of the impossible full tree
A full-tree build (ninja all) is not possible on the Release 2 tree: out-of-scope modules reference modules excluded from the scope (e.g. TopicEditorBase -> LtsScriptTimeline; 100+ CMakeLists references), and cmake --install hard-fails on targets that were never built. Align the DEB pipeline with its own description (binaries and libraries from release scope S): - make_rpm_ubuntu26_release2.py: new --build_targets option (space-separated CMake/Ninja targets; empty = legacy full tree). Step 1 builds only those targets; the runtime DEB is staged from the scoped build artifacts (bin/ + lib/) and packaged with build_deb nobuild, replacing the full-tree debuild/cmake-buildsystem path. - new_docker_build_release2.sh: pass the Release 2 group targets via --build_targets; exclude the driver build4* dirs from the staging tar (the DEB step builds its own tree; nothing consumes the driver build output). Fix two comments inside the single-quoted docker bash -c string that contained apostrophes, which broke word construction and failed bash -n. Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
1 parent
1646c5c71c
commit
646b1fc8ba
2 files changed
+58
-19
No files matched your search
@@ -408,8 +408,14 @@ def build_nobuild_package(name, source_dir, build_base, output_dir, version, bui
|
||||
validate_package_contents(name, manifest, allowed_patterns, forbidden_patterns)
|
||||
|
||||
|
||||
def build_all_debs(source_dir, output_dir, version, build_number, cmake_flags):
|
||||
"""Build the 5 DEB packages: build once from the source tree, then package."""
|
||||
def build_all_debs(source_dir, output_dir, version, build_number, cmake_flags,
|
||||
build_targets=""):
|
||||
"""Build the 5 DEB packages: build once from the source tree, then package.
|
||||
|
||||
build_targets: space-separated CMake/Ninja target list (the Release 2
|
||||
scope). When non-empty, only these targets are built; when empty, the
|
||||
legacy full-tree build is used.
|
||||
"""
|
||||
info("========================================")
|
||||
info("Building 5 DEB packages for Qt6 Release")
|
||||
info("========================================")
|
||||
@@ -420,8 +426,16 @@ def build_all_debs(source_dir, output_dir, version, build_number, cmake_flags):
|
||||
os.makedirs(build_base)
|
||||
release_dirs = ["TetraIF", "Z/src", "Lts/Common"]
|
||||
|
||||
# Step 1: build once from the full source tree
|
||||
info("\n=== Step 1: Building from full source tree ===")
|
||||
# Step 1: build the release scope from the source tree.
|
||||
# A full-tree build (ninja all) is NOT possible on the Release 2 tree:
|
||||
# out-of-scope modules reference modules excluded from the scope
|
||||
# (e.g. TopicEditorBase -> LtsScriptTimeline, 100+ CMakeLists files), so
|
||||
# their link rules fail. The release scope is built instead.
|
||||
info("\n=== Step 1: Building release scope ===")
|
||||
if build_targets:
|
||||
info(f"Targets: {build_targets}")
|
||||
else:
|
||||
warning("No target list given - building the full tree (legacy behavior)")
|
||||
build_dir = os.path.join(source_dir, "build")
|
||||
os.makedirs(build_dir, exist_ok=True)
|
||||
os.chdir(build_dir)
|
||||
@@ -432,27 +446,40 @@ def build_all_debs(source_dir, output_dir, version, build_number, cmake_flags):
|
||||
# breaks every Qt target. Ninja handles automoc correctly.
|
||||
run(f"cmake -G Ninja -DCMAKE_BUILD_TYPE=Release {cmake_flags} ..", "CMake configuration failed")
|
||||
info("Running build...")
|
||||
run(f"ninja -j$(nproc)", "Build failed")
|
||||
run(f"ninja -j$(nproc) {build_targets}".rstrip(), "Build failed")
|
||||
info("Build completed successfully")
|
||||
|
||||
# Package 1: qt6-release-runtime (binaries and libraries, built via debuild)
|
||||
# Package 1: qt6-release-runtime (binaries and libraries from release scope S)
|
||||
#
|
||||
# The artifacts are taken from the step-1 scoped build above. A debuild
|
||||
# with the cmake buildsystem is not an option here: dh_auto_install runs
|
||||
# 'cmake --install', which fails hard on every target that has an install
|
||||
# rule but was not built (file INSTALL cannot find), and a full build is
|
||||
# not possible on the Release 2 tree (see step 1).
|
||||
info("\n=== Building qt6-release-runtime ===")
|
||||
pkg1_dir = os.path.join(build_base, f"qt6-release-runtime-{version}")
|
||||
os.makedirs(pkg1_dir)
|
||||
# FULL source tree (needed for debian/rules cmake reference)
|
||||
copy_src_dir_to_dest_dir(source_dir, pkg1_dir)
|
||||
# Install from all component install paths: ALL -> bin/, lib/ ; SV/ ; WS/
|
||||
staged = 0
|
||||
for src_root, dst_root in ((os.path.join(build_dir, "bin"), "usr/bin"),
|
||||
(os.path.join(build_dir, "lib"), "usr/lib")):
|
||||
if not os.path.isdir(src_root):
|
||||
continue
|
||||
for entry in sorted(os.listdir(src_root)):
|
||||
src_path = os.path.join(src_root, entry)
|
||||
if not os.path.isfile(src_path):
|
||||
continue
|
||||
dst_dir = os.path.join(pkg1_dir, dst_root)
|
||||
os.makedirs(dst_dir, exist_ok=True)
|
||||
shutil.copy2(src_path, os.path.join(dst_dir, entry))
|
||||
staged += 1
|
||||
info(f"Staged {staged} artifacts from {build_dir}")
|
||||
install_lines_1 = [
|
||||
"usr/bin/* usr/bin/",
|
||||
"usr/lib/*.so* usr/lib/",
|
||||
"usr/SV/bin/* usr/bin/",
|
||||
"usr/SV/lib/*.so* usr/lib/",
|
||||
"usr/WS/bin/* usr/bin/",
|
||||
"usr/WS/lib/*.so* usr/lib/",
|
||||
"usr/lib/* usr/lib/",
|
||||
]
|
||||
build_deb(pkg_name="qt6-release-runtime", pkg_dir=pkg1_dir, output_dir=output_dir,
|
||||
version=version, build_number=build_number, cmake_flags=cmake_flags,
|
||||
skip_tests=True, install_lines=install_lines_1,
|
||||
version=version, build_number=build_number, nobuild=True,
|
||||
skip_shlibdeps=True, install_lines=install_lines_1,
|
||||
description="Qt6 Release Runtime - binaries and libraries from release scope S",
|
||||
section="libs")
|
||||
manifest_1 = create_manifest(output_dir, "qt6-release-runtime", pkg1_dir)
|
||||
@@ -517,6 +544,9 @@ def main():
|
||||
parser.add_argument("--cmake_build_flags", default="", help="CMake build flags")
|
||||
parser.add_argument("--build_number", default="1", help="Build number")
|
||||
parser.add_argument("--release_scope", action="store_true", help="Only include release scope files")
|
||||
parser.add_argument("--build_targets", default="",
|
||||
help="Space-separated CMake/Ninja targets to build "
|
||||
"(release scope); empty = full tree (legacy)")
|
||||
|
||||
args = parser.parse_args()
|
||||
info(f"Building {args.config} package for {args.project_name} v{args.version}")
|
||||
@@ -526,7 +556,8 @@ def main():
|
||||
info(f"Release scope: {args.release_scope}")
|
||||
build_all_debs(source_dir=args.source_dir, output_dir=args.output_dir,
|
||||
version=args.version, build_number=args.build_number,
|
||||
cmake_flags=args.cmake_build_flags)
|
||||
cmake_flags=args.cmake_build_flags,
|
||||
build_targets=args.build_targets)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in new issue
Block a user