main/abuild: parse $ORIGIN in rpaths correctly

Since the openjdk8 package has been fixed in !75196 to be compatible
with this patch it can be re-applied again.

Reapplies 2a70c66a023
This commit is contained in:
Sertonix 2025-01-21 16:56:05 +01:00 committed by Natanael Copa
parent c98d73540c
commit 133bc109e2
2 changed files with 115 additions and 1 deletions

View File

@ -0,0 +1,112 @@
From ed79001072ac39da6dd24fe934a7cc51a27fd599 Mon Sep 17 00:00:00 2001
From: Sertonix <sertonix@posteo.net>
Date: Thu, 24 Oct 2024 20:00:29 +0200
Subject: [PATCH] abuild: parse $ORIGIN in rpaths correctly
---
abuild.in | 18 ++++++++++++++----
tests/abuild_test | 47 +++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 61 insertions(+), 4 deletions(-)
diff --git a/abuild.in b/abuild.in
index b834e73..1202a95 100644
--- a/abuild.in
+++ b/abuild.in
@@ -1244,15 +1244,25 @@ prepare_metafiles() {
}
prepare_trace_rpaths() {
- local dir=${subpkgdir:-$pkgdir}
local etype= soname= file= sover=
[ "${subpkgarch:-$pkgarch}" = "noarch" ] && return 0
options_has "!tracedeps" && return 0
# lets tell all the places we should look for .so files - all rpaths
- scanelf --quiet --recursive --rpath "$dir" \
- | sed -e 's/[[:space:]].*//' -e 's/:/\n/' | sort -u \
- >"$controldir"/.rpaths
+ (
+ cd "${subpkgdir:-$pkgdir}"
+ scanelf --quiet --recursive --rpath .
+ ) | awk -F '[:[:space:]]+' '{
+ sub(/^\./, "", $NF);
+ sub("/[^/]*$", "", $NF);
+ for (i = 1; i < NF; i++) {
+ # $ORIGIN means relative to the binary
+ gsub("\\$ORIGIN", $NF, $i);
+ gsub("\\${ORIGIN}", $NF, $i);
+ printf("%s\n", $i);
+ }
+ }' | sort -u >"$controldir"/.rpaths
if grep -q -x '/usr/lib' "$controldir"/.rpaths; then
+ # FIXME silence warning when $ORIGIN was used
warning "Redundant /usr/lib in rpath found"
fi
if grep '^/home/' "$controldir"/.rpaths; then
diff --git a/tests/abuild_test b/tests/abuild_test
index e87c65a..6c315b3 100755
--- a/tests/abuild_test
+++ b/tests/abuild_test
@@ -18,6 +18,7 @@ init_tests \
abuild_py_providers_creation \
abuild_py_dependency_scan \
abuild_py_dependency_scan_conflict \
+ abuild_rpaths \
abuild_reject_init_with_improper_shebang \
abuild_valid_pkgnames \
abuild_invalid_pkgnames \
@@ -394,6 +395,52 @@ abuild_py_dependency_scan_conflict_body() {
abuild rootpkg
}
+abuild_rpaths_body() {
+ init_keys
+
+ mkdir -p bin
+ cat > bin/scanelf <<-EOF
+ #!/bin/sh
+ for i; do
+ [ "\$i" = --rpath ] || continue
+ echo "\$ABUILD_RPATH" /usr/lib/pkg/base.so
+ break
+ done
+ EOF
+ chmod +x bin/scanelf
+ PATH="$PWD/bin:$PATH"
+
+ mkdir -p testrepo/pkg
+ cd testrepo/pkg
+ cat > APKBUILD <<-EOF
+ maintainer="Natanael Copa <ncopa@alpinelinux.org>"
+ pkgname="pkg"
+ pkgver=1.0
+ pkgrel=0
+ pkgdesc="Dummy test package"
+ url="https://gitlab.alpinelinux.org/alpine/aports"
+ arch="all"
+ license="MIT"
+ options="!check !strip !textrels !archcheck"
+
+ package() {
+ mkdir -p "\$pkgdir"/usr/lib
+ touch "\$pkgdir"/usr/lib/libfoo.so.1
+ }
+ EOF
+ ABUILD_RPATH='/usr/lib/foo' abuild rootpkg || atf_fail "abuild failed"
+ atf_check -s exit:0 \
+ -o match:"/usr/lib/foo" \
+ cat pkg/.control.pkg/.rpaths
+ ABUILD_RPATH='$ORIGIN/bar:${ORIGIN}/../baf' pkgbasedir=$PWD/pkg abuild rootpkg || atf_fail "abuild failed"
+ atf_check -s exit:0 \
+ -o match:"/usr/lib/pkg/bar" \
+ -o match:"/usr/lib/pkg/../baf" \
+ cat pkg/.control.pkg/.rpaths
+ ABUILD_RPATH='/home/builder' atf_check -s exit:1 -o ignore \
+ -e match:"ERROR:.*: Has /home/... in rpath" abuild rootpkg
+}
+
abuild_reject_init_with_improper_shebang_body() {
mkdir invalid-initd
cd invalid-initd
--
2.47.0

View File

@ -2,7 +2,7 @@
pkgname=abuild
pkgver=3.14.1
_ver=${pkgver%_git*}
pkgrel=5
pkgrel=6
pkgdesc="Script to build Alpine Packages"
url="https://gitlab.alpinelinux.org/alpine/abuild/"
arch="all"
@ -35,6 +35,7 @@ subpackages="
options="suid"
pkggroups="abuild"
source="https://gitlab.alpinelinux.org/alpine/abuild/-/archive/$pkgver/abuild-$pkgver.tar.gz
0001-abuild-parse-ORIGIN-in-rpaths-correctly.patch
tar-arguments.patch
0001-abuild-add-option-C-DIR-to-allow-change-directory.patch
usr-share-cmake.patch
@ -123,6 +124,7 @@ _sudo() {
sha512sums="
49e243114933f3013884f0014fc8e5f142ff146de3d9ddb62e5ad98689cb1bf2bc8172da0331943f44b106dca4fd6fcdd917f5439e82facbb97eccc0f3459f37 abuild-3.14.1.tar.gz
9db4fa9986ffda62257298d4eefa82bc49a3c88195928729adebfefa22090dbbee60c8c1f4105e762bad55bd67fe3ceda1b8ec6385a1a83ce0741a3acf88c9a2 0001-abuild-parse-ORIGIN-in-rpaths-correctly.patch
824e936eed3699e8b18ad0c9a2462ea2ec0995111edbb595188b29a2e728b7ec9a4c445fba706d36c9954a6d349bb92b4eff0f20715758051f14065208a9778f tar-arguments.patch
4b43ed25d97593996b4154ef6f2e4253ddfb1b8cc85fba18c5dd15e01c9ee8fbb8b3db80203455a1120f779615d834e79c600d40e26ee97f64ff56fe28c44d46 0001-abuild-add-option-C-DIR-to-allow-change-directory.patch
8e5a384c181100df1656c4db2ec429c3861ee6e3a9e0e12951f4e04160e8358ea4332bdfeb5c70f57f578b684e489fdeccbbff067f799430ec422fdc594c0f97 usr-share-cmake.patch