From 97d6644aef8a65a0d523a4e2018b059e854da746 Mon Sep 17 00:00:00 2001 From: Aditya Kulkarni Date: Wed, 31 Oct 2018 15:47:21 -0700 Subject: [PATCH] Windows installer using wix --- .gitignore | 1 + src/scripts/mkrelease.sh | 18 +- src/scripts/mkwininstaller.ps1 | 15 + src/scripts/mkwinrelease.ps1 | 46 --- src/scripts/qt5.natvis | 712 --------------------------------- src/scripts/zec-qt-wallet.wxs | 1 + 6 files changed, 27 insertions(+), 766 deletions(-) create mode 100644 src/scripts/mkwininstaller.ps1 delete mode 100644 src/scripts/mkwinrelease.ps1 delete mode 100644 src/scripts/qt5.natvis diff --git a/.gitignore b/.gitignore index 6584f61..ae1206b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ bin/ debug/ release/ x64/ +artifacts/ .vscode/ src/ui_*.h *.autosave diff --git a/src/scripts/mkrelease.sh b/src/scripts/mkrelease.sh index 69be80c..aefff34 100755 --- a/src/scripts/mkrelease.sh +++ b/src/scripts/mkrelease.sh @@ -53,14 +53,15 @@ cp README.md bin/zec-qt-wallet-v$APP_VERSION > /dev/null cp LICENSE bin/zec-qt-wallet-v$APP_VERSION > /dev/null cd bin && tar cvf linux-zec-qt-wallet-v$APP_VERSION.tar.gz zec-qt-wallet-v$APP_VERSION/ > /dev/null cd .. -cp bin/linux-zec-qt-wallet-v$APP_VERSION.tar.gz . +mkdir artifacts +cp bin/linux-zec-qt-wallet-v$APP_VERSION.tar.gz ./artifacts -if [ -f linux-zec-qt-wallet-v$APP_VERSION.tar.gz ] ; then +if [ -f artifacts/linux-zec-qt-wallet-v$APP_VERSION.tar.gz ] ; then echo "[OK]" - echo "Done. Build is linux-zec-qt-wallet-v$APP_VERSION.tar.gz" + echo "Done. Build is artifacts/linux-zec-qt-wallet-v$APP_VERSION.tar.gz" echo "Package contents:" - tar tf "linux-zec-qt-wallet-v$APP_VERSION.tar.gz" + tar tf "artifacts/linux-zec-qt-wallet-v$APP_VERSION.tar.gz" else echo "[ERROR]" exit 1 @@ -92,15 +93,16 @@ cp README.md release/zec-qt-wallet-v$APP_VERSION cp LICENSE release/zec-qt-wallet-v$APP_VERSION cd release && zip -r Windows-zec-qt-wallet-v$APP_VERSION.zip zec-qt-wallet-v$APP_VERSION/ > /dev/null cd .. -cp release/Windows-zec-qt-wallet-v$APP_VERSION.zip . +mkdir artifacts +cp release/Windows-zec-qt-wallet-v$APP_VERSION.zip ./artifacts -if [ -f Windows-zec-qt-wallet-v$APP_VERSION.zip ] ; then +if [ -f artifacts/Windows-zec-qt-wallet-v$APP_VERSION.zip ] ; then echo "[OK]" - echo "Done. Build is Windows-zec-qt-wallet-v$APP_VERSION.zip" + echo "Done. Build is artifacts/Windows-zec-qt-wallet-v$APP_VERSION.zip" echo "Package contents:" - unzip -l "Windows-zec-qt-wallet-v$APP_VERSION.zip" + unzip -l "artifacts/Windows-zec-qt-wallet-v$APP_VERSION.zip" else echo "[ERROR]" exit 1 diff --git a/src/scripts/mkwininstaller.ps1 b/src/scripts/mkwininstaller.ps1 new file mode 100644 index 0000000..06edc8c --- /dev/null +++ b/src/scripts/mkwininstaller.ps1 @@ -0,0 +1,15 @@ +if (-not (Test-Path env:APP_VERSION)) { echo "APP_VERSION is not set. Please set it to the version you want to build, like 0.1.6"; exit; } +$target="zec-qt-wallet-v$Env:APP_VERSION" + +echo "Building Installer" +Remove-Item -Path release/wininstaller -Recurse | Out-Null +New-Item release/wininstaller -itemtype directory | Out-Null + +Copy-Item release/$target/zec-qt-wallet.exe release/wininstaller/ +Copy-Item src/scripts/zec-qt-wallet.wxs release/wininstaller/ + +candle.exe release/wininstaller/zec-qt-wallet.wxs -o release/wininstaller/zec-qt-wallet.wixobj +light.exe -ext WixUIExtension -cultures:en-us release/wininstaller/zec-qt-wallet.wixobj -out release/wininstaller/zec-qt-wallet.msi + +New-Item artifacts -itemtype directory | Out-Null +Copy-Item release/wininstaller/zec-qt-wallet.msi ./artifacts/$target.msi \ No newline at end of file diff --git a/src/scripts/mkwinrelease.ps1 b/src/scripts/mkwinrelease.ps1 deleted file mode 100644 index af34195..0000000 --- a/src/scripts/mkwinrelease.ps1 +++ /dev/null @@ -1,46 +0,0 @@ -if (-not (Test-Path env:QT_DIR)) { echo "QT_DIR is not set. Please set it to the Qt directory from where you'd like to build. Usually, this is the installation directory of Qt."; exit; } -if (-not (Test-Path env:APP_VERSION)) { echo "APP_VERSION is not set. Please set it to the version you want to build, like 0.1.6"; exit; } - -$target="zec-qt-wallet-v$Env:APP_VERSION" - -echo "Git Status" -$branch= &git branch | select -first 1 -if ($branch -ne "* master") { - echo "Not on master branch!" - exit; -} -git pull - -echo "Cleaning" -nmake clean *>$null -Remove-Item -Path debug -Recurse | Out-Null -Remove-Item -Path release -Recurse | Out-Null - -# Run qmake -echo "Configuring" -& "$Env:QT_DIR\bin\qmake.exe" zec-qt-wallet.pro -spec win32-msvc "CONFIG+=release" - -echo "Building" -nmake *>$null -# Make a dist directory in release -New-Item release/$target -itemtype directory | Out-Null -Move-Item release/zec-qt-wallet.exe release/$target | Out-Null - -echo "Copying" -# No need for deploy, since we're using a static Qt5 library -& "$Env:QT_DIR\bin\windeployqt.exe" release/$target/zec-qt-wallet.exe *>$null -Copy-Item LICENSE release/$target | Out-Null -Copy-Item README.md release/$target | Out-Null - -echo "Zipping" -Compress-Archive -LiteralPath release/$target -DestinationPath "release/Windows-$target.zip" - -#echo "Package Contents" -#[Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem') -#foreach($sourceFile in (Get-ChildItem "release/Windows-$target.zip")) -#{ -# [IO.Compression.ZipFile]::OpenRead($sourceFile.FullName).Entries.FullName | -# %{ "$sourcefile`:$_" } -#} - -echo "Done" \ No newline at end of file diff --git a/src/scripts/qt5.natvis b/src/scripts/qt5.natvis deleted file mode 100644 index 95eedd0..0000000 --- a/src/scripts/qt5.natvis +++ /dev/null @@ -1,712 +0,0 @@ - - - - - - - - {{ x = {xp}, y = {yp} }} - - xp - yp - - - - - {{ x = {x1}, y = {y1}, width = {x2 - x1 + 1}, height = {y2 - y1 + 1} }} - - x1 - y1 - x2 - x1 + 1 - y2 - y1 + 1 - - - - - {{ x = {xp}, y = {yp}, width = {w}, height = {h} }} - - xp - yp - w - h - - - - - - {{ width = {wd}, height = {ht} }} - - wd - ht - - - - - - {{ start point = {pt1}, end point = {pt2} }} - - - {pt1} - - pt1 - - - - {pt2} - - pt2 - - - - - - - - {{ size = {d->size} }} - - d->ref.atomic._q_value - - d->size - (QPoint*)((reinterpret_cast<char*>(d)) + d->offset) - - - - - - {{ size = {d->size} }} - - - d->size > 0 - && ((((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[0]).xp - == (((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[d->size - 1]).xp) - && ((((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[0]).yp - == (((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[d->size - 1]).yp) - - d->ref.atomic._q_value - - d->size - (QPointF*)((reinterpret_cast<char*>(d)) + d->offset) - - - - - - {{ x = {xp}, y = {yp} }} - - xp - yp - - - - - {{ x = {xp}, y = {yp}, z = {zp} }} - - xp - yp - zp - - - - - {{ x = {xp}, y = {yp}, z = {zp}, w = {wp} }} - - xp - yp - zp - wp - - - - - - {{ m11 = {_m11}, m12 = {_m12}, m21 = {_m21}, m22 = {_m22}, ... }} - - - _m11 - _m12 - _m21 - _m22 - _dx - _dy - - - - - - {{ m11 = {m[0][0]}, m12 = {m[1][0]}, m13 = {m[2][0]}, m14 = {m[3][0]}, ... }} - - - m[0][0] - m[1][0] - m[2][0] - m[3][0] - m[0][1] - m[1][1] - m[2][1] - m[3][1] - m[0][2] - m[1][2] - m[2][2] - m[3][2] - m[0][3] - m[1][3] - m[2][3] - m[3][3] - - - - - - {{ horizontal = {static_cast<Policy>(bits.horPolicy)}, vertical = {static_cast<Policy>(bits.verPolicy)}, type = {ControlType(1 << bits.ctype)} }} - - - - QSizePolicy::Policy::{static_cast<Policy>(bits.verPolicy)} - - - QSizePolicy::Policy::{static_cast<Policy>(bits.horPolicy)} - - - QSizePolicy::ControlType::{ControlType(1 << bits.ctype)} - - - - Qt::Vertical (2) - - - Qt::Horizontal (1) - - - static_cast<int>(bits.verStretch) - static_cast<int>(bits.horStretch) - bits.hfw == 1 - bits.wfh == 1 - - - - - {ucs,c} - ucs,c - - ucs > 0xff ? '\0' : char(ucs),c - ucs,c - - - - - {((reinterpret_cast<unsigned short*>(d)) + d->offset / 2),sub} - ((reinterpret_cast<unsigned short*>(d)) + d->offset / 2),sub - - d->size - d->ref.atomic._q_value - - d->size - ((reinterpret_cast<unsigned short*>(d)) + d->offset / 2),c - - - - - - {((reinterpret_cast<char*>(d)) + d->offset),sb} - ((reinterpret_cast<char*>(d)) + d->offset),sb - - d->size - d->ref.atomic._q_value - - d->size - ((reinterpret_cast<char*>(d)) + d->offset),c - - - - - - {{ size = {(d.d->size << 3) - *((reinterpret_cast<char*>(d.d)) + d.d->offset)} }} - - d.d->ref.atomic._q_value - - (d.d->size << 3) - *((reinterpret_cast<char*>(d.d)) + d.d->offset) - - (*(reinterpret_cast<const unsigned char*>((reinterpret_cast<char*>(d.d)) + d.d->offset) + 1 - + ($i >> 3)) & (1 << ($i & 7))) != 0 - - - - - - - - {{ size = {s} }} - - a - - s - ptr - - - - - - {{ julian day = {jd} }} - - - - - {{ millisecond = {mds} }} - {{ milliseconds = {mds} }} - - mds / 3600000, d - mds / 3600000, d - (mds % 3600000) / 60000, d - (mds % 3600000) / 60000, d - (mds / 1000) % 60, d - (mds / 1000) % 60, d - mds % 1000, d - mds % 1000, d - - - - - {d.pattern} - - - - - ref._q_value - - - - - strong reference to shared pointer of type {"$T1"} - - value == 0 - d->weakref._q_value - d->strongref._q_value - - - - - pointer to implicit shared object of type {"$T1"} - - d - - - - - pointer to explicit shared object of type {"$T1"} - - d - - - - - guarded pointer to subclass of QObject of type {"$T1"} - - wp.d == 0 || wp.d->strongref._q_value == 0 || wp.value == 0 - - - - - weak reference to shared pointer of type {"$T1"} - - d == 0 || d->strongref._q_value == 0 || value == 0 - d->weakref._q_value - d->strongref._q_value - - - - - scoped pointer to a dynamically allocated object of type {"$T1"} - - !d - - - - - scoped pointer to dynamically allocated array of objects of type {"$T1"} - - !d - - - - - ({first}, {second}) - - first - second - - - - - - {{ size = {d->size} }} - - d->ref.atomic._q_value - - d->size - ($T1*)((reinterpret_cast<char*>(d)) + d->offset) - - - - - - - - {{ size = {d->end - d->begin} }} - - d->ref.atomic._q_value - - d->end - d->begin - *reinterpret_cast<$T1*>((sizeof($T1) > sizeof(void*)) - ? reinterpret_cast<Node*>(d->array + d->begin + $i)->v - : reinterpret_cast<$T1*>(d->array + d->begin + $i)) - - - - - - - {{ size = {d->size} }} - - d->ref.atomic._q_value - - d->size - d->n - n - (*(QLinkedListNode<$T1>*)this).t - - - - - - ({key}, {value}) - - key - value - - - - - - {{ size = {d->size} }} - - d->ref.atomic._q_value - - d->size - d->header.left - left - right - *((QMapNode<$T1,$T2>*)this) - - - - - - (empty) - ({key}, {value}) - - key - value - - - - - - {{ size = {d->size} }} - - d->ref.atomic._q_value - - d->numBuckets - *((QHashNode<$T1,$T2>*)d->buckets[$i]) - - - - - - (empty) - ({key}) - - key - - - - - {{ size = {q_hash.d->size} }} - - q_hash - - - - - ({*keyPtr}, {*t}) - - *keyPtr - *t - - - - - {{ size = {hash.d->size} }} - - mx - total - hash.d->ref.atomic._q_value - - hash.d->size - f - n - *((Node*)this) - - - - - - - - Invalid - {d.data.b} - {d.data.i} - {d.data.u} - {d.data.ll} - {d.data.ull} - {d.data.d} - {d.data.c} - - {*((QMap<QString,QVariant>*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - - - {*((QList<QVariant>*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - - - {*((QString*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - - - {*((QStringList*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - - - {*((QByteArray*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - - - {*((QBitArray*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - - - {*((QDate*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - - - {*((QTime*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - - DateTime - Url - Locale - - {*((QRect*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - - - {*((QRectF*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - - - {*((QSize*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - - - {*((QSizeF*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - - - {*((QLine*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - - - {*((QLineF*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - - - {*((QPoint*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - - - {*((QPointF*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - - RegExp - RegularExpression - - {*((QHash<QString,QVariant>*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr)))} - - EasingCurve - Uuid - ModelIndex - LastCoreType - Font - Pixmap - Brush - Color - Palette - Image - Polygon - Region - Bitmap - Cursor - KeySequence - Pen - TextLength - TextFormat - Matrix - Transform - Matrix4x4 - Vector2D - Vector3D - Vector4D - Quaternion - PolygonF - Icon - LastGuiType - SizePolicy - UserType - LastType - - - - - - d.data.c - - - *((QString*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - - - - *((QByteArray*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - - - - - - - - - *((QMap<QString,QVariant>*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - - - *((QList<QVariant>*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - - - *((QString*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - - - *((QStringList*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - - - *((QByteArray*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - - - *((QBitArray*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - - - *((QDate*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - - - *((QTime*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - - - *((QRect*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - - - *((QRectF*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - - - *((QSize*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - - - *((QSizeF*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - - - *((QLine*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - - - *((QLineF*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - - - *((QPoint*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - - - *((QPointF*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - - - *((QHash<QString,QVariant>*)(d.is_shared ? d.data.shared->ptr - : reinterpret_cast<const void *>(&d.data.ptr))) - - - - - - - diff --git a/src/scripts/zec-qt-wallet.wxs b/src/scripts/zec-qt-wallet.wxs index 2f0ac4a..cd31f87 100644 --- a/src/scripts/zec-qt-wallet.wxs +++ b/src/scripts/zec-qt-wallet.wxs @@ -55,6 +55,7 @@ Name="zec-qt-wallet" WorkingDirectory="INSTALLFOLDER" > +