summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaide <github@maide.ca>2024-09-26 13:00:25 -0400
committerViorel Munteanu <ceamac@gentoo.org>2024-09-27 20:07:21 +0300
commitd25b3f6cfcf28716f030b7a7fea3206a5fc4dffd (patch)
treec32aa1f6b46c5e7f282547431980819b1ea5b7fe /sys-boot
parentapp-emulation/virtualbox-extpack-oracle: add 7.1.2 (diff)
downloadgentoo-d25b3f6cfcf28716f030b7a7fea3206a5fc4dffd.tar.gz
gentoo-d25b3f6cfcf28716f030b7a7fea3206a5fc4dffd.tar.bz2
gentoo-d25b3f6cfcf28716f030b7a7fea3206a5fc4dffd.zip
sys-boot/gnu-efi: Fix compile when LLVM `binutils-plugin` USE flag is set
LLVM's objcopy is being used instead of the GNU version when `binutils-plugin` is enabled. I tried to avoid this by explictly using the GNU path for objcopy when our initial test fails. Let me know if this isn't acceptable, or if you need me to open a new bug for this. It was basically the same repo as the linked issue, but the fix did not work, as `which objcopy` returns '/usr/lib/llvm/18/bin/objcopy' instead of '/usr/bin/objcopy'. Bug: https://bugs.gentoo.org/931792 Signed-off-by: Maide <github@maide.ca> Closes: https://github.com/gentoo/gentoo/pull/38785 Signed-off-by: Viorel Munteanu <ceamac@gentoo.org>
Diffstat (limited to 'sys-boot')
-rw-r--r--sys-boot/gnu-efi/gnu-efi-3.0.18-r3.ebuild10
-rw-r--r--sys-boot/gnu-efi/gnu-efi-3.0.18-r5.ebuild10
2 files changed, 20 insertions, 0 deletions
diff --git a/sys-boot/gnu-efi/gnu-efi-3.0.18-r3.ebuild b/sys-boot/gnu-efi/gnu-efi-3.0.18-r3.ebuild
index 511b4e30b24d..26cfa7b58d27 100644
--- a/sys-boot/gnu-efi/gnu-efi-3.0.18-r3.ebuild
+++ b/sys-boot/gnu-efi/gnu-efi-3.0.18-r3.ebuild
@@ -42,6 +42,16 @@ check_and_set_objcopy() {
# llvm-objcopy does not support EFI target, try to use binutils objcopy or fail
tc-export OBJCOPY
OBJCOPY="${OBJCOPY/llvm-/}"
+ # Test OBJCOPY to see if it supports EFI targets, and return if it does
+ LC_ALL=C "${OBJCOPY}" --help | grep -q '\<pei-' && return 0
+ # If OBJCOPY does not support EFI targets, it is possible that the 'objcopy' on our path is
+ # still LLVM if the 'binutils-plugin' USE flag is set. In this case, we check to see if the
+ # '(prefix)/usr/bin/objcopy' binary is available (it should be, it's a dependency), and if
+ # so, we use the absolute path explicitly.
+ local binutils_objcopy="${EPREFIX}"/usr/bin/"${OBJCOPY}"
+ if [[ -e "${binutils_objcopy}" ]]; then
+ OBJCOPY="${binutils_objcopy}"
+ fi
LANG=C LC_ALL=C "${OBJCOPY}" --help | grep -q '\<pei-' || die "${OBJCOPY} (objcopy) does not support EFI target"
fi
}
diff --git a/sys-boot/gnu-efi/gnu-efi-3.0.18-r5.ebuild b/sys-boot/gnu-efi/gnu-efi-3.0.18-r5.ebuild
index adfad0c0f98e..d3d5d12d57b7 100644
--- a/sys-boot/gnu-efi/gnu-efi-3.0.18-r5.ebuild
+++ b/sys-boot/gnu-efi/gnu-efi-3.0.18-r5.ebuild
@@ -42,6 +42,16 @@ check_and_set_objcopy() {
# llvm-objcopy does not support EFI target, try to use binutils objcopy or fail
tc-export OBJCOPY
OBJCOPY="${OBJCOPY/llvm-/}"
+ # Test OBJCOPY to see if it supports EFI targets, and return if it does
+ LC_ALL=C "${OBJCOPY}" --help | grep -q '\<pei-' && return 0
+ # If OBJCOPY does not support EFI targets, it is possible that the 'objcopy' on our path is
+ # still LLVM if the 'binutils-plugin' USE flag is set. In this case, we check to see if the
+ # '(prefix)/usr/bin/objcopy' binary is available (it should be, it's a dependency), and if
+ # so, we use the absolute path explicitly.
+ local binutils_objcopy="${EPREFIX}"/usr/bin/"${OBJCOPY}"
+ if [[ -e "${binutils_objcopy}" ]]; then
+ OBJCOPY="${binutils_objcopy}"
+ fi
if ! use arm && ! use riscv; then
# bug #939338
# objcopy does not understand PE/COFF on these arches: arm32, riscv64 and mips64le