From 226596177c63c3dc180b5aeda45fe3b18706e877 Mon Sep 17 00:00:00 2001 From: Maxwell G Date: Aug 26 2022 21:34:54 +0000 Subject: Add RPM generator for bundled Provides Any modules.txt file within a subdirectory of /usr/share/licenses will be processed. While this isn't strictly a license file, it contains information about the other sources that are included in the package. Packages can include this file alongside the license files from the vendored libraries as a summary of sorts. Alternatively, the modules.txt can be marked with `%ghost`, which is sufficient for the generator. There are not any other good places to install these files. %_docdir is not an option, as generators do not search in that directory. --- diff --git a/bin/vendor2provides.py b/bin/vendor2provides.py new file mode 100755 index 0000000..7406721 --- /dev/null +++ b/bin/vendor2provides.py @@ -0,0 +1,54 @@ +#!/usr/bin/python3 -s + +# Parse modules.txt files into rpm .spec file Provides for bundled dependencies. +# Written by Fabio "decathorpe" Valentini for +# the fedora syncthing package: https://src.fedoraproject.org/rpms/syncthing +# SPDX-License-Identifier: CC0-1.0 OR Unlicense + +# Modified by @gotmax23 to be used as a dependency generator +# SPDX-License-Identifier: GPL-3.0-or-later +# SPDX-FileCopyrightText: 2022 Maxwell G + +import os +import re +import sys + + +def process(path: str): + with open(path, encoding="utf-8") as file: + contents = file.read() + + lines = contents.split("\n") + + # dependencies = filter lines for "# package version" + dependencies = list(filter(lambda line: line.startswith("# "), lines)) + + # parse vendored dependencies into (import path, version) pairs + vendored = list() + # Handle => style replace directives + replace_regex = re.compile("^.+( v[0-9-\.]+)? => ") + for dep in dependencies: + ipath, version = replace_regex.sub("", dep[2:]).split(" ")[:2] + + # check for git snapshots + if len(version) > 27: + # return only 7 digits of git commit hash + version = version[-12:-1][0:7] + else: + # strip off leading "v" + version = version.lstrip("v") + + vendored.append((ipath, version)) + + for ipath, version in vendored: + print(f"bundled(golang({ipath})) = {version}") + + +def main() -> None: + files = sys.stdin.read().splitlines() + for file in files: + process(file) + + +if __name__ == "__main__": + main() diff --git a/rpm/fileattrs/go_mod_vendor.attr b/rpm/fileattrs/go_mod_vendor.attr new file mode 100644 index 0000000..c796259 --- /dev/null +++ b/rpm/fileattrs/go_mod_vendor.attr @@ -0,0 +1,5 @@ +# SPDX-FileCopyrightText: 2022 Maxwell G +# SPDX-License-Identifier: GPL-3.0-or-later + +%__go_mod_vendor_path ^%{_defaultlicensedir}(/[^/]+)+/modules.txt$ +%__go_mod_vendor_provides %{_rpmconfigdir}/redhat/vendor2provides.py