-)
-
-dependancies = ['Crypto', 'mutagen'] + collect_submodules('websockets')
-excluded_modules = ['test', 'ytdlp_plugins', 'youtube-dl', 'youtube-dlc']
-
-PyInstaller.__main__.run([
- '--name=yt-dlp%s' % _x86,
- '--icon=devscripts/logo.ico',
- *[f'--exclude-module={module}' for module in excluded_modules],
- *[f'--hidden-import={module}' for module in dependancies],
- '--upx-exclude=vcruntime140.dll',
- '--noconfirm',
- *opts,
- 'yt_dlp/__main__.py',
-])
-SetVersion('dist/yt-dlp%s.exe' % _x86, VERSION_FILE)
+
+ print(f'Running PyInstaller with {opts}')
+ run_pyinstaller(opts)
+ set_version_info(final_file, version)
+
+
+def parse_options():
+ # Compatibility with older arguments
+ opts = sys.argv[1:]
+ if opts[0:1] in (['32'], ['64']):
+ if ARCH != opts[0]:
+ raise Exception(f'{opts[0]}bit executable cannot be built on a {ARCH}bit system')
+ opts = opts[1:]
+ return opts
+
+
+def exe(onedir):
+ """@returns (name, path)"""
+ name = '_'.join(filter(None, (
+ 'yt-dlp',
+ {'win32': '', 'darwin': 'macos'}.get(OS_NAME, OS_NAME),
+ MACHINE,
+ )))
+ return name, ''.join(filter(None, (
+ 'dist/',
+ onedir and f'{name}/',
+ name,
+ OS_NAME == 'win32' and '.exe'
+ )))
+
+
+def version_to_list(version):
+ version_list = version.split('.')
+ return list(map(int, version_list)) + [0] * (4 - len(version_list))
+
+
+def set_version_info(exe, version):
+ if OS_NAME == 'win32':
+ windows_set_version(exe, version)
+
+
+def windows_set_version(exe, version):
+ from PyInstaller.utils.win32.versioninfo import (
+ FixedFileInfo,
+ StringFileInfo,
+ StringStruct,
+ StringTable,
+ VarFileInfo,
+ VarStruct,
+ VSVersionInfo,
+ )
+
+ try:
+ from PyInstaller.utils.win32.versioninfo import SetVersion
+ except ImportError: # Pyinstaller >= 5.8
+ from PyInstaller.utils.win32.versioninfo import write_version_info_to_executable as SetVersion
+
+ version_list = version_to_list(version)
+ suffix = MACHINE and f'_{MACHINE}'
+ SetVersion(exe, VSVersionInfo(
+ ffi=FixedFileInfo(
+ filevers=version_list,
+ prodvers=version_list,
+ mask=0x3F,
+ flags=0x0,
+ OS=0x4,
+ fileType=0x1,
+ subtype=0x0,
+ date=(0, 0),
+ ),
+ kids=[
+ StringFileInfo([StringTable('040904B0', [
+ StringStruct('Comments', 'yt-dlp%s Command Line Interface' % suffix),
+ StringStruct('CompanyName', 'https://github.com/yt-dlp'),
+ StringStruct('FileDescription', 'yt-dlp%s' % (MACHINE and f' ({MACHINE})')),
+ StringStruct('FileVersion', version),
+ StringStruct('InternalName', f'yt-dlp{suffix}'),
+ StringStruct('LegalCopyright', 'pukkandan.ytdlp@gmail.com | UNLICENSE'),
+ StringStruct('OriginalFilename', f'yt-dlp{suffix}.exe'),
+ StringStruct('ProductName', f'yt-dlp{suffix}'),
+ StringStruct(
+ 'ProductVersion', f'{version}{suffix} on Python {platform.python_version()}'),
+ ])]), VarFileInfo([VarStruct('Translation', [0, 1200])])
+ ]
+ ))
+
+
+if __name__ == '__main__':
+ main()