* 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 * Pass --package-metadata on distros with supporting linkers (starting
with Debian trixie and Ubuntu noble). with Debian trixie and Ubuntu noble).
The package metadata is constructed from the environment variables 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. 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 -- 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 --- a/clang/lib/Driver/ToolChains/Linux.cpp
+++ b/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"); ExtraOpts.push_back("--build-id");
#endif #endif
+ if (Distro.IsDebian() && Distro >= Distro::DebianTrixie + if (Distro.IsDebian() && Distro >= Distro::DebianTrixie
+ || Distro.IsUbuntu() && Distro >= Distro::UbuntuNoble) + || Distro.IsUbuntu() && Distro >= Distro::UbuntuNoble)
+ { + {
+ const char *deb_build_os_release_id = getenv ("DEB_BUILD_OS_RELEASE_ID"); + const char pkg_metadata = getenv ("ELF_PACKAGE_METADATA");
+ 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 *no_pkg_metadata = getenv ("NO_PKG_METADATA"); + const char *no_pkg_metadata = getenv ("NO_PKG_METADATA");
+ +
+ if (no_pkg_metadata) { + if (no_pkg_metadata) {
+ // don't issue --package-metadata option + // 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 + // 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 { + } else {
+ ExtraOpts.push_back(std::string("--package-metadata={") + ExtraOpts.push_back(std::string("--package-metadata=") + pkg_metadata);
+ + "\"type\":\"deb\","
+ + "\"os\":\"" + deb_build_os_release_id + "\","
+ + "\"name\":\"" + deb_source + "\","
+ + "\"version\":\"" + deb_version + "\","
+ + "\"architecture\":\"" + deb_host_arch + "\""
+ + "}");
+ } + }
+ } + }
+ +