* Pass --package-metadata on distros with supporting linkers (starting

with Debian trixie and Ubuntu noble).
    The package metadata is constructed from the environment variables
    ELF_PACKAGE_METADATA.
    Setting NO_PKG_METADATA=1 disables the generation of the package metadata.
This commit is contained in:
Matthias Klose 2024-07-11 09:29:12 +02:00
parent b49172df2b
commit e6f8456caa
2 changed files with 5 additions and 17 deletions

2
debian/changelog vendored
View File

@ -16,7 +16,7 @@ llvm-toolchain-snapshot (1:19~++20240529093513+2cfea14a57ad-1~exp2) UNRELEASED;
* Pass --package-metadata on distros with supporting linkers (starting
with Debian trixie and Ubuntu noble).
The package metadata is constructed from the environment variables
DEB_BUILD_OS_RELEASE_ID, DEB_SOURCE, DEB_VERSION and DEB_HOST_ARCH.
ELF_PACKAGE_METADATA.
Setting NO_PKG_METADATA=1 disables the generation of the package metadata.
-- Sylvestre Ledru <sylvestre@debian.org> Wed, 26 Jun 2024 21:18:27 +0200

View File

@ -1,33 +1,21 @@
--- a/clang/lib/Driver/ToolChains/Linux.cpp
+++ b/clang/lib/Driver/ToolChains/Linux.cpp
@@ -287,6 +287,33 @@ Linux::Linux(const Driver &D, const llvm
@@ -283,6 +283,21 @@ Linux::Linux(const Driver &D, const llvm
ExtraOpts.push_back("--build-id");
#endif
+ if (Distro.IsDebian() && Distro >= Distro::DebianTrixie
+ || Distro.IsUbuntu() && Distro >= Distro::UbuntuNoble)
+ {
+ const char *deb_build_os_release_id = getenv ("DEB_BUILD_OS_RELEASE_ID");
+ const char *deb_source = getenv ("DEB_SOURCE");
+ const char *deb_version = getenv ("DEB_VERSION");
+ const char *deb_host_arch = getenv ("DEB_HOST_ARCH");
+ const char pkg_metadata = getenv ("ELF_PACKAGE_METADATA");
+ const char *no_pkg_metadata = getenv ("NO_PKG_METADATA");
+
+ if (no_pkg_metadata) {
+ // don't issue --package-metadata option
+ } else if (!deb_build_os_release_id && !deb_source && !deb_version && !deb_host_arch) {
+ } else if (!pkg_metadata) {
+ // no environment set for package metadata
+ } else if (!(deb_build_os_release_id && deb_source && deb_version && deb_host_arch)) {
+ // incomple environment
+ // FIXME: emit error
+ } else {
+ ExtraOpts.push_back(std::string("--package-metadata={")
+ + "\"type\":\"deb\","
+ + "\"os\":\"" + deb_build_os_release_id + "\","
+ + "\"name\":\"" + deb_source + "\","
+ + "\"version\":\"" + deb_version + "\","
+ + "\"architecture\":\"" + deb_host_arch + "\""
+ + "}");
+ ExtraOpts.push_back(std::string("--package-metadata=") + pkg_metadata);
+ }
+ }
+