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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
45d04b255d09 Python 3.1 upgrade
Lenard Lindstrom <len-l@telus.net>
parents: 2054
diff changeset
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
45d04b255d09 Python 3.1 upgrade
Lenard Lindstrom <len-l@telus.net>
parents: 2054
diff changeset
32 if sys.version_info > (3,):
45d04b255d09 Python 3.1 upgrade
Lenard Lindstrom <len-l@telus.net>
parents: 2054
diff changeset
33 def encode_script(s):
45d04b255d09 Python 3.1 upgrade
Lenard Lindstrom <len-l@telus.net>
parents: 2054
diff changeset
34 return s.encode('ascii')
45d04b255d09 Python 3.1 upgrade
Lenard Lindstrom <len-l@telus.net>
parents: 2054
diff changeset
35 else:
45d04b255d09 Python 3.1 upgrade
Lenard Lindstrom <len-l@telus.net>
parents: 2054
diff changeset
36 def encode_script(s):
45d04b255d09 Python 3.1 upgrade
Lenard Lindstrom <len-l@telus.net>
parents: 2054
diff changeset
37 return s
45d04b255d09 Python 3.1 upgrade
Lenard Lindstrom <len-l@telus.net>
parents: 2054
diff changeset
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
45d04b255d09 Python 3.1 upgrade
Lenard Lindstrom <len-l@telus.net>
parents: 2054
diff changeset
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']