Last active
August 29, 2015 14:06
-
-
Save tenko/e33ca2bdefc9b0e71bc1 to your computer and use it in GitHub Desktop.
matplotlib fix for setupext.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- old/setupext.py 2014-08-26 04:24:27.000000000 +0200 | |
+++ new/setupext.py 2014-09-19 11:33:06.714884200 +0200 | |
@@ -15,7 +15,7 @@ | |
PY3 = (sys.version_info[0] >= 3) | |
- | |
+MSYS = "MSYSTEM" in os.environ | |
try: | |
from subprocess import check_output | |
@@ -43,9 +43,16 @@ | |
return output | |
-if sys.platform != 'win32': | |
+if sys.platform != 'win32' or MSYS: | |
if sys.version_info[0] < 3: | |
- from commands import getstatusoutput | |
+ def getstatusoutput(cmd): | |
+ """Return (status, output) of executing cmd in a shell.""" | |
+ pipe = os.popen(cmd, 'r') | |
+ text = pipe.read() | |
+ sts = pipe.close() | |
+ if sts is None: sts = 0 | |
+ if text[-1:] == '\n': text = text[:-1] | |
+ return sts, text | |
else: | |
from subprocess import getstatusoutput | |
@@ -121,6 +128,7 @@ | |
directories in `include_dirs`. | |
""" | |
for dir in include_dirs: | |
+ dir = os.popen(' '.join(['cygpath', '-w', dir])).readline().strip() | |
if os.path.exists(os.path.join(dir, filename)): | |
return True | |
return False | |
@@ -130,7 +138,7 @@ | |
""" | |
Raises an exception if the given include file can not be found. | |
""" | |
- if sys.platform == 'win32': | |
+ if sys.platform == 'win32' and not MSYS: | |
include_dirs.extend(os.getenv('INCLUDE', '.').split(';')) | |
if not has_include_file(include_dirs, filename): | |
raise CheckFailed( | |
@@ -145,9 +153,10 @@ | |
""" | |
if options['basedirlist']: | |
return options['basedirlist'] | |
- | |
+ | |
+ WIN32 = 'win32' and not MSYS | |
basedir_map = { | |
- 'win32': ['win32_static',], | |
+ WIN32: ['win32_static',], | |
'darwin': ['/usr/local/', '/usr', '/usr/X11', '/opt/local'], | |
'sunos5': [os.getenv('MPLIB_BASE') or '/usr/local',], | |
'gnu0': ['/usr'], | |
@@ -220,6 +229,7 @@ | |
""" | |
ext = DelayedExtension(name, files, *args, **kwargs) | |
for dir in get_base_dirs(): | |
+ dir = os.popen(' '.join(['cygpath', '-w', dir])).readline().strip() | |
include_dir = os.path.join(dir, 'include') | |
if os.path.exists(include_dir): | |
ext.include_dirs.append(include_dir) | |
@@ -228,7 +238,6 @@ | |
if os.path.exists(lib_dir): | |
ext.library_dirs.append(lib_dir) | |
ext.include_dirs.append('.') | |
- | |
return ext | |
@@ -240,11 +249,11 @@ | |
""" | |
Determines whether pkg-config exists on this machine. | |
""" | |
- if sys.platform == 'win32': | |
+ if sys.platform == 'win32' and not MSYS: | |
self.has_pkgconfig = False | |
else: | |
self.set_pkgconfig_path() | |
- status, output = getstatusoutput("pkg-config --help") | |
+ status, output = getstatusoutput('sh -c "pkg-config --help"') | |
self.has_pkgconfig = (status == 0) | |
def set_pkgconfig_path(self): | |
@@ -280,7 +289,7 @@ | |
command = "{0} --libs --cflags ".format(executable) | |
try: | |
- output = check_output(command, shell=True, | |
+ output = check_output('sh -c "%s"' % command, shell=True, | |
stderr=subprocess.STDOUT) | |
except subprocess.CalledProcessError: | |
pass | |
@@ -290,11 +299,16 @@ | |
for token in output.split(): | |
attr = flag_map.get(token[:2]) | |
if attr is not None: | |
- getattr(ext, attr).insert(0, token[2:]) | |
- | |
+ if attr.endswith('dirs'): | |
+ dir = os.popen(' '.join(['cygpath', '-w', token[2:]])).readline().strip() | |
+ getattr(ext, attr).insert(0, dir) | |
+ else: | |
+ getattr(ext, attr).insert(0, token[2:]) | |
+ | |
if use_defaults: | |
basedirs = get_base_dirs() | |
for base in basedirs: | |
+ base = os.popen(' '.join(['cygpath', '-w', base])).readline().strip() | |
for include in default_include_dirs: | |
dir = os.path.join(base, include) | |
if os.path.exists(dir): | |
@@ -316,7 +330,7 @@ | |
return None | |
status, output = getstatusoutput( | |
- "pkg-config %s --modversion" % (package)) | |
+ 'sh -c "pkg-config %s --modversion"' % (package)) | |
if status == 0: | |
return output | |
return None | |
@@ -434,14 +448,12 @@ | |
raise CheckFailed( | |
"Requires %s %s or later. Found %s." % | |
(package, min_version, version)) | |
- | |
+ | |
ext = self.get_extension() | |
if ext is None: | |
ext = make_extension('test', []) | |
pkg_config.setup_extension(ext, package) | |
- | |
check_include_file(ext.include_dirs, include_file, package) | |
- | |
return 'version %s' % version | |
@@ -926,20 +938,20 @@ | |
name = "freetype" | |
def check(self): | |
- if sys.platform == 'win32': | |
+ if sys.platform == 'win32' and not MSYS: | |
return "Unknown version" | |
- status, output = getstatusoutput("freetype-config --ftversion") | |
+ status, output = getstatusoutput('sh -c "freetype-config --ftversion"') | |
if status == 0: | |
version = output | |
else: | |
version = None | |
- | |
+ | |
# Early versions of freetype grep badly inside freetype-config, | |
# so catch those cases. (tested with 2.5.3). | |
if 'No such file or directory\ngrep:' in version: | |
version = self.version_from_header() | |
- | |
+ | |
return self._check_for_pkg_config( | |
'freetype2', 'ft2build.h', | |
min_version='2.4', version=version) | |
@@ -951,6 +963,7 @@ | |
return version | |
# Return the first version found in the include dirs. | |
for include_dir in ext.include_dirs: | |
+ include_dir = os.popen(' '.join(['cygpath', '-w', include_dir])).readline().strip() | |
header_fname = os.path.join(include_dir, 'freetype.h') | |
if os.path.exists(header_fname): | |
major, minor, patch = 0, 0, 0 | |
@@ -1411,7 +1424,7 @@ | |
p = subprocess.Popen( | |
'. %s ; eval echo ${%s}' % (file, varname), | |
shell=True, | |
- executable="/bin/sh", | |
+ executable="sh", | |
stdout=subprocess.PIPE) | |
result = p.communicate()[0] | |
return result.decode('ascii') | |
@@ -1483,7 +1496,7 @@ | |
return tcl_lib, tcl_inc, 'tcl', tk_lib, tk_inc, 'tk' | |
def add_flags(self, ext): | |
- if sys.platform == 'win32': | |
+ if sys.platform == 'win32' and not MSYS: | |
major, minor1, minor2, s, tmp = sys.version_info | |
if sys.version_info[0:2] < (3, 4): | |
ext.include_dirs.extend(['win32_static/include/tcl85']) | |
@@ -1619,7 +1632,7 @@ | |
return ext | |
def add_flags(self, ext): | |
- if sys.platform == 'win32': | |
+ if sys.platform == 'win32' and not MSYS: | |
def getoutput(s): | |
ret = os.popen(s).read().strip() | |
return ret | |
@@ -1674,7 +1687,7 @@ | |
'm' in ext.libraries): | |
ext.libraries.remove('m') | |
- elif sys.platform != 'win32': | |
+ elif sys.platform != 'win32' or MSYS: | |
pkg_config.setup_extension(ext, 'pygtk-2.0') | |
pkg_config.setup_extension(ext, 'gtk+-2.0') | |
@@ -1893,7 +1906,7 @@ | |
name = "windowing" | |
def check_requirements(self): | |
- if sys.platform != 'win32': | |
+ if sys.platform != 'win32' or MSYS: | |
raise CheckFailed("Microsoft Windows only") | |
config = self.get_config() | |
if config is False: | |
@@ -2050,7 +2063,7 @@ | |
def check(self): | |
try: | |
- output = check_output('dvipng -version', shell=True, | |
+ output = check_output('sh -c "dvipng -version"', shell=True, | |
stderr=subprocess.STDOUT) | |
return "version %s" % output.splitlines()[1].decode().split()[-1] | |
except (IndexError, ValueError, subprocess.CalledProcessError): | |
@@ -2063,7 +2076,7 @@ | |
def check(self): | |
try: | |
- if sys.platform == 'win32': | |
+ if sys.platform == 'win32' and not MSYS: | |
command = 'gswin32c --version' | |
try: | |
output = check_output(command, shell=True, | |
@@ -2073,7 +2086,7 @@ | |
output = check_output(command, shell=True, | |
stderr=subprocess.STDOUT) | |
else: | |
- command = 'gs --version' | |
+ command = 'sh -c "gs --version"' | |
output = check_output(command, shell=True, | |
stderr=subprocess.STDOUT) | |
return "version %s" % output.decode()[:-1] | |
@@ -2087,7 +2100,7 @@ | |
def check(self): | |
try: | |
- output = check_output('latex -version', shell=True, | |
+ output = check_output('sh -c "latex -version"', shell=True, | |
stderr=subprocess.STDOUT) | |
line = output.splitlines()[0].decode() | |
pattern = '(3\.1\d+)|(MiKTeX \d+.\d+)' | |
@@ -2103,7 +2116,7 @@ | |
def check(self): | |
try: | |
- output = check_output('pdftops -v', shell=True, | |
+ output = check_output('sh -c "pdftops -v"', shell=True, | |
stderr=subprocess.STDOUT) | |
for line in output.splitlines(): | |
line = line.decode() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment