spk 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 |
files | Makefile spk-convert |
line diff
1.1 --- a/Makefile Sat Jun 09 09:34:42 2012 -0500 1.2 +++ b/Makefile Sat Jun 09 10:22:38 2012 -0500 1.3 @@ -46,6 +46,7 @@ 1.4 install -m 0755 spk-add $(DESTDIR)$(PREFIX)/sbin 1.5 install -m 0755 spk-mirror $(DESTDIR)$(PREFIX)/sbin 1.6 install -m 0755 spk-up $(DESTDIR)$(PREFIX)/sbin 1.7 + install -m 0755 spk-convert $(DESTDIR)$(PREFIX)/sbin 1.8 1.9 # Clean source 1.10
2.1 --- a/spk-convert Sat Jun 09 09:34:42 2012 -0500 2.2 +++ b/spk-convert Sat Jun 09 10:22:38 2012 -0500 2.3 @@ -33,7 +33,6 @@ 2.4 exit 0 2.5 } 2.6 2.7 -# TODO find_depends show_unresolved_lib 2.8 # Move tazpkg pack to shared lib? 2.9 2.10 # generate a receipt based on standard receipt vars 2.11 @@ -50,21 +49,80 @@ 2.12 SHORT_DESC="$SHORT_DESC" 2.13 WEB_SITE="$WEB_SITE" 2.14 MAINTAINER="$MAINTAINER" 2.15 -DEPENDS="$(find_depends)" 2.16 +DEPENDS="$DEPENDS" 2.17 CONFIG_FILES="$CONFIG_FILES" 2.18 EOT 2.19 2.20 } 2.21 2.22 +# search dependencies for files 2.23 +# Usage: find_depends $fs 2.24 +find_depends() { 2.25 + local fs=$1 2.26 + 2.27 + local DEFAULT_DEPENDS="glibc-base gcc-lib-base" 2.28 + 2.29 + for chkfile in $(find $fs -type f); do 2.30 + is_elf $chkfile || continue 2.31 + case "$chkfile" in 2.32 + *.o|*.ko|*.ko.gz) continue;; 2.33 + esac 2.34 + 2.35 + ldd $chkfile | \ 2.36 + while read lib rem; do 2.37 + case "$lib" in 2.38 + statically|linux-gate.so*|ld-*.so|*/ld-*.so) 2.39 + continue;; 2.40 + esac 2.41 + 2.42 + find $fs | grep -q /$lib$ && continue 2.43 + 2.44 + for dep in $(fgrep $lib files.list | cut -d: -f1); do 2.45 + case " $DEFAULT_DEPENDS " in 2.46 + *\ $dep\ *) continue 2;; 2.47 + esac 2.48 + grep -qs "^$dep$" $tmpdir/depends && continue 2 2.49 + done 2.50 + 2.51 + if [ -n "$dep" ]; then 2.52 + echo "$dep" >> $tmpdir/depends 2.53 + else 2.54 + grep -qs ^$lib$ $tmpdir/unresolved || 2.55 + echo "$lib" >> $tmpdir/unresolved 2.56 + fi 2.57 + done 2.58 + done 2.59 + unset spc 2.60 + local spc 2.61 + for file in $(cat $tmpdir/depends 2> /dev/null | sort | uniq); do 2.62 + echo -n "$spc$file" 2.63 + spc=" " 2.64 + done 2.65 +} 2.66 + 2.67 +show_unresolved_lib() { 2.68 + local receipt=$1 2.69 + if [ -s $tmpdir/unresolved ]; then 2.70 + echo -e "BUGS=\"$(gettext 'No dependency for')" >> $receipt 2.71 + for lib in $(cat $tmpdir/unresolved | sort | uniq); do 2.72 + eval_gettext "WARNING: unknown dependency for \$lib"; newline 2.73 + echo -n " $lib" >> $receipt 2.74 + done 2.75 + echo "\"" >> $receipt 2.76 + fi 2.77 +} 2.78 + 2.79 + 2.80 + 2.81 # convert a .ipk package to .tazpkg 2.82 # Usage: convert_ipk $package_file 2.83 convert_ipk() { 2.84 local package_file=$1 2.85 2.86 - mkdir -p $tmp 2.87 - tar xOzf $package_file ./control.tar.gz | tar xzf - -C $tmp 2.88 + mkdir -p $tmpdir 2.89 + tar xOzf $package_file ./control.tar.gz | tar xzf - -C $tmpdir 2.90 2.91 - local control="$tmp/control" 2.92 + local control="$tmpdir/control" 2.93 2.94 # filter ipk control file for variable 2.95 # Usage: filter_vars $search_var 2.96 @@ -84,15 +142,18 @@ 2.97 case "$target" in 2.98 i386|all) 2.99 local file="$PACKAGE-$VERSION" 2.100 - local receipt="$tmp/$file/receipt" 2.101 - local fs="$tmp/$file/fs" 2.102 + local receipt="$tmpdir/$file/receipt" 2.103 + local fs="$tmpdir/$file/fs" 2.104 2.105 mkdir -p $fs 2.106 tar xOzf $package_file ./data.tar.gz | tar xzf - -C $fs 2.107 2.108 unset CONFIG_FILES 2.109 - [ -s $tmp/conffiles ] && $CONFIG_FILE=$(cat $tmp/conffiles) 2.110 + [ -s $tmpdir/conffiles ] && $CONFIG_FILE=$(cat $tmpdir/conffiles) 2.111 2.112 + 2.113 + 2.114 + DEPENDS=$(find_depends $fs) 2.115 generate_receipt $receipt $package_file 2.116 2.117 show_unresolved_lib $receipt 2.118 @@ -109,28 +170,29 @@ 2.119 $(cat $script) 2.120 } 2.121 EOT 2.122 + fi 2.123 } 2.124 2.125 # read functions into receipt 2.126 - transpose_func pre_install $tmp/preinst 2.127 - transpose_func post_install $tmp/postinst 2.128 - transpose_func pre_remove $tmp/prerm 2.129 - transpose_func post_remove $tmp/postrm 2.130 + transpose_func pre_install $tmpdir/preinst 2.131 + transpose_func post_install $tmpdir/postinst 2.132 + transpose_func pre_remove $tmpdir/prerm 2.133 + transpose_func post_remove $tmpdir/postrm 2.134 2.135 [ -z "$SHORT_DESC" ] || echo $SHORT_DESC > $file/description.txt 2.136 2.137 - cd $tmp 2.138 + cd $tmpdir 2.139 tazpkg pack $file 2.140 cd - > /dev/null 2.141 2.142 - mv $tmp/$file.tazpkg . 2.143 + mv $tmpdir/$file.tazpkg . 2.144 ;; 2.145 *) 2.146 gettext "Invalid target: $target (expected i386)"; newline 2.147 ;; 2.148 esac 2.149 unset_receipt 2.150 - rm -rf $tmp 2.151 + rm -rf $tmpdir 2.152 } 2.153 2.154 # convert a .pkg.tar.gz/.apk package to .tazpkg 2.155 @@ -139,7 +201,7 @@ 2.156 local package_file=$1 2.157 2.158 # Extract 2.159 - local fs="$tmp/fs" 2.160 + local fs="$tmpdir/fs" 2.161 mkdir -p $fs 2.162 tar xzf $package_file -C $fs 2.163 2.164 @@ -159,18 +221,19 @@ 2.165 WEB_SITE=$(filter_vars "url") 2.166 MAINTAINER=$(filter_vars "packager") 2.167 2.168 - local file="$tmp/$package-$version" 2.169 + local file="$tmpdir/$package-$version" 2.170 local receipt="$file/receipt" 2.171 2.172 + DEPENDS=$(find_depends $fs) 2.173 generate_receipt $receipt $package_file 2.174 2.175 mkdir $file 2.176 mv $fs $file 2.177 2.178 - show_unresolved_lib $tmp/$file/receipt 2.179 + show_unresolved_lib $tmpdir/$file/receipt 2.180 rm -f $file/fs/.[A-Z]* 2.181 2.182 - cd $tmp 2.183 + cd $tmpdir 2.184 tazpkg pack $file 2.185 cd - > /dev/null 2.186 2.187 @@ -179,7 +242,7 @@ 2.188 eval_gettext "\$package_file does not look like an Archlinux/Alpine package !"; newline 2.189 fi 2.190 unset_receipt 2.191 - rm -rf $tmp 2.192 + rm -rf $tmpdir 2.193 } 2.194 2.195 # convert a .tgz package to .tazpkg 2.196 @@ -195,7 +258,7 @@ 2.197 2.198 local PACKAGE=$1 2.199 local VERSION=$2 2.200 - local file="$tmp/$PACKAGE-$VERSION" 2.201 + local file="$tmpdir/$PACKAGE-$VERSION" 2.202 local receipt="$file/receipt" 2.203 local fs="$file/fs" 2.204 2.205 @@ -210,6 +273,7 @@ 2.206 WEB_SITE="http://www.slackware.com/packages/" 2.207 MAINTAINER="nobody@slitaz.org" 2.208 2.209 + DEPENDS=$(find_depends $fs) 2.210 generate_receipt $receipt $package_file 2.211 2.212 show_unresolved_lib $receipt 2.213 @@ -226,6 +290,8 @@ 2.214 EOT 2.215 } 2.216 EOM 2.217 + fi 2.218 + 2.219 # Get full description 2.220 if [ ! -z "$SHORT_DESC" ]; then 2.221 grep ^$PACKAGE $fs/install/slack-desc | \ 2.222 @@ -234,7 +300,7 @@ 2.223 2.224 rm -rf $fs/install 2.225 2.226 - cd $tmp 2.227 + cd $tmpdir 2.228 tazpkg pack $file 2.229 cd - /dev/null 2.230 2.231 @@ -242,24 +308,24 @@ 2.232 else 2.233 eval_gettext "\$package_file does not look like a Slackware package !"; newline 2.234 fi 2.235 - rm -rf $tmp 2.236 + rm -rf $tmpdir 2.237 } 2.238 2.239 # convert a .deb package to .tazpkg 2.240 # Usage: convert_deb $package_file 2.241 convert_deb() { 2.242 - local $package_file=$1 2.243 + local $package_file="$1" 2.244 2.245 # Extract deb control 2.246 - mkdir -p $tmp 2.247 - dpkg-deb -e $package_file $tmp 2.248 + mkdir -p $tmpdir 2.249 + dpkg-deb -e $package_file $tmpdir 2.250 2.251 2.252 # filter control file for variable 2.253 # Usage: filter_vars $search_var 2.254 filter_vars() { 2.255 local var=$1 2.256 - local result=$(grep '^ *$var:' $tmp/control) 2.257 + local result=$(grep '^ *$var:' $tmpdir/control) 2.258 echo ${result##*:} 2.259 } 2.260 2.261 @@ -268,11 +334,11 @@ 2.262 SHORT_DESC=$(filter_vars "Description") 2.263 WEB_SITE="http://packages.debian.org/search?keywords=$PACKAGE" 2.264 MAINTAINER="nobody@slitaz.org" 2.265 - target="$(grep ^Architecture $tmp/control | sed 's/.*: //')" 2.266 + target="$(grep ^Architecture $tmpdir/control | sed 's/.*: //')" 2.267 2.268 case "$target" in 2.269 i386|all) 2.270 - local file="$tmp/$PACKAGE-$VERSION" 2.271 + local file="$tmpdir/$PACKAGE-$VERSION" 2.272 local receipt="$file/receipt" 2.273 local fs="$file/fs" 2.274 2.275 @@ -280,13 +346,12 @@ 2.276 mkdir -p $fs 2.277 dpkg-deb -x $package_file $fs 2.278 2.279 + DEPENDS=$(find_depends $fs) 2.280 generate_receipt $receipt $package_file 2.281 - 2.282 - cd $TMP_DIR 2.283 - 2.284 - if [ -s $tmp/conffiles ]; then 2.285 + 2.286 + if [ -s $tmpdir/conffiles ]; then 2.287 cat >> $receipt <<EOT 2.288 -CONFIG_FILES="$(cat $tmp/conffiles)" 2.289 +CONFIG_FILES="$(cat $tmpdir/conffiles)" 2.290 EOT 2.291 fi 2.292 2.293 @@ -295,7 +360,7 @@ 2.294 # Description.txt 2.295 [ -z "$SHORT_DESC" ] || echo "$SHORT_DESC" > $file/Description.txt 2.296 2.297 - cd $tmp 2.298 + cd $tmpdir 2.299 tazpkg pack $file 2.300 cd - > /dev/null 2.301 2.302 @@ -305,7 +370,7 @@ 2.303 gettext "Invalid target: $target (expected i386 or all)"; newline 2.304 ;; 2.305 esac 2.306 - rm -rf $tmp 2.307 + rm -rf $tmpdir 2.308 } 2.309 2.310 # convert a .rpm package to .tazpkg 2.311 @@ -314,9 +379,9 @@ 2.312 local package_file=$1 2.313 2.314 # Move package_file to tmp 2.315 - mkdir -p $tmp 2.316 - cp $package_file $tmp 2.317 - package_file=$TMP_DIR/$(basename $package_file) 2.318 + mkdir -p $tmpdir 2.319 + cp $package_file $tmpdir 2.320 + package_file=$tmpdir/$(basename $package_file) 2.321 2.322 # filter package_file for variable 2.323 # Usage: filter_vars $search_var 2.324 @@ -329,40 +394,42 @@ 2.325 VERSION=$(filter_vars "Version") 2.326 SHORT_DESC=$(filter_vars "Summary") 2.327 WEB_SITE=$(filter_vars "URL") 2.328 - if [ -z "$URL" ]; then 2.329 + if [ -z "$WEB_SITE" ]; then 2.330 WEB_SITE="http://rpmfind.net/linux/rpm2html/search.php?query=$PACKAGE" 2.331 fi 2.332 CATEGORY="misc"; 2.333 MAINTAINER="nobody@slitaz.org"; 2.334 2.335 2.336 - local file="$tmp/$PACKAGE-$VERSION" 2.337 + local file="$tmpdir/$PACKAGE-$VERSION" 2.338 local receipt="$file/receipt" 2.339 local fs="$file/fs" 2.340 2.341 mkdir -p $fs 2.342 2.343 - generate_receipt $receipt $package_file 2.344 - 2.345 - rpm -qip $PACKAGE_FILE | \ 2.346 + rpm -qip $package_file | \ 2.347 grep "^Description*" -A 100 | \ 2.348 grep -v "^Description*" > \ 2.349 $file/description.txt 2.350 2.351 cd $fs 2.352 - rpm2cpio $PACKAGE_FILE | cpio -idm --quiet 2.353 + rpm2cpio $package_file | cpio -idm --quiet 2.354 cd - > /dev/null 2.355 2.356 + 2.357 + DEPENDS=$(find_depends $fs) 2.358 + generate_receipt $receipt $package_file 2.359 + 2.360 show_unresolved_lib $receipt 2.361 2.362 - cd $tmp 2.363 + cd $tmpdir 2.364 tazpkg pack $file 2.365 cd - 2.366 2.367 mv $file.tazpkg . 2.368 2.369 unset_receipt 2.370 - rm -rf $TMP_DIR 2.371 + rm -rf $tmpdir 2.372 } 2.373 2.374