From c4303352c43cc2c4f7a22a0fc227e311cefd41ce Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 6 May 2022 11:46:24 +0200 Subject: [PATCH] rewrote pyinstaller.py --- CHANGELOG.md | 3 +- pyinstaller.py | 467 +++++++++++++++++++++++++++---------------------- 2 files changed, 259 insertions(+), 211 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1649757..88929f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,14 @@ # Changelog (This document uses YYYY-MM-DD) -## [v2.2.3] - 2022-05-04 +## [v2.2.3] - 2022-05-06 ### Changed - Added empty 'package' option to 'setup' in setup.py, setuptools v61.0.0 doesn't seem to like our project layout anymore. - Qt's startSystemMove() is used to move Pesterchum's main window now. (system-specific move operation) - This fixes click-and-drag on Wayland, which doesn't support setting window position via setPosition(). - Still falls back on legacy code if startSystemMove is not supported. + - Rewrote pyinstaller.py ### Fixed - Unreadable input on MacOS and certain linux distros for themes which didn't explicitly set input color (incl. pesterchum), input color is now black by default instead of being platform-dependent. diff --git a/pyinstaller.py b/pyinstaller.py index 7cebd0f..b9178c9 100644 --- a/pyinstaller.py +++ b/pyinstaller.py @@ -4,92 +4,8 @@ import shutil import PyInstaller.__main__ -if sys.version_info < (3, 0, 0): - sys.exit("Python versions lower than 3 are not supported.") -elif (sys.version_info >= (3, 9, 0)) & (sys.platform == 'win32'): - print("WARNING!!!! Building with python 3.9 will make your builds not run on windows 7 and previous versions.") - -def is_64bit() -> bool: - return sys.maxsize > 2**32 - -is_64bit = is_64bit() - -try: - print("Pyinstaller script to make everything a bit more conventient, just being able to run \"pyinstaller\" \ -is a lot more useable than having to include all command line arguments every time.\n\ -Some of the include files are specific to my instalation, so you might have to edit the file if you run into issues \:\(") - - delete_builddist = input("Delete build & dist folders? (Y/N): ") - if delete_builddist.lower() == "y": - try: - shutil.rmtree('dist') - except FileNotFoundError as e: - print(e) - try: - shutil.rmtree('build') - except FileNotFoundError as e: - print(e) - print("UPX can decently reduce filesize but builds might get flagged by anti-viruses more often. (+ it sometimes breaks QT's DLLs)") - if input("Enable UPX? [N]: ").lower() == 'y': - upx_enabled = True - else: - upx_enabled = False - - if upx_enabled == True: - print("If upx is on your path you don't need to include anything here.") - if is_64bit == True: - upx_dir = input("UPX directory [D:\\upx-3.96-win64]: ") - if upx_dir == '': - upx_dir = "D:\\upx-3.96-win64" # Default dir for me :) - else: - upx_dir = input("UPX directory [D:\\upx-3.96-win32]: ") - if upx_dir == '': - upx_dir = "D:\\upx-3.96-win32" # Default dir for me :) - print("upx_dir = " + upx_dir) - else: - upx_dir = '' - if sys.platform == 'win32': - print("\nUniversal CRT needs to be included if you don't want to run into compatibility issues when building on Windows 10. ( https://pyinstaller.readthedocs.io/en/stable/usage.html?highlight=sdk#windows )") - if is_64bit == True: - crt_path = input("Universal CRT: [C:\\Program Files (x86)\\Windows Kits\\10\\Redist\\10.0.19041.0\\ucrt\\DLLs\\x64]: ") - if crt_path == '': - crt_path = "C:\\Program Files (x86)\\Windows Kits\\10\\Redist\\10.0.19041.0\\ucrt\\DLLs\\x64" # Default directory. - else: - crt_path = input("Extra path: [C:\\Program Files (x86)\\Windows Kits\\10\\Redist\\10.0.19041.0\\ucrt\\DLLs\\x86]: ") - if crt_path == '': - crt_path = "C:\\Program Files (x86)\\Windows Kits\\10\\Redist\\10.0.19041.0\\ucrt\\DLLs\\x86" # Default directory. - print("crt_path = " + crt_path) -except KeyboardInterrupt: - sys.exit("KeyboardInterrupt") - -exclude_modules = ['collections.sys', - 'collections._sre', - 'collections._json', - 'collections._locale', - 'collections._struct', - 'collections.array', - 'collections._weakref', - 'PyQt5.QtMultimedia', - 'PyQt5.QtDBus', - 'PyQt5.QtDeclarative', - 'PyQt5.QtHelp', - 'PyQt5.QtNetwork', - 'PyQt5.QtSql', - 'PyQt5.QtSvg', - 'PyQt5.QtTest', - 'PyQt5.QtWebKit', - 'PyQt5.QtXml', - 'PyQt5.QtXmlPatterns', - 'PyQt5.phonon', - 'PyQt5.QtAssistant', - 'PyQt5.QtDesigner', - 'PyQt5.QAxContainer', - 'pygame.docs' # Hopefully we can just not have pygame at all at some point =3 - # (when QtMultimedia stops relying on local codecs 2**32 +exclude_modules = [] add_data = ['quirks;quirks', 'smilies;smilies', 'themes;themes', @@ -99,7 +15,17 @@ add_data = ['quirks;quirks', 'CHANGELOG.md;.', 'PCskins.png;.', 'Pesterchum.png;.'] - +data_folders = {'quirks': 'quirks', + 'smilies': 'smilies', + 'themes': 'themes', + 'docs': 'docs'} +data_files = {'README.md': 'README.md.txt', + 'LICENSE': 'LICENSE.txt', + 'CHANGELOG.md': 'CHANGELOG.md.txt', + 'PCskins.png': '.', + 'Pesterchum.png': '.'} +# Some of these might not be required anymore, +# newer versions of PyInstaller claim to exclude certain problematic DDLs automatically. upx_exclude = ["qwindows.dll", "Qt5Core.dll", "Qt5Gui.dll", @@ -151,135 +77,228 @@ upx_exclude = ["qwindows.dll", "api-ms-win-crt-utility-l1-1-0.dll",\ "ucrtbase.dll"] +delete_builddist = '' +upx_enabled = '' +package_universal_crt = '' +onefile = '' +windowed = '' + +try: + print("This is a script to make building with Pyinstaller a bit more conventient.") + + while (delete_builddist != 'y') and (delete_builddist != 'n'): + delete_builddist = input("Delete build & dist folders? (Y/N): ").lower() + if delete_builddist == "y": + try: + shutil.rmtree('dist') + except FileNotFoundError as e: + print(e) + try: + shutil.rmtree('build') + except FileNotFoundError as e: + print(e) + + while (upx_enabled != 'y') and (upx_enabled != 'n'): + upx_enabled = input("Enable UPX? (Y/N): ").lower() + if upx_enabled == 'y': + print("If upx is on your path you don't need to include anything here.") + if is_64bit == True: + upx_dir = input("UPX directory [D:\\upx-3.96-win64]: ") + if upx_dir == '': + upx_dir = "D:\\upx-3.96-win64" # Default dir for me :) + else: + upx_dir = input("UPX directory [D:\\upx-3.96-win32]: ") + if upx_dir == '': + upx_dir = "D:\\upx-3.96-win32" # Default dir for me :) + print("upx_dir = " + upx_dir) + elif upx_enabled == 'n': + upx_dir = '' + + while (windowed != 'y') and (windowed != 'n'): + windowed = input("Build with '--windowed'? (Y/N): ").lower() + + if sys.platform == 'win32': + print("(https://pyinstaller.readthedocs.io/en/stable/usage.html?highlight=sdk#windows)") + while (package_universal_crt != 'y') and (package_universal_crt != 'n'): + package_universal_crt = input("Try to include universal CRT? (Y/N): ").lower() + if package_universal_crt == 'y': + if is_64bit == True: + crt_path = input("Universal CRT: [C:\\Program Files (x86)\\Windows Kits\\10\\Redist\\10.0.19041.0\\ucrt\\DLLs\\x64]: ") + if crt_path == '': + #crt_path = "C:\\Program Files (x86)\\Windows Kits\\10\\Redist\\10.0.19041.0\\ucrt\\DLLs\\x64" # Default directory. + crt_path = os.path.join('C:%s' % os.sep, 'Program Files (x86)', 'Windows Kits', '10', '10.0.19041.0', 'ucrt', 'DLLs', 'x64') + else: + crt_path = input("Extra path: [C:\\Program Files (x86)\\Windows Kits\\10\\Redist\\10.0.19041.0\\ucrt\\DLLs\\x86]: ") + if crt_path == '': + #crt_path = "C:\\Program Files (x86)\\Windows Kits\\10\\Redist\\10.0.19041.0\\ucrt\\DLLs\\x86" # Default directory. + crt_path = os.path.join('C:%s' % os.sep, 'Program Files (x86)', 'Windows Kits', '10', '10.0.19041.0', 'ucrt', 'DLLs', 'x86') + print("crt_path = " + crt_path) + + if (sys.platform == 'win32') or (sys.platform == 'linux'): + while (onefile != 'y') and (onefile != 'n'): + onefile = input("Build with '--onefile'? (Y/N): ").lower() + +except KeyboardInterrupt: + sys.exit("KeyboardInterrupt") + #Windows if sys.platform == 'win32': run_win32 = [ 'pesterchum.py', '--name=Pesterchum', - '--paths=%s' % crt_path, #'--noconfirm', # Overwrite output directory. - '--windowed', # Hide console - #'--onefile', + #'--windowed', # Hide console '--icon=pesterchum.ico', '--clean', # Clear cache + ] if (sys.version_info.major == 3) & (sys.version_info.minor == 8): exclude_modules.append('tkinter') - if upx_enabled == True: + if upx_enabled == 'y': if os.path.isdir(upx_dir): run_win32.append('--upx-dir=%s' % upx_dir) - else: + for x in upx_exclude: + run_win32.append('--upx-exclude=%s' % x ) + # Lower case variants are required. + run_win32.append('--upx-exclude=%s' % x.lower() ) + elif upx_enabled == 'n': run_win32.append('--noupx') - for x in upx_exclude: - run_win32.append('--upx-exclude=%s' % x ) - # Lower case variants are required. - run_win32.append('--upx-exclude=%s' % x.lower() ) for x in exclude_modules: run_win32.append('--exclude-module=%s' % x ) - for x in add_data: - run_win32.append('--add-data=%s' % x ) - - if os.path.exists(crt_path): - if is_64bit == False: - run_win32.append('--add-binary=%s\\api-ms-win-core-console-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-console-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-console-l1-2-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-datetime-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-debug-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-errorhandling-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-file-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-file-l1-2-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-file-l2-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-handle-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-heap-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-interlocked-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-libraryloader-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-localization-l1-2-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-memory-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-namedpipe-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-processenvironment-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-processthreads-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-processthreads-l1-1-1.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-profile-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-rtlsupport-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-string-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-synch-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-synch-l1-2-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-sysinfo-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-timezone-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-util-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\API-MS-Win-core-xstate-l2-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-conio-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-convert-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-environment-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-filesystem-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-heap-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-locale-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-math-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-multibyte-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-private-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-process-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-runtime-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-stdio-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-string-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-time-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-utility-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\ucrtbase.dll;.' % crt_path) - elif is_64bit == True: - run_win32.append('--add-binary=%s\\api-ms-win-core-console-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-console-l1-2-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-datetime-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-debug-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-errorhandling-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-file-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-file-l1-2-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-file-l2-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-handle-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-heap-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-interlocked-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-libraryloader-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-localization-l1-2-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-memory-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-namedpipe-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-processenvironment-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-processthreads-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-processthreads-l1-1-1.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-profile-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-rtlsupport-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-string-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-synch-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-synch-l1-2-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-sysinfo-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-timezone-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-core-util-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-conio-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-convert-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-environment-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-filesystem-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-heap-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-locale-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-math-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-multibyte-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-private-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-process-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-runtime-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-stdio-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-string-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-time-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\api-ms-win-crt-utility-l1-1-0.dll;.' % crt_path) - run_win32.append('--add-binary=%s\\ucrtbase.dll;.' % crt_path) + if windowed == 'y': + run_win32.append('--windowed') + if onefile == 'y': + run_win32.append('--onefile') + elif onefile == 'n': + for x in add_data: + run_win32.append('--add-data=%s' % x ) + + if package_universal_crt == 'y': + run_win32.append('--paths=\"%s\"' % crt_path) + if os.path.exists(crt_path): + if is_64bit == False: + run_win32.append('--add-binary=%s\\api-ms-win-core-console-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-console-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-console-l1-2-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-datetime-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-debug-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-errorhandling-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-file-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-file-l1-2-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-file-l2-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-handle-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-heap-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-interlocked-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-libraryloader-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-localization-l1-2-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-memory-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-namedpipe-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-processenvironment-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-processthreads-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-processthreads-l1-1-1.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-profile-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-rtlsupport-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-string-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-synch-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-synch-l1-2-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-sysinfo-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-timezone-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-util-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\API-MS-Win-core-xstate-l2-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-conio-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-convert-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-environment-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-filesystem-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-heap-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-locale-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-math-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-multibyte-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-private-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-process-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-runtime-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-stdio-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-string-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-time-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-utility-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\ucrtbase.dll;.' % crt_path) + elif is_64bit == True: + run_win32.append('--add-binary=%s\\api-ms-win-core-console-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-console-l1-2-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-datetime-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-debug-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-errorhandling-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-file-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-file-l1-2-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-file-l2-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-handle-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-heap-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-interlocked-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-libraryloader-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-localization-l1-2-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-memory-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-namedpipe-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-processenvironment-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-processthreads-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-processthreads-l1-1-1.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-profile-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-rtlsupport-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-string-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-synch-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-synch-l1-2-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-sysinfo-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-timezone-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-core-util-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-conio-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-convert-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-environment-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-filesystem-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-heap-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-locale-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-math-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-multibyte-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-private-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-process-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-runtime-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-stdio-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-string-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-time-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\api-ms-win-crt-utility-l1-1-0.dll;.' % crt_path) + run_win32.append('--add-binary=%s\\ucrtbase.dll;.' % crt_path) print(run_win32) - PyInstaller.__main__.run(run_win32) + if onefile == 'y': + # There's more proper ways to do this, but this doesn't require changing our paths + for x in data_folders: + print(x) + shutil.copytree(x, os.path.join('dist', data_folders[x]), + ignore=shutil.ignore_patterns('*.psd', + '*.xcf*', + 'ebg2.png', + 'ebg1.png')) + for x in data_files: + print(x) + shutil.copy(x, os.path.join('dist', data_files[x])) + + files = os.listdir('dist') + os.mkdir(os.path.join('dist', 'Pesterchum')) + for x in files: + shutil.move(os.path.join('dist',x), os.path.join('dist', 'Pesterchum')) + + #shutil.copy(os.path.join('build', 'Pesterchum', 'xref-Pesterchum.html'), + # os.path.join('dist', 'Pesterchum', 'xref-Pesterchum.html')) + #shutil.copy(os.path.join('build', 'Pesterchum', 'Analysis-00.toc'), + # os.path.join('dist', 'Pesterchum', 'Analysis-00.toc')) + + #MacOS elif sys.platform == 'darwin' : run_darwin =[ 'pesterchum.py', '--name=Pesterchum', - '--windowed', # Hide console + #'--windowed', # Hide console #'--noconfirm', # Overwrite output directory. '--icon=trayicon32.icns', # Icon '--onedir', @@ -287,22 +306,23 @@ elif sys.platform == 'darwin' : #'--noupx' ] - if upx_enabled == True: + if upx_enabled == 'y': if os.path.isdir(upx_dir): run_darwin.append('--upx-dir=%s' % upx_dir) - else: + for x in upx_exclude: + run_darwin.append('--upx-exclude=%s' % x ) + # Lower case variants are required. + run_darwin.append('--upx-exclude=%s' % x.lower() ) + elif upx_enabled == 'n': run_darwin.append('--noupx') if os.path.isdir(upx_dir): run_darwin.append('--upx-dir=%s' % upx_dir) - for x in upx_exclude: - run_darwin.append('--upx-exclude=%s' % x ) - # Lower case variants are required. - run_darwin.append('--upx-exclude=%s' % x.lower() ) for x in exclude_modules: run_darwin.append('--exclude-module=%s' % x ) for x in add_data: run_darwin.append('--add-data=%s' % x.replace(';',':') ) - + if windowed == 'y': + run_win32.append('--windowed') PyInstaller.__main__.run(run_darwin) #Linux @@ -316,25 +336,50 @@ elif sys.platform == 'linux': '--clean', # Clear cache ] - if upx_enabled == True: + if upx_enabled == 'y': if os.path.isdir(upx_dir): run_linux.append('--upx-dir=%s' % upx_dir) - else: + for x in upx_exclude: + run_linux.append('--upx-exclude=%s' % x ) + # Lower case variants are required. + run_linux.append('--upx-exclude=%s' % x.lower() ) + elif upx_enabled == 'n': run_linux.append('--noupx') - if os.path.isdir(upx_dir): - run_linux.append('--upx-dir=%s' % upx_dir) - for x in upx_exclude: - run_linux.append('--upx-exclude=%s' % x ) - # Lower case variants are required. - run_linux.append('--upx-exclude=%s' % x.lower() ) for x in exclude_modules: run_linux.append('--exclude-module=%s' % x ) - for x in add_data: - run_linux.append('--add-data=%s' % x.replace(';',':') ) - + if onefile == 'y': + run_linux.append('--onefile') + elif onefile == 'n': + for x in add_data: + run_linux.append('--add-data=%s' % x.replace(';',':') ) + if windowed == 'y': + run_win32.append('--windowed') + print(run_linux) PyInstaller.__main__.run(run_linux) + if onefile == 'y': + # There's more proper ways to do this, but this doesn't require changing our paths + for x in data_folders: + print(x) + shutil.copytree(x, os.path.join('dist', data_folders[x]), + ignore=shutil.ignore_patterns('*.psd', + '*.xcf*', + 'ebg2.png', + 'ebg1.png')) + for x in data_files: + print(x) + shutil.copy(x, os.path.join('dist', data_files[x])) + + files = os.listdir('dist') + os.mkdir(os.path.join('dist', 'Pesterchum')) + for x in files: + shutil.move(os.path.join('dist',x), os.path.join('dist', 'Pesterchum')) + #shutil.copy(os.path.join('build', 'Pesterchum', 'xref-Pesterchum.html'), + # os.path.join('dist', 'Pesterchum', 'xref-Pesterchum.html')) + #shutil.copy(os.path.join('build', 'Pesterchum', 'Analysis-00.toc'), + # os.path.join('dist', 'Pesterchum', 'Analysis-00.toc')) + else: print("Unknown platform.") @@ -344,7 +389,7 @@ else: '--clean', # Clear cache ] - if upx_enabled == True: + if upx_enabled == 'y': if os.path.isdir(upx_dir): run_generic.append('--upx-dir=%s' % upx_dir) else: @@ -357,7 +402,9 @@ else: run_generic.append('--exclude-module=%s' % x ) for x in add_data: run_generic.append('--add-data=%s' % x.replace(';',':') ) - + if windowed == 'y': + run_win32.append('--windowed') + print(run_generic) PyInstaller.__main__.run(run_generic)