#!/bin/sh
# TazPkg - Tiny autonomous zone packages manager, hg.slitaz.org/tazpkg
# convert - TazPkg module
# Toolset to convert alien package to the tazpkg format


# Usage: tazpkg-convert alien_package [ target_directory ]


PACKAGE_FILE="$1"
TARGET_DIR="$2"
TMP_DIR=$(mktemp -d)
TOP_DIR="$(pwd)"

. @@MODULES@@/find-depends

# Get TazPkg working environment
. @@MODULES@@/getenv


# FIXME: what does this mean?
[ -n "$TARGET_DIR" -a -s "$TARGET_DIR/files.list.lzma" ] && TMPLOCALSTATE="$TARGET_DIR"


show_unresolved_lib() {
	if [ -s "$TMP_DIR/unresolved" ]; then
		echo -e "BUGS=\"$(_n 'No dependency for:')" >> $1
		sort < $TMP_DIR/unresolved | uniq | \
		while read file; do
			_ 'WARNING: unknown dependency for %s' "$lib"
			echo -n " $file" >> $1
		done
		echo "\"" >> $1
	fi
}


# convert a .tar.bz2 package to .tazpkg

convert_upkg() {
	mkdir -p "$TMP_DIR/fs"
	tar -xjf "$PACKAGE_FILE" -C "$TMP_DIR/fs"
	if [ -d "$TMP_DIR/fs/var/lib/upkg/packages" ]; then
		cd "$TMP_DIR"
		package=$(sed '/^Package:/!d;s/.*: //' fs/var/lib/upkg/packages/*.info)
		version=$(sed '/^Version:/!d;s/.*: //' fs/var/lib/upkg/packages/*.info)
		url='http://www.paldo.org/'
		file="$package-$version"
		mkdir "$file"
		mv fs "$file"
		maintainer='nobody@slitaz.org'
		descrip="$package package from paldo."
		cat > "$file/receipt" <<EOT
# SliTaz package receipt.
# generated by tazpkg from package $(basename "$PACKAGE_FILE")
PACKAGE="$package"
VERSION="$version"
CATEGORY="misc"
SHORT_DESC="$descrip"
WEB_SITE="$url"
MAINTAINER="$maintainer"
DEPENDS="$(find_depends .)"
EOT
		[ -s $file/var/lib/upkg/files/*.config.bz2 ] &&
			cat >> "$file/receipt" <<EOT
CONFIG_FILES="$(bzcat $file/var/lib/upkg/files/*.config.bz2)"
EOT
		while read ext func; do
			[ -s $file/fs/var/lib/upkg/scripts/*.$ext ] || continue
			cat >> "$file/receipt" <<EOT

$func()
{
$(cat $file/fs/var/lib/upkg/scripts/*.$ext)
}
EOT
		done <<EOT
prerm	pre_remove
EOT

		tazpkg pack "$file"
		mv "$TMP_DIR/$file.tazpkg" "$TOP_DIR"
	else
		_ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'upkg'
	fi
	cd "$TOP_DIR"
	rm -rf "$TMP_DIR"
}


# convert a .spack package to .tazpkg

convert_spack() {
	mkdir -p "$TMP_DIR"
	( cd "$TMP_DIR"; cpio -i ) < "$PACKAGE_FILE"
	cd "$TMP_DIR"
	package=$(sed '$!d;s/:.*//' about.txt)
	version=$(basename "$PACKAGE_FILE" | sed "s/$package-\([^-]*\).*/\1/")
	descrip=$(sed '$!d;s/.*: //' about.txt)
	url='http://0linux.org/'
	maintainer='nobody@slitaz.org'
	file="$package-$version"
	mkdir -p "$file/fs"
	xzcat files.xz | ( cd "$file/fs"; cpio -idmu )
	cat > "$file/receipt" <<EOT
# SliTaz package receipt.
# generated by tazpkg from package $(basename "$PACKAGE_FILE")
PACKAGE="$package"
VERSION="$version"
CATEGORY="misc"
SHORT_DESC="$descrip"
WEB_SITE="$url"
MAINTAINER="$maintainer"
DEPENDS="$(find_depends .)"
EOT
	[ -s 'pre-install.sh' ] && cat >> "$file/receipt" <<EOT

pre_install()
{
	cd /
$(sed 1d pre-install.sh)
}
EOT
	[ -s 'post-install.sh' ] && cat >> "$file/receipt" <<EOT

post_install()
{
	cd /
$(sed '1,/^}/d' post-install.sh)
}
EOT
	tazpkg pack "$file"
	cd "$TOP_DIR"
	mv "$TMP_DIR/$file.tazpkg" .
	rm -rf "$TMP_DIR"
}


# convert a .ipk package to .tazpkg

convert_ipk() {
	mkdir -p "$TMP_DIR"
	tar -xOzf "$PACKAGE_FILE" ./control.tar.gz | tar -xzf - -C "$TMP_DIR"
	package=$(   sed '/^Package/!d;s/.*: //'      "$TMP_DIR/control")
	version=$(   sed '/^Version/!d;s/.*: //'      "$TMP_DIR/control")
	maintainer=$(sed '/^Maintainer/!d;s/.*: //'   "$TMP_DIR/control")
	target=$(    sed '/^Architecture/!d;s/.*: //' "$TMP_DIR/control")
	descrip=$(   sed '/^Description/!d;s/.*: //'  "$TMP_DIR/control")
	homepage=$(  sed '/^Homepage/!d;s/.*: //'     "$TMP_DIR/control")
	url='http://openwrt.org/'
	case "$target" in
	i386|all)
		file="$package-$version"
		mkdir -p "$TMP_DIR/$file/fs"
		tar -xOzf "$PACKAGE_FILE" ./data.tar.gz | tar -xzf - -C "$TMP_DIR/$file/fs"
		cd "$TMP_DIR"
		cat > "$file/receipt" <<EOT
# SliTaz package receipt.
# generated by tazpkg from package $(basename "$PACKAGE_FILE")
PACKAGE="$package"
VERSION="$version"
CATEGORY="misc"
SHORT_DESC="$descrip"
WEB_SITE="${homepage:-$url}"
MAINTAINER="$maintainer"
DEPENDS="$(find_depends .)"
EOT
		show_unresolved_lib "$file/receipt"
		[ -s 'conffiles' ] && cat >> "$file/receipt" <<EOT
CONFIG_FILES=$(cat conffiles)
EOT
		show_unresolved_lib "$file/receipt"
		while read script func; do
			[ -s "$script" ] && cat >> "$file/receipt" <<EOT

$func()
{
$(cat "$script")
}
EOT
		done <<EOT
preinst		pre_install
postinst	post_install
prerm		pre_remove
postrm		post_remove
EOT
		awk '
{
	if (/^ / && show)
		print substr($0,2);
	else
		show=0;
	if (/^Description/)
		show=1;
}' < "$TMP_DIR/control" > "$file/description.txt"
		sed -i 's/^\.$//' "$file/description.txt"
		[ -s "$file/description.txt" ] || rm -f "$file/description.txt"
		tazpkg pack "$file"
		cd "$TOP_DIR"
		mv "$TMP_DIR/$file.tazpkg" .
		;;
	*)
		_ 'Invalid target: %s (expected i386)' "$target"
		;;
	esac
	rm -rf "$TMP_DIR"
}


# convert a .cards.tar.xz package to .tazpkg

convert_nutyx() {
	mkdir -p "$TMP_DIR/fs"
	tar -xf "$PACKAGE_FILE" -C "$TMP_DIR/fs"
	if [ -f "$TMP_DIR/fs/.META" ]; then
		package=$(sed '/^N/!d;s/^.//' fs/.META)
		version=$(sed '/^V/!d;s/^.//' fs/.META)
		descrip=$(sed '/^D/!d;s/^.//' fs/.META)
		file="$package-$version"
		mkdir "$file"
		mv fs "$file"
		cat > "$file/receipt" <<EOT
# SliTaz package receipt.
# generated by tazpkg from NuTyX package $(basename "$PACKAGE_FILE")
PACKAGE="$package"
VERSION="$version"
CATEGORY="misc"
SHORT_DESC="$descrip"
WEB_SITE="http://www.nutyx.org/"
MAINTAINER="nobody@slitaz.org"
DEPENDS="$(find_depends .)"
EOT
		show_unresolved_lib "$file/receipt"
		rm -f $file/fs/.[A-Z]*
		tazpkg pack "$file"
		mv "$file.tazpkg" "$TOP_DIR"
	else
		_ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'NuTyX'
	fi
	cd "$TOP_DIR"
	rm -rf "$TMP_DIR"
}


# convert a .pkg.tar.gz/.pkg.tar.xz/.apk package to .tazpkg

convert_arch() {
	mkdir -p "$TMP_DIR/fs"
	tar -xf "$PACKAGE_FILE" -C "$TMP_DIR/fs"
	if [ -f "$TMP_DIR/fs/.PKGINFO" ]; then
		cd "$TMP_DIR"
		package=$(   sed '/^pkgname/!d;s/.*= //'  fs/.PKGINFO)
		version=$(   sed '/^pkgver/!d;s/.*= //'   fs/.PKGINFO)
		descrip=$(   sed '/^pkgdesc/!d;s/.*= //'  fs/.PKGINFO)
		url=$(       sed '/^url/!d;s/.*= //'      fs/.PKGINFO)
		maintainer=$(sed '/^packager/!d;s/.*= //' fs/.PKGINFO)
		file="$package-$version"
		mkdir "$file"
		mv fs "$file"
		cat > "$file/receipt" <<EOT
# SliTaz package receipt.
# generated by tazpkg from Archlinux package $(basename "$PACKAGE_FILE")
PACKAGE="$package"
VERSION="$version"
CATEGORY="misc"
SHORT_DESC="$descrip"
WEB_SITE="$url"
MAINTAINER="$maintainer"
DEPENDS="$(find_depends .)"
EOT
		show_unresolved_lib "$file/receipt"
		rm -f $file/fs/.[A-Z]*
		tazpkg pack "$file"
		mv "$file.tazpkg" "$TOP_DIR"
	else
		_ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Archlinux/Alpine'
	fi
	cd "$TOP_DIR"
	rm -rf "$TMP_DIR"
}


# get package and version from PACKAGE_FILE

parse_pkgname() {
	debug "parse_pkgname('$1', '$2')"
	package=$(basename "${2:-$PACKAGE_FILE}" "$1")
	IFS='-'
	set -- "$package"
	unset IFS
	package="$1"
	version="$2"
	if [ -z "$version" ]; then
		package=${1%%-[0-9\.]*}
		version=${1#$package-}
	fi
	file="$package-$version"
	mkdir "$file"
	debug "  package='$package' version='$version' file='$file'"
}


finish_convert_puppy() {
	rm -f fs/*.specs
	mkdir "$file"; mv fs "$file"
	cat > "$file/receipt" <<EOT
# SliTaz package receipt.
# generated by tazpkg from puppy package $(basename "$PACKAGE_FILE")
PACKAGE="$package"
VERSION="$version"
CATEGORY="misc"
SHORT_DESC="$desc"
WEB_SITE="http://puppylinux.org/"
MAINTAINER="nobody@slitaz.org"
DEPENDS="$(find_depends .)"
EOT
	show_unresolved_lib "$file/receipt"
	for i in install uninstall; do
		if [ -f "$file/fs/p$i.sh" ]; then
			SEPARATOR="EOT$RANDOM"
			cat >> "$file/receipt" <<EOT

post_$i()
{
chroot \$1/ sh - <<$SEPARATOR
	cd /
	$(sed -e 's/\\/\\\\/g' -e 's/\$/\\$/g' < "$file/fs/p$i.sh" ; rm -f "$file/fs/p$i.sh")
$SEPARATOR
}
EOT
		fi
	done
	sed -i 's/post_uninstall/post_remove/' "$file/receipt"
	tazpkg pack "$file"
	mv "$file.tazpkg" "$TOP_DIR"
	cd "$TOP_DIR"
	rm -rf "$TMP_DIR"
}


# convert a .sfs package to .tazpkg

convert_sfs() {
	[ -n "$(which unsquashfs)" ] || tazpkg get-install squashfs
	if ! unsquashfs -l "$PACKAGE_FILE" | grep -q squashfs-root/pet.specs$ ; then
		_ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Puppy'
		return 1
	fi
	mkdir -p "$TMP_DIR"
	cd "$TMP_DIR"
	parse_pkgname .sfs
	unsquashfs "$PACKAGE_FILE"
	mv squashfs-root fs
	set -- $(cat fs/pet.specs)
	desc="${10}"
	finish_convert_puppy
}


# convert a .pet package to .tazpkg

convert_pet() {
	debug "convert_pet()"
	mkdir -p "$TMP_DIR"
	cd "$TMP_DIR"
	parse_pkgname .pet
	busybox tar -xzf "$PACKAGE_FILE"

	# Get package description
	PET_SPECS="$(find $TMP_DIR -maxdepth 2 -type f -name 'pet.specs')"
	if [ -e "$PET_SPECS" ]; then
		debug "pet.specs with '|'"
		desc="$(awk -F'|' '{print $10}' $PET_SPECS)"
	else
		PET_SPECS="$(find $TMP_DIR -maxdepth 2 -type f -name '*.pet.specs')"
		if [ -e "$PET_SPECS" ]; then
			desc="$(. "$PET_SPECS"; echo "$PETMENUDESCR")"
		else
			DESKTOP="$(find $TMP_DIR -type f -name '*.desktop' | head -n1)"
			if [ -n "$DESKTOP" ]; then
				desc="$(awk -F'=' '($1=="Name"){print $2}' $DESKTOP)"
			fi
		fi
	fi
	[ -z "$desc" ] && desc="$package"
	debug "desc='$desc'"
	mv $package*/ fs
	finish_convert_puppy
}


# convert a .sb package to .tazpkg

convert_sb() {
	[ -n "$(which unsquashfs)" ] || tazpkg get-install squashfs
	if ! unsquashfs -l "$PACKAGE_FILE" | grep -q squashfs-root/var/log/removed_scripts ; then
		_ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Slax'
		return 1
	fi
	mkdir -p "$TMP_DIR"
	cd "$TMP_DIR"
	unsquashfs "$PACKAGE_FILE"
	mv squashfs-root fs
	parse_pkgname '' $(cat fs/var/log/packages/* | sed '/PACKAGE NAME:/!d;s/.*: *//')
	desc="$(cat fs/var/log/packages/* | sed '/^PACKAGE DESCRIPTION:/,$!d;N;s/.*: //;q')"
	cat fs/var/log/packages/* | sed '/^PACKAGE DESCRIPTION:/,/FILE LIST/!d;s/.*://;/^$/d' > "$file/description.txt"
	mv fs "$file"
	cat > "$file/receipt" <<EOT
# SliTaz package receipt.
# generated by tazpkg from slax package $(basename "$PACKAGE_FILE")
PACKAGE="$package"
VERSION="$version"
CATEGORY="misc"
SHORT_DESC="$desc"
WEB_SITE="http://www.slax.org/"
MAINTAINER="nobody@slitaz.org"
DEPENDS="$(find_depends .)"
EOT
	show_unresolved_lib "$file/receipt"
	[ -f $file/fs/var/log/scripts/$package* ] && cat >> "$file/receipt" <<EOM

post_install()
{
chroot \$1/ sh - << EOT
cd /
$(cat $file/fs/var/log/scripts/$package* | sed -e 's/\\/\\\\/g' | sed -e 's/\$/\\$/g')
EOT
}
EOM
	tazpkg pack "$file"
	mv "$file.tazpkg" "$TOP_DIR"
	cd "$TOP_DIR"
	rm -rf "$TMP_DIR"
}


# convert a .tgz package to .tazpkg

convert_tgz() {
	parse_pkgname
	mkdir -p "$TMP_DIR/$file/fs"
	case "$PACKAGE_FILE" in
	*.txz) tar -xJf "$PACKAGE_FILE" -C "$TMP_DIR/$file/fs" ;;
	*.tgz) tar -xzf "$PACKAGE_FILE" -C "$TMP_DIR/$file/fs" ;;
	esac
	cd "$TMP_DIR"
	if [ -d "$file/fs/install" ]; then
		descrip=$(sed "/^$package/!d;s/.*(\\(.*\\)).*/\\1/;q" \
			  "$file/fs/install/slack-desc")
		cat > "$file/receipt" <<EOT
# SliTaz package receipt.
# generated by tazpkg from slackware package $(basename "$PACKAGE_FILE")
PACKAGE="$package"
VERSION="$version"
CATEGORY="misc"
SHORT_DESC="$descrip"
WEB_SITE="http://www.slackware.com/packages/"
MAINTAINER="nobody@slitaz.org"
DEPENDS="$(find_depends .)"
EOT
		show_unresolved_lib "$file/receipt"
		[ -f "$file/fs/install/doinst.sh" ] && cat >> "$file/receipt" <<EOM

post_install()
{
chroot \$1/ sh - << EOT
cd /
$(sed -e 's/\\/\\\\/g' -e 's/\$/\\$/g' < "$file/fs/install/doinst.sh")
EOT
}
EOM
		sed "/^$package/:d;s/^$package://" \
			"$file/fs/install/slack-desc" > "$file/description.txt"
		[ -s "$file/description.txt" ] || rm -f "$file/description.txt"
		rm -rf "$file/fs/install"
		tazpkg pack "$file"
		mv "$file.tazpkg" "$TOP_DIR"
	else
		_ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Slackware'
	fi
	cd "$TOP_DIR"
	rm -rf "$TMP_DIR"
}


# convert a .deb package to .tazpkg

convert_deb() {
	mkdir -p "$TMP_DIR"
	dpkg-deb -e "$PACKAGE_FILE" "$TMP_DIR"
	package=$( sed '/^ *Package:/!d;s/.*: //'      "$TMP_DIR/control")
	version=$( sed '/^ *Version:/!d;s/.*: //'      "$TMP_DIR/control")
	descrip=$( sed '/^ *Description:/!d;s/.*: //'  "$TMP_DIR/control")
	homepage=$(sed '/^ *Homepage:/!d;s/.*: //'     "$TMP_DIR/control")
	target=$(  sed '/^ *Architecture:/!d;s/.*: //' "$TMP_DIR/control")
	case "$target" in
	i386|all)
		file="$package-$version"
		mkdir -p "$TMP_DIR/$file/fs/"
		dpkg-deb -x "$PACKAGE_FILE" "$TMP_DIR/$file/fs"
		cd "$TMP_DIR"
		cat > "$file/receipt" <<EOT
# SliTaz package receipt.
# generated by tazpkg from debian package $(basename "$PACKAGE_FILE")
PACKAGE="$package"
VERSION="$version"
CATEGORY="misc"
SHORT_DESC="$descrip"
WEB_SITE="${homepage:-http://packages.debian.org/search?keywords=$package}"
MAINTAINER="nobody@slitaz.org"
EOT
		LICENSE=$(grep /usr/share/common-licenses/ \
		  "$PACKAGE_FILE" $TMP_DIR/$file/fs/usr/share/doc/*/copyright | \
		  sed 's|.*common-licenses/\([-\.A-Za-z0-9]*\).*|\1|;s|[-\.]$||;q')
		[ -n "$LICENSE" ] && echo "LICENSE=\"$LICENSE\"" >> "$file/receipt"
		echo "DEPENDS=\"$(find_depends .)\"" >> "$file/receipt"
		[ -s 'conffiles' ] && cat >> "$file/receipt" <<EOT
CONFIG_FILES="$(cat conffiles)"
EOT
		show_unresolved_lib "$file/receipt"
		awk '
{
	if (/^ / && show)
		print substr($0,2);
	else
		show=0;
	if (/^Description/)
		show=1;
}' < "$TMP_DIR/control" > "$file/description.txt"
		sed -i 's/^\.$//' "$file/description.txt"
		[ -s "$file/description.txt" ] || rm -f "$file/description.txt"
		tazpkg pack "$file"
		mv "$file.tazpkg" "$TOP_DIR"
		;;
	*)
		_ 'Invalid target: %s (expected i386)' "$target"
		;;
	esac
	cd "$TOP_DIR"
	rm -rf "$TMP_DIR"
}


# convert a .rpm package to .tazpkg

convert_rpm() {
	mkdir -p "$TMP_DIR"
	cp "$PACKAGE_FILE" "$TMP_DIR"
	PACKAGE_FILE="$TMP_DIR/$(basename "$PACKAGE_FILE")"
	rpm -qip "$PACKAGE_FILE" | awk -v pkg="$(basename "$PACKAGE_FILE")" '
BEGIN {
	goturl=0;
	printf "# SliTaz package receipt.\n";
	printf "# generated by tazpkg from rpm package %s\n", pkg;
}
{
	if (/^Name/) { name=$3; printf "PACKAGE=\"%s\"\n", $3; }
	if (/^Version/) printf "VERSION=\"%s-", $3;
	if (/^Release/) printf "%s\"\n", $3;
	if (/^Summary/) printf "SHORT_DESC=\"%s\"\n", substr($0, 15);
	if (/^URL/) { goturl=1; printf "WEB_SITE=\"%s\"\n", $3; }
}
END {
	if (goturl == 0)
		printf "WEB_SITE=\"http://rpmfind.net/linux/rpm2html/search.php?query=%s\"\n",name;
	printf "CATEGORY=\"misc\"\n";
	printf "MAINTAINER=\"nobody@slitaz.org\"\n";
}
' > "$TMP_DIR/receipt"
	. "$TMP_DIR/receipt"
	file="$PACKAGE-$VERSION"
	mkdir -p "$TMP_DIR/$file/fs/"
	mv "$TMP_DIR/receipt" "$TMP_DIR/$file"
	rpm -qip "$PACKAGE_FILE" | awk '
BEGIN { show=0 }
{
	if (show) print;
	if (/^Description/) show=1;
}
' > "$TMP_DIR/$file/description.txt"
	cd "$TMP_DIR/$file/fs/"
	rpm2cpio "$PACKAGE_FILE" | cpio -idm --quiet
	# rpm2cpio can't extract some new RPMs
	if [ $? -eq 1 ]; then
		if [ ! -e "$INSTALLED/p7zip-full/receipt" ]; then
			boldify "$(_ 'Unable to extract the RPM using standard tools (rpm2cpio).')"
			confirm "$(_n 'Do you want to install "%s" package? (y/N)' 'p7zip-full')"
			if [ $? -eq 0 ]; then
				tazpkg -gi p7zip-full
			else
				rm -rf "$TMP_DIR"
				exit 1
			fi
		fi
		# we may already have 7z or may have just installed it in the step above
		if [ -e "$INSTALLED/p7zip-full/receipt" ]; then
			7z x -so "$PACKAGE_FILE" | cpio -idm --quiet
		fi
	fi
	cd ../..
	echo "DEPENDS=\"$(find_depends .)\"" >> "$TMP_DIR/$file/receipt"
	show_unresolved_lib "$TMP_DIR/$file/receipt"
	tazpkg pack "$file"
	mv "$file.tazpkg" "$TOP_DIR"
	cd "$TOP_DIR"
	rm -rf "$TMP_DIR"
}


# convert a .xbps package to .tazpkg (http://repo.voidlinux.eu/current/)

xbpstag() {
	sed "/<key>$1<\/key>/!d{n;s/.*>\\(.*\\)<.*/\\1/}" \
		< fs/props.plist | sed \$!d
}

convert_xbps() {
	mkdir -p "$TMP_DIR/fs"
	( xzcat "$PACKAGE_FILE" || bzcat "$PACKAGE_FILE" || zcat "$PACKAGE_FILE" ) | \
		tar -xf - -C "$TMP_DIR/fs"

	cd "$TMP_DIR"
	HOST_ARCH=$(xbpstag architecture)
	case "$HOST_ARCH" in
		i686)	HOST_ARCH='i486';;
		*)		_ 'Arch "%s" not supported.' "$HOST_ARCH"
				HOST_ARCH='';;
	esac

	if [ -n "$HOST_ARCH" ]; then
		package=$(xbpstag pkgname)
		version=$(xbpstag version)
		file="$package-$version"
		mkdir "$file"
		cat > "$file/receipt" <<EOT
# SliTaz package receipt.
# generated by tazpkg from package $(basename "$PACKAGE_FILE")
PACKAGE="$package"
VERSION="$version"
CATEGORY="misc"
SHORT_DESC="$(xbpstag short_desc)"
WEB_SITE="$(xbpstag homepage)"
MAINTAINER="$(xbpstag maintainer | sed 's/&gt;/>/;s/&lt;/</')"
LICENSE="$(xbpstag license | sed 's/-//g')"
HOST_ARCH="$HOST_ARCH"
CONFIG_FILES="$(sed '/<key>conf_files<\/key>/,/<key>/!d;/array>/d;/<key>/d;s/.*>\(.*\)<.*/\1/' fs/props.plist)"

DEPENDS="$(find_depends .)"

EOT
		while read script func ; do
			[ -s "fs/$script" ] && cat >> "$file/receipt" <<EOT
xbps_$func()
{
set +e
$(cat "fs/$script")
}

pre_$func()
{
	xbps_$func pre $package $version yes /etc/xbps.conf $HOST_ARCH
}

post_$func()
{
	xbps_$func post $package $version yes /etc/xbps.conf $HOST_ARCH
}

EOT
			rm -f "fs/$script"
		done <<EOT
INSTALL		install
REMOVE		remove
EOT
		rm -f fs/*.plist
		mv fs "$package-$version"
		tazpkg pack "$package-$version"
		mv "$package-$version.tazpkg" "$TOP_DIR"
	fi
	cd "$TOP_DIR"
	rm -rf "$TMP_DIR"
}


finish_convert_tinycore() {
	cat > "$file/receipt" <<EOT
# SliTaz package receipt.
# generated by tazpkg from tinycore package $(basename "$PACKAGE_FILE")
PACKAGE="$package"
VERSION="$version"
CATEGORY="misc"
SHORT_DESC="tinycore package $(basename "$PACKAGE_FILE")"
WEB_SITE="http://tinycorelinux.net/"
MAINTAINER="nobody@slitaz.org"
DEPENDS="$(find_depends .)"
EOT
	show_unresolved_lib "$file/receipt"
	script="$file/fs/usr/local/tce.installed/$PACKAGE"
	[ -f "$script" ] && cat >> "$file/receipt" <<EOM

post_install()
{
chroot \$1/ sh - << EOT
cd /
$(sed -e 's/\\/\\\\/g' -e 's/\$/\\$/g' < $script)
EOT
}
EOM
	[ -d "$file/fs/usr/local/tce.installed" ] &&
	rm -rf "$file/fs/usr/local/tce.installed"
	tazpkg pack "$file"
	mv "$file.tazpkg" "$TOP_DIR"
	cd "$TOP_DIR"
	rm -rf "$TMP_DIR"
}


# convert a .tce package to .tazpkg

convert_tce() {
	if ! tar -tzf "$PACKAGE_FILE" | grep -q ^usr/local ; then
		_ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Tinycore'
		return 1
	fi
	mkdir -p "$TMP_DIR"
	cd "$TMP_DIR"
	case "$PACKAGE_FILE" in
		*.tcel) parse_pkgname .tcel ;;
		*.tcem) parse_pkgname .tcem ;;
		*)      parse_pkgname .tce ;;
	esac
	mkdir -p "$file/fs"
	tar -xzf "$PACKAGE_FILE" -C "$file/fs"
	finish_convert_tinycore
}


# convert a .tcz package to .tazpkg

convert_tcz() {
	[ -n "$(which unsquashfs)" ] || tazpkg get-install squashfs
	if ! unsquashfs -l "$PACKAGE_FILE" | grep -q squashfs-root/ ; then
		_ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Tinycore'
		return 1
	fi
	mkdir -p "$TMP_DIR"
	cd "$TMP_DIR"
	parse_pkgname .tcz
	unsquashfs "$PACKAGE_FILE"
	mv squashfs-root "$file/fs"
	finish_convert_tinycore
}



PACKAGE_FILE="$(realpath "$PACKAGE_FILE")"
debug "PACKAGE_FILE='$PACKAGE_FILE'"
if [ "$(dd if="$PACKAGE_FILE" bs=8 count=1 skip=1 2>/dev/null)" = 'debian-b' ]; then
	convert_deb
else
	case "$PACKAGE_FILE" in
		*.deb|*.udeb)			convert_deb;;
		*.rpm)					convert_rpm;;
		*.sb)					convert_sb;;
		*.sfs)					convert_sfs;;
		*.pet)					convert_pet;;
		*.txz|*.tgz)			convert_tgz;;
		*.cards.tar.xz)			convert_nutyx;;
		*.apk|*.pkg.tar.gz|*.pkg.tar.xz)	convert_arch;;
		*.ipk|*.opk)			convert_ipk;;
		*.spack)				convert_spack;;
		*.tar.bz2)				convert_upkg;;
		*.xbps)					convert_xbps;;
		*.tce|*.tcel|*.tcem)	convert_tce;;
		*.tcz)					convert_tcz;;
		*)						_ 'Unsupported format';;
	esac
fi

exit 0
