1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pathlib import Path
import urllib.request
import subprocess
import argparse
import sys
from sys import stderr
TARBALL_VERSION = '0.3'
BASE_URL = "https://downloads.haskell.org/ghc/mingw/{}".format(TARBALL_VERSION)
DEST = Path('ghc-tarballs/mingw-w64')
ARCHS = ['i686', 'x86_64', 'sources']
def file_url(arch: str, fname: str) -> str:
return "{base}/{arch}/{fname}".format(
base=BASE_URL,
arch=arch,
fname=fname)
def fetch(url: str, dest: Path):
print('Fetching', url, '=>', dest, file=stderr)
urllib.request.urlretrieve(url, dest)
def fetch_arch(arch: str):
manifest_url = file_url(arch, 'MANIFEST')
print('Fetching', manifest_url, file=stderr)
req = urllib.request.urlopen(manifest_url)
files = req.read().decode('UTF-8').split('\n')
d = DEST / arch
if not d.is_dir():
d.mkdir(parents=True)
fetch(file_url(arch, 'SHA256SUMS'), d / 'SHA256SUMS')
for fname in files:
if not (d / fname).is_file():
fetch(file_url(arch, fname), d / fname)
verify(arch)
def verify(arch: str):
if not Path(DEST / arch / "SHA256SUMS").is_file():
print("SHA256SUMS doesn't exist; have you fetched?", file=stderr)
sys.exit(2)
cmd = ['sha256sum', '--quiet', '--check', '--ignore-missing', 'SHA256SUMS']
subprocess.check_call(cmd, cwd=DEST / arch)
def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument('mode', choices=['verify', 'download'])
parser.add_argument(
'arch',
choices=ARCHS + ['all'],
help="Architecture to fetch (either i686, x86_64, sources, or all)")
args = parser.parse_args()
action = fetch_arch if args.mode == 'download' else verify
if args.arch == 'all':
for arch in ARCHS:
action(arch)
else:
action(args.arch)
if __name__ == '__main__':
main()
|