diff --git a/make_rpm_ubuntu26.py b/make_rpm_ubuntu26.py index 2f24e2f..aa2113e 100755 --- a/make_rpm_ubuntu26.py +++ b/make_rpm_ubuntu26.py @@ -85,16 +85,72 @@ def remove_directory(dest_dir): shutil.rmtree(dest_dir) -def copy_src_dir_to_dest_dir(srcdir, dstdir, perm=None, with_subdirs=True): +def copy_src_dir_to_dest_dir(srcdir, dstdir, perm=None, with_subdirs=True, release_scope=False): + """Copy source directory to destination directory. + + Args: + srcdir: Source directory path + dstdir: Destination directory path + perm: Optional permissions to set + with_subdirs: Whether to copy subdirectories + release_scope: If True, only copy release scope files (TetraIF, Z/src, Lts/Common) + """ info("--------------------------------") info(f"Copying {srcdir} to {dstdir}") + if release_scope: + info("Release scope mode: only copying TetraIF, Z/src, Lts/Common") info("--------------------------------") while srcdir.endswith("/"): srcdir = srcdir[:-1] + # Release scope directories and files to include + release_items = [ + 'TetraIF', + 'Z/src', + 'Lts/Common', + 'CMakeLists.txt', + 'cmake', + 'tests', + 'new_docker_build.sh', + 'specs', + 'include', + 'translations', + 'CTestCustom.ctest', + '.gitignore', + '.envrc', + 'doxygen', + 'external', + 'src' + ] + if with_subdirs: for root, dirs, files in os.walk(srcdir): + # Filter directories for release scope + if release_scope: + rel_root = os.path.relpath(root, srcdir) + if rel_root == '.': + # At root level, only keep release scope directories + dirs[:] = [d for d in dirs if d in release_items or any(d == item.split('/')[0] for item in release_items if '/' in item)] + elif rel_root == 'Z': + # In Z directory, only keep src + dirs[:] = [d for d in dirs if d == 'src'] + elif rel_root == 'Lts': + # In Lts directory, only keep Common + dirs[:] = [d for d in dirs if d == 'Common'] + elif rel_root.startswith('Lts/Common'): + # Keep all subdirectories under Lts/Common + pass + elif rel_root.startswith('Z/src'): + # Keep all subdirectories under Z/src + pass + elif rel_root == 'TetraIF': + # Keep all subdirectories under TetraIF + pass + else: + # Skip other directories + dirs[:] = [] + tmpdir = root.replace(srcdir, dstdir) debug(f"dstdir = '{tmpdir}'") if not os.path.exists(tmpdir): @@ -103,6 +159,10 @@ def copy_src_dir_to_dest_dir(srcdir, dstdir, perm=None, with_subdirs=True): if perm: os.chmod(tmpdir, perm | stat.S_IREAD | stat.S_IRGRP | stat.S_IROTH) for file in files: + # Skip non-release files at root level + if release_scope and rel_root == '.': + if file not in release_items and not any(file == item.split('/')[0] for item in release_items if '/' in item): + continue if os.path.isfile(tmpdir) and os.path.exists(tmpdir): os.remove(tmpdir) shutil.copy(os.path.join(root, file), tmpdir) @@ -120,6 +180,8 @@ def copy_src_dir_to_dest_dir(srcdir, dstdir, perm=None, with_subdirs=True): for f in os.listdir(srcdir): if os.path.isdir(f): continue + if release_scope and f not in release_items: + continue shutil.copy(os.path.join(srcdir, f), os.path.join(dstdir, f)) @@ -187,10 +249,22 @@ override_dh_auto_install: info(f"Created {rules_file}") -def build_deb(source_dir, output_dir, project_name, version, build_number, cmake_flags): - """Build DEB package using debuild""" +def build_deb(source_dir, output_dir, project_name, version, build_number, cmake_flags, release_scope=False): + """Build DEB package using debuild + + Args: + source_dir: Source directory path + output_dir: Output directory for packages + project_name: Project name (qatar|ahtc|guez) + version: Version string + build_number: Build number + cmake_flags: CMake build flags + release_scope: If True, only include release scope files (TetraIF, Z/src, Lts/Common) + """ info("--------------------------------") info(f"Building DEB package for {project_name} {version}-{build_number}") + if release_scope: + info("Release scope mode: only packaging TetraIF, Z/src, Lts/Common") info("--------------------------------") # Create output directory @@ -204,7 +278,7 @@ def build_deb(source_dir, output_dir, project_name, version, build_number, cmake # Copy source to build directory pkg_name = f"legatus-{project_name.lower()}" pkg_dir = os.path.join(build_base, f"{pkg_name}-{version}") - copy_src_dir_to_dest_dir(source_dir, pkg_dir) + copy_src_dir_to_dest_dir(source_dir, pkg_dir, release_scope=release_scope) # Create debian directory deb_dir = os.path.join(pkg_dir, "debian") @@ -266,12 +340,14 @@ def main(): parser.add_argument("--output_dir", required=True, help="Output directory for packages") 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 (TetraIF, Z/src, Lts/Common)") args = parser.parse_args() info(f"Building {args.config} package for {args.project_name} v{args.version}") info(f"Output directory: {args.output_dir}") info(f"CMake flags: {args.cmake_build_flags}") + info(f"Release scope: {args.release_scope}") # Determine source directory (parent of rpmbuild folder) script_dir = os.path.dirname(os.path.abspath(__file__)) @@ -285,7 +361,8 @@ def main(): project_name=args.project_name, version=args.version, build_number=args.build_number, - cmake_flags=args.cmake_build_flags + cmake_flags=args.cmake_build_flags, + release_scope=args.release_scope ) info("Build completed successfully!")