From f6a365172afe127a4ba770e14569f2d3cd7569b4 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Tue, 5 Apr 2022 11:33:19 +0200 Subject: Use legacy PDF.js build for macOS/Windows releases Fixes #7108 --- scripts/dev/build_release.py | 9 ++++++--- scripts/dev/update_3rdparty.py | 41 +++++++++++++++++++++++++++++++---------- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/scripts/dev/build_release.py b/scripts/dev/build_release.py index 797b15e52..a4fbadf15 100755 --- a/scripts/dev/build_release.py +++ b/scripts/dev/build_release.py @@ -302,7 +302,9 @@ def build_mac(*, gh_token, debug): for d in ['dist', 'build']: shutil.rmtree(d, ignore_errors=True) utils.print_title("Updating 3rdparty content") - update_3rdparty.run(ace=False, pdfjs=True, fancy_dmg=False, gh_token=gh_token) + # FIXME:qt6 Use modern PDF.js version here + update_3rdparty.run(ace=False, pdfjs=True, legacy_pdfjs=True, fancy_dmg=False, + gh_token=gh_token) utils.print_title("Building .app via pyinstaller") call_tox('pyinstaller-64', '-r', debug=debug) utils.print_title("Patching .app") @@ -395,8 +397,9 @@ def _build_windows_single(*, x64, skip_packaging, debug): def build_windows(*, gh_token, skip_packaging, only_32bit, only_64bit, debug): """Build windows executables/setups.""" utils.print_title("Updating 3rdparty content") - update_3rdparty.run(nsis=True, ace=False, pdfjs=True, fancy_dmg=False, - gh_token=gh_token) + # FIXME:qt6 Use modern PDF.js version here + update_3rdparty.run(nsis=True, ace=False, pdfjs=True, legacy_pdfjs=True, + fancy_dmg=False, gh_token=gh_token) utils.print_title("Building Windows binaries") diff --git a/scripts/dev/update_3rdparty.py b/scripts/dev/update_3rdparty.py index 60b72d110..b1991fa1f 100755 --- a/scripts/dev/update_3rdparty.py +++ b/scripts/dev/update_3rdparty.py @@ -64,7 +64,20 @@ def download_nsis_plugins(): urllib.request.urlcleanup() -def get_latest_pdfjs_url(gh_token): +def find_pdfjs_asset(assets, legacy): + """Find the PDF.js asset to use.""" + for asset in assets: + name = asset["name"] + if ( + name.startswith("pdfjs-") and + name.endswith("-dist.zip") and + name.endswith("-legacy-dist.zip") == legacy + ): + return asset + raise Exception(f"No pdfjs found in {assets}") + + +def get_latest_pdfjs_url(gh_token, legacy): """Get the URL of the latest pdf.js prebuilt package. Returns a (version, url)-tuple. @@ -83,22 +96,25 @@ def get_latest_pdfjs_url(gh_token): with urllib.request.urlopen(request) as fp: data = json.loads(fp.read().decode('utf-8')) - download_url = data['assets'][0]['browser_download_url'] + asset = find_pdfjs_asset(data["assets"], legacy=legacy) + + download_url = asset['browser_download_url'] version_name = data['name'] return (version_name, download_url) -def update_pdfjs(target_version=None, gh_token=None): +def update_pdfjs(target_version=None, legacy=False, gh_token=None): """Download and extract the latest pdf.js version. If target_version is not None, download the given version instead. Args: target_version: None or version string ('x.y.z') + legacy: Whether to download the legacy build for 83-based. gh_token: GitHub token to use for the API. Optional except on CI. """ if target_version is None: - version, url = get_latest_pdfjs_url(gh_token) + version, url = get_latest_pdfjs_url(gh_token, legacy=legacy) else: # We need target_version as x.y.z, without the 'v' prefix, though the # user might give it on the command line @@ -107,13 +123,14 @@ def update_pdfjs(target_version=None, gh_token=None): # version should have the prefix to be consistent with the return value # of get_latest_pdfjs_url() version = 'v' + target_version + suffix = "-legacy" if legacy else "" url = ('https://github.com/mozilla/pdf.js/releases/download/' - 'v{0}/pdfjs-{0}-dist.zip').format(target_version) + f'{version}/pdfjs-{target_version}{suffix}-dist.zip') os.chdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..')) target_path = os.path.join('qutebrowser', '3rdparty', 'pdfjs') - print("=> Downloading pdf.js {}".format(version)) + print(f"=> Downloading pdf.js {version}{' (legacy)' if legacy else ''}") try: (archive_path, _headers) = urllib.request.urlretrieve(url) except urllib.error.HTTPError as error: @@ -167,13 +184,13 @@ def test_dicts(): print('ERROR: {}'.format(response.status)) -def run(nsis=False, ace=False, pdfjs=True, fancy_dmg=False, pdfjs_version=None, - dicts=False, gh_token=None): +def run(nsis=False, ace=False, pdfjs=True, legacy_pdfjs=False, fancy_dmg=False, + pdfjs_version=None, dicts=False, gh_token=None): """Update components based on the given arguments.""" if nsis: download_nsis_plugins() if pdfjs: - update_pdfjs(pdfjs_version, gh_token=gh_token) + update_pdfjs(pdfjs_version, legacy=legacy_pdfjs, gh_token=gh_token) if ace: update_ace() if fancy_dmg: @@ -191,6 +208,9 @@ def main(): help='Specify pdfjs version. If not given, ' 'the latest version is used.', required=False, metavar='VERSION') + parser.add_argument("--legacy-pdfjs", + help="Use legacy PDF.js build (for 83-based)", + action='store_true') parser.add_argument('--fancy-dmg', help="Update fancy-dmg Makefile", action='store_true') parser.add_argument( @@ -202,7 +222,8 @@ def main(): '--gh-token', help="GitHub token to use.", nargs='?') args = parser.parse_args() run(nsis=False, ace=True, pdfjs=True, fancy_dmg=args.fancy_dmg, - pdfjs_version=args.pdfjs, dicts=args.dicts, gh_token=args.gh_token) + pdfjs_version=args.pdfjs, legacy_pdfjs=args.legacy_pdfjs, + dicts=args.dicts, gh_token=args.gh_token) if __name__ == '__main__': -- cgit v1.2.3-54-g00ecf