diff --git a/debian/changelog b/debian/changelog index 8795aca9..63e75e80 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,14 @@ +llvm-toolchain-18 (1:18.1.8-2~exp3) UNRELEASED; urgency=medium + + [ Matthias Klose ] + * 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. + Setting NO_PKG_METADATA=1 disables the generation of the package metadata. + + -- Matthias Klose Sun, 07 Jul 2024 16:40:35 +0200 + llvm-toolchain-18 (1:18.1.8-2~exp2) experimental; urgency=medium * Change the LLVM_HOST_TRIPLE option from i386-linux-gnu to diff --git a/debian/patches/link-with-package-metadata.diff b/debian/patches/link-with-package-metadata.diff new file mode 100644 index 00000000..a9a8fc01 --- /dev/null +++ b/debian/patches/link-with-package-metadata.diff @@ -0,0 +1,36 @@ +--- 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 + 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 *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) { ++ // 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 + "\"" ++ + "}"); ++ } ++ } ++ + // The selection of paths to try here is designed to match the patterns which + // the GCC driver itself uses, as this is part of the GCC-compatible driver. + // This was determined by running GCC in a fake filesystem, creating all diff --git a/debian/patches/series b/debian/patches/series index ea23143a..83715bf3 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -153,3 +153,4 @@ libsanitizer-timebits.diff ubuntu-releases.patch clang-record-gcc-switches-by-default.patch rename-libllvm.diff +link-with-package-metadata.diff