Mercurial > pygame
annotate msys.py @ 3182:0c07af110477 docs-changes
Ignore Sphinx-generated files
| author | Thomas Kluyver <takowl@gmail.com> |
|---|---|
| date | Wed, 09 Jan 2013 22:35:43 +0000 |
| parents | aee1b66379f3 |
| children |
| rev | line source |
|---|---|
|
916
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
1 # module msys.py |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
2 # Requires Python 2.4 or better and win32api. |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
3 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
4 """MSYS specifics for Msys terminal IO and for running shell scripts |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
5 |
|
3042
ff0b5e6265cd
Change the MSYS uninstall location in the registry
Lenard Lindstrom <len-l@telus.net>
parents:
2059
diff
changeset
|
6 Configured for MSYS 1.0.17. |
|
2054
32f4900761d5
Update msys_build_deps.py for MSYS 1.0.13 root directory search
Lenard Lindstrom <len-l@telus.net>
parents:
2043
diff
changeset
|
7 |
|
916
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
8 exports msys_raw_input, MsysException, Msys |
|
2054
32f4900761d5
Update msys_build_deps.py for MSYS 1.0.13 root directory search
Lenard Lindstrom <len-l@telus.net>
parents:
2043
diff
changeset
|
9 |
|
32f4900761d5
Update msys_build_deps.py for MSYS 1.0.13 root directory search
Lenard Lindstrom <len-l@telus.net>
parents:
2043
diff
changeset
|
10 Uses optional environment variable MSYS_ROOT_DIRECTORY. Set this to the full |
|
32f4900761d5
Update msys_build_deps.py for MSYS 1.0.13 root directory search
Lenard Lindstrom <len-l@telus.net>
parents:
2043
diff
changeset
|
11 path of the MSYS home directory, 1.0 subdirectory in path optional. |
|
32f4900761d5
Update msys_build_deps.py for MSYS 1.0.13 root directory search
Lenard Lindstrom <len-l@telus.net>
parents:
2043
diff
changeset
|
12 |
|
916
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
13 """ |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
14 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
15 from msysio import raw_input_ as msys_raw_input, print_ as msys_print |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
16 from msysio import is_msys |
| 2059 | 17 import sys |
|
916
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
18 import os |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
19 import time |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
20 import subprocess |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
21 import re |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
22 import glob |
|
1553
ebd545641c8b
merging with python3 branch r 2048
Lenard Lindstrom <len-l@telus.net>
parents:
1316
diff
changeset
|
23 try: |
|
ebd545641c8b
merging with python3 branch r 2048
Lenard Lindstrom <len-l@telus.net>
parents:
1316
diff
changeset
|
24 import _winreg |
|
ebd545641c8b
merging with python3 branch r 2048
Lenard Lindstrom <len-l@telus.net>
parents:
1316
diff
changeset
|
25 except ImportError: |
|
ebd545641c8b
merging with python3 branch r 2048
Lenard Lindstrom <len-l@telus.net>
parents:
1316
diff
changeset
|
26 import winreg as _winreg |
|
ebd545641c8b
merging with python3 branch r 2048
Lenard Lindstrom <len-l@telus.net>
parents:
1316
diff
changeset
|
27 |
|
ebd545641c8b
merging with python3 branch r 2048
Lenard Lindstrom <len-l@telus.net>
parents:
1316
diff
changeset
|
28 # For Python 2.x/3.x compatibility |
|
ebd545641c8b
merging with python3 branch r 2048
Lenard Lindstrom <len-l@telus.net>
parents:
1316
diff
changeset
|
29 def geterror(): |
|
ebd545641c8b
merging with python3 branch r 2048
Lenard Lindstrom <len-l@telus.net>
parents:
1316
diff
changeset
|
30 return sys.exc_info()[1] |
|
916
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
31 |
| 2059 | 32 if sys.version_info > (3,): |
| 33 def encode_script(s): | |
| 34 return s.encode('ascii') | |
| 35 else: | |
| 36 def encode_script(s): | |
| 37 return s | |
| 38 | |
|
3042
ff0b5e6265cd
Change the MSYS uninstall location in the registry
Lenard Lindstrom <len-l@telus.net>
parents:
2059
diff
changeset
|
39 FSTAB_REGEX = (r'^[ \t]*' |
|
ff0b5e6265cd
Change the MSYS uninstall location in the registry
Lenard Lindstrom <len-l@telus.net>
parents:
2059
diff
changeset
|
40 r'(?P<path>([a-zA-Z]:)?[^\s*^?:%]+)' |
|
916
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
41 r'[ \t]+/mingw(\s|$)' |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
42 ) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
43 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
44 def has_drive(path): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
45 """Return true if the MSYS path strats with a drive letter""" |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
46 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
47 return re.match('/[A-Z]/', path, re.I) is not None |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
48 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
49 class MsysException(Exception): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
50 """Path retrieval problem""" |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
51 pass |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
52 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
53 def find_msys_version_subdir(msys_dir): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
54 """Return the full MSYS root directory path |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
55 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
56 If msys_dir path lacks the version subdirectory, e.g. 1.0, then the |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
57 path is searched for one. The user will be prompted to choose if more |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
58 than one version is found. |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
59 """ |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
60 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
61 regex = r'[\\/][1-9][.][0-9]$' |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
62 if re.search(regex, msys_dir) is not None: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
63 return msys_dir |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
64 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
65 roots = glob.glob(os.path.join(msys_dir, '[1-9].[0-9]')) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
66 roots.sort() |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
67 roots.reverse() |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
68 if not roots: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
69 raise MsysException("No msys versions found.\n") |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
70 else: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
71 if len(roots) == 1: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
72 root = roots[0] |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
73 else: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
74 msys_print("Select an Msys version:") |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
75 for i, path in enumerate(roots): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
76 msys_print(" %d = %s" % (i+1, os.path.split(path)[1])) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
77 choice = msys_raw_input("Select 1-%d (1 = default):") |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
78 if not choice: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
79 root = roots[0] |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
80 else: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
81 root = roots[int(choice)-1] |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
82 return root |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
83 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
84 def input_msys_dir(): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
85 """Return user entered MSYS directory path |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
86 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
87 May raise MsysException.""" |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
88 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
89 while 1: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
90 dir_path = msys_raw_input("Enter the MSYS directory path,\n" |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
91 "(or press [Enter] to quit):") |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
92 dir_path = dir_path.strip() |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
93 if not dir_path: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
94 raise MsysException("Input aborted by user") |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
95 dir_path = os.path.abspath(dir_path) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
96 try: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
97 return find_msys_version_subdir(dir_path) |
|
1553
ebd545641c8b
merging with python3 branch r 2048
Lenard Lindstrom <len-l@telus.net>
parents:
1316
diff
changeset
|
98 except MsysException: |
|
ebd545641c8b
merging with python3 branch r 2048
Lenard Lindstrom <len-l@telus.net>
parents:
1316
diff
changeset
|
99 msys_print(geterror()) |
|
916
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
100 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
101 def find_msys_registry(): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
102 """Return the MSYS 1.0 directory path stored in the Windows registry |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
103 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
104 The return value is an encoded ascii str. The registry entry for the |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
105 uninstaller is used. Raise a LookupError if not found. |
|
2054
32f4900761d5
Update msys_build_deps.py for MSYS 1.0.13 root directory search
Lenard Lindstrom <len-l@telus.net>
parents:
2043
diff
changeset
|
106 |
|
916
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
107 """ |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
108 |
|
2054
32f4900761d5
Update msys_build_deps.py for MSYS 1.0.13 root directory search
Lenard Lindstrom <len-l@telus.net>
parents:
2043
diff
changeset
|
109 #!! Leave until known if new MSYS package manager makes a registry entry. |
|
3042
ff0b5e6265cd
Change the MSYS uninstall location in the registry
Lenard Lindstrom <len-l@telus.net>
parents:
2059
diff
changeset
|
110 subkey = ('Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall' |
|
ff0b5e6265cd
Change the MSYS uninstall location in the registry
Lenard Lindstrom <len-l@telus.net>
parents:
2059
diff
changeset
|
111 '\\{AC2C1BDB-1E91-4F94-B99C-E716FE2E9C75}_is1') |
|
ff0b5e6265cd
Change the MSYS uninstall location in the registry
Lenard Lindstrom <len-l@telus.net>
parents:
2059
diff
changeset
|
112 for hkey in [_winreg.HKEY_CURRENT_USER, _winreg.HKEY_LOCAL_MACHINE]: |
|
916
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
113 try: |
|
3042
ff0b5e6265cd
Change the MSYS uninstall location in the registry
Lenard Lindstrom <len-l@telus.net>
parents:
2059
diff
changeset
|
114 key = _winreg.OpenKey(hkey, subkey) |
|
ff0b5e6265cd
Change the MSYS uninstall location in the registry
Lenard Lindstrom <len-l@telus.net>
parents:
2059
diff
changeset
|
115 try: |
|
ff0b5e6265cd
Change the MSYS uninstall location in the registry
Lenard Lindstrom <len-l@telus.net>
parents:
2059
diff
changeset
|
116 mingw_path = _winreg.QueryValueEx(key, 'Inno Setup: App Path')[0].encode() |
|
ff0b5e6265cd
Change the MSYS uninstall location in the registry
Lenard Lindstrom <len-l@telus.net>
parents:
2059
diff
changeset
|
117 finally: |
|
ff0b5e6265cd
Change the MSYS uninstall location in the registry
Lenard Lindstrom <len-l@telus.net>
parents:
2059
diff
changeset
|
118 key.Close() |
|
ff0b5e6265cd
Change the MSYS uninstall location in the registry
Lenard Lindstrom <len-l@telus.net>
parents:
2059
diff
changeset
|
119 except WindowsError: |
|
ff0b5e6265cd
Change the MSYS uninstall location in the registry
Lenard Lindstrom <len-l@telus.net>
parents:
2059
diff
changeset
|
120 pass |
|
ff0b5e6265cd
Change the MSYS uninstall location in the registry
Lenard Lindstrom <len-l@telus.net>
parents:
2059
diff
changeset
|
121 else: |
|
ff0b5e6265cd
Change the MSYS uninstall location in the registry
Lenard Lindstrom <len-l@telus.net>
parents:
2059
diff
changeset
|
122 return os.path.join(mingw_path, 'msys', '1.0') |
|
ff0b5e6265cd
Change the MSYS uninstall location in the registry
Lenard Lindstrom <len-l@telus.net>
parents:
2059
diff
changeset
|
123 raise LookupError("MSYS not found in the registry") |
|
ff0b5e6265cd
Change the MSYS uninstall location in the registry
Lenard Lindstrom <len-l@telus.net>
parents:
2059
diff
changeset
|
124 |
|
916
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
125 def as_shell(msys_root): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
126 """Append MSYS shell program to MSYS root directory path""" |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
127 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
128 return os.path.join(msys_root, 'bin', 'sh.exe') |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
129 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
130 def check_for_shell(msys_directory=None): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
131 """Check various locations for MSYS shell or root directory. |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
132 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
133 May raise MsysException. |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
134 """ |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
135 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
136 if msys_directory is not None: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
137 try: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
138 dir_path = find_msys_version_subdir(msys_directory) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
139 except MsysException: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
140 pass |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
141 else: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
142 return as_shell(dir_path) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
143 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
144 try: |
|
2054
32f4900761d5
Update msys_build_deps.py for MSYS 1.0.13 root directory search
Lenard Lindstrom <len-l@telus.net>
parents:
2043
diff
changeset
|
145 shell = os.environ['MSYS_ROOT_DIRECTORY'] |
|
916
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
146 except KeyError: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
147 pass |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
148 else: |
|
2054
32f4900761d5
Update msys_build_deps.py for MSYS 1.0.13 root directory search
Lenard Lindstrom <len-l@telus.net>
parents:
2043
diff
changeset
|
149 if not re.search(r'[\\/]1\.[0-9]', shell): |
|
32f4900761d5
Update msys_build_deps.py for MSYS 1.0.13 root directory search
Lenard Lindstrom <len-l@telus.net>
parents:
2043
diff
changeset
|
150 shell = os.path.join(shell, '1.0') |
|
32f4900761d5
Update msys_build_deps.py for MSYS 1.0.13 root directory search
Lenard Lindstrom <len-l@telus.net>
parents:
2043
diff
changeset
|
151 return os.path.join(shell, 'bin', 'sh.exe') |
|
32f4900761d5
Update msys_build_deps.py for MSYS 1.0.13 root directory search
Lenard Lindstrom <len-l@telus.net>
parents:
2043
diff
changeset
|
152 |
|
32f4900761d5
Update msys_build_deps.py for MSYS 1.0.13 root directory search
Lenard Lindstrom <len-l@telus.net>
parents:
2043
diff
changeset
|
153 if is_msys(): |
|
32f4900761d5
Update msys_build_deps.py for MSYS 1.0.13 root directory search
Lenard Lindstrom <len-l@telus.net>
parents:
2043
diff
changeset
|
154 try: |
|
32f4900761d5
Update msys_build_deps.py for MSYS 1.0.13 root directory search
Lenard Lindstrom <len-l@telus.net>
parents:
2043
diff
changeset
|
155 return os.environ['WD'] + os.environ['MSYSCON'] |
|
32f4900761d5
Update msys_build_deps.py for MSYS 1.0.13 root directory search
Lenard Lindstrom <len-l@telus.net>
parents:
2043
diff
changeset
|
156 except KeyError: |
|
32f4900761d5
Update msys_build_deps.py for MSYS 1.0.13 root directory search
Lenard Lindstrom <len-l@telus.net>
parents:
2043
diff
changeset
|
157 pass |
|
916
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
158 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
159 try: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
160 dir_path = find_msys_registry() |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
161 except LookupError: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
162 pass |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
163 else: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
164 return as_shell(dir_path) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
165 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
166 return as_shell(input_msys_dir()) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
167 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
168 def find_msys_shell(msys_directory=None): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
169 """Retrun the MSYS shell program path |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
170 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
171 MsysException is raised if the shell program is not found. The user |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
172 is prompt is prompted as a last resort if no directory is found or |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
173 there are multiple choices. |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
174 """ |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
175 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
176 shell = check_for_shell(msys_directory) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
177 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
178 while 1: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
179 shell = os.path.abspath(shell.replace('/', os.sep)) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
180 if os.path.isfile(shell): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
181 break |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
182 msys_print("Directory %s has no MSYS shell." % shell) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
183 shell = as_shell(input_msys_dir()) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
184 return shell |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
185 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
186 def find_mingw_root(msys_directory): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
187 """Return the Windows equivalent of /mingw""" |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
188 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
189 # Look it up in the fstabs file. |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
190 fstab_path = os.path.join(msys_directory, 'etc', 'fstab') |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
191 try: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
192 fstab = open(fstab_path, 'r') |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
193 except IOError: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
194 raise MsysException("Unable to open MSYS fstab file %s" % fstab_path) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
195 else: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
196 match = re.search(FSTAB_REGEX, fstab.read(), re.MULTILINE) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
197 if match is None: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
198 raise MsysException( |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
199 "The required MinGW path is not in the MSYS fstab file") |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
200 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
201 dir_path = os.path.abspath(match.groupdict()['path']) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
202 if not os.path.isdir(dir_path): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
203 raise MsysException("%s is not a directory" % dir_path) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
204 return dir_path |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
205 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
206 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
207 class Msys(object): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
208 """Return a new Msys environment; May raise MsysException |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
209 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
210 Msys([msys_directory, [require_mingw]]) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
211 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
212 msys_directory: A string giving the path of the MSYS directory. |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
213 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
214 Either or both keyword arguments can be omitted. If msys_directory |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
215 is not provided then the environment variable SHELL and the Windows |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
216 registry are checked. Finally the user is prompted for the directory |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
217 path. If require_mingw is True, the default, the mingw directory path |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
218 is retrieved from the MSYS fstab file. An MsysException is raised if |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
219 the required paths are not found. |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
220 """ |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
221 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
222 _is_msys = is_msys() |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
223 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
224 def __init__(self, msys_directory=None, require_mingw=None): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
225 """New environment |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
226 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
227 May raise MsysException""" |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
228 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
229 if require_mingw is None: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
230 require_mingw = True |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
231 self._environ = os.environ.copy() |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
232 self._shell = find_msys_shell(msys_directory) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
233 self._msys_root = os.path.split(os.path.split(self.shell)[0])[0].lower() |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
234 try: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
235 self._mingw_root = find_mingw_root(self.msys_root) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
236 except MsysException: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
237 if require_mingw: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
238 raise |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
239 self._mingw_root = None |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
240 else: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
241 self.environ['MINGW_ROOT_DIRECTORY'] = self._mingw_root |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
242 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
243 environ = property(lambda self: self._environ, |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
244 doc="Environment variables") |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
245 shell = property(lambda self: self._shell, |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
246 doc="MSYS shell program path") |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
247 msys_root = property(lambda self: self._msys_root, |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
248 doc="MSYS root directory path") |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
249 mingw_root = property(lambda self: self._mingw_root, |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
250 doc="MinGW root directory path") |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
251 is_msys = property(lambda self: self._is_msys, |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
252 doc="True if the execution environment is MSYS") |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
253 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
254 def windows_to_msys(self, path): |
|
3043
9a6bae58052c
Update Windows deps build system for SDL 1.2 changeset c5d651a8b679
Lenard Lindstrom <len-l@telus.net>
parents:
3042
diff
changeset
|
255 """Return an MSYS translation of a Windows path |
|
2042
3d564a093727
Fix problem with spaces in Windows directory names.
Lenard Lindstrom <len-l@telus.net>
parents:
1553
diff
changeset
|
256 |
|
3d564a093727
Fix problem with spaces in Windows directory names.
Lenard Lindstrom <len-l@telus.net>
parents:
1553
diff
changeset
|
257 """ |
|
916
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
258 |
|
3043
9a6bae58052c
Update Windows deps build system for SDL 1.2 changeset c5d651a8b679
Lenard Lindstrom <len-l@telus.net>
parents:
3042
diff
changeset
|
259 path = os.path.abspath(path) |
|
916
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
260 msys_root = self.msys_root |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
261 mingw_root = self.mingw_root |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
262 path_lower = path.lower() |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
263 if path_lower.startswith(msys_root.lower()): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
264 return '/usr' + path[len(msys_root):].replace(os.sep, '/') |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
265 if mingw_root is not None and path_lower.startswith(mingw_root.lower()): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
266 return '/mingw' + path[len(mingw_root):].replace(os.sep, '/') |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
267 drive, tail = os.path.splitdrive(path) |
|
3063
aee1b66379f3
Clean up some Windows dependency build issues
Lenard Lindstrom <len-l@telus.net>
parents:
3043
diff
changeset
|
268 drive_mount_point = drive[0].lower() |
|
aee1b66379f3
Clean up some Windows dependency build issues
Lenard Lindstrom <len-l@telus.net>
parents:
3043
diff
changeset
|
269 drive_subpath = tail.replace(os.sep, '/') |
|
aee1b66379f3
Clean up some Windows dependency build issues
Lenard Lindstrom <len-l@telus.net>
parents:
3043
diff
changeset
|
270 return '/%s%s' % (drive_mount_point, drive_subpath) |
|
916
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
271 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
272 def msys_to_windows(self, path): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
273 """Return a Windows translation of an MSYS path |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
274 |
|
2042
3d564a093727
Fix problem with spaces in Windows directory names.
Lenard Lindstrom <len-l@telus.net>
parents:
1553
diff
changeset
|
275 The Unix path separator is used as it survives the distutils setup |
|
916
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
276 file read process. Raises a ValueError if the path cannot be |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
277 translated. |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
278 """ |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
279 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
280 msys_root = self.msys_root |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
281 mingw_root = self.mingw_root |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
282 if path.startswith('/usr'): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
283 path = msys_root + path[4:] |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
284 elif path.startswith('/mingw'): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
285 if mingw_root is None: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
286 raise ValueError('Unable to map the MinGW directory') |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
287 path = mingw_root + path[6:] |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
288 elif has_drive(path): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
289 path = path[1] + ":" + path[2:] |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
290 elif path == '/': |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
291 path = msys_root |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
292 elif path.startswith('/'): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
293 path = msys_root + path |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
294 return path.replace(os.sep, '/') |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
295 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
296 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
297 def run_shell_script(self, script): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
298 """Run the MSYS shell script and return the shell return code |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
299 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
300 script is a string representing the contents of the script. |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
301 """ |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
302 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
303 cmd = [self.shell] |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
304 if not self._is_msys: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
305 cmd.append('--login') |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
306 previous_cwd = os.getcwd() |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
307 try: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
308 process = subprocess.Popen(cmd, |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
309 stdin=subprocess.PIPE, |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
310 env=self.environ) |
| 2059 | 311 process.communicate(encode_script(script)) |
|
916
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
312 return process.returncode |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
313 finally: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
314 time.sleep(2) # Allow shell subprocesses to terminate. |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
315 os.chdir(previous_cwd) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
316 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
317 def run_shell_command(self, command): |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
318 """Run the MSYS shell command and return stdout output as a string |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
319 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
320 command is a list of strings giving the command and its arguments. |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
321 The first list entry must be the MSYS path name of a bash shell |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
322 script file. |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
323 """ |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
324 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
325 args = [self.shell] |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
326 if not self._is_msys: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
327 args.append('--login') |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
328 args.extend(command) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
329 previous_cwd = os.getcwd() |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
330 try: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
331 return subprocess.Popen(args, |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
332 stdout=subprocess.PIPE, |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
333 env=self.environ).communicate()[0] |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
334 finally: |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
335 time.sleep(3) # Allow shell subprocesses to terminate. |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
336 os.chdir(previous_cwd) |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
337 |
|
8a7d9b2de067
MinGW/MSYS build process more automated and DLLs Win32 GUI by default
Lenard Lindstrom <len-l@telus.net>
parents:
diff
changeset
|
338 __all__ = ['Msys', 'msys_raw_input', 'msys_print', 'MsysException'] |
