spk diff spk-convert @ rev 111
Convert: Added missing funcitons, fixed a few bugs
author | Christian Mesh <meshca@clarkson.edu> |
---|---|
date | Sat Jun 09 10:22:38 2012 -0500 (2012-06-09) |
parents | e1c080f70e0a |
children | 73f0d4dec380 |
line diff
1.1 --- a/spk-convert Sat Jun 09 09:34:42 2012 -0500 1.2 +++ b/spk-convert Sat Jun 09 10:22:38 2012 -0500 1.3 @@ -33,7 +33,6 @@ 1.4 exit 0 1.5 } 1.6 1.7 -# TODO find_depends show_unresolved_lib 1.8 # Move tazpkg pack to shared lib? 1.9 1.10 # generate a receipt based on standard receipt vars 1.11 @@ -50,21 +49,80 @@ 1.12 SHORT_DESC="$SHORT_DESC" 1.13 WEB_SITE="$WEB_SITE" 1.14 MAINTAINER="$MAINTAINER" 1.15 -DEPENDS="$(find_depends)" 1.16 +DEPENDS="$DEPENDS" 1.17 CONFIG_FILES="$CONFIG_FILES" 1.18 EOT 1.19 1.20 } 1.21 1.22 +# search dependencies for files 1.23 +# Usage: find_depends $fs 1.24 +find_depends() { 1.25 + local fs=$1 1.26 + 1.27 + local DEFAULT_DEPENDS="glibc-base gcc-lib-base" 1.28 + 1.29 + for chkfile in $(find $fs -type f); do 1.30 + is_elf $chkfile || continue 1.31 + case "$chkfile" in 1.32 + *.o|*.ko|*.ko.gz) continue;; 1.33 + esac 1.34 + 1.35 + ldd $chkfile | \ 1.36 + while read lib rem; do 1.37 + case "$lib" in 1.38 + statically|linux-gate.so*|ld-*.so|*/ld-*.so) 1.39 + continue;; 1.40 + esac 1.41 + 1.42 + find $fs | grep -q /$lib$ && continue 1.43 + 1.44 + for dep in $(fgrep $lib files.list | cut -d: -f1); do 1.45 + case " $DEFAULT_DEPENDS " in 1.46 + *\ $dep\ *) continue 2;; 1.47 + esac 1.48 + grep -qs "^$dep$" $tmpdir/depends && continue 2 1.49 + done 1.50 + 1.51 + if [ -n "$dep" ]; then 1.52 + echo "$dep" >> $tmpdir/depends 1.53 + else 1.54 + grep -qs ^$lib$ $tmpdir/unresolved || 1.55 + echo "$lib" >> $tmpdir/unresolved 1.56 + fi 1.57 + done 1.58 + done 1.59 + unset spc 1.60 + local spc 1.61 + for file in $(cat $tmpdir/depends 2> /dev/null | sort | uniq); do 1.62 + echo -n "$spc$file" 1.63 + spc=" " 1.64 + done 1.65 +} 1.66 + 1.67 +show_unresolved_lib() { 1.68 + local receipt=$1 1.69 + if [ -s $tmpdir/unresolved ]; then 1.70 + echo -e "BUGS=\"$(gettext 'No dependency for')" >> $receipt 1.71 + for lib in $(cat $tmpdir/unresolved | sort | uniq); do 1.72 + eval_gettext "WARNING: unknown dependency for \$lib"; newline 1.73 + echo -n " $lib" >> $receipt 1.74 + done 1.75 + echo "\"" >> $receipt 1.76 + fi 1.77 +} 1.78 + 1.79 + 1.80 + 1.81 # convert a .ipk package to .tazpkg 1.82 # Usage: convert_ipk $package_file 1.83 convert_ipk() { 1.84 local package_file=$1 1.85 1.86 - mkdir -p $tmp 1.87 - tar xOzf $package_file ./control.tar.gz | tar xzf - -C $tmp 1.88 + mkdir -p $tmpdir 1.89 + tar xOzf $package_file ./control.tar.gz | tar xzf - -C $tmpdir 1.90 1.91 - local control="$tmp/control" 1.92 + local control="$tmpdir/control" 1.93 1.94 # filter ipk control file for variable 1.95 # Usage: filter_vars $search_var 1.96 @@ -84,15 +142,18 @@ 1.97 case "$target" in 1.98 i386|all) 1.99 local file="$PACKAGE-$VERSION" 1.100 - local receipt="$tmp/$file/receipt" 1.101 - local fs="$tmp/$file/fs" 1.102 + local receipt="$tmpdir/$file/receipt" 1.103 + local fs="$tmpdir/$file/fs" 1.104 1.105 mkdir -p $fs 1.106 tar xOzf $package_file ./data.tar.gz | tar xzf - -C $fs 1.107 1.108 unset CONFIG_FILES 1.109 - [ -s $tmp/conffiles ] && $CONFIG_FILE=$(cat $tmp/conffiles) 1.110 + [ -s $tmpdir/conffiles ] && $CONFIG_FILE=$(cat $tmpdir/conffiles) 1.111 1.112 + 1.113 + 1.114 + DEPENDS=$(find_depends $fs) 1.115 generate_receipt $receipt $package_file 1.116 1.117 show_unresolved_lib $receipt 1.118 @@ -109,28 +170,29 @@ 1.119 $(cat $script) 1.120 } 1.121 EOT 1.122 + fi 1.123 } 1.124 1.125 # read functions into receipt 1.126 - transpose_func pre_install $tmp/preinst 1.127 - transpose_func post_install $tmp/postinst 1.128 - transpose_func pre_remove $tmp/prerm 1.129 - transpose_func post_remove $tmp/postrm 1.130 + transpose_func pre_install $tmpdir/preinst 1.131 + transpose_func post_install $tmpdir/postinst 1.132 + transpose_func pre_remove $tmpdir/prerm 1.133 + transpose_func post_remove $tmpdir/postrm 1.134 1.135 [ -z "$SHORT_DESC" ] || echo $SHORT_DESC > $file/description.txt 1.136 1.137 - cd $tmp 1.138 + cd $tmpdir 1.139 tazpkg pack $file 1.140 cd - > /dev/null 1.141 1.142 - mv $tmp/$file.tazpkg . 1.143 + mv $tmpdir/$file.tazpkg . 1.144 ;; 1.145 *) 1.146 gettext "Invalid target: $target (expected i386)"; newline 1.147 ;; 1.148 esac 1.149 unset_receipt 1.150 - rm -rf $tmp 1.151 + rm -rf $tmpdir 1.152 } 1.153 1.154 # convert a .pkg.tar.gz/.apk package to .tazpkg 1.155 @@ -139,7 +201,7 @@ 1.156 local package_file=$1 1.157 1.158 # Extract 1.159 - local fs="$tmp/fs" 1.160 + local fs="$tmpdir/fs" 1.161 mkdir -p $fs 1.162 tar xzf $package_file -C $fs 1.163 1.164 @@ -159,18 +221,19 @@ 1.165 WEB_SITE=$(filter_vars "url") 1.166 MAINTAINER=$(filter_vars "packager") 1.167 1.168 - local file="$tmp/$package-$version" 1.169 + local file="$tmpdir/$package-$version" 1.170 local receipt="$file/receipt" 1.171 1.172 + DEPENDS=$(find_depends $fs) 1.173 generate_receipt $receipt $package_file 1.174 1.175 mkdir $file 1.176 mv $fs $file 1.177 1.178 - show_unresolved_lib $tmp/$file/receipt 1.179 + show_unresolved_lib $tmpdir/$file/receipt 1.180 rm -f $file/fs/.[A-Z]* 1.181 1.182 - cd $tmp 1.183 + cd $tmpdir 1.184 tazpkg pack $file 1.185 cd - > /dev/null 1.186 1.187 @@ -179,7 +242,7 @@ 1.188 eval_gettext "\$package_file does not look like an Archlinux/Alpine package !"; newline 1.189 fi 1.190 unset_receipt 1.191 - rm -rf $tmp 1.192 + rm -rf $tmpdir 1.193 } 1.194 1.195 # convert a .tgz package to .tazpkg 1.196 @@ -195,7 +258,7 @@ 1.197 1.198 local PACKAGE=$1 1.199 local VERSION=$2 1.200 - local file="$tmp/$PACKAGE-$VERSION" 1.201 + local file="$tmpdir/$PACKAGE-$VERSION" 1.202 local receipt="$file/receipt" 1.203 local fs="$file/fs" 1.204 1.205 @@ -210,6 +273,7 @@ 1.206 WEB_SITE="http://www.slackware.com/packages/" 1.207 MAINTAINER="nobody@slitaz.org" 1.208 1.209 + DEPENDS=$(find_depends $fs) 1.210 generate_receipt $receipt $package_file 1.211 1.212 show_unresolved_lib $receipt 1.213 @@ -226,6 +290,8 @@ 1.214 EOT 1.215 } 1.216 EOM 1.217 + fi 1.218 + 1.219 # Get full description 1.220 if [ ! -z "$SHORT_DESC" ]; then 1.221 grep ^$PACKAGE $fs/install/slack-desc | \ 1.222 @@ -234,7 +300,7 @@ 1.223 1.224 rm -rf $fs/install 1.225 1.226 - cd $tmp 1.227 + cd $tmpdir 1.228 tazpkg pack $file 1.229 cd - /dev/null 1.230 1.231 @@ -242,24 +308,24 @@ 1.232 else 1.233 eval_gettext "\$package_file does not look like a Slackware package !"; newline 1.234 fi 1.235 - rm -rf $tmp 1.236 + rm -rf $tmpdir 1.237 } 1.238 1.239 # convert a .deb package to .tazpkg 1.240 # Usage: convert_deb $package_file 1.241 convert_deb() { 1.242 - local $package_file=$1 1.243 + local $package_file="$1" 1.244 1.245 # Extract deb control 1.246 - mkdir -p $tmp 1.247 - dpkg-deb -e $package_file $tmp 1.248 + mkdir -p $tmpdir 1.249 + dpkg-deb -e $package_file $tmpdir 1.250 1.251 1.252 # filter control file for variable 1.253 # Usage: filter_vars $search_var 1.254 filter_vars() { 1.255 local var=$1 1.256 - local result=$(grep '^ *$var:' $tmp/control) 1.257 + local result=$(grep '^ *$var:' $tmpdir/control) 1.258 echo ${result##*:} 1.259 } 1.260 1.261 @@ -268,11 +334,11 @@ 1.262 SHORT_DESC=$(filter_vars "Description") 1.263 WEB_SITE="http://packages.debian.org/search?keywords=$PACKAGE" 1.264 MAINTAINER="nobody@slitaz.org" 1.265 - target="$(grep ^Architecture $tmp/control | sed 's/.*: //')" 1.266 + target="$(grep ^Architecture $tmpdir/control | sed 's/.*: //')" 1.267 1.268 case "$target" in 1.269 i386|all) 1.270 - local file="$tmp/$PACKAGE-$VERSION" 1.271 + local file="$tmpdir/$PACKAGE-$VERSION" 1.272 local receipt="$file/receipt" 1.273 local fs="$file/fs" 1.274 1.275 @@ -280,13 +346,12 @@ 1.276 mkdir -p $fs 1.277 dpkg-deb -x $package_file $fs 1.278 1.279 + DEPENDS=$(find_depends $fs) 1.280 generate_receipt $receipt $package_file 1.281 - 1.282 - cd $TMP_DIR 1.283 - 1.284 - if [ -s $tmp/conffiles ]; then 1.285 + 1.286 + if [ -s $tmpdir/conffiles ]; then 1.287 cat >> $receipt <<EOT 1.288 -CONFIG_FILES="$(cat $tmp/conffiles)" 1.289 +CONFIG_FILES="$(cat $tmpdir/conffiles)" 1.290 EOT 1.291 fi 1.292 1.293 @@ -295,7 +360,7 @@ 1.294 # Description.txt 1.295 [ -z "$SHORT_DESC" ] || echo "$SHORT_DESC" > $file/Description.txt 1.296 1.297 - cd $tmp 1.298 + cd $tmpdir 1.299 tazpkg pack $file 1.300 cd - > /dev/null 1.301 1.302 @@ -305,7 +370,7 @@ 1.303 gettext "Invalid target: $target (expected i386 or all)"; newline 1.304 ;; 1.305 esac 1.306 - rm -rf $tmp 1.307 + rm -rf $tmpdir 1.308 } 1.309 1.310 # convert a .rpm package to .tazpkg 1.311 @@ -314,9 +379,9 @@ 1.312 local package_file=$1 1.313 1.314 # Move package_file to tmp 1.315 - mkdir -p $tmp 1.316 - cp $package_file $tmp 1.317 - package_file=$TMP_DIR/$(basename $package_file) 1.318 + mkdir -p $tmpdir 1.319 + cp $package_file $tmpdir 1.320 + package_file=$tmpdir/$(basename $package_file) 1.321 1.322 # filter package_file for variable 1.323 # Usage: filter_vars $search_var 1.324 @@ -329,40 +394,42 @@ 1.325 VERSION=$(filter_vars "Version") 1.326 SHORT_DESC=$(filter_vars "Summary") 1.327 WEB_SITE=$(filter_vars "URL") 1.328 - if [ -z "$URL" ]; then 1.329 + if [ -z "$WEB_SITE" ]; then 1.330 WEB_SITE="http://rpmfind.net/linux/rpm2html/search.php?query=$PACKAGE" 1.331 fi 1.332 CATEGORY="misc"; 1.333 MAINTAINER="nobody@slitaz.org"; 1.334 1.335 1.336 - local file="$tmp/$PACKAGE-$VERSION" 1.337 + local file="$tmpdir/$PACKAGE-$VERSION" 1.338 local receipt="$file/receipt" 1.339 local fs="$file/fs" 1.340 1.341 mkdir -p $fs 1.342 1.343 - generate_receipt $receipt $package_file 1.344 - 1.345 - rpm -qip $PACKAGE_FILE | \ 1.346 + rpm -qip $package_file | \ 1.347 grep "^Description*" -A 100 | \ 1.348 grep -v "^Description*" > \ 1.349 $file/description.txt 1.350 1.351 cd $fs 1.352 - rpm2cpio $PACKAGE_FILE | cpio -idm --quiet 1.353 + rpm2cpio $package_file | cpio -idm --quiet 1.354 cd - > /dev/null 1.355 1.356 + 1.357 + DEPENDS=$(find_depends $fs) 1.358 + generate_receipt $receipt $package_file 1.359 + 1.360 show_unresolved_lib $receipt 1.361 1.362 - cd $tmp 1.363 + cd $tmpdir 1.364 tazpkg pack $file 1.365 cd - 1.366 1.367 mv $file.tazpkg . 1.368 1.369 unset_receipt 1.370 - rm -rf $TMP_DIR 1.371 + rm -rf $tmpdir 1.372 } 1.373 1.374