aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/modules/pkgconfig.py21
-rw-r--r--test cases/common/51 pkgconfig-gen/meson.build12
2 files changed, 22 insertions, 11 deletions
diff --git a/mesonbuild/modules/pkgconfig.py b/mesonbuild/modules/pkgconfig.py
index 44add61..c938d42 100644
--- a/mesonbuild/modules/pkgconfig.py
+++ b/mesonbuild/modules/pkgconfig.py
@@ -24,7 +24,8 @@ from . import ExtensionModule
from ..interpreterbase import permittedKwargs
class DepsHolder:
- def __init__(self):
+ def __init__(self, name):
+ self.name = name
self.pub_libs = []
self.pub_reqs = []
self.priv_libs = []
@@ -62,6 +63,8 @@ class DepsHolder:
if hasattr(obj, 'pcdep'):
pcdeps = mesonlib.listify(obj.pcdep)
processed_reqs += [i.name for i in pcdeps]
+ elif hasattr(obj, 'generated_pc'):
+ processed_reqs.append(obj.generated_pc)
elif isinstance(obj, dependencies.PkgConfigDependency):
processed_reqs.append(obj.name)
elif isinstance(obj, dependencies.ThreadDependency):
@@ -73,6 +76,8 @@ class DepsHolder:
elif isinstance(obj, (build.SharedLibrary, build.StaticLibrary)):
processed_libs.append(obj)
if public:
+ if not hasattr(obj, 'generated_pc'):
+ obj.generated_pc = self.name
self.add_priv_libs(obj.get_dependencies())
self.add_priv_libs(obj.get_external_deps())
elif isinstance(obj, str):
@@ -216,13 +221,6 @@ class PkgConfigModule(ExtensionModule):
if len(args) > 0:
raise mesonlib.MesonException('Pkgconfig_gen takes no positional arguments.')
- deps = DepsHolder()
- deps.add_pub_libs(kwargs.get('libraries', []))
- deps.add_priv_libs(kwargs.get('libraries_private', []))
- deps.add_pub_reqs(kwargs.get('requires', []))
- deps.add_priv_reqs(kwargs.get('requires_private', []))
- deps.add_cflags(kwargs.get('extra_cflags', []))
-
subdirs = mesonlib.stringlistify(kwargs.get('subdirs', ['.']))
version = kwargs.get('version', None)
if not isinstance(version, str):
@@ -241,6 +239,13 @@ class PkgConfigModule(ExtensionModule):
raise mesonlib.MesonException('URL is not a string.')
conflicts = mesonlib.stringlistify(kwargs.get('conflicts', []))
+ deps = DepsHolder(filebase)
+ deps.add_pub_libs(kwargs.get('libraries', []))
+ deps.add_priv_libs(kwargs.get('libraries_private', []))
+ deps.add_pub_reqs(kwargs.get('requires', []))
+ deps.add_priv_reqs(kwargs.get('requires_private', []))
+ deps.add_cflags(kwargs.get('extra_cflags', []))
+
dversions = kwargs.get('d_module_versions', None)
if dversions:
compiler = state.environment.coredata.compilers.get('d')
diff --git a/test cases/common/51 pkgconfig-gen/meson.build b/test cases/common/51 pkgconfig-gen/meson.build
index dbe9100..45e3ed7 100644
--- a/test cases/common/51 pkgconfig-gen/meson.build
+++ b/test cases/common/51 pkgconfig-gen/meson.build
@@ -59,6 +59,12 @@ exposed_lib = shared_library('libexposed', 'simple.c')
internal_lib = shared_library('libinternal', 'simple.c')
main_lib = shared_library('libmain', link_with : [exposed_lib, internal_lib])
+pkgg.generate(libraries : exposed_lib,
+ version : libver,
+ name : 'libexposed',
+ description : 'An exposed library in dependency test.'
+)
+
# Declare a few different Dependency objects
pc_dep = dependency('libfoo', required : false)
threads_dep = dependency('threads', required : false)
@@ -68,6 +74,7 @@ custom2_dep = declare_dependency(link_args : ['-lcustom2'], compile_args : ['-DC
# Generate a PC file:
# - Having libmain in libraries should pull implicitely 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
# - Having custom_dep in libraries and libraries_private should only add it in Libs
# - Having custom2_dep in libraries_private should not add its Cflags
@@ -83,7 +90,8 @@ pkgg.generate(libraries : [main_lib, exposed_lib, threads_dep , custom_dep],
msg = 'Generated pc file doesn\'t have expected @0@: @1@'
out = run_command(envcmd, '-', pkgconfig_env, pkgconfig, 'dependency-test', '--print-requires').stdout().strip().split()
-assert(out.length() == 0, msg.format('requires', out))
+assert(out.contains('libexposed'), msg.format('requires', out))
+assert(out.length() == 1, msg.format('requires', out))
out = run_command(envcmd, '-', pkgconfig_env, pkgconfig, 'dependency-test', '--print-requires-private').stdout().strip().split()
assert(out.contains('libfoo'), msg.format('requires.private', out))
@@ -95,14 +103,12 @@ assert(out.contains('-DCUSTOM'), msg.format('cflags', out))
assert(out.length() == 2, msg.format('cflags', out))
out = run_command(envcmd, '-', pkgconfig_env, pkgconfig, 'dependency-test', '--libs-only-l', '--libs-only-other').stdout().strip().split()
-assert(out.contains('-llibexposed'), msg.format('libs', out))
assert(out.contains('-pthread'), msg.format('libs', out))
assert(out.contains('-lcustom'), msg.format('libs', out))
assert(out.contains('-llibmain'), msg.format('libs', out))
assert(out.length() == 4, msg.format('libs', out))
out = run_command(envcmd, '-', pkgconfig_env, pkgconfig, 'dependency-test', '--libs-only-l', '--libs-only-other', '--static').stdout().strip().split()
-assert(out.contains('-llibexposed'), msg.format('libs.private', out))
assert(out.contains('-pthread'), msg.format('libs.private', out))
assert(out.contains('-lcustom'), msg.format('libs.private', out))
assert(out.contains('-llibmain'), msg.format('libs.private', out))