diff options
author | Daniel da Silva <daniel@meltingwax.net> | 2014-03-02 12:39:11 -0500 |
---|---|---|
committer | Daniel da Silva <var.mail.daniel@gmail.com> | 2014-03-05 01:44:30 -0500 |
commit | 50bf6df95bdb5e4254719b0a6061cd1cdece2b7c (patch) | |
tree | bf08357084dc3ff9838436fe0c9db65b3c67f113 /numpy/distutils/tests | |
parent | 52bac2cb96fa1ed5cb811303ad5ef402d74e76df (diff) | |
download | numpy-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.py | 75 |
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']) |