tazpkg annotate modules/tazpkg-convert @ rev 784

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