tazpkg annotate modules/find-depends @ rev 846
Remove "busybox" "prefixes" (thanks llev)
We used "busybox wget", etc. to be sure we called Busybox's "wget", not any other "wget". Workaround already done in "getenv" module.
We used "busybox wget", etc. to be sure we called Busybox's "wget", not any other "wget". Workaround already done in "getenv" module.
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Fri Oct 09 13:14:01 2015 +0300 (2015-10-09) |
parents | a02e36d44d06 |
children | 3af642cd5e69 |
rev | line source |
---|---|
al@822 | 1 #!/bin/sh |
al@828 | 2 # TazPkg - Tiny autonomous zone packages manager, hg.slitaz.org/tazpkg |
al@828 | 3 # find-depends - TazPkg module |
al@828 | 4 # Functions that are common to tazpkg and tazpkg-convert, and sourced by them. |
al@822 | 5 |
al@822 | 6 |
al@822 | 7 # search dependencies for files in $TMP_DIR/$file/fs |
al@822 | 8 |
al@828 | 9 find_depends() { |
al@828 | 10 DEFAULT_DEPENDS='glibc-base gcc-lib-base' |
al@822 | 11 |
al@844 | 12 [ ! -f "$PKGS_DB/files.list.lzma" ] && tazpkg recharge >/dev/null |
al@844 | 13 |
al@844 | 14 for i in "$PKGS_DB/files.list.lzma" \ |
al@844 | 15 "$PKGS_DB/undigest/"*"/files.list.lzma"; do |
al@840 | 16 [ -f "$i" ] && lzma d "$i" -so >> "$TMP_DIR/files.list" |
al@822 | 17 done |
al@822 | 18 |
al@828 | 19 _ 'Find depends...' 1>&2 |
al@828 | 20 libs_found='' |
al@844 | 21 find "$1" -type f | \ |
al@840 | 22 while read chkfile; do |
al@844 | 23 [ "$(dd bs=1 skip=1 count=3 < "$chkfile" 2>/dev/null)" != 'ELF' ] && continue |
al@844 | 24 |
al@822 | 25 case "$chkfile" in |
al@828 | 26 *.o|*.ko|*.ko.gz|*.ko.xz) continue;; |
al@822 | 27 esac |
al@822 | 28 |
al@844 | 29 for lib in $(LD_TRACE_LOADED_OBJECTS=1 /lib/ld*.so "$chkfile" 2>/dev/null | sed '/=>/!d;s/ =>.*//'); do |
al@822 | 30 case " $libs_found " in |
al@844 | 31 *\ $lib\ *) continue;; |
al@822 | 32 esac |
al@822 | 33 libs_found="$libs_found $lib" |
al@822 | 34 case "$lib" in |
al@822 | 35 statically|linux-gate.so*|ld-*.so|*/ld-*.so) continue;; |
al@822 | 36 esac |
al@840 | 37 find "${1:-$TMP_DIR/$file/fs}" | grep -q /$lib$ && continue |
al@822 | 38 |
al@828 | 39 _n 'for %s' "$lib" 1>&2 |
al@844 | 40 echo -ne ' \r' 1>&2 |
al@828 | 41 |
al@844 | 42 for dep in $(fgrep "$lib" "$TMP_DIR/files.list" | cut -d: -f1); do |
al@822 | 43 case " $DEFAULT_DEPENDS " in |
al@822 | 44 *\ $dep\ *) continue 2;; |
al@822 | 45 esac |
al@840 | 46 grep -qs "^$dep$" "$TMP_DIR/depends" && continue 2 |
al@822 | 47 done |
al@822 | 48 |
al@822 | 49 if [ -n "$dep" ]; then |
al@840 | 50 echo "$dep" >> "$TMP_DIR/depends" |
al@822 | 51 else |
al@840 | 52 grep -qs ^$lib$ "$TMP_DIR/unresolved" || |
al@840 | 53 echo "$lib" >> "$TMP_DIR/unresolved" |
al@822 | 54 fi |
al@822 | 55 done |
al@822 | 56 done |
al@822 | 57 |
al@828 | 58 spc='' |
al@828 | 59 [ -s "$TMP_DIR/depends" ] && |
al@840 | 60 sort < "$TMP_DIR/depends" 2>/dev/null | uniq | \ |
al@822 | 61 while read file; do |
al@822 | 62 echo -n "$spc$file" |
al@828 | 63 spc=' ' |
al@822 | 64 done |
al@822 | 65 } |
al@822 | 66 |
al@822 | 67 |