tazpkg rev 268
tazpkg convert: add DEPENDS support
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Tue May 26 18:54:06 2009 +0200 (2009-05-26) |
parents | 178a6ed58f61 |
children | 41a374a7bfc4 |
files | tazpkg |
line diff
1.1 --- a/tazpkg Mon May 25 21:36:28 2009 +0200 1.2 +++ b/tazpkg Tue May 26 18:54:06 2009 +0200 1.3 @@ -895,6 +895,53 @@ 1.4 ' 1.5 } 1.6 1.7 +# Check for ELF file 1.8 +is_elf() 1.9 +{ 1.10 + [ "$(dd if=$1 bs=1 skip=1 count=3 2> /dev/null)" = "ELF" ] 1.11 +} 1.12 + 1.13 +# Print shared library dependencies 1.14 +ldd() 1.15 +{ 1.16 + LD_TRACE_LOADED_OBJECTS=1 /lib/ld*.so $1 2> /dev/null 1.17 +} 1.18 + 1.19 +# search dependencies for files in $TMP_DIR/$file/fs 1.20 +find_depends() 1.21 +{ 1.22 + DEFAULT_DEPENDS="glibc-base gcc-lib-base" 1.23 + 1.24 + [ -f /var/lib/tazpkg/files.list.lzma ] || tazpkg recharge 1.25 + for i in /var/lib/tazpkg/files.list.lzma \ 1.26 + /var/lib/tazpkg/undigest/*/files.list.lzma ; do 1.27 + [ -f $i ] && lzma d $i -so >> $TMP_DIR/files.list 1.28 + done 1.29 + find $TMP_DIR/$file/fs -type f | while read file ; do 1.30 + is_elf $file || continue 1.31 + case "$file" in 1.32 + *.o|*.ko|*.ko.gz) continue;; 1.33 + esac 1.34 + ldd $file | while read lib rem; do 1.35 + case "$lib" in 1.36 + statically|linux-gate.so*|ld-*.so|*/ld-*.so) 1.37 + continue;; 1.38 + esac 1.39 + for dep in $(grep $lib files.list | cut -d: -f1); do 1.40 + case " $DEFAULT_DEPENDS $ALL_DEPENDS " in 1.41 + *\ $dep\ *) continue 2;; 1.42 + esac 1.43 + done 1.44 + ALL_DEPENDS="$ALL_DEPENDS $dep" 1.45 + if [ -n "$dep" ]; then 1.46 + echo -n " $dep" 1.47 + else 1.48 + echo "$WARNING: unknown dependency for $lib" 1>&2 1.49 + fi 1.50 + done 1.51 + done 1.52 +} 1.53 + 1.54 # convert a .deb package to .tazpkg 1.55 convert_deb() 1.56 { 1.57 @@ -919,8 +966,14 @@ 1.58 SHORT_DESC="$descrip" 1.59 WEB_SITE="http://packages.debian.org/search?keywords=$package" 1.60 MAINTAINER="nobody@slitaz.org" 1.61 -DEPENDS="" 1.62 +DEPENDS="$(find_depends)" 1.63 EOT 1.64 + awk ' 1.65 +{ 1.66 + if (/^ / && show) print substr($0,2); 1.67 + else show=0; 1.68 + if (/^Description/) show=1; 1.69 +}' < $TMP_DIR/control > $file/description.txt 1.70 tazpkg pack $file 1.71 mv $file.tazpkg $TOP_DIR 1.72 cd $TOP_DIR 1.73 @@ -967,6 +1020,7 @@ 1.74 cd $TMP_DIR/$file/fs/ 1.75 rpm2cpio $PACKAGE_FILE | cpio -idm 1.76 cd ../.. 1.77 + echo "DEPENDS=\"$(find_depends)\"" >> $TMP_DIR/receipt 1.78 tazpkg pack $file 1.79 mv $file.tazpkg $TOP_DIR 1.80 cd $TOP_DIR