tazpkg annotate modules/convert @ rev 976

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