[pacman-dev] [PATCH 1/2] makepkg: add soprovides support
Florian Pritz
bluewind at xssn.at
Mon Apr 12 13:47:34 EDT 2010
Support-by: brain0 <thomas at archlinux.org>
Support-by: GNU\caustic <Christoph.Schied at uni-ulm.de>
Signed-off-by: Florian Pritz <bluewind at xssn.at>
---
scripts/makepkg.sh.in | 34 +++++++++++++++++++++++++++++++++-
1 files changed, 33 insertions(+), 1 deletions(-)
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 131519f..584c427 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -869,6 +869,28 @@ tidy_install() {
fi
}
+find_soprovides() {
+ local soprovides
+ find $pkgdir -type f -name \*.so\* | while read filename
+ do
+ if readelf -h "$filename" 2>/dev/null | grep -q '.*Type:.*DYN (Shared object file).*'; then
+ soarch="$(objdump -a "$filename" 2>/dev/null | \
+ sed -rn 's/.* file format elf[0-9]+-(.*)$/\1/p' | tr - _)_$(uname -s)"
+ sofile=$(readelf -d "$filename" 2>/dev/null | sed -nr 's/.*Library soname: \[(.*)\].*/\1/p')
+ [ -z "$sofile" ] && sofile="$(basename "$filename")"
+
+ soname=$(sed -rn 's/(.*)\.so.*/\1.so/p' <<< "$sofile")
+ soversion=$(sed -rn 's/.*\.so\.(.*)/\1/p' <<< "$sofile")
+ if in_array "${soname}" ${provides[@]}; then
+ if ! in_array "${soname}=${soversion}-${soarch}" ${soprovides[@]}; then
+ echo "${soname}=${soversion}-${soarch}"
+ soprovides=(${soprovides[@]} "${soname}=${soversion}-${soarch}")
+ fi
+ fi
+ fi
+ done
+}
+
write_pkginfo() {
local builddate=$(date -u "+%s")
if [[ -n $PACKAGER ]]; then
@@ -898,6 +920,9 @@ write_pkginfo() {
echo "force = true" >> .PKGINFO
fi
+ soprovides=$(find_soprovides)
+ provides=("${provides[@]}" ${soprovides})
+
local it
for it in "${license[@]}"; do
echo "license = $it" >>.PKGINFO
@@ -918,7 +943,14 @@ write_pkginfo() {
echo "conflict = $it" >>.PKGINFO
done
for it in "${provides[@]}"; do
- echo "provides = $it" >>.PKGINFO
+ if grep -q ".*\.so$" <<< "$it"; then
+ if ! grep -q "\(^\|\s\)${it}=.*" <<< $soprovides; then
+ error "$(gettext "Can't find library listed in \$provides: %s")" "$it"
+ return 1
+ fi
+ else
+ echo "provides = $it" >>.PKGINFO
+ fi
done
for it in "${backup[@]}"; do
echo "backup = $it" >>.PKGINFO
--
1.7.0.4
More information about the pacman-dev
mailing list