>From a2062a4b3dc2c2a3f7ca5fb9cece056f63bb3b21 Mon Sep 17 00:00:00 2001
From: Florian Pritz <bluewind@xssn.at>
Date: Wed, 10 Feb 2010 17:07:30 +0100
Subject: [PATCH 1/2] makepkg: add soprovides support

Support-by: brain0 <thomas@archlinux.org>
Support-by: GNU\caustic <Christoph.Schied@uni-ulm.de>

Signed-off-by: Florian Pritz <bluewind@xssn.at>
---
 scripts/makepkg.sh.in |   28 +++++++++++++++++++++++++++-
 1 files changed, 27 insertions(+), 1 deletions(-)

diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 5bd294c..4f88c13 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -874,6 +874,27 @@ 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 (.*)$/\1/p' | tr - _)
+      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
@@ -903,6 +924,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
@@ -923,7 +947,9 @@ write_pkginfo() {
 		echo "conflict = $it" >>.PKGINFO
 	done
 	for it in "${provides[@]}"; do
-		echo "provides = $it" >>.PKGINFO
+		if ! grep -q ".*\.so$" <<< $it; then
+			echo "provides = $it" >>.PKGINFO
+		fi
 	done
 	for it in "${backup[@]}"; do
 		echo "backup = $it" >>.PKGINFO
-- 
1.6.6.1

