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
