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

Signed-off-by: Florian Pritz <[email protected]>
---
 scripts/makepkg.sh.in |   35 ++++++++++++++++++++++++++++++++++-
 1 files changed, 34 insertions(+), 1 deletions(-)

diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index f43d87d..891d80e 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -903,6 +903,27 @@ tidy_install() {
        fi
 }
 
+find_sodepends() {
+       local sodepends
+       find $pkgdir -type f | while read filename
+       do
+               soarch="$(objdump -a "$filename" 2>/dev/null | \
+                       sed -rn 's/.* file format elf[0-9]+-(.*)$/\1/p' | tr - 
_)_$(uname -s)"
+               [ -n "$soarch" ] || continue
+               for sofile in $(readelf -d "$filename" 2> /dev/null | sed -nr 
's/.*Shared library: \[(.*)\].*/\1/p')
+               do
+                       soname=$(sed -rn 's/(.*)\.so.*/\1.so/p' <<< "$sofile")
+                       soversion=$(sed -rn 's/.*\.so\.(.*)/\1/p' <<< "$sofile")
+                       if in_array "${soname}" ${depen...@]}; then
+                               if ! in_array 
"${soname}=${soversion}-${soarch}" ${sodepen...@]}; then
+                                       echo "${soname}=${soversion}-${soarch}"
+                                       sodepends=(${sodepen...@]} 
"${soname}=${soversion}-${soarch}")
+                               fi
+                       fi
+               done
+       done
+}
+
 find_soprovides() {
        local soprovides
        find $pkgdir -type f -name \*.so\* | while read filename
@@ -957,7 +978,6 @@ write_pkginfo() {
        [[ $license ]]    && printf "license = %s\n"   "${licen...@]}"
        [[ $replaces ]]   && printf "replaces = %s\n"  "${replac...@]}"
        [[ $groups ]]     && printf "group = %s\n"     "${grou...@]}"
-       [[ $depends ]]    && printf "depend = %s\n"    "${depen...@]}"
        [[ $optdepends ]] && printf "optdepend = %s\n" "${optdepen...@]}"
        [[ $conflicts ]]  && printf "conflict = %s\n"  "${conflic...@]}"
        [[ $backup ]]     && printf "backup = %s\n"    "${back...@]}"
@@ -965,7 +985,20 @@ write_pkginfo() {
        local it
 
        soprovides=$(find_soprovides)
+       sodepends=$(find_sodepends)
        provides=("${provid...@]}" ${soprovides})
+       depends=("${depen...@]}" ${sodepends})
+
+       for it in "${depen...@]}"; do
+               if grep -q ".*\.so$" <<< "$it"; then
+                       if ! grep -q "\(^\|\s\)${it}=.*" <<< $sodepends; then
+                               error "$(gettext "Can't find library listed in 
\$depends: %s")" "$it"
+                               return 1
+                       fi
+               else
+                       echo "depend = $it"
+               fi
+       done
 
        for it in "${provid...@]}"; do
                if grep -q ".*\.so$" <<< "$it"; then
-- 
1.7.3.1

Reply via email to