aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2018-03-12 23:02:36 +0200
committerGitHub <noreply@github.com>2018-03-12 23:02:36 +0200
commit6585427a7d03e32770769863e1ae8902d4480745 (patch)
tree4ee1359c40352a554e1eaf219b6b31b8b3eecdb2
parent28b19c78d6f9e12f9fc0f79748adbfed613eafc9 (diff)
parent2377f22ea594ee10c98e90df438d437362cca5ea (diff)
downloadmeson-6585427a7d03e32770769863e1ae8902d4480745.zip
meson-6585427a7d03e32770769863e1ae8902d4480745.tar.gz
meson-6585427a7d03e32770769863e1ae8902d4480745.tar.bz2
Merge pull request #3131 from sarum9in/pkgconfig
Pkgconfig accepts libraries and pkgconfig-dependencies in requires/requires_private parameters
-rw-r--r--docs/markdown/Pkgconfig-module.md5
-rw-r--r--docs/markdown/snippets/pkgconfig-requires-non-string.md5
-rw-r--r--mesonbuild/modules/pkgconfig.py30
-rwxr-xr-xrun_unittests.py8
-rw-r--r--test cases/common/51 pkgconfig-gen/dependencies/meson.build16
-rw-r--r--test cases/common/51 pkgconfig-gen/meson.build6
6 files changed, 61 insertions, 9 deletions
diff --git a/docs/markdown/Pkgconfig-module.md b/docs/markdown/Pkgconfig-module.md
index cbe01b4..853cf50 100644
--- a/docs/markdown/Pkgconfig-module.md
+++ b/docs/markdown/Pkgconfig-module.md
@@ -38,8 +38,9 @@ keyword arguments.
search path, for example if you install headers into
`${PREFIX}/include/foobar-1`, the correct value for this argument
would be `foobar-1`
-- `requires` list of strings to put in the `Requires` field
-- `requires_private` list of strings to put in the `Requires.private`
+- `requires` list of strings, pkgconfig-dependencies or libraries that
+ `pkgconfig.generate()` was used on to put in the `Requires` field
+- `requires_private` same as `requires` but for `Requires.private` field
field
- `url` a string with a url for the library
- `variables` a list of strings with custom variables to add to the
diff --git a/docs/markdown/snippets/pkgconfig-requires-non-string.md b/docs/markdown/snippets/pkgconfig-requires-non-string.md
new file mode 100644
index 0000000..fc848a8
--- /dev/null
+++ b/docs/markdown/snippets/pkgconfig-requires-non-string.md
@@ -0,0 +1,5 @@
+# pkgconfig.generate() requires parameters non-string arguments
+
+`pkgconfig.generate()` `requires` and `requires_private` parameters
+accept pkgconfig-dependencies and libraries that pkgconfig-files were
+generated for.
diff --git a/mesonbuild/modules/pkgconfig.py b/mesonbuild/modules/pkgconfig.py
index 5573a2e..2f4dfae 100644
--- a/mesonbuild/modules/pkgconfig.py
+++ b/mesonbuild/modules/pkgconfig.py
@@ -44,22 +44,40 @@ class DependenciesHelper:
self.priv_reqs += reqs
def add_pub_reqs(self, reqs):
- self.pub_reqs += mesonlib.stringlistify(reqs)
+ self.pub_reqs += self._process_reqs(reqs)
def add_priv_reqs(self, reqs):
- self.priv_reqs += mesonlib.stringlistify(reqs)
+ self.priv_reqs += self._process_reqs(reqs)
+
+ def _process_reqs(self, reqs):
+ '''Returns string names of requirements'''
+ processed_reqs = []
+ for obj in mesonlib.listify(reqs, unholder=True):
+ if hasattr(obj, 'generated_pc'):
+ processed_reqs.append(obj.generated_pc)
+ elif hasattr(obj, 'pcdep'):
+ pcdeps = mesonlib.listify(obj.pcdep)
+ processed_reqs += [i.name for i in pcdeps]
+ elif isinstance(obj, dependencies.PkgConfigDependency):
+ if obj.found():
+ processed_reqs.append(obj.name)
+ elif isinstance(obj, str):
+ processed_reqs.append(obj)
+ else:
+ raise mesonlib.MesonException('requires argument not a string, '
+ 'library with pkgconfig-generated file '
+ 'or pkgconfig-dependency object.')
+ return processed_reqs
def add_cflags(self, cflags):
self.cflags += mesonlib.stringlistify(cflags)
def _process_libs(self, libs, public):
- libs = mesonlib.listify(libs)
+ libs = mesonlib.listify(libs, unholder=True)
processed_libs = []
processed_reqs = []
processed_cflags = []
for obj in libs:
- if hasattr(obj, 'held_object'):
- obj = obj.held_object
if hasattr(obj, 'pcdep'):
pcdeps = mesonlib.listify(obj.pcdep)
processed_reqs += [i.name for i in pcdeps]
@@ -96,7 +114,7 @@ class DependenciesHelper:
self.priv_reqs = list(set(self.priv_reqs))
self.cflags = list(set(self.cflags))
- # Remove from pivate libs/reqs if they are in public already
+ # Remove from private libs/reqs if they are in public already
self.priv_libs = [i for i in self.priv_libs if i not in self.pub_libs]
self.priv_reqs = [i for i in self.priv_reqs if i not in self.pub_reqs]
diff --git a/run_unittests.py b/run_unittests.py
index 38728ab..9c7b16b 100755
--- a/run_unittests.py
+++ b/run_unittests.py
@@ -2234,6 +2234,14 @@ class LinuxlikeTests(BasePlatformTests):
'-llibinternal', '-lcustom2',
'-lfoo']))
+ cmd = ['pkg-config', 'requires-test']
+ out = self._run(cmd + ['--print-requires']).strip().split()
+ self.assertEqual(sorted(out), sorted(['libexposed', 'libfoo', 'libhello']))
+
+ cmd = ['pkg-config', 'requires-private-test']
+ out = self._run(cmd + ['--print-requires-private']).strip().split()
+ self.assertEqual(sorted(out), sorted(['libexposed', 'libfoo', 'libhello']))
+
def test_pkg_unfound(self):
testdir = os.path.join(self.unit_test_dir, '22 unfound pkgconfig')
self.init(testdir)
diff --git a/test cases/common/51 pkgconfig-gen/dependencies/meson.build b/test cases/common/51 pkgconfig-gen/dependencies/meson.build
index a767eb5..018b72f 100644
--- a/test cases/common/51 pkgconfig-gen/dependencies/meson.build
+++ b/test cases/common/51 pkgconfig-gen/dependencies/meson.build
@@ -21,7 +21,7 @@ custom_dep = declare_dependency(link_args : ['-lcustom'], compile_args : ['-DCUS
custom2_dep = declare_dependency(link_args : ['-lcustom2'], compile_args : ['-DCUSTOM2'])
# Generate a PC file:
-# - Having libmain in libraries should pull implicitely libexposed and libinternal in Libs.private
+# - Having libmain in libraries should pull implicitly libexposed and libinternal in Libs.private
# - Having libexposed in libraries should remove it from Libs.private
# - We generated a pc file for libexposed so it should be in Requires instead of Libs
# - Having threads_dep in libraries should add '-pthread' in both Libs and Cflags
@@ -36,3 +36,17 @@ pkgg.generate(libraries : [main_lib, exposed_lib, threads_dep , custom_dep],
filebase : 'dependency-test',
description : 'A dependency test.'
)
+
+pkgg.generate(
+ name : 'requires-test',
+ version : '1.0',
+ description : 'Dependency Requires field test.',
+ requires : [exposed_lib, pc_dep, 'libhello'],
+)
+
+pkgg.generate(
+ name : 'requires-private-test',
+ version : '1.0',
+ description : 'Dependency Requires.private field test.',
+ requires_private : [exposed_lib, pc_dep, 'libhello', notfound_dep],
+)
diff --git a/test cases/common/51 pkgconfig-gen/meson.build b/test cases/common/51 pkgconfig-gen/meson.build
index f9d7f7f..7e6c670 100644
--- a/test cases/common/51 pkgconfig-gen/meson.build
+++ b/test cases/common/51 pkgconfig-gen/meson.build
@@ -46,3 +46,9 @@ pkgg.generate(
description : 'A foo library.',
variables : ['foo=bar', 'datadir=${prefix}/data']
)
+
+pkgg.generate(
+ name : 'libhello',
+ description : 'A minimalistic pkgconfig file.',
+ version : libver,
+)