diff options
Diffstat (limited to 'scripts/obs/lib/metapkg.py')
-rw-r--r-- | scripts/obs/lib/metapkg.py | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/scripts/obs/lib/metapkg.py b/scripts/obs/lib/metapkg.py new file mode 100644 index 0000000..8a9922d --- /dev/null +++ b/scripts/obs/lib/metapkg.py @@ -0,0 +1,107 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright 2022 sysmocom - s.f.m.c. GmbH <info@sysmocom.de> +import os +import lib +import lib.config +import lib.debian +import lib.rpm_spec + + +def get_conflicts(pkgname): + ret = [] + for f in lib.config.feeds: + if "osmocom-{f}" == pkgname: + continue + ret += [f"osmocom-{f}"] + return ret + + +def prepare_source_dir(pkgname): + path = f"{lib.config.path_cache}/{pkgname}" + + if os.path.exists(path): + lib.run_cmd(["rm", "-rf", path]) + + os.makedirs(f"{path}/debian") + os.makedirs(f"{path}/contrib") + + +def generate_debian_pkg(pkgname, version): + feed = lib.args.feed + path = f"{lib.config.path_cache}/{pkgname}" + conflicts = get_conflicts(pkgname) + + with open(f"{path}/debian/control", "w") as f: + f.write(f"Source: {pkgname}\n") + f.write("Section: unknown\n") + f.write("Priority: optional\n") + f.write("Maintainer: Osmocom OBS scripts <info@osmocom.org>\n") + f.write("Build-Depends: debhelper (>= 10)\n") + f.write("Standards-Version: 3.9.8\n") + f.write("\n") + f.write(f"Package: {pkgname}\n") + f.write("Depends: ${misc:Depends}\n") + f.write("Architecture: any\n") + f.write(f"Conflicts: {', '.join(conflicts)}\n") + f.write(f"Description: Dummy package, conflicts with {conflicts}\n") + + with open(f"{path}/debian/changelog", "w") as f: + f.write(f"{pkgname} ({version}) unstable; urgency=medium\n") + f.write("\n") + f.write(f" * Dummy package, which conflicts with: {conflicts}\n") + f.write("\n") + f.write(" -- Osmocom OBS scripts <info@osmocom.org> Tue, 25 Jul 2022" + " 15:48:00 +0200\n") + + with open(f"{path}/debian/rules", "w") as f: + f.write("#!/usr/bin/make -f\n") + f.write("%:\n") + f.write("\tdh $@\n") + + lib.run_cmd(["chmod", "+x", f"{path}/debian/rules"]) + + with open(f"{path}/debian/compat", "w") as f: + f.write("10\n") + + +def generate_rpm_spec(pkgname, version): + feed = lib.args.feed + print(f"{pkgname}: generating rpm spec file") + path = f"{lib.config.path_cache}/{pkgname}/contrib/{pkgname}.spec.in" + conflicts = get_conflicts(pkgname) + + with open(path, "w") as f: + f.write(f"Name: {pkgname}\n") + f.write(f"Version: {version}\n") + f.write(f"Summary: Dummy package, conflicts with: {conflicts}\n") + f.write("Release: 0\n") + f.write("License: AGPL-3.0-or-later\n") + f.write("Group: Hardware/Mobile\n") + for conflict in conflicts: + f.write(f"Conflicts: {conflict}\n") + f.write("%description\n") + f.write(f"Dummy package, which conflicts with: {conflicts}\n") + f.write("%files\n") + + +def build(): + feed = lib.args.feed + pkgname = lib.args.conflict_pkgname or f"osmocom-{feed}" + conflict_version = lib.args.conflict_version + version = conflict_version if conflict_version else "1.0.0" + print(f"{pkgname}: generating meta package {version}") + + prepare_source_dir(pkgname) + generate_debian_pkg(pkgname, version) + + os.makedirs(lib.get_output_path(pkgname)) + lib.remove_cache_extra_files() + + lib.debian.build_source_package(pkgname) + lib.debian.move_files_to_output(pkgname) + + generate_rpm_spec(pkgname, version) + lib.rpm_spec.copy_to_output(pkgname) + + lib.remove_cache_extra_files() + return version |