tazpkg view modules/convert @ rev 840

Add a bunch of modules with new-style support of 'root' (not all commands are modules yet); strip and compress resources.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Fri Aug 28 16:10:34 2015 +0300 (2015-08-28)
parents 2f3580bd8c0c
children 8a73a58ed3cb
line source
1 #!/bin/sh
2 # TazPkg - Tiny autonomous zone packages manager, hg.slitaz.org/tazpkg
3 # convert - TazPkg module
4 # Toolset to convert alien package to the tazpkg format
7 # Usage: tazpkg-convert alien_package [ target_directory ]
10 PACKAGE_FILE="$1"
11 TARGET_DIR="$2"
12 TMP_DIR=$(mktemp -d)
13 TOP_DIR="$(pwd)"
15 . /etc/slitaz/slitaz.conf
16 . /lib/libtaz.sh
17 . @@MODULES@@/find-depends
19 # Internationalization.
20 export TEXTDOMAIN='tazpkg'
23 # FIXME: what does this mean?
24 [ -n "$TARGET_DIR" -a -s "$TARGET_DIR/files.list.lzma" ] && TMPLOCALSTATE="$TARGET_DIR"
27 show_unresolved_lib() {
28 if [ -s "$TMP_DIR/unresolved" ]; then
29 echo -e "BUGS=\"$(_n 'No dependency for:')" >> $1
30 sort < $TMP_DIR/unresolved | uniq | \
31 while read file; do
32 _ 'WARNING: unknown dependency for %s' "$lib"
33 echo -n " $file" >> $1
34 done
35 echo "\"" >> $1
36 fi
37 }
40 # convert a .tar.bz2 package to .tazpkg
42 convert_upkg() {
43 mkdir -p "$TMP_DIR/fs"
44 tar -xjf "$PACKAGE_FILE" -C "$TMP_DIR/fs"
45 if [ -d "$TMP_DIR/fs/var/lib/upkg/packages" ]; then
46 cd "$TMP_DIR"
47 package=$(sed '/^Package:/!d;s/.*: //' fs/var/lib/upkg/packages/*.info)
48 version=$(sed '/^Version:/!d;s/.*: //' fs/var/lib/upkg/packages/*.info)
49 url='http://www.paldo.org/'
50 file="$package-$version"
51 mkdir "$file"
52 mv fs "$file"
53 maintainer='nobody@slitaz.org'
54 descrip="$package package from paldo."
55 cat > "$file/receipt" <<EOT
56 # SliTaz package receipt.
57 # generated by tazpkg from package $(basename "$PACKAGE_FILE")
58 PACKAGE="$package"
59 VERSION="$version"
60 CATEGORY="misc"
61 SHORT_DESC="$descrip"
62 WEB_SITE="$url"
63 MAINTAINER="$maintainer"
64 DEPENDS="$(find_depends)"
65 EOT
66 [ -s "$file/var/lib/upkg/files/*.config.bz2" ] &&
67 cat >> "$file/receipt" <<EOT
68 CONFIG_FILES="$(bzcat $file/var/lib/upkg/files/*.config.bz2)"
69 EOT
70 while read ext func; do
71 [ -s "$file/fs/var/lib/upkg/scripts/*.$ext" ] || continue
72 cat >> "$file/receipt" <<EOT
74 $func()
75 {
76 $(cat $file/fs/var/lib/upkg/scripts/*.$ext)
77 }
78 EOT
79 done <<EOT
80 prerm pre_remove
81 EOT
83 tazpkg pack "$file"
84 mv "$TMP_DIR/$file.tazpkg" "$TOP_DIR"
85 else
86 _ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'upkg'
87 fi
88 cd "$TOP_DIR"
89 rm -rf "$TMP_DIR"
90 }
93 # convert a .spack package to .tazpkg
95 convert_spack() {
96 mkdir -p "$TMP_DIR"
97 ( cd "$TMP_DIR"; cpio -i ) < "$PACKAGE_FILE"
98 cd "$TMP_DIR"
99 package=$(sed '$!d;s/:.*//' about.txt)
100 version=$(basename "$PACKAGE_FILE" | sed "s/$package-\([^-]*\).*/\1/")
101 descrip=$(sed '$!d;s/.*: //' about.txt)
102 url='http://0linux.org/'
103 maintainer='nobody@slitaz.org'
104 file="$package-$version"
105 mkdir -p "$file/fs"
106 xzcat files.xz | ( cd "$file/fs"; cpio -idmu )
107 cat > "$file/receipt" <<EOT
108 # SliTaz package receipt.
109 # generated by tazpkg from package $(basename "$PACKAGE_FILE")
110 PACKAGE="$package"
111 VERSION="$version"
112 CATEGORY="misc"
113 SHORT_DESC="$descrip"
114 WEB_SITE="$url"
115 MAINTAINER="$maintainer"
116 DEPENDS="$(find_depends)"
117 EOT
118 [ -s 'pre-install.sh' ] && cat >> "$file/receipt" <<EOT
120 pre_install()
121 {
122 cd /
123 $(sed 1d pre-install.sh)
124 }
125 EOT
126 [ -s 'post-install.sh' ] && cat >> "$file/receipt" <<EOT
128 post_install()
129 {
130 cd /
131 $(sed '1,/^}/d' post-install.sh)
132 }
133 EOT
134 tazpkg pack "$file"
135 cd "$TOP_DIR"
136 mv "$TMP_DIR/$file.tazpkg" .
137 rm -rf "$TMP_DIR"
138 }
141 # convert a .ipk package to .tazpkg
143 convert_ipk() {
144 mkdir -p "$TMP_DIR"
145 tar -xOzf "$PACKAGE_FILE" ./control.tar.gz | tar -xzf - -C "$TMP_DIR"
146 package=$( sed '/^Package/!d;s/.*: //' "$TMP_DIR/control")
147 version=$( sed '/^Version/!d;s/.*: //' "$TMP_DIR/control")
148 maintainer=$(sed '/^Maintainer/!d;s/.*: //' "$TMP_DIR/control")
149 target=$( sed '/^Architecture/!d;s/.*: //' "$TMP_DIR/control")
150 descrip=$( sed '/^Description/!d;s/.*: //' "$TMP_DIR/control")
151 homepage=$( sed '/^Homepage/!d;s/.*: //' "$TMP_DIR/control")
152 url='http://openwrt.org/'
153 case "$target" in
154 i386|all)
155 file="$package-$version"
156 mkdir -p "$TMP_DIR/$file/fs"
157 tar -xOzf "$PACKAGE_FILE" ./data.tar.gz | tar -xzf - -C "$TMP_DIR/$file/fs"
158 cd "$TMP_DIR"
159 cat > "$file/receipt" <<EOT
160 # SliTaz package receipt.
161 # generated by tazpkg from package $(basename "$PACKAGE_FILE")
162 PACKAGE="$package"
163 VERSION="$version"
164 CATEGORY="misc"
165 SHORT_DESC="$descrip"
166 WEB_SITE="${homepage:-$url}"
167 MAINTAINER="$maintainer"
168 DEPENDS="$(find_depends)"
169 EOT
170 show_unresolved_lib "$file/receipt"
171 [ -s 'conffiles' ] && cat >> "$file/receipt" <<EOT
172 CONFIG_FILES=$(cat conffiles)
173 EOT
174 show_unresolved_lib "$file/receipt"
175 while read script func; do
176 [ -s "$script" ] && cat >> "$file/receipt" <<EOT
178 $func()
179 {
180 $(cat "$script")
181 }
182 EOT
183 done <<EOT
184 preinst pre_install
185 postinst post_install
186 prerm pre_remove
187 postrm post_remove
188 EOT
189 awk '
190 {
191 if (/^ / && show)
192 print substr($0,2);
193 else
194 show=0;
195 if (/^Description/)
196 show=1;
197 }' < "$TMP_DIR/control" > "$file/description.txt"
198 sed -i 's/^\.$//' "$file/description.txt"
199 [ -s "$file/description.txt" ] || rm -f "$file/description.txt"
200 tazpkg pack "$file"
201 cd "$TOP_DIR"
202 mv "$TMP_DIR/$file.tazpkg" .
203 ;;
204 *)
205 _ 'Invalid target: %s (expected i386)' "$target"
206 ;;
207 esac
208 rm -rf "$TMP_DIR"
209 }
212 # convert a .cards.tar.xz package to .tazpkg
214 convert_nutyx() {
215 mkdir -p "$TMP_DIR/fs"
216 busybox tar -xf "$PACKAGE_FILE" -C "$TMP_DIR/fs"
217 if [ -f "$TMP_DIR/fs/.META" ]; then
218 package=$(sed '/^N/!d;s/^.//' fs/.META)
219 version=$(sed '/^V/!d;s/^.//' fs/.META)
220 descrip=$(sed '/^D/!d;s/^.//' fs/.META)
221 file="$package-$version"
222 mkdir "$file"
223 mv fs "$file"
224 cat > "$file/receipt" <<EOT
225 # SliTaz package receipt.
226 # generated by tazpkg from NuTyX package $(basename "$PACKAGE_FILE")
227 PACKAGE="$package"
228 VERSION="$version"
229 CATEGORY="misc"
230 SHORT_DESC="$descrip"
231 WEB_SITE="http://www.nutyx.org/"
232 MAINTAINER="nobody@slitaz.org"
233 DEPENDS="$(find_depends)"
234 EOT
235 show_unresolved_lib "$file/receipt"
236 rm -f "$file/fs/".[A-Z]*
237 tazpkg pack "$file"
238 mv "$file.tazpkg" "$TOP_DIR"
239 else
240 _ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'NuTyX'
241 fi
242 cd "$TOP_DIR"
243 rm -rf "$TMP_DIR"
244 }
247 # convert a .pkg.tar.gz/.pkg.tar.xz/.apk package to .tazpkg
249 convert_arch() {
250 mkdir -p "$TMP_DIR/fs"
251 busybox tar -xf "$PACKAGE_FILE" -C "$TMP_DIR/fs"
252 if [ -f "$TMP_DIR/fs/.PKGINFO" ]; then
253 cd "$TMP_DIR"
254 package=$( sed '/^pkgname/!d;s/.*= //' fs/.PKGINFO)
255 version=$( sed '/^pkgver/!d;s/.*= //' fs/.PKGINFO)
256 descrip=$( sed '/^pkgdesc/!d;s/.*= //' fs/.PKGINFO)
257 url=$( sed '/^url/!d;s/.*= //' fs/.PKGINFO)
258 maintainer=$(sed '/^packager/!d;s/.*= //' fs/.PKGINFO)
259 file="$package-$version"
260 mkdir "$file"
261 mv fs "$file"
262 cat > "$file/receipt" <<EOT
263 # SliTaz package receipt.
264 # generated by tazpkg from Archlinux package $(basename "$PACKAGE_FILE")
265 PACKAGE="$package"
266 VERSION="$version"
267 CATEGORY="misc"
268 SHORT_DESC="$descrip"
269 WEB_SITE="$url"
270 MAINTAINER="$maintainer"
271 DEPENDS="$(find_depends)"
272 EOT
273 show_unresolved_lib "$file/receipt"
274 rm -f "$file/fs/".[A-Z]*
275 tazpkg pack "$file"
276 mv "$file.tazpkg" "$TOP_DIR"
277 else
278 _ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Archlinux/Alpine'
279 fi
280 cd "$TOP_DIR"
281 rm -rf "$TMP_DIR"
282 }
285 # get package and version from PACKAGE_FILE
287 parse_pkgname() {
288 package=$(basename "${2:-$PACKAGE_FILE}" "$1")
289 IFS='-'
290 set -- "$package"
291 unset IFS
292 package="$1"
293 version="$2"
294 if [ -z "$version" ]; then
295 package=${1%%[0-9\.]*}
296 version=${1#$package}
297 fi
298 file="$package-$version"
299 mkdir "$file"
300 }
303 finish_convert_puppy() {
304 rm -f fs/*.specs
305 mv fs "$file"
306 cat > "$file/receipt" <<EOT
307 # SliTaz package receipt.
308 # generated by tazpkg from puppy package $(basename "$PACKAGE_FILE")
309 PACKAGE="$package"
310 VERSION="$version"
311 CATEGORY="misc"
312 SHORT_DESC="$desc"
313 WEB_SITE="http://puppylinux.org/"
314 MAINTAINER="nobody@slitaz.org"
315 DEPENDS="$(find_depends)"
316 EOT
317 show_unresolved_lib "$file/receipt"
318 for i in install uninstall; do
319 [ -f "$file/fs/p$i.sh" ] && cat >> "$file/receipt" <<EOM
321 post_$i()
322 {
323 chroot \$1/ sh - << EOT
324 cd /
325 $(sed -e 's/\\/\\\\/g' -e 's/\$/\\$/g' < "$file/fs/p$i.sh" ; rm -f "$file/fs/p$i.sh")
326 EOT
327 }
328 EOM
329 done
330 sed -i 's/post_uninstall/post_remove/' "$file/receipt"
331 tazpkg pack "$file"
332 mv "$file.tazpkg" "$TOP_DIR"
333 cd "$TOP_DIR"
334 rm -rf "$TMP_DIR"
335 }
338 # convert a .sfs package to .tazpkg
340 convert_sfs() {
341 [ -n "$(which unsquashfs)" ] || tazpkg get-install squashfs
342 if ! unsquashfs -l "$PACKAGE_FILE" | grep -q squashfs-root/pet.specs$ ; then
343 _ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Puppy'
344 return 1
345 fi
346 mkdir -p "$TMP_DIR"
347 cd "$TMP_DIR"
348 parse_pkgname .sfs
349 unsquashfs "$PACKAGE_FILE"
350 mv squashfs-root fs
351 set -- $(cat fs/pet.specs)
352 desc="$10"
353 finish_convert_puppy
354 }
357 # convert a .pet package to .tazpkg
359 convert_pet() {
360 mkdir -p "$TMP_DIR"
361 cd "$TMP_DIR"
362 parse_pkgname .pet
363 tar -xzf "$PACKAGE_FILE" 2>/dev/null
364 . "$package"*/*.specs
365 desc="$PETMENUDESCR"
366 mv "$package"*/ fs
367 finish_convert_puppy
368 }
371 # convert a .sb package to .tazpkg
373 convert_sb() {
374 [ -n "$(which unsquashfs)" ] || tazpkg get-install squashfs
375 if ! unsquashfs -l "$PACKAGE_FILE" | grep -q squashfs-root/var/log/removed_scripts ; then
376 _ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Slax'
377 return 1
378 fi
379 mkdir -p "$TMP_DIR"
380 cd "$TMP_DIR"
381 unsquashfs "$PACKAGE_FILE"
382 mv squashfs-root fs
383 parse_pkgname '' $(cat fs/var/log/packages/* | sed '/PACKAGE NAME:/!d;s/.*: *//')
384 desc="$(cat fs/var/log/packages/* | sed '/^PACKAGE DESCRIPTION:/,$!d;N;s/.*: //;q')"
385 cat fs/var/log/packages/* | sed '/^PACKAGE DESCRIPTION:/,/FILE LIST/!d;s/.*://;/^$/d' > "$file/description.txt"
386 mv fs "$file"
387 cat > "$file/receipt" <<EOT
388 # SliTaz package receipt.
389 # generated by tazpkg from slax package $(basename "$PACKAGE_FILE")
390 PACKAGE="$package"
391 VERSION="$version"
392 CATEGORY="misc"
393 SHORT_DESC="$desc"
394 WEB_SITE="http://www.slax.org/"
395 MAINTAINER="nobody@slitaz.org"
396 DEPENDS="$(find_depends)"
397 EOT
398 show_unresolved_lib "$file/receipt"
399 [ -f "$file/fs/var/log/scripts/$package"* ] && cat >> "$file/receipt" <<EOM
401 post_install()
402 {
403 chroot \$1/ sh - << EOT
404 cd /
405 $(cat "$file/fs/var/log/scripts/$package"* | sed -e 's/\\/\\\\/g' | sed -e 's/\$/\\$/g')
406 EOT
407 }
408 EOM
409 tazpkg pack "$file"
410 mv "$file.tazpkg" "$TOP_DIR"
411 cd "$TOP_DIR"
412 rm -rf "$TMP_DIR"
413 }
416 # convert a .tgz package to .tazpkg
418 convert_tgz() {
419 parse_pkgname
420 mkdir -p "$TMP_DIR/$file/fs"
421 case "$PACKAGE_FILE" in
422 *.txz) tar -xJf "$PACKAGE_FILE" -C "$TMP_DIR/$file/fs" ;;
423 *.tgz) tar -xzf "$PACKAGE_FILE" -C "$TMP_DIR/$file/fs" ;;
424 esac
425 cd "$TMP_DIR"
426 if [ -d "$file/fs/install" ]; then
427 descrip=$(sed "/^$package/!d;s/.*(\\(.*\\)).*/\\1/;q" \
428 "$file/fs/install/slack-desc")
429 cat > "$file/receipt" <<EOT
430 # SliTaz package receipt.
431 # generated by tazpkg from slackware package $(basename "$PACKAGE_FILE")
432 PACKAGE="$package"
433 VERSION="$version"
434 CATEGORY="misc"
435 SHORT_DESC="$descrip"
436 WEB_SITE="http://www.slackware.com/packages/"
437 MAINTAINER="nobody@slitaz.org"
438 DEPENDS="$(find_depends)"
439 EOT
440 show_unresolved_lib "$file/receipt"
441 [ -f "$file/fs/install/doinst.sh" ] && cat >> "$file/receipt" <<EOM
443 post_install()
444 {
445 chroot \$1/ sh - << EOT
446 cd /
447 $(sed -e 's/\\/\\\\/g' -e 's/\$/\\$/g' < "$file/fs/install/doinst.sh")
448 EOT
449 }
450 EOM
451 sed "/^$package/:d;s/^$package://" \
452 "$file/fs/install/slack-desc" > "$file/description.txt"
453 [ -s "$file/description.txt" ] || rm -f "$file/description.txt"
454 rm -rf "$file/fs/install"
455 tazpkg pack "$file"
456 mv "$file.tazpkg" "$TOP_DIR"
457 else
458 _ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Slackware'
459 fi
460 cd "$TOP_DIR"
461 rm -rf "$TMP_DIR"
462 }
465 # convert a .deb package to .tazpkg
467 convert_deb() {
468 mkdir -p "$TMP_DIR"
469 dpkg-deb -e "$PACKAGE_FILE" "$TMP_DIR"
470 package=$( sed '/^ *Package:/!d;s/.*: //' "$TMP_DIR/control")
471 version=$( sed '/^ *Version:/!d;s/.*: //' "$TMP_DIR/control")
472 descrip=$( sed '/^ *Description:/!d;s/.*: //' "$TMP_DIR/control")
473 homepage=$(sed '/^ *Homepage:/!d;s/.*: //' "$TMP_DIR/control")
474 target=$( sed '/^ *Architecture:/!d;s/.*: //' "$TMP_DIR/control")
475 case "$target" in
476 i386|all)
477 file="$package-$version"
478 mkdir -p "$TMP_DIR/$file/fs/"
479 dpkg-deb -x "$PACKAGE_FILE" "$TMP_DIR/$file/fs"
480 cd "$TMP_DIR"
481 cat > "$file/receipt" <<EOT
482 # SliTaz package receipt.
483 # generated by tazpkg from debian package $(basename "$PACKAGE_FILE")
484 PACKAGE="$package"
485 VERSION="$version"
486 CATEGORY="misc"
487 SHORT_DESC="$descrip"
488 WEB_SITE="${homepage:-http://packages.debian.org/search?keywords=$package}"
489 MAINTAINER="nobody@slitaz.org"
490 EOT
491 LICENSE=$(grep /usr/share/common-licenses/ \
492 "$PACKAGE_FILE" "$TMP_DIR/$file/fs/usr/share/doc/"*"/copyright" | \
493 sed 's|.*common-licenses/\([-\.A-Za-z0-9]*\).*|\1|;s|[-\.]$||;q')
494 [ -n "$LICENSE" ] && echo "LICENSE=\"$LICENSE\"" >> "$file/receipt"
495 echo "DEPENDS=\"$(find_depends)\"" >> "$file/receipt"
496 [ -s 'conffiles' ] && cat >> "$file/receipt" <<EOT
497 CONFIG_FILES="$(cat conffiles)"
498 EOT
499 show_unresolved_lib "$file/receipt"
500 awk '
501 {
502 if (/^ / && show)
503 print substr($0,2);
504 else
505 show=0;
506 if (/^Description/)
507 show=1;
508 }' < "$TMP_DIR/control" > "$file/description.txt"
509 sed -i 's/^\.$//' "$file/description.txt"
510 [ -s "$file/description.txt" ] || rm -f "$file/description.txt"
511 tazpkg pack "$file"
512 mv "$file.tazpkg" "$TOP_DIR"
513 ;;
514 *)
515 _ 'Invalid target: %s (expected i386)' "$target"
516 ;;
517 esac
518 cd "$TOP_DIR"
519 rm -rf "$TMP_DIR"
520 }
523 # convert a .rpm package to .tazpkg
525 convert_rpm() {
526 mkdir -p "$TMP_DIR"
527 cp "$PACKAGE_FILE" "$TMP_DIR"
528 PACKAGE_FILE="$TMP_DIR/$(basename "$PACKAGE_FILE")"
529 rpm -qip "$PACKAGE_FILE" | awk -v pkg="$(basename "$PACKAGE_FILE")" '
530 BEGIN {
531 goturl=0;
532 printf "# SliTaz package receipt.\n";
533 printf "# generated by tazpkg from rpm package %s\n", pkg;
534 }
535 {
536 if (/^Name/) { name=$3; printf "PACKAGE=\"%s\"\n", $3; }
537 if (/^Version/) printf "VERSION=\"%s-", $3;
538 if (/^Release/) printf "%s\"\n", $3;
539 if (/^Summary/) printf "SHORT_DESC=\"%s\"\n", substr($0, 15);
540 if (/^URL/) { goturl=1; printf "WEB_SITE=\"%s\"\n", $3; }
541 }
542 END {
543 if (goturl == 0)
544 printf "WEB_SITE=\"http://rpmfind.net/linux/rpm2html/search.php?query=%s\"\n",name;
545 printf "CATEGORY=\"misc\"\n";
546 printf "MAINTAINER=\"nobody@slitaz.org\"\n";
547 }
548 ' > "$TMP_DIR/receipt"
549 . "$TMP_DIR/receipt"
550 file="$PACKAGE-$VERSION"
551 mkdir -p "$TMP_DIR/$file/fs/"
552 mv "$TMP_DIR/receipt" "$TMP_DIR/$file"
553 rpm -qip "$PACKAGE_FILE" | awk '
554 BEGIN { show=0 }
555 {
556 if (show) print;
557 if (/^Description/) show=1;
558 }
559 ' > "$TMP_DIR/$file/description.txt"
560 cd "$TMP_DIR/$file/fs/"
561 rpm2cpio "$PACKAGE_FILE" | cpio -idm --quiet
562 # rpm2cpio can't extract some new RPMs
563 if [ $? -eq 1 ]; then
564 if [ ! -e "$INSTALLED/p7zip-full/receipt" ]; then
565 boldify "$(_ 'Unable to extract the RPM using standard tools (rpm2cpio).')"
566 confirm "$(_n 'Do you want to install "%s" package? (y/N)' 'p7zip-full')"
567 if [ $? -eq 0 ]; then
568 tazpkg -gi p7zip-full
569 else
570 rm -rf "$TMP_DIR"
571 exit 1
572 fi
573 fi
574 # we may already have 7z or may have just installed it in the step above
575 if [ -e "$INSTALLED/p7zip-full/receipt" ]; then
576 7z x -so "$PACKAGE_FILE" | cpio -idm --quiet
577 fi
578 fi
579 cd ../..
580 echo "DEPENDS=\"$(find_depends)\"" >> "$TMP_DIR/$file/receipt"
581 show_unresolved_lib "$TMP_DIR/$file/receipt"
582 tazpkg pack "$file"
583 mv "$file.tazpkg" "$TOP_DIR"
584 cd "$TOP_DIR"
585 rm -rf "$TMP_DIR"
586 }
589 # convert a .xbps package to .tazpkg (http://repo.voidlinux.eu/current/)
591 xbpstag() {
592 sed "/<key>$1<\/key>/!d{n;s/.*>\\(.*\\)<.*/\\1/}" \
593 < fs/props.plist | sed \$!d
594 }
596 convert_xbps() {
597 mkdir -p "$TMP_DIR/fs"
598 ( xzcat "$PACKAGE_FILE" || bzcat "$PACKAGE_FILE" || zcat "$PACKAGE_FILE" ) | \
599 tar -xf - -C "$TMP_DIR/fs"
601 cd "$TMP_DIR"
602 HOST_ARCH=$(xbpstag architecture)
603 case "$HOST_ARCH" in
604 i686) HOST_ARCH='i486';;
605 *) _ 'Arch "%s" not supported.' "$HOST_ARCH"
606 HOST_ARCH='';;
607 esac
609 if [ -n "$HOST_ARCH" ]; then
610 package=$(xbpstag pkgname)
611 version=$(xbpstag version)
612 file="$package-$version"
613 mkdir "$file"
614 cat > "$file/receipt" <<EOT
615 # SliTaz package receipt.
616 # generated by tazpkg from package $(basename "$PACKAGE_FILE")
617 PACKAGE="$package"
618 VERSION="$version"
619 CATEGORY="misc"
620 SHORT_DESC="$(xbpstag short_desc)"
621 WEB_SITE="$(xbpstag homepage)"
622 MAINTAINER="$(xbpstag maintainer | sed 's/&gt;/>/;s/&lt;/</')"
623 LICENSE="$(xbpstag license | sed 's/-//g')"
624 HOST_ARCH="$HOST_ARCH"
625 CONFIG_FILES="$(sed '/<key>conf_files<\/key>/,/<key>/!d;/array>/d;/<key>/d;s/.*>\(.*\)<.*/\1/' fs/props.plist)"
627 DEPENDS="$(find_depends)"
629 EOT
630 while read script func ; do
631 [ -s "fs/$script" ] && cat >> "$file/receipt" <<EOT
632 xbps_$func()
633 {
634 set +e
635 $(cat "fs/$script")
636 }
638 pre_$func()
639 {
640 xbps_$func pre $package $version yes /etc/xbps.conf $HOST_ARCH
641 }
643 post_$func()
644 {
645 xbps_$func post $package $version yes /etc/xbps.conf $HOST_ARCH
646 }
648 EOT
649 rm -f "fs/$script"
650 done <<EOT
651 INSTALL install
652 REMOVE remove
653 EOT
654 rm -f fs/*.plist
655 mv fs "$package-$version"
656 tazpkg pack "$package-$version"
657 mv "$package-$version.tazpkg" "$TOP_DIR"
658 fi
659 cd "$TOP_DIR"
660 rm -rf "$TMP_DIR"
661 }
664 finish_convert_tinycore() {
665 cat > "$file/receipt" <<EOT
666 # SliTaz package receipt.
667 # generated by tazpkg from tinycore package $(basename "$PACKAGE_FILE")
668 PACKAGE="$package"
669 VERSION="$version"
670 CATEGORY="misc"
671 SHORT_DESC="tinycore package $(basename "$PACKAGE_FILE")"
672 WEB_SITE="http://tinycorelinux.net/"
673 MAINTAINER="nobody@slitaz.org"
674 DEPENDS="$(find_depends)"
675 EOT
676 show_unresolved_lib "$file/receipt"
677 script="$file/fs/usr/local/tce.installed/$PACKAGE"
678 [ -f "$script" ] && cat >> "$file/receipt" <<EOM
680 post_install()
681 {
682 chroot \$1/ sh - << EOT
683 cd /
684 $(sed -e 's/\\/\\\\/g' -e 's/\$/\\$/g' < $script)
685 EOT
686 }
687 EOM
688 [ -d "$file/fs/usr/local/tce.installed" ] &&
689 rm -rf "$file/fs/usr/local/tce.installed"
690 tazpkg pack "$file"
691 mv "$file.tazpkg" "$TOP_DIR"
692 cd "$TOP_DIR"
693 rm -rf "$TMP_DIR"
694 }
697 # convert a .tce package to .tazpkg
699 convert_tce() {
700 if ! tar -tzf "$PACKAGE_FILE" | grep -q ^usr/local ; then
701 _ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Tinycore'
702 return 1
703 fi
704 mkdir -p "$TMP_DIR"
705 cd "$TMP_DIR"
706 case "$PACKAGE_FILE" in
707 *.tcel) parse_pkgname .tcel ;;
708 *.tcem) parse_pkgname .tcem ;;
709 *) parse_pkgname .tce ;;
710 esac
711 mkdir -p "$file/fs"
712 tar -xzf "$PACKAGE_FILE" -C "$file/fs"
713 finish_convert_tinycore
714 }
717 # convert a .tcz package to .tazpkg
719 convert_tcz() {
720 [ -n "$(which unsquashfs)" ] || tazpkg get-install squashfs
721 if ! unsquashfs -l "$PACKAGE_FILE" | grep -q squashfs-root/$ ; then
722 _ 'File "%s" does not look like %s package!' "$PACKAGE_FILE" 'Tinycore'
723 return 1
724 fi
725 mkdir -p "$TMP_DIR"
726 cd "$TMP_DIR"
727 parse_pkgname .tcz
728 unsquashfs "$PACKAGE_FILE"
729 mv squashfs-root "$file/fs"
730 finish_convert_tinycore
731 }
734 if [ "$(dd if="$PACKAGE_FILE" bs=8 count=1 skip=1 2>/dev/null)" == 'debian-b' ]; then
735 convert_deb
736 else
737 case "$PACKAGE_FILE" in
738 *.deb|*.udeb) convert_deb;;
739 *.rpm) convert_rpm;;
740 *.sb) convert_sb;;
741 *.sfs) convert_sfs;;
742 *.pet) convert_pet;;
743 *.txz|*.tgz) convert_tgz;;
744 *.cards.tar.xz) convert_nutyx;;
745 *.apk|*.pkg.tar.gz|*.pkg.tar.xz) convert_arch;;
746 *.ipk|*.opk) convert_ipk;;
747 *.spack) convert_spack;;
748 *.tar.bz2) convert_upkg;;
749 *.xbps) convert_xbps;;
750 *.tce|*.tcel|*.tcem) convert_tce;;
751 *.tcz) convert_tcz;;
752 *) _ 'Unsupported format';;
753 esac
754 fi
756 exit 0