aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2019-09-16 10:27:11 -0400
committerXavier Claessens <xclaesse@gmail.com>2019-09-17 11:56:46 -0400
commit5d0ced220c56a7599913c9e249b85f0d6a060821 (patch)
tree1f1e12600006ab661390677344571dcb4a69b397
parent7e2c54c0a38788380c7f05dff3244faaa76e0220 (diff)
downloadmeson-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.py11
-rwxr-xr-xrun_unittests.py4
-rw-r--r--test cases/common/47 pkgconfig-gen/dependencies/meson.build8
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',
+)