summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrey Christoforo2015-08-10 11:25:05 +0200
committerGrey Christoforo2015-08-10 11:25:05 +0200
commita0af5e116ea5b2f43c323651598f361c900305e2 (patch)
tree12ad287946affcba9cb573729ad4e30fa217a607
parent5bcee6d0e8141aa4878d680542a1f7c89cf3a8ee (diff)
downloadaur-a0af5e116ea5b2f43c323651598f361c900305e2.tar.gz
merged in mickael9's changes
- 64bit installs no longer need the precompiled liblzmadec0.2.so to unpack, they run in a 32bit tclkit and use the liblzmadec0.2.so provided in the installer blob
-rw-r--r--.SRCINFO15
-rw-r--r--PKGBUILD93
-rwxr-xr-xbitrock-unpacker.tcl122
-rw-r--r--liblzmadec0.2.sobin29008 -> 0 bytes
4 files changed, 154 insertions, 76 deletions
diff --git a/.SRCINFO b/.SRCINFO
index cc27935394db..770e37feb3f6 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,19 +1,13 @@
pkgbase = microchip-mplabxc32-bin
pkgdesc = Microchip's MPLAB XC32 C compiler toolchain for all of their 32bit microcontrollers
pkgver = 1.40
- pkgrel = 2
+ pkgrel = 3
url = http://www.microchip.com/xc32
install = microchip-mplabxc32-bin.install
arch = i686
arch = x86_64
license = custom
makedepends = sdx
- makedepends = tcl
- makedepends = tcl-vfs
- depends = lib32-expat
- depends = lib32-gcc-libs
- noextract = installerBlobFromMicrochip
- noextract = liblzmadec0.2.so
options = !strip
options = docs
options = libtool
@@ -22,9 +16,12 @@ pkgbase = microchip-mplabxc32-bin
options = staticlibs
options = !upx
source = installerBlobFromMicrochip::http://ww1.microchip.com/downloads/en/DeviceDoc/xc32-v1.40-full-install-linux-installer.run
- source = liblzmadec0.2.so
+ source = bitrock-unpacker.tcl
md5sums = 06f3f019001cee7d8792561dc8a8da80
- md5sums = e43a1f543ba4f67a2d5b2e8d9656a6c7
+ md5sums = 70dedba4c417f8c0bb07c32d19e9d197
+ makedepends_i686 = tclkit
+ depends_x86_64 = lib32-gcc-libs
+ makedepends_x86_64 = lib32-tclkit
pkgname = microchip-mplabxc32-bin
diff --git a/PKGBUILD b/PKGBUILD
index 4b0b06741ef5..e50736ee60c3 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,86 +1,45 @@
-# Maintainer: Grey Christoforo <grey@christoforo.net>
+# Maintainer: Grey Christoforo <first name at last name dot net>
+# Contributer: mickael9 <mickael9 at gmail dot com>
_number_of_bits=32
pkgname=microchip-mplabxc${_number_of_bits}-bin
pkgver=1.40
-pkgrel=2
+pkgrel=3
pkgdesc="Microchip's MPLAB XC${_number_of_bits} C compiler toolchain for all of their 32bit microcontrollers"
arch=(i686 x86_64)
url=http://www.microchip.com/xc${_number_of_bits}
license=(custom)
-if [[ $CARCH = i686 ]]; then
- depends=(
- 'expat'
- 'gcc-libs'
- )
-else
- depends=(
- 'lib32-expat'
- 'lib32-gcc-libs'
- )
-fi
-makedepends=(sdx tcl tcl-vfs)
+depends_i688=(gcc-libs)
+depends_x86_64=(lib32-gcc-libs)
+makedepends=(sdx)
+makedepends_x86_64=(lib32-tclkit)
+makedepends_i686=(tclkit)
+
options=(!strip docs libtool emptydirs !zipman staticlibs !upx)
-source=("installerBlobFromMicrochip::http://ww1.microchip.com/downloads/en/DeviceDoc/xc${_number_of_bits}-v$pkgver-full-install-linux-installer.run" liblzmadec0.2.so)
-noextract=(installerBlobFromMicrochip liblzmadec0.2.so)
+source=("installerBlobFromMicrochip::http://ww1.microchip.com/downloads/en/DeviceDoc/xc${_number_of_bits}-v$pkgver-full-install-linux-installer.run"
+ "bitrock-unpacker.tcl")
+
md5sums=('06f3f019001cee7d8792561dc8a8da80'
- 'e43a1f543ba4f67a2d5b2e8d9656a6c7')
+ '70dedba4c417f8c0bb07c32d19e9d197')
install=$pkgname.install
-build() {
- # unwrap installer files
- sdx.kit unwrap installerBlobFromMicrochip
-
- # read unpack options
- _unpack_options=$(cat installerBlobFromMicrochip.vfs/cookfsinfo.txt)
-
- # write unpack tcl script to file
-cat > unpack.tcl <<EOF
-package require vfs::cookfs
-package require Tcllzmadec
-vfs::cookfs::Mount ${_unpack_options} installerBlobFromMicrochip virtual
-file copy virtual unpacked.vfs
-EOF
-
- # if this is a 64bit machine, we need to use the packaged zlma decoder so since the insaller only provides a 32bit one
- if [[ $CARCH = x86_64 ]]; then
- mv liblzmadec0.2.so installerBlobFromMicrochip.vfs/libraries/lzma*/.
- fi
-
- msg2 "Unpacking installer. This might take a while..."
- LD_LIBRARY_PATH=./usr/lib: TCL_LIBRARY=./installerBlobFromMicrochip.vfs/lib TCLLIBPATH=./installerBlobFromMicrochip.vfs/libraries tclsh unpack.tcl
+instdir="/opt/microchip/xc${_number_of_bits}/v${pkgver}"
- # now reassemble files larger than 5MB in the archive, which were split up for whatever reason
- msg2 "Reassembling files..."
- find unpacked.vfs -name '*___bitrockBigFile1' | while read firstChunk
- do
- baseName="${firstChunk%%___bitrockBigFile1}"
- local i=1
- while [[ -f "${baseName}___bitrockBigFile${i}" ]]
- do
- cat "${baseName}___bitrockBigFile${i}" >> "${baseName}"
- i=$((i + 1))
- done
- done
+build() {
+ msg2 "Unpacking files from installer"
+ ./bitrock-unpacker.tcl ./installerBlobFromMicrochip ./unpacked.vfs
}
package() {
- mv unpacked.vfs/compiler/programfilesosx/* unpacked.vfs/compiler/programfiles/
- mv unpacked.vfs/compiler/programfiles/*License.txt unpacked.vfs/compiler/programfiles/docs/.
-
- mkdir -p "$pkgdir"/opt/$pkgname
- mv unpacked.vfs/compiler/programfiles/* "$pkgdir"/opt/$pkgname/.
- mv unpacked.vfs/licensecomponent "$pkgdir"/opt/$pkgname/.
-
- msg2 "Making executables executable"
- find "$pkgdir"/opt/$pkgname/bin -type f -exec /bin/sh -c "file {} | grep -q executable && chmod +x {}" \;
- chmod +x "$pkgdir"/opt/$pkgname/licensecomponent/xclmallBin/bin/xclm
- chmod +x "$pkgdir"/opt/$pkgname/licensecomponent/LinuxLM/xclmcheck.sh
+ mkdir -p "${pkgdir}${instdir}"
+ mv unpacked.vfs/compiler/programfiles*/* "${pkgdir}${instdir}"
+ mv unpacked.vfs/licensecomponent "${pkgdir}${instdir}"
+ mv "${pkgdir}${instdir}"/*License.txt "${pkgdir}${instdir}/docs" 2>/dev/null || true
mkdir -p "$pkgdir/etc/profile.d"
- echo "export PATH="'$PATH'":/opt/${pkgname}/bin" > "$pkgdir/etc/profile.d/${pkgname}.sh"
- echo "export XC${_number_of_bits}_TOOLCHAIN_ROOT=/opt/${pkgname}" >> "$pkgdir/etc/profile.d/${pkgname}.sh"
-
- mkdir -p $pkgdir/usr/share/licenses/$pkgname
- ln -s /opt/$pkgname/docs/$(basename /opt/$pkgname/docs/*icense.txt) $pkgdir/usr/share/licenses/$pkgname/LICENSE
+ echo "export PATH=\"\$PATH\":'${instdir}/bin'" > "${pkgdir}/etc/profile.d/${pkgname}.sh"
+ echo "export XC${_number_of_bits}_TOOLCHAIN_ROOT='${instdir}'" >> "$pkgdir/etc/profile.d/${pkgname}.sh"
+
+ mkdir -p "$pkgdir/usr/share/licenses/$pkgname"
+ ln -s "${instdir}/docs/$(basename "${pkgdir}${instdir}/docs"/*[Ll]icense.txt)" "${pkgdir}/usr/share/licenses/$pkgname/LICENSE"
}
diff --git a/bitrock-unpacker.tcl b/bitrock-unpacker.tcl
new file mode 100755
index 000000000000..43d99e0538ab
--- /dev/null
+++ b/bitrock-unpacker.tcl
@@ -0,0 +1,122 @@
+#!/usr/bin/env tclkit
+#
+# Bitrock unpacking script
+# This script should be executed using 32-bit tclkit because
+# it uses Tcllzmadec provided by the installer blob which likely only
+# contains the 32 bit tcl lzma decompression shared opject, liblzmadec0.2.so
+# Author : mickael9 <mickael9 at gmail dot com>
+
+source /usr/bin/sdx.kit
+
+if {$argc < 2} {
+ puts "Usage: $argv0 installerFile outputDirectory"
+ exit 1
+}
+
+set installerFile [lindex $argv 0]
+set destDir [lindex $argv 1]
+
+set installerMount /installer
+set dataMount /installerData
+
+vfs::mk4::Mount $installerFile $installerMount -readonly
+
+lappend auto_path $installerMount/libraries/
+package require vfs::cookfs
+package require Tcllzmadec
+
+# progress from http://wiki.tcl.tk/16939 (sligtly modified)
+# thanks to the author
+proc progress {cur tot} {
+ # set to total width of progress bar
+ set total 76
+
+ if {$cur == $tot} {
+ # cleanup
+ set str "\r[string repeat " " [expr $total + 4]]\r"
+ } else {
+ set half [expr {$total/2}]
+ set percent [expr {100.*$cur/$tot}]
+ set val (\ [format "%6.2f%%" $percent]\ )
+ set str "\r|[string repeat = [
+ expr {round($percent*$total/100)}]][
+ string repeat { } [expr {$total-round($percent*$total/100)}]]|"
+ set str "[string range $str 0 $half]$val[string range $str [expr {$half+[string length $val]-1}] end]"
+ }
+ puts -nonewline stderr $str
+}
+
+# Read cookfs options
+set optionsFile [open $installerMount/cookfsinfo.txt]
+set options [read $optionsFile]
+close $optionsFile
+
+# Read the manifest
+set manifestFile [open $installerMount/manifest.txt]
+set manifest [read $manifestFile]
+close $manifestFile
+
+# Mount the files to $dataMount
+vfs::cookfs::Mount {*}$options $installerFile $dataMount
+
+puts "Creating directories..."
+foreach {fileName props} $manifest {
+ set type [lindex $props 0]
+
+ if {$type == "directory"} {
+ set mode [lindex $props 1]
+ file mkdir $destDir/$fileName
+ }
+}
+
+puts "Unpacking files, please wait..."
+
+set entryCount [expr [llength $manifest] / 2]
+set entryIndex 0
+
+foreach {fileName props} $manifest {
+ set type [lindex $props 0]
+
+ if {$type == "file"} {
+ set mode [lindex $props 1]
+ set sizes [lindex $props 4]
+ set nparts [llength $sizes]
+ set index 1
+
+ file mkdir [file dirname $destDir/$fileName]
+ file copy -force $dataMount/$fileName $destDir/$fileName
+
+ if {$nparts > 0} {
+ set fp [open $destDir/$fileName a]
+ fconfigure $fp -translation binary
+
+ while {$index < $nparts} {
+ set chunkName $dataMount/${fileName}___bitrockBigFile$index
+ set fp2 [open $chunkName r]
+ fconfigure $fp2 -translation binary
+ puts -nonewline $fp [read $fp2]
+ close $fp2
+ incr index
+ }
+ close $fp
+ }
+
+ file attributes $destDir/$fileName -permissions $mode
+ }
+
+ incr entryIndex
+ progress $entryIndex $entryCount
+}
+
+puts "Creating links..."
+
+foreach {fileName props} $manifest {
+ set type [lindex $props 0]
+
+ if {$type == "link"} {
+ set linkTarget [lindex $props 1]
+ file delete $destDir/$fileName
+ file link -symbolic $destDir/$fileName $linkTarget
+ }
+}
+puts "Done"
diff --git a/liblzmadec0.2.so b/liblzmadec0.2.so
deleted file mode 100644
index cdfdce1d5c3c..000000000000
--- a/liblzmadec0.2.so
+++ /dev/null
Binary files differ