diff options
author | Xavier Claessens <xavier.claessens@collabora.com> | 2019-09-16 10:27:11 -0400 |
---|---|---|
committer | Xavier Claessens <xclaesse@gmail.com> | 2019-09-17 11:56:46 -0400 |
commit | 5d0ced220c56a7599913c9e249b85f0d6a060821 (patch) | |
tree | 1f1e12600006ab661390677344571dcb4a69b397 | |
parent | 7e2c54c0a38788380c7f05dff3244faaa76e0220 (diff) | |
download | meson-5d0ced220c56a7599913c9e249b85f0d6a060821.zip meson-5d0ced220c56a7599913c9e249b85f0d6a060821.tar.gz meson-5d0ced220c56a7599913c9e249b85f0d6a060821.tar.bz2 |
pkgconfig: Fix ordering of public libraries
The main library must come before extra libraries, because they are
likely to be dependencies of the main library that get promoted from
private to public. This was causing static link issues with glib-2.0.pc.
-rw-r--r-- | mesonbuild/modules/pkgconfig.py | 11 | ||||
-rwxr-xr-x | run_unittests.py | 4 | ||||
-rw-r--r-- | test cases/common/47 pkgconfig-gen/dependencies/meson.build | 8 |
3 files changed, 20 insertions, 3 deletions
diff --git a/mesonbuild/modules/pkgconfig.py b/mesonbuild/modules/pkgconfig.py index 60d4b3f..ce5f5e0 100644 --- a/mesonbuild/modules/pkgconfig.py +++ b/mesonbuild/modules/pkgconfig.py @@ -388,10 +388,15 @@ class PkgConfigModule(ExtensionModule): raise mesonlib.MesonException('URL is not a string.') conflicts = mesonlib.stringlistify(kwargs.get('conflicts', [])) - deps = DependenciesHelper(filebase) + # Prepend the main library to public libraries list. This is required + # so dep.add_pub_libs() can handle dependency ordering correctly and put + # extra libraries after the main library. + libraries = mesonlib.extract_as_list(kwargs, 'libraries') if mainlib: - deps.add_pub_libs(mainlib) - deps.add_pub_libs(kwargs.get('libraries', [])) + libraries = [mainlib] + libraries + + deps = DependenciesHelper(filebase) + deps.add_pub_libs(libraries) deps.add_priv_libs(kwargs.get('libraries_private', [])) deps.add_pub_reqs(kwargs.get('requires', [])) deps.add_priv_reqs(kwargs.get('requires_private', [])) diff --git a/run_unittests.py b/run_unittests.py index 8cc9811..17ae45e 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -4577,6 +4577,10 @@ class LinuxlikeTests(BasePlatformTests): else: self.assertEqual(sorted(out), sorted(['libexposed', 'libfoo>=1.0', 'libhello'])) + cmd = ['pkg-config', 'pub-lib-order'] + out = self._run(cmd + ['--libs'], override_envvars=env).strip().split() + self.assertEqual(out, ['-llibmain2', '-llibinternal']) + def test_pkg_unfound(self): testdir = os.path.join(self.unit_test_dir, '23 unfound pkgconfig') self.init(testdir) diff --git a/test cases/common/47 pkgconfig-gen/dependencies/meson.build b/test cases/common/47 pkgconfig-gen/dependencies/meson.build index c72f96b..22bcc47 100644 --- a/test cases/common/47 pkgconfig-gen/dependencies/meson.build +++ b/test cases/common/47 pkgconfig-gen/dependencies/meson.build @@ -49,3 +49,11 @@ pkgg.generate( description : 'Dependency Requires.private field test.', requires_private : [exposed_lib, pc_dep, 'libhello', notfound_dep], ) + +# Verify that if we promote internal_lib as public dependency, it comes after +# the main library. +main_lib2 = both_libraries('libmain2', link_with : internal_lib) +pkgg.generate(main_lib2, + libraries : internal_lib, + filebase : 'pub-lib-order', +) |