|
51 | 51 |
|
52 | 52 | import loot_api |
53 | 53 | import pygit2 |
| 54 | +import PyInstaller.__main__ |
54 | 55 |
|
55 | 56 | import _winreg |
56 | 57 | import utils |
@@ -131,6 +132,17 @@ def setup_parser(parser): |
131 | 132 | parser.set_defaults(version=nightly_version) |
132 | 133 |
|
133 | 134 |
|
| 135 | +# PyInstaller thinks it's fine to setup logging on import... -.- |
| 136 | +def setup_pyinstaller_logger(logfile): |
| 137 | + root_logger = logging.getLogger() |
| 138 | + stupid_handler = root_logger.handlers[0] |
| 139 | + stupid_formatter = stupid_handler.formatter |
| 140 | + root_logger.removeHandler(stupid_handler) |
| 141 | + file_handler = logging.FileHandler(logfile) |
| 142 | + file_handler.setFormatter(stupid_formatter) |
| 143 | + logging.getLogger("PyInstaller").addHandler(file_handler) |
| 144 | + |
| 145 | + |
134 | 146 | def get_version_info(version): |
135 | 147 | """ |
136 | 148 | Generates version strings from the passed parameter. |
@@ -257,35 +269,24 @@ def pack_manual(version): |
257 | 269 | def build_executable(version, file_version): |
258 | 270 | """ Builds the executable. """ |
259 | 271 | LOGGER.info("Building executable...") |
260 | | - loot_orig = os.path.join(loot_api.__path__[0], u"loot.dll") |
261 | | - loot_target = os.path.join(MOPY_PATH, u"loot.dll") |
262 | | - build_folder = os.path.join(MOPY_PATH, u"build") |
263 | | - dist_folder = os.path.join(MOPY_PATH, u"dist") |
264 | | - setup_orig = os.path.join(WBSA_PATH, u"setup.py") |
265 | | - setup_target = os.path.join(MOPY_PATH, u"setup.py") |
266 | | - exe_orig = os.path.join(dist_folder, u"Wrye Bash Launcher.exe") |
267 | | - exe_target = os.path.join(MOPY_PATH, u"Wrye Bash.exe") |
268 | | - cpy(setup_orig, setup_target) |
269 | | - # Call the setup script |
270 | | - utils.run_subprocess( |
271 | | - [sys.executable, setup_target, "py2exe", "--version", file_version], |
272 | | - LOGGER, |
273 | | - cwd=MOPY_PATH |
274 | | - ) |
275 | | - # Copy the exe's to the Mopy folder |
276 | | - cpy(exe_orig, exe_target) |
277 | | - # py2exe can't read the loot.dll if it's in the exe |
278 | | - # so we have to include it before and delete it after |
279 | | - cpy(loot_orig, loot_target) |
280 | | - # Clean up py2exe generated files/folders |
281 | | - rm(setup_target) |
282 | | - rm(build_folder) |
283 | | - rm(dist_folder) |
| 272 | + temp_path = os.path.join(WBSA_PATH, u"temp") |
| 273 | + dist_path = os.path.join(WBSA_PATH, u"dist") |
| 274 | + spec_path = os.path.join(WBSA_PATH, u"pyinstaller.spec") |
| 275 | + orig_exe = os.path.join(dist_path, u"Wrye Bash.exe") |
| 276 | + dest_exe = os.path.join(MOPY_PATH, u"Wrye Bash.exe") |
| 277 | + PyInstaller.__main__.run([ |
| 278 | + "--clean", |
| 279 | + "--noconfirm", |
| 280 | + "--distpath={}".format(dist_path), |
| 281 | + "--workpath={}".format(temp_path), |
| 282 | + spec_path, |
| 283 | + ]) |
| 284 | + # Copy the exe to the Mopy folder |
| 285 | + cpy(orig_exe, dest_exe) |
284 | 286 | try: |
285 | 287 | yield |
286 | 288 | finally: |
287 | | - rm(exe_target) |
288 | | - rm(loot_target) |
| 289 | + rm(dest_exe) |
289 | 290 |
|
290 | 291 |
|
291 | 292 | def pack_standalone(version): |
@@ -426,6 +427,7 @@ def check_timestamp(build_version): |
426 | 427 |
|
427 | 428 |
|
428 | 429 | def main(args): |
| 430 | + setup_pyinstaller_logger(LOGFILE) |
429 | 431 | utils.setup_log(LOGGER, verbosity=args.verbosity, logfile=LOGFILE) |
430 | 432 | # check nightly timestamp is different than previous |
431 | 433 | if not check_timestamp(args.version): |
|
0 commit comments