tazpkg annotate modules/convert @ rev 822

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