Support-by: brain0 <[email protected]>
Support-by: GNU\caustic <[email protected]>

Signed-off-by: Florian Pritz <[email protected]>
---
 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}" ${provid...@]}; then
+                               if ! in_array 
"${soname}=${soversion}-${soarch}" ${soprovid...@]}; then
+                                       echo "${soname}=${soversion}-${soarch}"
+                                       soprovides=(${soprovid...@]} 
"${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=("${provid...@]}" ${soprovides})
+
        local it
        for it in "${licen...@]}"; do
                echo "license = $it" >>.PKGINFO
@@ -918,7 +943,14 @@ write_pkginfo() {
                echo "conflict = $it" >>.PKGINFO
        done
        for it in "${provid...@]}"; 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 "${back...@]}"; do
                echo "backup = $it" >>.PKGINFO
-- 
1.7.0.4

Reply via email to