Mercurial > pygame
annotate mingw_installer.py @ 3172:d1b367fc08bc tests-returncode
Use a return code of 1 when the tests fail.
| author | Thomas Kluyver <takowl@gmail.com> |
|---|---|
| date | Wed, 09 Jan 2013 10:13:57 +0000 |
| parents | cd8ec06d8bd2 |
| children |
| rev | line source |
|---|---|
|
2048
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
1 # MinGW installer. |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
2 # |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
3 # Requires: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
4 # httplib2 (http://code.google.com/p/httplib2/) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
5 # 7-Zip 9.15 (http://sourceforge.net/projects/sevenzip/files/) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
6 # |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
7 from __future__ import with_statement |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
8 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
9 import httplib2 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
10 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
11 import sys |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
12 import os |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
13 import _winreg |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
14 import re |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
15 import subprocess |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
16 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
17 # Usual MinGW directory, without drive letter. |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
18 default_mingw_subdir = 'MinGW' |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
19 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
20 packages = [ |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
21 # gcc core |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
22 'http://sourceforge.net/projects/mingw/files/MinGW/BaseSystem/GNU-Binutils/binutils-2.20.51/binutils-2.20.51-1-mingw32-bin.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
23 'http://sourceforge.net/projects/mingw/files/MinGW/BaseSystem/RuntimeLibrary/MinGW-RT/mingwrt-3.18/mingwrt-3.18-mingw32-dll.tar.gz/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
24 'http://sourceforge.net/projects/mingw/files/MinGW/BaseSystem/RuntimeLibrary/MinGW-RT/mingwrt-3.18/mingwrt-3.18-mingw32-dev.tar.gz/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
25 'http://sourceforge.net/projects/mingw/files/MinGW/BaseSystem/RuntimeLibrary/Win32-API/w32api-3.14/w32api-3.14-mingw32-dev.tar.gz/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
26 'http://sourceforge.net/projects/mingw/files/MinGW/mpc/mpc-0.8.1-1/mpc-0.8.1-1-mingw32-dev.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
27 'http://sourceforge.net/projects/mingw/files/MinGW/mpc/mpc-0.8.1-1/libmpc-0.8.1-1-mingw32-dll-2.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
28 'http://sourceforge.net/projects/mingw/files/MinGW/mpfr/mpfr-2.4.1-1/mpfr-2.4.1-1-mingw32-dev.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
29 'http://sourceforge.net/projects/mingw/files/MinGW/mpfr/mpfr-2.4.1-1/libmpfr-2.4.1-1-mingw32-dll-1.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
30 'http://sourceforge.net/projects/mingw/files/MinGW/gmp/gmp-5.0.1-1/gmp-5.0.1-1-mingw32-dev.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
31 'http://sourceforge.net/projects/mingw/files/MinGW/gmp/gmp-5.0.1-1/libgmp-5.0.1-1-mingw32-dll-10.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
32 'http://sourceforge.net/projects/mingw/files/MinGW/pthreads-w32/pthreads-w32-2.8.0-3/pthreads-w32-2.8.0-3-mingw32-dev.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
33 'http://sourceforge.net/projects/mingw/files/MinGW/pthreads-w32/pthreads-w32-2.8.0-3/libpthread-2.8.0-3-mingw32-dll-2.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
34 'http://sourceforge.net/projects/mingw/files/MinGW/BaseSystem/GCC/Version4/gcc-4.5.0-1/libgomp-4.5.0-1-mingw32-dll-1.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
35 'http://sourceforge.net/projects/mingw/files/MinGW/BaseSystem/GCC/Version4/gcc-4.5.0-1/libssp-4.5.0-1-mingw32-dll-0.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
36 'http://sourceforge.net/projects/mingw/files/MinGW/BaseSystem/GCC/Version4/gcc-4.5.0-1/gcc-core-4.5.0-1-mingw32-bin.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
37 'http://sourceforge.net/projects/mingw/files/MinGW/BaseSystem/GCC/Version4/gcc-4.5.0-1/libgcc-4.5.0-1-mingw32-dll-1.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
38 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
39 # g++ |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
40 'http://sourceforge.net/projects/mingw/files/MinGW/BaseSystem/GCC/Version4/gcc-4.5.0-1/gcc-c%2B%2B-4.5.0-1-mingw32-bin.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
41 'http://sourceforge.net/projects/mingw/files/MinGW/BaseSystem/GCC/Version4/gcc-4.5.0-1/libstdc%2B%2B-4.5.0-1-mingw32-dll-6.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
42 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
43 # additional tools |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
44 'http://sourceforge.net/projects/mingw/files/MinGW/pexports/pexports-0.44-1/pexports-0.44-1-mingw32-bin.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
45 'http://sourceforge.net/projects/mingw/files/MinGW/autoconf/wrapper/autoconf-7-1/autoconf-7-1-mingw32-bin.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
46 'http://sourceforge.net/projects/mingw/files/MinGW/autoconf/autoconf2.5/autoconf2.5-2.64-1/autoconf2.5-2.64-1-mingw32-bin.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
47 'http://sourceforge.net/projects/mingw/files/MinGW/libtool/libtool-2.2.7a-1/libtool-2.2.7a-1-mingw32-bin.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
48 'http://sourceforge.net/projects/mingw/files/MinGW/libtool/libtool-2.2.7a-1/libltdl-2.2.7a-1-mingw32-dll-7.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
49 'http://sourceforge.net/projects/mingw/files/MinGW/automake/wrapper/automake-4-1/automake-4-1-mingw32-bin.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
50 'http://sourceforge.net/projects/mingw/files/MinGW/automake/automake1.11/automake1.11-1.11-1/automake1.11-1.11-1-mingw32-bin.tar.lzma/download', |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
51 ] |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
52 |
|
2058
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
53 dx7_headers = 'http://www.mplayerhq.hu/MPlayer/contrib/win32/dx7headers.tgz' |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
54 |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
55 yasm = 'http://www.tortall.net/projects/yasm/releases/yasm-1.0.1-win32.exe' |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
56 |
|
2048
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
57 def find_7zip_registry(): |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
58 """Return the path of the 7-Zip binaries |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
59 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
60 Look up the location of the 7-Zip directory in the registry. |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
61 Raise LookupError if not found. |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
62 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
63 """ |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
64 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
65 subkey = 'SOFTWARE\\7-Zip' |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
66 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
67 try: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
68 key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, subkey) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
69 try: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
70 return _winreg.QueryValueEx(key, 'path')[0].encode() |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
71 finally: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
72 key.Close() |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
73 except WindowsError: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
74 raise LookupError("7-Zip not found in registry") |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
75 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
76 class PackageLog(object): |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
77 log_name = 'retrieved.txt' |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
78 def __init__(self): |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
79 try: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
80 log = open(self.log_name, 'r') |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
81 except IOError: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
82 self.retrieved = [] |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
83 self.lookup = set() |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
84 else: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
85 self.retrieved = [p[0:-1] for p in log if p.strip()] |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
86 self.lookup = set(self.retrieved) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
87 log.close() |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
88 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
89 def __enter__(self): |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
90 return self |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
91 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
92 def __exit__(self, exc_type, exc_value, traceback): |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
93 with open(self.log_name, 'w') as log: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
94 for ln in self.retrieved: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
95 log.write(ln) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
96 log.write('\n') |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
97 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
98 def __contains__(self, package): |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
99 return package in self.lookup |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
100 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
101 def add(self, package): |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
102 self.retrieved.append(package) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
103 self.lookup.add(package) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
104 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
105 encode_file_name_pattern = re.compile(r'%[a-fA-F0-9]{2}') |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
106 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
107 def encode_file_name(s): |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
108 def encode(match): |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
109 return chr(int(match.group(0)[1:], 16)) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
110 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
111 return encode_file_name_pattern.sub(encode, s) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
112 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
113 class PackageInstaller(object): |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
114 filename_pattern = re.compile(r'/(?P<name>[^/]+)/download$') |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
115 tar_filename_pattern = re.compile(r'(?P<name>.+\.tar)\.[a-z]+$') |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
116 have_7zip = False |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
117 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
118 def __init__(self): |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
119 self.client = httplib2.Http() |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
120 if not self.have_7zip: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
121 os.environ['path'] = os.environ['path'] + ';' + find_7zip_registry() |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
122 self.have_7zip = True |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
123 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
124 def retrieve(self, url): |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
125 |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
126 file_name = encode_file_name(self.filename_pattern.search(url).group('name')) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
127 if file_name is None: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
128 raise ValueError("Internel error: Unable to extract" |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
129 " package file name from URL %s" % |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
130 (url,)) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
131 tar_file_name = self.tar_filename_pattern.match(file_name).group('name') |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
132 if tar_file_name is None: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
133 raise ValueError("Internel error: Unable to extract tar file name" |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
134 " from package file name %s" % (tar_file_name,)) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
135 response, content = self.client.request(url, 'GET') |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
136 if response.status != 200: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
137 raise IOError("HTTP code %i for URL %s" % (responce.status, url)) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
138 f = open(file_name, 'wb') |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
139 try: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
140 f.write(content) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
141 finally: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
142 f.close() |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
143 retcode = subprocess.call(['7z', 'x', file_name, '-aoa']) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
144 if retcode: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
145 raise IOError("7-Zip failed to decompress %s" % (file_name,)) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
146 retcode = subprocess.call(['7z', 'x', tar_file_name, '-aoa']) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
147 if retcode: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
148 raise IOError("7-Zip failed to unpack tar file %s", (tar_file_name,)) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
149 |
|
2058
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
150 def retrieve_tgz(self, url, destination=None): |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
151 if destination is None: |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
152 destination = '' |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
153 file_name = encode_file_name(re.search(r'/(?P<name>[^/]+\.tgz)$', |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
154 url).group('name')) |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
155 if file_name is None: |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
156 raise ValueError("Internel error: Unable to extract" |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
157 " package file name from URL %s" % |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
158 (url,)) |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
159 tar_file_name = file_name[:-3] + 'tar' |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
160 if tar_file_name is None: |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
161 raise ValueError("Internel error: Unable to extract tar file name" |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
162 " from package file name %s" % (tar_file_name,)) |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
163 response, content = self.client.request(url, 'GET') |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
164 if response.status != 200: |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
165 raise IOError("HTTP code %i for URL %s" % (responce.status, url)) |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
166 f = open(file_name, 'wb') |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
167 try: |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
168 f.write(content) |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
169 finally: |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
170 f.close() |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
171 retcode = subprocess.call(['7z', 'x', file_name, '-aoa']) |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
172 if retcode: |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
173 raise IOError("7-Zip failed to decompress %s" % (file_name,)) |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
174 retcode = subprocess.call(['7z', 'x', tar_file_name, '-aoa', |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
175 '-o' + destination]) |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
176 if retcode: |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
177 raise IOError("7-Zip failed to unpack tar file %s", (tar_file_name,)) |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
178 |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
179 def retrieve_file(self, url, target=None): |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
180 if target is None: |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
181 target = encode_file_name(re.search(r'/(?P<name>[^/]+)$', |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
182 url).group('name')) |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
183 if target is None: |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
184 raise ValueError("Internel error: Unable to extract" |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
185 " file name from URL %s" % |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
186 (url,)) |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
187 response, content = self.client.request(url, 'GET') |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
188 if response.status != 200: |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
189 raise IOError("HTTP code %i for URL %s" % (responce.status, url)) |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
190 f = open(target, 'wb') |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
191 try: |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
192 f.write(content) |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
193 finally: |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
194 f.close() |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
195 |
|
2048
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
196 def install(mingw_dir): |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
197 installer = PackageInstaller() |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
198 try: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
199 os.mkdir(mingw_dir) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
200 except WindowsError: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
201 pass |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
202 os.chdir(mingw_dir) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
203 with PackageLog() as log: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
204 for p in packages: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
205 if p not in log: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
206 print "-", p |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
207 installer.retrieve(p) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
208 log.add(p) |
|
2058
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
209 |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
210 if dx7_headers not in log: |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
211 installer.retrieve_tgz(dx7_headers, 'include') |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
212 log.add(dx7_headers) |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
213 |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
214 if yasm not in log: |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
215 installer.retrieve_file(yasm, 'bin\\yasm.exe') |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
216 log.add(yasm) |
|
cd8ec06d8bd2
Add addional required downloads
Lenard Lindstrom <len-l@telus.net>
parents:
2048
diff
changeset
|
217 |
|
2048
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
218 if __name__ == '__main__': |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
219 if len(sys.argv )== 2: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
220 mingw_dir = sys.argv[1] |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
221 else: |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
222 drive = os.path.splitdrive(os.getcwd())[0] |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
223 mingw_dir = drive + os.path.sep + default_mingw_subdir |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
224 install(mingw_dir) |
|
f8fde800175a
Add temporary MinGW and MSYS installers
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
225 |
