tazpkg diff modules/convert @ rev 822

Add README.devel; introduce libexec for modules; rename modules; support install variables in Makefile.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Sat Jul 25 16:50:18 2015 +0300 (2015-07-25)
parents
children 2f3580bd8c0c
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/modules/convert	Sat Jul 25 16:50:18 2015 +0300
     1.3 @@ -0,0 +1,750 @@
     1.4 +#!/bin/sh
     1.5 +
     1.6 +# This program is a part of TazPkg.
     1.7 +# /usr/bin/tazpkg-convert: toolset to convert alien package to the tazpkg format
     1.8 +
     1.9 +# Usage: tazpkg-convert alien_package [ target_directory ]
    1.10 +
    1.11 +
    1.12 +PACKAGE_FILE="$1"
    1.13 +TARGET_DIR="$2"
    1.14 +TMP_DIR=$(mktemp -d)
    1.15 +TOP_DIR="$(pwd)"
    1.16 +
    1.17 +. /etc/slitaz/slitaz.conf
    1.18 +. /lib/libtaz.sh
    1.19 +. @@MODULES@@/find-depends
    1.20 +
    1.21 +# Internationalization.
    1.22 +export TEXTDOMAIN='tazpkg'
    1.23 +
    1.24 +
    1.25 +# FIXME: what does this mean?
    1.26 +[ -n "$TARGET_DIR" -a -s "$TARGET_DIR/files.list.lzma" ] && TMPLOCALSTATE="$TARGET_DIR"
    1.27 +
    1.28 +
    1.29 +show_unresolved_lib() {
    1.30 +	if [ -s "$TMP_DIR/unresolved" ]; then
    1.31 +		echo -e "BUGS=\"$(_n 'No dependency for:')" >> $1
    1.32 +		sort < $TMP_DIR/unresolved | uniq | \
    1.33 +		while read file; do
    1.34 +			_ 'WARNING: unknown dependency for %s' "$lib"
    1.35 +			echo -n " $file" >> $1
    1.36 +		done
    1.37 +		echo "\"" >> $1
    1.38 +	fi
    1.39 +}
    1.40 +
    1.41 +
    1.42 +# convert a .tar.bz2 package to .tazpkg
    1.43 +
    1.44 +convert_upkg() {
    1.45 +	mkdir -p $TMP_DIR/fs
    1.46 +	tar -xjf "$PACKAGE_FILE" -C $TMP_DIR/fs
    1.47 +	if [ -d "$TMP_DIR/fs/var/lib/upkg/packages" ]; then
    1.48 +		cd $TMP_DIR
    1.49 +		package="$(sed '/^Package:/!d;s/.*: //' fs/var/lib/upkg/packages/*.info)"
    1.50 +		version="$(sed '/^Version:/!d;s/.*: //' fs/var/lib/upkg/packages/*.info)"
    1.51 +		url='http://www.paldo.org/'
    1.52 +		file="$package-$version"
    1.53 +		mkdir $file
    1.54 +		mv fs $file
    1.55 +		maintainer='nobody@slitaz.org'
    1.56 +		descrip="$package package from paldo."
    1.57 +		cat > $file/receipt <<EOT
    1.58 +# SliTaz package receipt.
    1.59 +# generated by tazpkg from package $(basename "$PACKAGE_FILE")
    1.60 +PACKAGE="$package"
    1.61 +VERSION="$version"
    1.62 +CATEGORY="misc"
    1.63 +SHORT_DESC="$descrip"
    1.64 +WEB_SITE="$url"
    1.65 +MAINTAINER="$maintainer"
    1.66 +DEPENDS="$(find_depends)"
    1.67 +EOT
    1.68 +		[ -s "$file/var/lib/upkg/files/*.config.bz2" ] &&
    1.69 +			cat >> $file/receipt <<EOT
    1.70 +CONFIG_FILES="$(bzcat $file/var/lib/upkg/files/*.config.bz2)"
    1.71 +EOT
    1.72 +		while read ext func ; do
    1.73 +			[ -s "$file/fs/var/lib/upkg/scripts/*.$ext" ] || continue
    1.74 +			cat >> $file/receipt <<EOT
    1.75 +
    1.76 +$func()
    1.77 +{
    1.78 +$(cat $file/fs/var/lib/upkg/scripts/*.$ext)
    1.79 +}
    1.80 +EOT
    1.81 +		done <<EOT
    1.82 +prerm	pre_remove
    1.83 +EOT
    1.84 +
    1.85 +		tazpkg pack $file
    1.86 +		mv $TMP_DIR/$file.tazpkg $TOP_DIR
    1.87 +	else
    1.88 +		_ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'upkg'
    1.89 +	fi
    1.90 +	cd $TOP_DIR
    1.91 +	rm -rf $TMP_DIR
    1.92 +}
    1.93 +
    1.94 +
    1.95 +# convert a .spack package to .tazpkg
    1.96 +
    1.97 +convert_spack() {
    1.98 +	mkdir -p $TMP_DIR
    1.99 +	( cd $TMP_DIR ; cpio -i ) < "$PACKAGE_FILE"
   1.100 +	cd $TMP_DIR
   1.101 +	package="$(sed '$!d;s/:.*//' about.txt)"
   1.102 +	version="$(basename "$PACKAGE_FILE" | sed "s/$package-\([^-]*\).*/\1/")"
   1.103 +	descrip="$(sed '$!d;s/.*: //' about.txt)"
   1.104 +	url='http://0linux.org/'
   1.105 +	maintainer='nobody@slitaz.org'
   1.106 +	file="$package-$version"
   1.107 +	mkdir -p $file/fs
   1.108 +	xzcat files.xz | ( cd $file/fs ; cpio -idmu )
   1.109 +	cat > $file/receipt <<EOT
   1.110 +# SliTaz package receipt.
   1.111 +# generated by tazpkg from package $(basename "$PACKAGE_FILE")
   1.112 +PACKAGE="$package"
   1.113 +VERSION="$version"
   1.114 +CATEGORY="misc"
   1.115 +SHORT_DESC="$descrip"
   1.116 +WEB_SITE="$url"
   1.117 +MAINTAINER="$maintainer"
   1.118 +DEPENDS="$(find_depends)"
   1.119 +EOT
   1.120 +	[ -s 'pre-install.sh' ] && cat >> $file/receipt <<EOT
   1.121 +
   1.122 +pre_install()
   1.123 +{
   1.124 +	cd /
   1.125 +$(sed 1d pre-install.sh)
   1.126 +}
   1.127 +EOT
   1.128 +	[ -s 'post-install.sh' ] && cat >> $file/receipt <<EOT
   1.129 +
   1.130 +post_install()
   1.131 +{
   1.132 +	cd /
   1.133 +$(sed '1,/^}/d' post-install.sh)
   1.134 +}
   1.135 +EOT
   1.136 +	tazpkg pack $file
   1.137 +	cd $TOP_DIR
   1.138 +	mv $TMP_DIR/$file.tazpkg .
   1.139 +	rm -rf $TMP_DIR
   1.140 +}
   1.141 +
   1.142 +
   1.143 +# convert a .ipk package to .tazpkg
   1.144 +
   1.145 +convert_ipk() {
   1.146 +	mkdir -p $TMP_DIR
   1.147 +	tar -xOzf "$PACKAGE_FILE" ./control.tar.gz | tar -xzf - -C $TMP_DIR
   1.148 +	package=$(sed '/^Package/!d;s/.*: //' $TMP_DIR/control)
   1.149 +	version=$(sed '/^Version/!d;s/.*: //' $TMP_DIR/control)
   1.150 +	maintainer="$(sed '/^Maintainer/!d;s/.*: //' $TMP_DIR/control)"
   1.151 +	target="$(sed '/^Architecture/!d;s/.*: //' $TMP_DIR/control)"
   1.152 +	descrip=$(sed '/^Description/!d;s/.*: //' $TMP_DIR/control)
   1.153 +	homepage=$(sed '/^Homepage/!d;s/.*: //' $TMP_DIR/control)
   1.154 +	url='http://openwrt.org/'
   1.155 +	case "$target" in
   1.156 +	i386|all)
   1.157 +		file="$package-$version"
   1.158 +		mkdir -p $TMP_DIR/$file/fs
   1.159 +		tar -xOzf "$PACKAGE_FILE" ./data.tar.gz | tar -xzf - -C $TMP_DIR/$file/fs
   1.160 +		cd $TMP_DIR
   1.161 +		cat > $file/receipt <<EOT
   1.162 +# SliTaz package receipt.
   1.163 +# generated by tazpkg from package $(basename "$PACKAGE_FILE")
   1.164 +PACKAGE="$package"
   1.165 +VERSION="$version"
   1.166 +CATEGORY="misc"
   1.167 +SHORT_DESC="$descrip"
   1.168 +WEB_SITE="${homepage:-$url}"
   1.169 +MAINTAINER="$maintainer"
   1.170 +DEPENDS="$(find_depends)"
   1.171 +EOT
   1.172 +		show_unresolved_lib $file/receipt
   1.173 +		[ -s 'conffiles' ] && cat >> $file/receipt <<EOT
   1.174 +CONFIG_FILES="$(cat conffiles)"
   1.175 +EOT
   1.176 +		show_unresolved_lib $file/receipt
   1.177 +		while read script func; do
   1.178 +			[ -s "$script" ] && cat >> $file/receipt <<EOT
   1.179 +
   1.180 +$func()
   1.181 +{
   1.182 +$(cat $script)
   1.183 +}
   1.184 +EOT
   1.185 +		done <<EOT
   1.186 +preinst		pre_install
   1.187 +postinst	post_install
   1.188 +prerm		pre_remove
   1.189 +postrm		post_remove
   1.190 +EOT
   1.191 +		awk '
   1.192 +{
   1.193 +   if (/^ / && show) print substr($0,2);
   1.194 +   else show=0;
   1.195 +   if (/^Description/) show=1;
   1.196 +}' < $TMP_DIR/control > $file/description.txt
   1.197 +		sed -i 's/^\.$//' $file/description.txt
   1.198 +		[ -s $file/description.txt ] || rm -f $file/description.txt
   1.199 +		tazpkg pack $file
   1.200 +		cd $TOP_DIR
   1.201 +		mv $TMP_DIR/$file.tazpkg .
   1.202 +		;;
   1.203 +	*)
   1.204 +		_ 'Invalid target: %s (expected i386)' "$target"
   1.205 +		;;
   1.206 +	esac
   1.207 +	rm -rf $TMP_DIR
   1.208 +}
   1.209 +
   1.210 +
   1.211 +# convert a .cards.tar.xz package to .tazpkg
   1.212 +
   1.213 +convert_nutyx() {
   1.214 +	mkdir -p $TMP_DIR/fs
   1.215 +	busybox tar -xf "$PACKAGE_FILE" -C $TMP_DIR/fs
   1.216 +	if [ -f "$TMP_DIR/fs/.META" ]; then
   1.217 +		package="$(sed '/^N/!d;s/^.//' fs/.META)"
   1.218 +		version="$(sed '/^V/!d;s/^.//' fs/.META)"
   1.219 +		descrip="$(sed '/^D/!d;s/^.//' fs/.META)"
   1.220 +		file="$package-$version"
   1.221 +		mkdir $file
   1.222 +		mv fs $file
   1.223 +		cat > $file/receipt <<EOT
   1.224 +# SliTaz package receipt.
   1.225 +# generated by tazpkg from NuTyX package $(basename "$PACKAGE_FILE")
   1.226 +PACKAGE="$package"
   1.227 +VERSION="$version"
   1.228 +CATEGORY="misc"
   1.229 +SHORT_DESC="$descrip"
   1.230 +WEB_SITE="http://www.nutyx.org/"
   1.231 +MAINTAINER="nobody@slitaz.org"
   1.232 +DEPENDS="$(find_depends)"
   1.233 +EOT
   1.234 +		show_unresolved_lib $file/receipt
   1.235 +		rm -f $file/fs/.[A-Z]*
   1.236 +		tazpkg pack $file
   1.237 +		mv $file.tazpkg $TOP_DIR
   1.238 +	else
   1.239 +		_ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'NuTyX'
   1.240 +	fi
   1.241 +	cd $TOP_DIR
   1.242 +	rm -rf $TMP_DIR
   1.243 +}
   1.244 +
   1.245 +
   1.246 +# convert a .pkg.tar.gz/.pkg.tar.xz/.apk package to .tazpkg
   1.247 +
   1.248 +convert_arch() {
   1.249 +	mkdir -p $TMP_DIR/fs
   1.250 +	busybox tar -xf "$PACKAGE_FILE" -C $TMP_DIR/fs
   1.251 +	if [ -f "$TMP_DIR/fs/.PKGINFO" ]; then
   1.252 +		cd $TMP_DIR
   1.253 +		package="$(sed '/^pkgname/!d;s/.*= //' fs/.PKGINFO)"
   1.254 +		version="$(sed '/^pkgver/!d;s/.*= //'  fs/.PKGINFO)"
   1.255 +		descrip="$(sed '/^pkgdesc/!d;s/.*= //' fs/.PKGINFO)"
   1.256 +		url="$(sed '/^url/!d;s/.*= //' fs/.PKGINFO)"
   1.257 +		maintainer="$(sed '/^packager/!d;s/.*= //' fs/.PKGINFO)"
   1.258 +		file="$package-$version"
   1.259 +		mkdir $file
   1.260 +		mv fs $file
   1.261 +		cat > $file/receipt <<EOT
   1.262 +# SliTaz package receipt.
   1.263 +# generated by tazpkg from Archlinux package $(basename "$PACKAGE_FILE")
   1.264 +PACKAGE="$package"
   1.265 +VERSION="$version"
   1.266 +CATEGORY="misc"
   1.267 +SHORT_DESC="$descrip"
   1.268 +WEB_SITE="$url"
   1.269 +MAINTAINER="$maintainer"
   1.270 +DEPENDS="$(find_depends)"
   1.271 +EOT
   1.272 +		show_unresolved_lib $file/receipt
   1.273 +		rm -f $file/fs/.[A-Z]*
   1.274 +		tazpkg pack $file
   1.275 +		mv $file.tazpkg $TOP_DIR
   1.276 +	else
   1.277 +		_ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Archlinux/Alpine'
   1.278 +	fi
   1.279 +	cd $TOP_DIR
   1.280 +	rm -rf $TMP_DIR
   1.281 +}
   1.282 +
   1.283 +
   1.284 +# get package and version from PACKAGE_FILE
   1.285 +
   1.286 +parse_pkgname() {
   1.287 +	package=$(basename "${2:-$PACKAGE_FILE}" "$1")
   1.288 +	IFS='-'
   1.289 +	set -- $package
   1.290 +	unset IFS
   1.291 +	package="$1"
   1.292 +	version="$2"
   1.293 +	if [ -z "$version" ]; then
   1.294 +		package=${1%%[0-9\.]*}
   1.295 +		version=${1#$package}
   1.296 +	fi
   1.297 +	file="$package-$version"
   1.298 +	mkdir $file
   1.299 +}
   1.300 +
   1.301 +
   1.302 +finish_convert_puppy() {
   1.303 +	rm -f fs/*.specs
   1.304 +	mv fs $file
   1.305 +	cat > $file/receipt <<EOT
   1.306 +# SliTaz package receipt.
   1.307 +# generated by tazpkg from puppy package $(basename "$PACKAGE_FILE")
   1.308 +PACKAGE="$package"
   1.309 +VERSION="$version"
   1.310 +CATEGORY="misc"
   1.311 +SHORT_DESC="$desc"
   1.312 +WEB_SITE="http://puppylinux.org/"
   1.313 +MAINTAINER="nobody@slitaz.org"
   1.314 +DEPENDS="$(find_depends)"
   1.315 +EOT
   1.316 +	show_unresolved_lib $file/receipt
   1.317 +	for i in install uninstall ; do
   1.318 +		[ -f "$file/fs/p$i.sh" ] && cat >> $file/receipt <<EOM
   1.319 +
   1.320 +post_$i()
   1.321 +{
   1.322 +chroot \$1/ sh - << EOT
   1.323 +cd /
   1.324 +$(sed -e 's/\\/\\\\/g' -e 's/\$/\\$/g' < $file/fs/p$i.sh ; rm -f $file/fs/p$i.sh)
   1.325 +EOT
   1.326 +}
   1.327 +EOM
   1.328 +	done
   1.329 +	sed -i 's/post_uninstall/post_remove/' $file/receipt
   1.330 +	tazpkg pack $file
   1.331 +	mv $file.tazpkg $TOP_DIR
   1.332 +	cd $TOP_DIR
   1.333 +	rm -rf $TMP_DIR
   1.334 +}
   1.335 +
   1.336 +
   1.337 +# convert a .sfs package to .tazpkg
   1.338 +
   1.339 +convert_sfs()
   1.340 +{
   1.341 +	[ -n "$(which unsquashfs)" ] || tazpkg get-install squashfs
   1.342 +	if ! unsquashfs -l "$PACKAGE_FILE" | grep -q squashfs-root/pet.specs$ ; then
   1.343 +		_ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Puppy'
   1.344 +		return 1
   1.345 +	fi
   1.346 +	mkdir -p $TMP_DIR 
   1.347 +	cd $TMP_DIR
   1.348 +	parse_pkgname .sfs
   1.349 +	unsquashfs "$PACKAGE_FILE"
   1.350 +	mv squashfs-root fs
   1.351 +	set -- $(cat fs/pet.specs)
   1.352 +	desc="$10"
   1.353 +	finish_convert_puppy
   1.354 +}
   1.355 +
   1.356 +
   1.357 +# convert a .pet package to .tazpkg
   1.358 +
   1.359 +convert_pet() {
   1.360 +	mkdir -p $TMP_DIR
   1.361 +	cd $TMP_DIR
   1.362 +	parse_pkgname .pet
   1.363 +	tar -xzf "$PACKAGE_FILE" 2>/dev/null
   1.364 +	. $package*/*.specs
   1.365 +	desc="$PETMENUDESCR"
   1.366 +	mv $package*/ fs
   1.367 +	finish_convert_puppy
   1.368 +}
   1.369 +
   1.370 +
   1.371 +# convert a .sb package to .tazpkg
   1.372 +
   1.373 +convert_sb() {
   1.374 +	[ -n "$(which unsquashfs)" ] || tazpkg get-install squashfs
   1.375 +	if ! unsquashfs -l "$PACKAGE_FILE" | grep -q squashfs-root/var/log/removed_scripts ; then
   1.376 +		_ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Slax'
   1.377 +		return 1
   1.378 +	fi
   1.379 +	mkdir -p $TMP_DIR
   1.380 +	cd $TMP_DIR
   1.381 +	unsquashfs "$PACKAGE_FILE"
   1.382 +	mv squashfs-root fs
   1.383 +	parse_pkgname '' $(cat fs/var/log/packages/* | sed '/PACKAGE NAME:/!d;s/.*: *//')
   1.384 +	desc="$(cat fs/var/log/packages/* | sed '/^PACKAGE DESCRIPTION:/,$!d;N;s/.*: //;q')"
   1.385 +	cat fs/var/log/packages/* | sed '/^PACKAGE DESCRIPTION:/,/FILE LIST/!d;s/.*://;/^$/d' > $file/description.txt
   1.386 +	mv fs $file
   1.387 +	cat > $file/receipt <<EOT
   1.388 +# SliTaz package receipt.
   1.389 +# generated by tazpkg from slax package $(basename "$PACKAGE_FILE")
   1.390 +PACKAGE="$package"
   1.391 +VERSION="$version"
   1.392 +CATEGORY="misc"
   1.393 +SHORT_DESC="$desc"
   1.394 +WEB_SITE="http://www.slax.org/"
   1.395 +MAINTAINER="nobody@slitaz.org"
   1.396 +DEPENDS="$(find_depends)"
   1.397 +EOT
   1.398 +	show_unresolved_lib $file/receipt
   1.399 +	[ -f "$file/fs/var/log/scripts/$package*" ] && cat >> $file/receipt <<EOM
   1.400 +
   1.401 +post_install()
   1.402 +{
   1.403 +chroot \$1/ sh - << EOT
   1.404 +cd /
   1.405 +$(cat $file/fs/var/log/scripts/$package* | sed -e 's/\\/\\\\/g' | sed -e 's/\$/\\$/g')
   1.406 +EOT
   1.407 +}
   1.408 +EOM
   1.409 +	tazpkg pack $file
   1.410 +	mv $file.tazpkg $TOP_DIR
   1.411 +	cd $TOP_DIR
   1.412 +	rm -rf $TMP_DIR
   1.413 +}
   1.414 +
   1.415 +
   1.416 +# convert a .tgz package to .tazpkg
   1.417 +
   1.418 +convert_tgz() {
   1.419 +	parse_pkgname
   1.420 +	mkdir -p $TMP_DIR/$file/fs
   1.421 +	case "$PACKAGE_FILE" in
   1.422 +	*.txz) tar -xJf "$PACKAGE_FILE" -C $TMP_DIR/$file/fs ;;
   1.423 +	*.tgz) tar -xzf "$PACKAGE_FILE" -C $TMP_DIR/$file/fs ;;
   1.424 +	esac
   1.425 +	cd $TMP_DIR
   1.426 +	if [ -d "$file/fs/install" ]; then
   1.427 +		descrip=$(sed "/^$package/!d;s/.*(\\(.*\\)).*/\\1/;q" \
   1.428 +			  $file/fs/install/slack-desc)
   1.429 +		cat > $file/receipt <<EOT
   1.430 +# SliTaz package receipt.
   1.431 +# generated by tazpkg from slackware package $(basename "$PACKAGE_FILE")
   1.432 +PACKAGE="$package"
   1.433 +VERSION="$version"
   1.434 +CATEGORY="misc"
   1.435 +SHORT_DESC="$descrip"
   1.436 +WEB_SITE="http://www.slackware.com/packages/"
   1.437 +MAINTAINER="nobody@slitaz.org"
   1.438 +DEPENDS="$(find_depends)"
   1.439 +EOT
   1.440 +		show_unresolved_lib $file/receipt
   1.441 +		[ -f "$file/fs/install/doinst.sh" ] && cat >> $file/receipt <<EOM
   1.442 +
   1.443 +post_install()
   1.444 +{
   1.445 +chroot \$1/ sh - << EOT
   1.446 +cd /
   1.447 +$(sed -e 's/\\/\\\\/g' -e 's/\$/\\$/g' < $file/fs/install/doinst.sh)
   1.448 +EOT
   1.449 +}
   1.450 +EOM
   1.451 +		sed "/^$package/:d;s/^$package://" \
   1.452 +			$file/fs/install/slack-desc > $file/description.txt
   1.453 +		[ -s "$file/description.txt" ] || rm -f $file/description.txt
   1.454 +		rm -rf $file/fs/install
   1.455 +		tazpkg pack $file
   1.456 +		mv $file.tazpkg $TOP_DIR
   1.457 +	else
   1.458 +		_ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Slackware'
   1.459 +	fi
   1.460 +	cd $TOP_DIR
   1.461 +	rm -rf $TMP_DIR
   1.462 +}
   1.463 +
   1.464 +
   1.465 +# convert a .deb package to .tazpkg
   1.466 +
   1.467 +convert_deb() {
   1.468 +	mkdir -p $TMP_DIR
   1.469 +	dpkg-deb -e "$PACKAGE_FILE" $TMP_DIR
   1.470 +	package=$(sed '/^ *Package:/!d;s/.*: //' $TMP_DIR/control)
   1.471 +	version=$(sed '/^ *Version:/!d;s/.*: //' $TMP_DIR/control)
   1.472 +	descrip=$(sed '/^ *Description:/!d;s/.*: //' $TMP_DIR/control)
   1.473 +	homepage=$(sed '/^ *Homepage:/!d;s/.*: //' $TMP_DIR/control)
   1.474 +	target="$(sed '/^ *Architecture:/!d;s/.*: //' $TMP_DIR/control)"
   1.475 +	case "$target" in
   1.476 +	i386|all)
   1.477 +		file="$package-$version"
   1.478 +		mkdir -p $TMP_DIR/$file/fs/
   1.479 +		dpkg-deb -x "$PACKAGE_FILE" $TMP_DIR/$file/fs
   1.480 +		cd $TMP_DIR
   1.481 +		cat > $file/receipt <<EOT
   1.482 +# SliTaz package receipt.
   1.483 +# generated by tazpkg from debian package $(basename "$PACKAGE_FILE")
   1.484 +PACKAGE="$package"
   1.485 +VERSION="$version"
   1.486 +CATEGORY="misc"
   1.487 +SHORT_DESC="$descrip"
   1.488 +WEB_SITE="${homepage:-http://packages.debian.org/search?keywords=$package}"
   1.489 +MAINTAINER="nobody@slitaz.org"
   1.490 +EOT
   1.491 +		LICENSE="$(grep /usr/share/common-licenses/ \
   1.492 +		  "$PACKAGE_FILE" $TMP_DIR/$file/fs/usr/share/doc/*/copyright | \
   1.493 +		  sed 's|.*common-licenses/\([-\.A-Za-z0-9]*\).*|\1|;s|[-\.]$||;q')"
   1.494 +		[ -n "$LICENSE" ] && echo "LICENSE=\"$LICENSE\"" >> $file/receipt
   1.495 +		echo "DEPENDS=\"$(find_depends)\"" >> $file/receipt
   1.496 +		[ -s 'conffiles' ] && cat >> $file/receipt <<EOT
   1.497 +CONFIG_FILES="$(cat conffiles)"
   1.498 +EOT
   1.499 +		show_unresolved_lib $file/receipt
   1.500 +		awk '
   1.501 +{
   1.502 +   if (/^ / && show) print substr($0,2);
   1.503 +   else show=0;
   1.504 +   if (/^Description/) show=1;
   1.505 +}' < $TMP_DIR/control > $file/description.txt
   1.506 +		sed -i 's/^\.$//' $file/description.txt
   1.507 +		[ -s "$file/description.txt" ] || rm -f $file/description.txt
   1.508 +		tazpkg pack $file
   1.509 +		mv $file.tazpkg $TOP_DIR
   1.510 +		;;
   1.511 +	*)
   1.512 +		_ 'Invalid target: %s (expected i386)' "$target"
   1.513 +		;;
   1.514 +	esac
   1.515 +	cd $TOP_DIR
   1.516 +	rm -rf $TMP_DIR
   1.517 +}
   1.518 +
   1.519 +
   1.520 +# convert a .rpm package to .tazpkg
   1.521 +
   1.522 +convert_rpm() {
   1.523 +	mkdir -p $TMP_DIR
   1.524 +	cp "$PACKAGE_FILE" $TMP_DIR
   1.525 +	PACKAGE_FILE="$TMP_DIR/$(basename "$PACKAGE_FILE")"
   1.526 +	rpm -qip "$PACKAGE_FILE" | awk -v pkg="$(basename "$PACKAGE_FILE")" '
   1.527 +BEGIN {
   1.528 +	goturl=0;
   1.529 +	printf "# SliTaz package receipt.\n";
   1.530 +	printf "# generated by tazpkg from rpm package %s\n",pkg;
   1.531 +}
   1.532 +{
   1.533 +	if (/^Name/) { name=$3; printf "PACKAGE=\"%s\"\n",$3; }
   1.534 +	if (/^Version/) printf "VERSION=\"%s-",$3;
   1.535 +	if (/^Release/) printf "%s\"\n",$3;
   1.536 +	if (/^Summary/) printf "SHORT_DESC=\"%s\"\n",substr($0,15);
   1.537 +	if (/^URL/) { goturl=1; printf "WEB_SITE=\"%s\"\n",$3; }
   1.538 +}
   1.539 +END {
   1.540 +	if (goturl == 0)
   1.541 +		printf "WEB_SITE=\"http://rpmfind.net/linux/rpm2html/search.php?query=%s\"\n",name;
   1.542 +	printf "CATEGORY=\"misc\"\n";
   1.543 +	printf "MAINTAINER=\"nobody@slitaz.org\"\n";
   1.544 +}
   1.545 +' > $TMP_DIR/receipt
   1.546 +	. $TMP_DIR/receipt
   1.547 +	file="$PACKAGE-$VERSION"
   1.548 +	mkdir -p $TMP_DIR/$file/fs/
   1.549 +	mv $TMP_DIR/receipt $TMP_DIR/$file
   1.550 +	rpm -qip "$PACKAGE_FILE" | awk '
   1.551 +BEGIN { show=0 }
   1.552 +{
   1.553 +  if (show) print;
   1.554 +  if (/^Description/) show=1;
   1.555 +}
   1.556 +' > $TMP_DIR/$file/description.txt
   1.557 +	cd $TMP_DIR/$file/fs/
   1.558 +	rpm2cpio "$PACKAGE_FILE" | cpio -idm --quiet
   1.559 +	# rpm2cpio can't extract some new RPMs
   1.560 +	if [ $? -eq 1 ]; then
   1.561 +		if [ ! -e $INSTALLED/p7zip-full/receipt ]; then
   1.562 +			boldify "$(_ 'Unable to extract the RPM using standard tools (rpm2cpio).')"
   1.563 +			confirm "$(_n 'Do you want to install "%s" package? (y/N)' 'p7zip-full')"
   1.564 +			if [ $? -eq 0 ]; then
   1.565 +				tazpkg -gi p7zip-full
   1.566 +			else
   1.567 +				rm -rf $TMP_DIR
   1.568 +				exit 1
   1.569 +			fi
   1.570 +		fi
   1.571 +		# we may already have 7z or may have just installed it in the step above
   1.572 +		if [ -e "$INSTALLED/p7zip-full/receipt" ]; then
   1.573 +			7z x -so "$PACKAGE_FILE" | cpio -idm --quiet
   1.574 +		fi
   1.575 +	fi
   1.576 +	cd ../..
   1.577 +	echo "DEPENDS=\"$(find_depends)\"" >> $TMP_DIR/$file/receipt
   1.578 +	show_unresolved_lib $TMP_DIR/$file/receipt
   1.579 +	tazpkg pack $file
   1.580 +	mv $file.tazpkg $TOP_DIR
   1.581 +	cd $TOP_DIR
   1.582 +	rm -rf $TMP_DIR
   1.583 +}
   1.584 +
   1.585 +
   1.586 +# convert a .xbps package to .tazpkg (http://repo.voidlinux.eu/current/)
   1.587 +
   1.588 +xbpstag() {
   1.589 +	sed "/<key>$1<\/key>/!d{n;s/.*>\\(.*\\)<.*/\\1/}" \
   1.590 +		< fs/props.plist | sed \$!d
   1.591 +}
   1.592 +
   1.593 +convert_xbps() {
   1.594 +	mkdir -p $TMP_DIR/fs
   1.595 +	( xzcat "$PACKAGE_FILE" || bzcat "$PACKAGE_FILE" || zcat "$PACKAGE_FILE" ) | \
   1.596 +		tar -xf - -C $TMP_DIR/fs
   1.597 +
   1.598 +	cd $TMP_DIR
   1.599 +	HOST_ARCH="$(xbpstag architecture)"
   1.600 +	case "$HOST_ARCH" in
   1.601 +		i686)	HOST_ARCH='i486';;
   1.602 +		*)		_ 'Arch "%s" not supported.' "$HOST_ARCH"
   1.603 +				HOST_ARCH='';;
   1.604 +	esac
   1.605 +
   1.606 +	if [ -n "$HOST_ARCH" ]; then
   1.607 +		package="$(xbpstag pkgname)"
   1.608 +		version="$(xbpstag version)"
   1.609 +		file="$package-$version"
   1.610 +		mkdir $file
   1.611 +		cat > $file/receipt <<EOT
   1.612 +# SliTaz package receipt.
   1.613 +# generated by tazpkg from package $(basename "$PACKAGE_FILE")
   1.614 +PACKAGE="$package"
   1.615 +VERSION="$version"
   1.616 +CATEGORY="misc"
   1.617 +SHORT_DESC="$(xbpstag short_desc)"
   1.618 +WEB_SITE="$(xbpstag homepage)"
   1.619 +MAINTAINER="$(xbpstag maintainer | sed 's/&gt;/>/;s/&lt;/</')"
   1.620 +LICENSE="$(xbpstag license | sed 's/-//g')"
   1.621 +HOST_ARCH="$HOST_ARCH"
   1.622 +CONFIG_FILES="$(sed '/<key>conf_files<\/key>/,/<key>/!d;/array>/d;/<key>/d;s/.*>\(.*\)<.*/\1/' fs/props.plist)"
   1.623 +
   1.624 +DEPENDS="$(find_depends)"
   1.625 +
   1.626 +EOT
   1.627 +		while read script func ; do
   1.628 +			[ -s "fs/$script" ] && cat >> $file/receipt <<EOT
   1.629 +xbps_$func()
   1.630 +{
   1.631 +set +e
   1.632 +$(cat fs/$script)
   1.633 +}
   1.634 +
   1.635 +pre_$func()
   1.636 +{
   1.637 +	xbps_$func pre $package $version yes /etc/xbps.conf $HOST_ARCH
   1.638 +}
   1.639 +
   1.640 +post_$func()
   1.641 +{
   1.642 +	xbps_$func post $package $version yes /etc/xbps.conf $HOST_ARCH
   1.643 +}
   1.644 +
   1.645 +EOT
   1.646 +			rm -f fs/$script
   1.647 +		done <<EOT
   1.648 +INSTALL		install
   1.649 +REMOVE		remove
   1.650 +EOT
   1.651 +		rm -f fs/*.plist
   1.652 +		mv fs $package-$version
   1.653 +		tazpkg pack $package-$version
   1.654 +		mv $package-$version.tazpkg $TOP_DIR
   1.655 +	fi
   1.656 +	cd $TOP_DIR
   1.657 +	rm -rf $TMP_DIR
   1.658 +}
   1.659 +
   1.660 +
   1.661 +finish_convert_tinycore() {
   1.662 +	cat > $file/receipt <<EOT
   1.663 +# SliTaz package receipt.
   1.664 +# generated by tazpkg from tinycore package $(basename "$PACKAGE_FILE")
   1.665 +PACKAGE="$package"
   1.666 +VERSION="$version"
   1.667 +CATEGORY="misc"
   1.668 +SHORT_DESC="tinycore package $(basename "$PACKAGE_FILE")"
   1.669 +WEB_SITE="http://tinycorelinux.net/"
   1.670 +MAINTAINER="nobody@slitaz.org"
   1.671 +DEPENDS="$(find_depends)"
   1.672 +EOT
   1.673 +	show_unresolved_lib $file/receipt
   1.674 +	script="$file/fs/usr/local/tce.installed/$PACKAGE"
   1.675 +	[ -f "$script" ] && cat >> $file/receipt <<EOM
   1.676 +
   1.677 +post_install()
   1.678 +{
   1.679 +chroot \$1/ sh - << EOT
   1.680 +cd /
   1.681 +$(sed -e 's/\\/\\\\/g' -e 's/\$/\\$/g' < $script)
   1.682 +EOT
   1.683 +}
   1.684 +EOM
   1.685 +	[ -d "$file/fs/usr/local/tce.installed" ] &&
   1.686 +	rm -rf $file/fs/usr/local/tce.installed
   1.687 +	tazpkg pack $file
   1.688 +	mv $file.tazpkg $TOP_DIR
   1.689 +	cd $TOP_DIR
   1.690 +	rm -rf $TMP_DIR
   1.691 +}
   1.692 +
   1.693 +
   1.694 +# convert a .tce package to .tazpkg
   1.695 +
   1.696 +convert_tce() {
   1.697 +	if ! tar -tzf "$PACKAGE_FILE" | grep -q ^usr/local ; then
   1.698 +		_ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Tinycore'
   1.699 +		return 1
   1.700 +	fi
   1.701 +	mkdir -p $TMP_DIR
   1.702 +	cd $TMP_DIR
   1.703 +	case "$PACKAGE_FILE" in
   1.704 +		*.tcel) parse_pkgname .tcel ;;
   1.705 +		*.tcem) parse_pkgname .tcem ;;
   1.706 +		*)      parse_pkgname .tce ;;
   1.707 +	esac
   1.708 +	mkdir -p $file/fs
   1.709 +	tar -xzf "$PACKAGE_FILE" -C $file/fs
   1.710 +	finish_convert_tinycore
   1.711 +}
   1.712 +
   1.713 +
   1.714 +# convert a .tcz package to .tazpkg
   1.715 +
   1.716 +convert_tcz() {
   1.717 +	[ -n "$(which unsquashfs)" ] || tazpkg get-install squashfs
   1.718 +	if ! unsquashfs -l "$PACKAGE_FILE" | grep -q squashfs-root/$ ; then
   1.719 +		_ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Tinycore'
   1.720 +		return 1
   1.721 +	fi
   1.722 +	mkdir -p $TMP_DIR
   1.723 +	cd $TMP_DIR
   1.724 +	parse_pkgname .tcz
   1.725 +	unsquashfs "$PACKAGE_FILE"
   1.726 +	mv squashfs-root $file/fs
   1.727 +	finish_convert_tinycore
   1.728 +}
   1.729 +
   1.730 +
   1.731 +if [ "$(dd if="$PACKAGE_FILE" bs=8 count=1 skip=1 2>/dev/null)" == 'debian-b' ]; then
   1.732 +	convert_deb
   1.733 +else
   1.734 +	case "$PACKAGE_FILE" in
   1.735 +		*.deb|*.udeb)			convert_deb;;
   1.736 +		*.rpm)					convert_rpm;;
   1.737 +		*.sb)					convert_sb;;
   1.738 +		*.sfs)					convert_sfs;;
   1.739 +		*.pet)					convert_pet;;
   1.740 +		*.txz|*.tgz)				convert_tgz;;
   1.741 +		*.cards.tar.xz)			convert_nutyx;;
   1.742 +		*.apk|*.pkg.tar.gz|*.pkg.tar.xz)	convert_arch;;
   1.743 +		*.ipk|*.opk)			convert_ipk;;
   1.744 +		*.spack)				convert_spack;;
   1.745 +		*.tar.bz2)				convert_upkg;;
   1.746 +		*.xbps)					convert_xbps;;
   1.747 +		*.tce|*.tcel|*.tcem)	convert_tce;;
   1.748 +		*.tcz)					convert_tcz;;
   1.749 +		*)						_ 'Unsupported format';;
   1.750 +	esac
   1.751 +fi
   1.752 +
   1.753 +exit 0