cookutils diff modules/deps @ rev 1020
cook: handle rsum more stable, fix working with sets when copy() isn't used; modules/compressor: find executables and libs beyond [/usr]?/[s]?bin/; modules/deps: don't process *.la files by default; doc/receipts-v2.md: add chapter 'Dependency tracking'.
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Sat Dec 23 15:03:39 2017 +0200 (2017-12-23) |
parents | 845d62611d92 |
children | 0ff8d93e8855 |
line diff
1.1 --- a/modules/deps Sat Nov 18 16:38:50 2017 +0200 1.2 +++ b/modules/deps Sat Dec 23 15:03:39 2017 +0200 1.3 @@ -166,6 +166,7 @@ 1.4 s("xorg-xcb-util-image-dev", "xcb-util-image-dev"); 1.5 s("xorg-xcb-util-renderutil-dev", "xcb-util-renderutil-dev"); 1.6 s("eudev-dev", "udev-dev"); 1.7 + s("util-linux-uuid", "ossp-uuid"); 1.8 s("util-linux-uuid-dev", "ossp-uuid-dev"); 1.9 s("polkit-pam-dev", "polkit-dev"); 1.10 s("nspr", "palemoon"); # I doubt app may depend on Palemoon 1.11 @@ -186,7 +187,7 @@ 1.12 $0 != "gcc") 1.13 print gensub(" ", "|", "g"); 1.14 }';; 1.15 - esac >>$tmptmp 1.16 + esac 1.17 } 1.18 1.19 1.20 @@ -206,8 +207,9 @@ 1.21 printf("[%s]\n", i); 1.22 } 1.23 } 1.24 - ' $2 | tr '\n' ' ')" 1.25 - outpkg "${res% }" 1.26 + ' $2 | tr '\n' ' ' | sed 's| $||')" 1.27 + 1.28 + outpkg "$res" 1.29 } 1.30 1.31 1.32 @@ -215,22 +217,29 @@ 1.33 # Also can process some development files 1.34 1.35 tp_ldd() { 1.36 + local tmptmp libs variables pcs pkg pkgs out 1.37 unset IFS 1.38 tmptmp=$(mktemp) 1.39 1.40 case $1 in 1.41 *.la) 1.42 - # found dependencies in the *.la files 1.43 - libs=$(. $1; echo $dependency_libs) 1.44 - for i in $libs; do 1.45 - case $i in 1.46 - -l*) indb "lib${i#-l}.so" $db_so;; # FIXME: I'm not sure it's about a *.so, but *.a often absent 1.47 - *.la) indb "$i" $db_la;; 1.48 - esac 1.49 - done 1.50 + if [ -n "$la" ]; then # use with --la 1.51 + # found dependencies in the *.la files 1.52 + libs=$(. $1; echo $dependency_libs) 1.53 + for i in $libs; do 1.54 + case $i in 1.55 + -l*) indb "${i/-l/lib}.so" $db_so >>$tmptmp;; # FIXME: I'm not sure it's about a *.so, but *.a often absent 1.56 + *.la) indb "$i" $db_la >>$tmptmp;; 1.57 + esac 1.58 + done 1.59 + fi 1.60 ;; 1.61 *.pc) 1.62 # found dependencies in the *.pc files 1.63 + variables=$(mktemp) 1.64 + grep '^[a-zA-Z_][a-zA-Z_]*=' $1 > $variables 1.65 + . $variables 1.66 + rm $variables 1.67 # Syntax examples: 1.68 # Requires: glib-2.0 gobject-2.0 1.69 # Requires.private: gmodule-no-export-2.0 1.70 @@ -241,7 +250,7 @@ 1.71 isitlib=$(echo $i | tr -d '<=>0-9.') 1.72 # if it contains only comparisons, numbers, dot - it is not lib, skip 1.73 [ -n "$isitlib" ] || continue 1.74 - indb "$i.pc" $db_pc 1.75 + indb "$i.pc" $db_pc >>$tmptmp 1.76 done 1.77 # Syntax examples: 1.78 # Libs: -L${libdir} -lgio-2.0 1.79 @@ -249,7 +258,31 @@ 1.80 libs=$(grep '^Libs' $1 | cut -d: -f2 | tr '\n' ' ') 1.81 for i in $libs; do 1.82 case $i in 1.83 - -l*) indb "lib${i#-l}.so" $db_so;; 1.84 + -L*) eval LIBDIR="${i#-L}";; 1.85 + -l*) 1.86 + eval i="$i" # substitute variables 1.87 +#echo ">i='$i'" >&2 1.88 + pkg=$(indb "lib${i#-l}.so" $db_so) 1.89 +#echo ">>pkg='$pkg'" >&2 1.90 + pkgs=$(awk -F$'\t' -vpkg="$pkg" '{if (index(" " $2 " ", " " pkg " ")) print $2;}' /home/slitaz/cache/split.db) 1.91 +#echo ">>pkgs='$pkgs'" >&2 1.92 + unset out 1.93 + for j in $pkgs; do 1.94 + # seadrch for <pkg>-dev 1.95 + case $j in $pkg-dev) out=$j; break;; 1.96 + esac 1.97 + done 1.98 +#echo ">>'$out'" >&2 1.99 + [ -z "$out" ] && 1.100 + for j in $pkgs; do 1.101 + # if not found previously, search for <any>-dev 1.102 + case $j in *-dev) out=$j; break;; 1.103 + esac 1.104 + done 1.105 +#echo ">>'$out'" >&2 1.106 + echo ${out:-$pkg} 1.107 +#echo >&2 1.108 + ;; 1.109 esac 1.110 done 1.111 ;; 1.112 @@ -263,10 +296,12 @@ 1.113 echo 'python' 1.114 ;; 1.115 *) 1.116 - LD_PRELOAD= LD_TRACE_LOADED_OBJECTS=1 /lib/ld-linux* "$1" 2>/dev/null | \ 1.117 - sed 's| =>.*||; s| (.*||; s|\t||' | \ 1.118 - while read i; do 1.119 - indb "$i" $db_so 1.120 +# LD_PRELOAD= LD_TRACE_LOADED_OBJECTS=1 /lib/ld-linux* "$1" 2>/dev/null | \ 1.121 +# sed 's| =>.*||; s| (.*||; s|\t||' | \ 1.122 + readelf -dW "$1" 2>/dev/null \ 1.123 + | sed -n '/NEEDED/ s|.*\[\(.*\)\]|\1|p' \ 1.124 + | while read i; do 1.125 + indb "$i" $db_so >>$tmptmp 1.126 done 1.127 ;; 1.128 esac 1.129 @@ -307,7 +342,7 @@ 1.130 IFS=$'\n' 1.131 while read file; do 1.132 tp_ldd "$WOK/$1/taz/$pkg-$VERSION/fs$file" 1.133 - done < $WOK/$1/taz/$pkg-$VERSION/files.list | sort -u | grep -v "^$pkg$" 1.134 + done < $WOK/$1/taz/$pkg-$VERSION/files.list | sort -u | grep -v "^$pkg$" | sed '/^$/d' 1.135 done 1.136 1.137 newline