tdeterministic.spec - electrum - Electrum Bitcoin wallet
HTML git clone https://git.parazyd.org/electrum
DIR Log
DIR Files
DIR Refs
DIR Submodules
---
tdeterministic.spec (5938B)
---
1 # -*- mode: python -*-
2
3 from PyInstaller.utils.hooks import collect_data_files, collect_submodules, collect_dynamic_libs
4
5 import sys
6 for i, x in enumerate(sys.argv):
7 if x == '--name':
8 cmdline_name = sys.argv[i+1]
9 break
10 else:
11 raise Exception('no name')
12
13 home = 'C:\\electrum\\'
14
15 # see https://github.com/pyinstaller/pyinstaller/issues/2005
16 hiddenimports = []
17 hiddenimports += collect_submodules('pkg_resources') # workaround for https://github.com/pypa/setuptools/issues/1963
18 hiddenimports += collect_submodules('trezorlib')
19 hiddenimports += collect_submodules('safetlib')
20 hiddenimports += collect_submodules('btchip')
21 hiddenimports += collect_submodules('keepkeylib')
22 hiddenimports += collect_submodules('websocket')
23 hiddenimports += collect_submodules('ckcc')
24 hiddenimports += collect_submodules('bitbox02')
25 hiddenimports += ['PyQt5.QtPrintSupport'] # needed by Revealer
26
27
28 binaries = []
29
30 # Workaround for "Retro Look":
31 binaries += [b for b in collect_dynamic_libs('PyQt5') if 'qwindowsvista' in b[0]]
32
33 binaries += [('C:/tmp/libsecp256k1-0.dll', '.')]
34 binaries += [('C:/tmp/libusb-1.0.dll', '.')]
35 binaries += [('C:/tmp/libzbar-0.dll', '.')]
36
37 datas = [
38 (home+'electrum/*.json', 'electrum'),
39 (home+'electrum/lnwire/*.csv', 'electrum/lnwire'),
40 (home+'electrum/wordlist/english.txt', 'electrum/wordlist'),
41 (home+'electrum/locale', 'electrum/locale'),
42 (home+'electrum/plugins', 'electrum/plugins'),
43 (home+'electrum/gui/icons', 'electrum/gui/icons'),
44 ]
45 datas += collect_data_files('trezorlib')
46 datas += collect_data_files('safetlib')
47 datas += collect_data_files('btchip')
48 datas += collect_data_files('keepkeylib')
49 datas += collect_data_files('ckcc')
50 datas += collect_data_files('bitbox02')
51
52 # We don't put these files in to actually include them in the script but to make the Analysis method scan them for imports
53 a = Analysis([home+'run_electrum',
54 home+'electrum/gui/qt/main_window.py',
55 home+'electrum/gui/text.py',
56 home+'electrum/util.py',
57 home+'electrum/wallet.py',
58 home+'electrum/simple_config.py',
59 home+'electrum/bitcoin.py',
60 home+'electrum/dnssec.py',
61 home+'electrum/commands.py',
62 home+'electrum/plugins/cosigner_pool/qt.py',
63 home+'electrum/plugins/email_requests/qt.py',
64 home+'electrum/plugins/trezor/qt.py',
65 home+'electrum/plugins/safe_t/client.py',
66 home+'electrum/plugins/safe_t/qt.py',
67 home+'electrum/plugins/keepkey/qt.py',
68 home+'electrum/plugins/ledger/qt.py',
69 home+'electrum/plugins/coldcard/qt.py',
70 #home+'packages/requests/utils.py'
71 ],
72 binaries=binaries,
73 datas=datas,
74 #pathex=[home+'lib', home+'gui', home+'plugins'],
75 hiddenimports=hiddenimports,
76 hookspath=[])
77
78
79 # http://stackoverflow.com/questions/19055089/pyinstaller-onefile-warning-pyconfig-h-when-importing-scipy-or-scipy-signal
80 for d in a.datas:
81 if 'pyconfig' in d[0]:
82 a.datas.remove(d)
83 break
84
85 # Strip out parts of Qt that we never use. Reduces binary size by tens of MBs. see #4815
86 qt_bins2remove=('qt5web', 'qt53d', 'qt5game', 'qt5designer', 'qt5quick',
87 'qt5location', 'qt5test', 'qt5xml', r'pyqt5\qt\qml\qtquick')
88 print("Removing Qt binaries:", *qt_bins2remove)
89 for x in a.binaries.copy():
90 for r in qt_bins2remove:
91 if x[0].lower().startswith(r):
92 a.binaries.remove(x)
93 print('----> Removed x =', x)
94
95 qt_data2remove=(r'pyqt5\qt\translations\qtwebengine_locales', )
96 print("Removing Qt datas:", *qt_data2remove)
97 for x in a.datas.copy():
98 for r in qt_data2remove:
99 if x[0].lower().startswith(r):
100 a.datas.remove(x)
101 print('----> Removed x =', x)
102
103 # hotfix for #3171 (pre-Win10 binaries)
104 a.binaries = [x for x in a.binaries if not x[1].lower().startswith(r'c:\windows')]
105
106 pyz = PYZ(a.pure)
107
108
109 #####
110 # "standalone" exe with all dependencies packed into it
111
112 exe_standalone = EXE(
113 pyz,
114 a.scripts,
115 a.binaries,
116 a.datas,
117 name=os.path.join('build\\pyi.win32\\electrum', cmdline_name + ".exe"),
118 debug=False,
119 strip=None,
120 upx=False,
121 icon=home+'electrum/gui/icons/electrum.ico',
122 console=False)
123 # console=True makes an annoying black box pop up, but it does make Electrum output command line commands, with this turned off no output will be given but commands can still be used
124
125 exe_portable = EXE(
126 pyz,
127 a.scripts,
128 a.binaries,
129 a.datas + [ ('is_portable', 'README.md', 'DATA' ) ],
130 name=os.path.join('build\\pyi.win32\\electrum', cmdline_name + "-portable.exe"),
131 debug=False,
132 strip=None,
133 upx=False,
134 icon=home+'electrum/gui/icons/electrum.ico',
135 console=False)
136
137 #####
138 # exe and separate files that NSIS uses to build installer "setup" exe
139
140 exe_inside_setup_noconsole = EXE(
141 pyz,
142 a.scripts,
143 exclude_binaries=True,
144 name=os.path.join('build\\pyi.win32\\electrum', cmdline_name),
145 debug=False,
146 strip=None,
147 upx=False,
148 icon=home+'electrum/gui/icons/electrum.ico',
149 console=False)
150
151 exe_inside_setup_console = EXE(
152 pyz,
153 a.scripts,
154 exclude_binaries=True,
155 name=os.path.join('build\\pyi.win32\\electrum', cmdline_name+"-debug"),
156 debug=False,
157 strip=None,
158 upx=False,
159 icon=home+'electrum/gui/icons/electrum.ico',
160 console=True)
161
162 coll = COLLECT(
163 exe_inside_setup_noconsole,
164 exe_inside_setup_console,
165 a.binaries,
166 a.zipfiles,
167 a.datas,
168 strip=None,
169 upx=True,
170 debug=False,
171 icon=home+'electrum/gui/icons/electrum.ico',
172 console=False,
173 name=os.path.join('dist', 'electrum'))