From b8554145f1c1766cc94b7772e0f75a211cfb2379 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Sun, 29 Apr 2018 21:43:24 +0300 Subject: [PATCH 15/16] 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 | 17 +++++++++++++++++ test cases/unit/31 pkgconfig format/somelib.c | 5 +++++ 4 files changed, 37 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 a3ba973f..419a14c7 100644 --- a/mesonbuild/modules/pkgconfig.py +++ b/mesonbuild/modules/pkgconfig.py @@ -139,8 +139,10 @@ class DependenciesHelper: 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 ff8d7c66..6773bbd1 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -2983,6 +2983,17 @@ endian = 'little' 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 00000000..bbd3b125 --- /dev/null +++ b/test cases/unit/31 pkgconfig format/meson.build @@ -0,0 +1,17 @@ +project('pkgformat', 'c', + version : '1.0') + +gio = dependency('gio-2.0', required: false) +if not gio.found() + error('MESON_SKIP_TEST glib not found.') +endif + +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 00000000..6d876c8f --- /dev/null +++ b/test cases/unit/31 pkgconfig format/somelib.c @@ -0,0 +1,5 @@ +#include + +int some_func() { + return 0; +} -- 2.17.0