summaryrefslogtreecommitdiff
path: root/numpy/distutils/tests
diff options
context:
space:
mode:
authorDaniel da Silva <daniel@meltingwax.net>2014-03-02 12:39:11 -0500
committerDaniel da Silva <var.mail.daniel@gmail.com>2014-03-05 01:44:30 -0500
commit50bf6df95bdb5e4254719b0a6061cd1cdece2b7c (patch)
treebf08357084dc3ff9838436fe0c9db65b3c67f113 /numpy/distutils/tests
parent52bac2cb96fa1ed5cb811303ad5ef402d74e76df (diff)
downloadnumpy-50bf6df95bdb5e4254719b0a6061cd1cdece2b7c.tar.gz
BUG: Fix support for builds in dirs with whitespace
Add escaping and quoting of dirs and enabled POSIX support in lexer. Closes #4382.
Diffstat (limited to 'numpy/distutils/tests')
-rw-r--r--numpy/distutils/tests/test_npy_pkg_config.py75
1 files changed, 66 insertions, 9 deletions
diff --git a/numpy/distutils/tests/test_npy_pkg_config.py b/numpy/distutils/tests/test_npy_pkg_config.py
index 5443ece48..e703edbd0 100644
--- a/numpy/distutils/tests/test_npy_pkg_config.py
+++ b/numpy/distutils/tests/test_npy_pkg_config.py
@@ -1,6 +1,7 @@
from __future__ import division, absolute_import, print_function
import os
+import shlex
from tempfile import mkstemp
from numpy.testing import *
@@ -38,6 +39,12 @@ simple_variable_d = {'cflags': '-I/foo/bar/include', 'libflags': '-L/foo/bar/lib
'version': '0.1', 'name': 'foo'}
class TestLibraryInfo(TestCase):
+
+ def assertLexEqual(self, str1, str2):
+ # Use shlex.split for comparison because it is above quotes
+ # eg: shlex.split("'abc'") == shlex.split("abc")
+ return shlex.split(str1) == shlex.split(str2)
+
def test_simple(self):
fd, filename = mkstemp('foo.ini')
try:
@@ -48,10 +55,10 @@ class TestLibraryInfo(TestCase):
os.close(fd)
out = read_config(pkg)
- self.assertTrue(out.cflags() == simple_d['cflags'])
- self.assertTrue(out.libs() == simple_d['libflags'])
- self.assertTrue(out.name == simple_d['name'])
- self.assertTrue(out.version == simple_d['version'])
+ self.assertLexEqual(out.cflags(), simple_d['cflags'])
+ self.assertLexEqual(out.libs(), simple_d['libflags'])
+ self.assertEqual(out.name, simple_d['name'])
+ self.assertEqual(out.version, simple_d['version'])
finally:
os.remove(filename)
@@ -65,13 +72,13 @@ class TestLibraryInfo(TestCase):
os.close(fd)
out = read_config(pkg)
- self.assertTrue(out.cflags() == simple_variable_d['cflags'])
- self.assertTrue(out.libs() == simple_variable_d['libflags'])
- self.assertTrue(out.name == simple_variable_d['name'])
- self.assertTrue(out.version == simple_variable_d['version'])
+ self.assertLexEqual(out.cflags(), simple_variable_d['cflags'])
+ self.assertLexEqual(out.libs(), simple_variable_d['libflags'])
+ self.assertEqual(out.name, simple_variable_d['name'])
+ self.assertEqual(out.version, simple_variable_d['version'])
out.vars['prefix'] = '/Users/david'
- self.assertTrue(out.cflags() == '-I/Users/david/include')
+ self.assertLexEqual(out.cflags(), '-I/Users/david/include')
finally:
os.remove(filename)
@@ -88,6 +95,28 @@ class TestParseFlags(TestCase):
self.assertTrue(d['include_dirs'] == ['/usr/include'])
self.assertTrue(d['macros'] == ['FOO'])
+ def test_quotes_cflags(self):
+ d = parse_flags("-I'/usr/foo bar/include' -DFOO")
+ self.assertTrue(d['include_dirs'] == ['/usr/foo bar/include'])
+ self.assertTrue(d['macros'] == ['FOO'])
+
+ d = parse_flags("-I/usr/'foo bar'/include -DFOO")
+ self.assertTrue(d['include_dirs'] == ['/usr/foo bar/include'])
+ self.assertTrue(d['macros'] == ['FOO'])
+
+ d = parse_flags("'-I/usr/foo bar'/include -DFOO")
+ self.assertTrue(d['include_dirs'] == ['/usr/foo bar/include'])
+ self.assertTrue(d['macros'] == ['FOO'])
+
+ def test_escaping_cflags(self):
+ d = parse_flags("-I/usr/foo\\ bar/include -DFOO")
+ self.assertTrue(d['include_dirs'] == ['/usr/foo bar/include'])
+ self.assertTrue(d['macros'] == ['FOO'])
+
+ d = parse_flags(r"-I/usr/foo\ bar/include -DFOO")
+ self.assertTrue(d['include_dirs'] == ['/usr/foo bar/include'])
+ self.assertTrue(d['macros'] == ['FOO'])
+
def test_simple_lflags(self):
d = parse_flags("-L/usr/lib -lfoo -L/usr/lib -lbar")
self.assertTrue(d['library_dirs'] == ['/usr/lib', '/usr/lib'])
@@ -96,3 +125,31 @@ class TestParseFlags(TestCase):
d = parse_flags("-L /usr/lib -lfoo -L/usr/lib -lbar")
self.assertTrue(d['library_dirs'] == ['/usr/lib', '/usr/lib'])
self.assertTrue(d['libraries'] == ['foo', 'bar'])
+
+ def test_quotes_lflags(self):
+ d = parse_flags("-L'/usr/foo bar' -lfoo -L/usr/lib -lbar")
+ self.assertTrue(d['library_dirs'] == ['/usr/foo bar', '/usr/lib'])
+
+ d = parse_flags("-L/usr/'foo bar' -lfoo -L/usr/lib -lbar")
+ self.assertTrue(d['library_dirs'] == ['/usr/foo bar', '/usr/lib'])
+
+ d = parse_flags("\"-L/usr/foo bar\" -lfoo -L/usr/lib -lbar")
+ self.assertTrue(d['library_dirs'] == ['/usr/foo bar', '/usr/lib'])
+
+ d = parse_flags("\"-L/usr/foo bar/baz buz\" -lfoo -L/usr/lib -lbar")
+ self.assertTrue(d['library_dirs'] == ['/usr/foo bar/baz buz', '/usr/lib'])
+
+ def test_escaping_lflags(self):
+ d = parse_flags("-L/usr/foo\\ bar -lfoo -L/usr/lib -lbar")
+ self.assertTrue(d['library_dirs'] == ['/usr/foo bar', '/usr/lib'])
+
+ d = parse_flags(r"-L/usr/foo\ bar -lfoo -L/usr/lib -lbar")
+ self.assertTrue(d['library_dirs'] == ['/usr/foo bar', '/usr/lib'])
+
+ def test_odd_characters_lflags(self):
+ # tab in directory name
+ d = parse_flags('-L/usr/"foo\tbar" -lfoo -L/usr/lib -lbar')
+ self.assertTrue(d['library_dirs'] == ['/usr/foo\tbar', '/usr/lib'])
+
+ d = parse_flags("-L/usr/foo\\\tbar -lfoo -L/usr/lib -lbar")
+ self.assertTrue(d['library_dirs'] == ['/usr/foo\tbar', '/usr/lib'])