tazpkg annotate modules/convert @ rev 828

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