From cbc2f2d1df769123caa2e4562dbe1809cca1304d Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Sun, 29 Apr 2018 21:43:24 +0300 Subject: [PATCH] Keep separator spaces in pkg-config declarations. Closes #3479. --- mesonbuild/modules/pkgconfig.py | 6 ++++-- run_unittests.py | 11 +++++++++++ test cases/unit/31 pkgconfig format/meson.build | 12 ++++++++++++ test cases/unit/31 pkgconfig format/somelib.c | 5 +++++ 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 test cases/unit/31 pkgconfig format/meson.build create mode 100644 test cases/unit/31 pkgconfig format/somelib.c diff --git a/mesonbuild/modules/pkgconfig.py b/mesonbuild/modules/pkgconfig.py index a3ba973f3..419a14c77 100644 --- a/mesonbuild/modules/pkgconfig.py +++ b/mesonbuild/modules/pkgconfig.py @@ -139,8 +139,10 @@ def add_version_reqs(self, name, version_reqs): if version_reqs: if name not in self.version_reqs: self.version_reqs[name] = set() - # We could have '>=1.0' or '>= 1.0', remove spaces to normalize - new_vreqs = [s.replace(' ', '') for s in mesonlib.stringlistify(version_reqs)] + # Note that pkg-config is picky about whitespace. + # 'foo > 1.2' is ok but 'foo>1.2' is not. + # foo, bar' is ok, but 'foo,bar' is not. + new_vreqs = [s for s in mesonlib.stringlistify(version_reqs)] self.version_reqs[name].update(new_vreqs) def split_version_req(self, s): diff --git a/run_unittests.py b/run_unittests.py index f06c9a0ea..ce5fe14dd 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -3056,6 +3056,17 @@ def test_pkgconfig_internal_libraries(self): self.init(os.path.join(testdirbase, 'app')) self.build() + @unittest.skipIf(shutil.which('pkg-config') is None, 'Pkg-config not found.') + def test_pkgconfig_formatting(self): + testdir = os.path.join(self.unit_test_dir, '31 pkgconfig format') + self.init(testdir) + myenv = os.environ.copy() + myenv['PKG_CONFIG_PATH'] = self.privatedir + ro = subprocess.run(['pkg-config', '--libs', 'libsomething'], stdout=subprocess.PIPE, + env=myenv) + self.assertEqual(ro.returncode, 0) + self.assertIn(b'-lgobject-2.0', ro.stdout) + self.assertIn(b'-lgio-2.0', ro.stdout) class LinuxArmCrossCompileTests(BasePlatformTests): ''' diff --git a/test cases/unit/31 pkgconfig format/meson.build b/test cases/unit/31 pkgconfig format/meson.build new file mode 100644 index 000000000..bb702401f --- /dev/null +++ b/test cases/unit/31 pkgconfig format/meson.build @@ -0,0 +1,12 @@ +project('pkgformat', 'c', + version : '1.0') + +pkgg = import('pkgconfig') + +l = shared_library('something', 'somelib.c') + +pkgg.generate(libraries: l, + version: '1.0', + name: 'libsomething', + description: 'A library that does something', + requires: 'gobject-2.0 >= 2.54, gio-2.0 >= 2.54') diff --git a/test cases/unit/31 pkgconfig format/somelib.c b/test cases/unit/31 pkgconfig format/somelib.c new file mode 100644 index 000000000..6d876c8f2 --- /dev/null +++ b/test cases/unit/31 pkgconfig format/somelib.c @@ -0,0 +1,5 @@ +#include + +int some_func() { + return 0; +}