From: Florian Pritz <[email protected]>

Support-by: brain0 <[email protected]>
Support-by: GNU\caustic <[email protected]>
---
 etc/makepkg.conf.in   |    3 ++-
 scripts/makepkg.sh.in |   43 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+), 1 deletions(-)

diff --git a/etc/makepkg.conf.in b/etc/makepkg.conf.in
index 3a3a415..c3caf3c 100644
--- a/etc/makepkg.conf.in
+++ b/etc/makepkg.conf.in
@@ -67,8 +67,9 @@ BUILDENV=(fakeroot !distcc color !ccache)
 #-- emptydirs: Leave empty directories in packages
 #-- zipman:    Compress manual (man and info) pages in MAN_DIRS with gzip
 #-- purge:     Remove files specified by PURGE_TARGETS
+#-- sodepends: add .so files to depends/provides arrays
 #
-OPTIONS=(strip docs libtool emptydirs zipman purge)
+OPTIONS=(strip docs libtool emptydirs zipman purge !sodepends)
 
 #-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
 INTEGRITY_CHECK=(md5)
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index daa9585..405f3cb 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -872,6 +872,33 @@ tidy_install() {
        fi
 }
 
+find_sodependencies()
+{
+       find $pkgdir | while read filename
+       do
+               arch=$(readelf -h "$filename" 2> /dev/null| sed -nr 
's/.*Class:.*ELF(.*).*/\1/p')
+               [ -n "$arch" ] || continue
+
+               readelf -d "$filename" 2> /dev/null | sed -nr 's/.*Shared 
library: \[(.*)\].*/\1/p' \
+               | while read dep
+               do
+                       echo sodep-${arch}-${dep}
+               done
+       done
+}
+
+find_soprovides()
+{
+       find $pkgdir -name \*.so | while read filename
+       do
+               arch=$(readelf -h "$filename" 2> /dev/null| sed -nr 
's/.*Class:.*ELF(.*).*/\1/p')
+               [ -n "$arch" ] || continue
+               soname=$(readelf -d "$filename" 2>/dev/null | sed -nr 
's/.*Library soname: \[(.*)\].*/\1/p')
+               [ -n "$soname" ] || continue
+               echo sodep-${arch}-${soname}
+       done
+}
+
 write_pkginfo() {
        local builddate=$(date -u "+%s")
        if [ -n "$PACKAGER" ]; then
@@ -902,6 +929,22 @@ write_pkginfo() {
                echo "force = true" >> .PKGINFO
        fi
 
+       if [ "$(check_option sodepends)" = "y" ]; then
+               sodepends=$(find_sodependencies)
+               soprovides=$(find_soprovides)
+               
+               OLDIFS="$IFS"
+               IFS=""
+
+               # filter .so files provided by the package itself
+               sodepends=$(echo $sodepends $soprovides $soprovides | sort | 
uniq -u)
+               
+               IFS="$OLDIFS"
+
+               depends=($depends $sodepends)
+               provices=($provides $soprovides)
+       fi
+
        local it
        for it in "${licen...@]}"; do
                echo "license = $it" >>.PKGINFO
-- 
1.6.4


Reply via email to