nasm.us went down today and broke all our CI. Use the gstreamer mirror as the primary source and fallback to nasm.us if that's down.
67 lines
2.0 KiB
Python
67 lines
2.0 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import sys
|
|
import ssl
|
|
import zipfile
|
|
import hashlib
|
|
import urllib.request
|
|
import urllib.error
|
|
|
|
# Disable certificate checking because it always fails on Windows
|
|
# We verify the checksum anyway.
|
|
ctx = ssl.create_default_context()
|
|
ctx.check_hostname = False
|
|
ctx.verify_mode = ssl.CERT_NONE
|
|
|
|
BASENAME = 'nasm-{}-{}.zip'
|
|
UPSTREAM_URL = 'https://www.nasm.us/pub/nasm/releasebuilds/{}/{}/{}'
|
|
GSTREAMER_URL = 'https://gstreamer.freedesktop.org/src/mirror/{}'
|
|
|
|
version = sys.argv[1]
|
|
arch = 'win64' if sys.argv[2] == 'x86_64' else 'win32'
|
|
zip_sha256 = sys.argv[3]
|
|
source_dir = os.path.join(os.environ['MESON_SOURCE_ROOT'], os.environ['MESON_SUBDIR'])
|
|
dest = BASENAME.format(version, arch)
|
|
dest_path = os.path.join(source_dir, dest)
|
|
|
|
def get_sha256(zipf):
|
|
hasher = hashlib.sha256()
|
|
with open(zipf, 'rb') as f:
|
|
hasher.update(f.read())
|
|
return hasher.hexdigest()
|
|
|
|
if os.path.isfile(dest_path):
|
|
found_sha256 = get_sha256(dest_path)
|
|
if found_sha256 == zip_sha256:
|
|
print('{} already downloaded'.format(dest))
|
|
sys.exit(0)
|
|
else:
|
|
print('{} checksum mismatch, redownloading'.format(dest))
|
|
|
|
for url in (GSTREAMER_URL.format(dest), UPSTREAM_URL.format(version, arch, dest)):
|
|
print('Downloading {} to {}'.format(url, dest))
|
|
try:
|
|
with open(dest_path, 'wb') as d:
|
|
f = urllib.request.urlopen(url, context=ctx)
|
|
d.write(f.read())
|
|
break
|
|
except urllib.error.URLError as ex:
|
|
print(ex)
|
|
print('Failed to download from {!r}, trying mirror...'.format(url))
|
|
continue
|
|
else:
|
|
curdir = os.path.dirname(sys.argv[0])
|
|
print('Couldn\'t download {!r}! Try downloading it manually and '
|
|
'placing it into {!r}'.format(dest, curdir))
|
|
|
|
found_sha256 = get_sha256(dest_path)
|
|
if found_sha256 != zip_sha256:
|
|
print('SHA256 of downloaded file {} was {} instead of {}'
|
|
''.format(dest, found_sha256, zip_sha256))
|
|
sys.exit(1)
|
|
|
|
print('Extracting {}'.format(dest))
|
|
zf = zipfile.ZipFile(dest_path, "r")
|
|
zf.extractall(path=source_dir)
|