mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-09-01 01:35:20 +00:00
Linux/Wine based build scripts for Windows executables and installer
This commit is contained in:
parent
f0f2a0687c
commit
c54372f324
5 changed files with 290 additions and 0 deletions
10
contrib/build-wine/README
Normal file
10
contrib/build-wine/README
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
These scripts can be used for cross-compilation of Windows Electrum executables from Linux/Wine.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
1. Copy content of this directory to / (root)
|
||||||
|
2. Install Wine (version 1.4 or 1.5+ works fine, 1.4.1 has bug).
|
||||||
|
3. Run "./build-wine.sh", it will download all dependencies. When you'll be asked, always leave default settings and press "Next >".
|
||||||
|
6. Build will create three separate versions in dist/ directory. One is "dist/electrum.exe", standalone compressed executable. Second one is directory "dist/electrum" containing uncompressed binaries, useful for comparsion with other builds. Third version is "electrum-setup.exe", NSIS-based installer of Electrum.
|
||||||
|
7. If you want to rebuild new version of Electrum, just change path to ZIP file in "build-wine.sh" and re-run script with "./build-wine.sh update". It will skip downloading all dependencie
|
||||||
|
|
||||||
|
For more information contact: slush <info@bitcoin.cz>
|
12
contrib/build-wine/archive.patch
Normal file
12
contrib/build-wine/archive.patch
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
252a253,255
|
||||||
|
> class NoZlib:
|
||||||
|
> def decompress(self, data):
|
||||||
|
> return data
|
||||||
|
253a257,259
|
||||||
|
> def compress(self, data, lvl):
|
||||||
|
> return data
|
||||||
|
>
|
||||||
|
316c322
|
||||||
|
< zlib = DummyZlib()
|
||||||
|
---
|
||||||
|
> zlib = NoZlib()
|
115
contrib/build-wine/build-wine.sh
Executable file
115
contrib/build-wine/build-wine.sh
Executable file
|
@ -0,0 +1,115 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# call "./build-wine.sh" to build everything from scratch
|
||||||
|
# call "./build-wine.sh update" to skip building full environment (it re-download only Electrum)
|
||||||
|
|
||||||
|
# You probably need to update only this link
|
||||||
|
ELECTRUM_URL=https://github.com/downloads/spesmilo/electrum/Electrum-1.5.6.tar.gz
|
||||||
|
NAME_ROOT=electrum-1.5.6
|
||||||
|
|
||||||
|
# Please update these links carefully, some versions won't work under Wine
|
||||||
|
PYTHON_URL=http://www.python.org/ftp/python/2.6.6/python-2.6.6.msi
|
||||||
|
PYQT4_URL=http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.9.5/PyQt-Py2.6-x86-gpl-4.9.5-1.exe
|
||||||
|
PYWIN32_URL=http://sourceforge.net/projects/pywin32/files/pywin32/Build%20218/pywin32-218.win32-py2.6.exe/download
|
||||||
|
PYINSTALLER_URL=https://github.com/downloads/pyinstaller/pyinstaller/pyinstaller-2.0.zip
|
||||||
|
NSIS_URL=http://prdownloads.sourceforge.net/nsis/nsis-2.46-setup.exe?download
|
||||||
|
#ZBAR_URL=http://sourceforge.net/projects/zbar/files/zbar/0.10/zbar-0.10-setup.exe/download
|
||||||
|
|
||||||
|
# These settings probably don't need change
|
||||||
|
export WINEPREFIX=~/.wine-electrum
|
||||||
|
PYHOME=c:/python26
|
||||||
|
PYTHON="wine $PYHOME/python.exe -OO -B"
|
||||||
|
|
||||||
|
# Let's begin!
|
||||||
|
cd `dirname $0`
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "x$1" != "xupdate" ]; then
|
||||||
|
|
||||||
|
# Clean Wine environment
|
||||||
|
echo "Cleaning $WINEPREFIX"
|
||||||
|
rm -rf $WINEPREFIX
|
||||||
|
echo "done"
|
||||||
|
|
||||||
|
echo "Cleaning tmp"
|
||||||
|
rm -rf tmp
|
||||||
|
mkdir -p tmp
|
||||||
|
echo "done"
|
||||||
|
|
||||||
|
cd tmp
|
||||||
|
|
||||||
|
# Install Python
|
||||||
|
wget -O python.msi "$PYTHON_URL"
|
||||||
|
msiexec /q /i python.msi
|
||||||
|
|
||||||
|
# Install PyWin32
|
||||||
|
wget -O pywin32.exe "$PYWIN32_URL"
|
||||||
|
wine pywin32.exe
|
||||||
|
|
||||||
|
# Install PyQt4
|
||||||
|
wget -O PyQt.exe "$PYQT4_URL"
|
||||||
|
wine PyQt.exe
|
||||||
|
|
||||||
|
#cp -r /electrum-wine/pyinstaller $WINEPREFIX/drive_c/
|
||||||
|
# Install pyinstaller
|
||||||
|
wget -O pyinstaller.zip "$PYINSTALLER_URL"
|
||||||
|
unzip pyinstaller.zip
|
||||||
|
mv pyinstaller-2.0 $WINEPREFIX/drive_c/pyinstaller
|
||||||
|
|
||||||
|
# Patch pyinstaller's DummyZlib
|
||||||
|
patch $WINEPREFIX/drive_c/pyinstaller/PyInstaller/loader/archive.py < ../archive.patch
|
||||||
|
|
||||||
|
# Install ZBar
|
||||||
|
#wget -q -O zbar.exe "http://sourceforge.net/projects/zbar/files/zbar/0.10/zbar-0.10-setup.exe/download"
|
||||||
|
#wine zbar.exe
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
wget -q -O - "http://python-distribute.org/distribute_setup.py" | $PYTHON
|
||||||
|
wine "$PYHOME\\Scripts\\easy_install.exe" ecdsa slowaes #zbar
|
||||||
|
|
||||||
|
# Install NSIS installer
|
||||||
|
wget -q -O nsis.exe "http://prdownloads.sourceforge.net/nsis/nsis-2.46-setup.exe?download"
|
||||||
|
wine nsis.exe
|
||||||
|
|
||||||
|
# Install UPX
|
||||||
|
#wget -O upx.zip "http://upx.sourceforge.net/download/upx308w.zip"
|
||||||
|
#unzip -o upx.zip
|
||||||
|
#cp upx*/upx.exe .
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd tmp
|
||||||
|
|
||||||
|
# Download and unpack Electrum
|
||||||
|
wget -O electrum.tgz "$ELECTRUM_URL"
|
||||||
|
tar xf electrum.tgz
|
||||||
|
mv Electrum-* electrum
|
||||||
|
rm -rf $WINEPREFIX/drive_c/electrum
|
||||||
|
mv electrum $WINEPREFIX/drive_c
|
||||||
|
|
||||||
|
# Copy ZBar libraries to electrum
|
||||||
|
#cp "$WINEPREFIX/drive_c/Program Files (x86)/ZBar/bin/"*.dll "$WINEPREFIX/drive_c/electrum/"
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
rm -rf dist/$NAME_ROOT
|
||||||
|
rm -f dist/$NAME_ROOT.zip
|
||||||
|
rm -f dist/$NAME_ROOT.exe
|
||||||
|
rm -f dist/$NAME_ROOT-setup.exe
|
||||||
|
|
||||||
|
# For building standalone compressed EXE, run:
|
||||||
|
$PYTHON "C:/pyinstaller/pyinstaller.py" --noconfirm --ascii -w --onefile "C:/electrum/electrum"
|
||||||
|
|
||||||
|
# For building uncompressed directory of dependencies, run:
|
||||||
|
$PYTHON "C:/pyinstaller/pyinstaller.py" --noconfirm --ascii -w deterministic.spec
|
||||||
|
|
||||||
|
# For building NSIS installer, run:
|
||||||
|
wine "$WINEPREFIX/drive_c/Program Files (x86)/NSIS/makensis.exe" electrum.nsis
|
||||||
|
#wine $WINEPREFIX/drive_c/Program\ Files\ \(x86\)/NSIS/makensis.exe electrum.nsis
|
||||||
|
|
||||||
|
cd dist
|
||||||
|
mv electrum.exe $NAME_ROOT.exe
|
||||||
|
mv electrum $NAME_ROOT
|
||||||
|
mv electrum-setup.exe $NAME_ROOT-setup.exe
|
||||||
|
zip -r $NAME_ROOT.zip $NAME_ROOT
|
24
contrib/build-wine/deterministic.spec
Normal file
24
contrib/build-wine/deterministic.spec
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# -*- mode: python -*-
|
||||||
|
a = Analysis(['C:/electrum/electrum'],
|
||||||
|
pathex=['Z:\\electrum-wine'],
|
||||||
|
hiddenimports=[],
|
||||||
|
excludes=['Tkinter'],
|
||||||
|
hookspath=None)
|
||||||
|
pyz = PYZ(a.pure, level=0)
|
||||||
|
exe = EXE(pyz,
|
||||||
|
a.scripts,
|
||||||
|
exclude_binaries=1,
|
||||||
|
name=os.path.join('build\\pyi.win32\\electrum', 'electrum.exe'),
|
||||||
|
debug=False,
|
||||||
|
strip=None,
|
||||||
|
upx=True,
|
||||||
|
console=False )
|
||||||
|
coll = COLLECT(exe,
|
||||||
|
a.binaries,
|
||||||
|
a.zipfiles,
|
||||||
|
a.datas,
|
||||||
|
strip=None,
|
||||||
|
upx=True,
|
||||||
|
name=os.path.join('dist', 'electrum'))
|
||||||
|
app = BUNDLE(coll,
|
||||||
|
name=os.path.join('dist', 'electrum.app'))
|
129
contrib/build-wine/electrum.nsis
Normal file
129
contrib/build-wine/electrum.nsis
Normal file
|
@ -0,0 +1,129 @@
|
||||||
|
; -------------------------------
|
||||||
|
; Start
|
||||||
|
|
||||||
|
|
||||||
|
!define MUI_PRODUCT "Electrum"
|
||||||
|
!define MUI_FILE "electrum"
|
||||||
|
!define MUI_VERSION ""
|
||||||
|
!define MUI_BRANDINGTEXT "Electrum"
|
||||||
|
CRCCheck On
|
||||||
|
|
||||||
|
!include "${NSISDIR}\Contrib\Modern UI\System.nsh"
|
||||||
|
|
||||||
|
|
||||||
|
;--------------------------------
|
||||||
|
;General
|
||||||
|
|
||||||
|
OutFile "dist\electrum-setup.exe"
|
||||||
|
ShowInstDetails "nevershow"
|
||||||
|
ShowUninstDetails "nevershow"
|
||||||
|
;SetCompressor "lzma"
|
||||||
|
|
||||||
|
;!define MUI_ICON "icon.ico"
|
||||||
|
;!define MUI_UNICON "icon.ico"
|
||||||
|
;!define MUI_SPECIALBITMAP "Bitmap.bmp"
|
||||||
|
|
||||||
|
|
||||||
|
;--------------------------------
|
||||||
|
;Folder selection page
|
||||||
|
|
||||||
|
InstallDir "$PROGRAMFILES\${MUI_PRODUCT}"
|
||||||
|
|
||||||
|
|
||||||
|
;--------------------------------
|
||||||
|
;Modern UI Configuration
|
||||||
|
|
||||||
|
!define MUI_WELCOMEPAGE
|
||||||
|
!define MUI_LICENSEPAGE
|
||||||
|
!define MUI_DIRECTORYPAGE
|
||||||
|
!define MUI_ABORTWARNING
|
||||||
|
!define MUI_UNINSTALLER
|
||||||
|
!define MUI_UNCONFIRMPAGE
|
||||||
|
!define MUI_FINISHPAGE
|
||||||
|
|
||||||
|
|
||||||
|
;--------------------------------
|
||||||
|
;Language
|
||||||
|
|
||||||
|
!insertmacro MUI_LANGUAGE "English"
|
||||||
|
|
||||||
|
|
||||||
|
;--------------------------------
|
||||||
|
;Modern UI System
|
||||||
|
|
||||||
|
;!insertmacro MUI_SYSTEM
|
||||||
|
|
||||||
|
|
||||||
|
;--------------------------------
|
||||||
|
;Data
|
||||||
|
|
||||||
|
LicenseData "license.txt"
|
||||||
|
|
||||||
|
|
||||||
|
;--------------------------------
|
||||||
|
;Installer Sections
|
||||||
|
Section "install" ;Installation info
|
||||||
|
|
||||||
|
;Add files
|
||||||
|
SetOutPath "$INSTDIR"
|
||||||
|
|
||||||
|
;File "${MUI_FILE}.exe"
|
||||||
|
;File "${MUI_FILE}.ini"
|
||||||
|
;File "license.txt"
|
||||||
|
SetOutPath "$INSTDIR"
|
||||||
|
file /r dist\electrum\*.*
|
||||||
|
|
||||||
|
;create desktop shortcut
|
||||||
|
CreateShortCut "$DESKTOP\${MUI_PRODUCT}.lnk" "$INSTDIR\${MUI_FILE}.exe" ""
|
||||||
|
|
||||||
|
;create start-menu items
|
||||||
|
CreateDirectory "$SMPROGRAMS\${MUI_PRODUCT}"
|
||||||
|
CreateShortCut "$SMPROGRAMS\${MUI_PRODUCT}\Uninstall.lnk" "$INSTDIR\Uninstall.exe" "" "$INSTDIR\Uninstall.exe" 0
|
||||||
|
CreateShortCut "$SMPROGRAMS\${MUI_PRODUCT}\${MUI_PRODUCT}.lnk" "$INSTDIR\${MUI_FILE}.exe" "" "$INSTDIR\${MUI_FILE}.exe" 0
|
||||||
|
|
||||||
|
;write uninstall information to the registry
|
||||||
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" "DisplayName" "${MUI_PRODUCT} (remove only)"
|
||||||
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}" "UninstallString" "$INSTDIR\Uninstall.exe"
|
||||||
|
|
||||||
|
WriteUninstaller "$INSTDIR\Uninstall.exe"
|
||||||
|
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
|
||||||
|
;--------------------------------
|
||||||
|
;Uninstaller Section
|
||||||
|
Section "Uninstall"
|
||||||
|
|
||||||
|
;Delete Files
|
||||||
|
RMDir /r "$INSTDIR\*.*"
|
||||||
|
|
||||||
|
;Remove the installation directory
|
||||||
|
RMDir "$INSTDIR"
|
||||||
|
|
||||||
|
;Delete Start Menu Shortcuts
|
||||||
|
Delete "$DESKTOP\${MUI_PRODUCT}.lnk"
|
||||||
|
Delete "$SMPROGRAMS\${MUI_PRODUCT}\*.*"
|
||||||
|
RmDir "$SMPROGRAMS\${MUI_PRODUCT}"
|
||||||
|
|
||||||
|
;Delete Uninstaller And Unistall Registry Entries
|
||||||
|
DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\${MUI_PRODUCT}"
|
||||||
|
DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}"
|
||||||
|
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
|
||||||
|
;--------------------------------
|
||||||
|
;MessageBox Section
|
||||||
|
|
||||||
|
|
||||||
|
;Function that calls a messagebox when installation finished correctly
|
||||||
|
Function .onInstSuccess
|
||||||
|
MessageBox MB_OK "You have successfully installed ${MUI_PRODUCT}. Use the desktop icon to start the program."
|
||||||
|
FunctionEnd
|
||||||
|
|
||||||
|
|
||||||
|
Function un.onUninstSuccess
|
||||||
|
MessageBox MB_OK "You have successfully uninstalled ${MUI_PRODUCT}."
|
||||||
|
FunctionEnd
|
||||||
|
|
||||||
|
;eof
|
Loading…
Add table
Reference in a new issue