tazpkg annotate modules/tazpkg-convert @ rev 817

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