Skip to content

Commit eb0a216

Browse files
committed
modules/pkgconfig: Resolve dependencies in case of an internal dependency
When giving a dependency object as requires, allow to use the dependency from a subproject (that is an InternalDepdency).
1 parent 68d29ef commit eb0a216

File tree

9 files changed

+66
-0
lines changed

9 files changed

+66
-0
lines changed

mesonbuild/modules/pkgconfig.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,14 @@ def _process_reqs(self, reqs: T.Sequence[T.Union[str, build.StaticLibrary, build
156156
pass
157157
elif isinstance(obj, dependencies.ExternalDependency) and obj.name == 'threads':
158158
pass
159+
elif isinstance(obj, dependencies.InternalDependency) and all(lib.get_id() in self.metadata for lib in obj.libraries):
160+
# Ensure BothLibraries are resolved:
161+
if self.pub_libs and isinstance(self.pub_libs[0], build.StaticLibrary):
162+
obj = obj.get_as_static(recursive=True)
163+
else:
164+
obj = obj.get_as_shared(recursive=True)
165+
for lib in obj.libraries:
166+
processed_reqs.append(self.metadata[lib.get_id()].filebase)
159167
else:
160168
raise mesonlib.MesonException('requires argument not a string, '
161169
'library with pkgconfig-generated file '
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
project('simple', 'c', meson_version: '>=1.9.0')
2+
pkgg = import('pkgconfig')
3+
4+
simple2_dep = dependency('simple2')
5+
6+
simple_lib = library('simple',
7+
'simple.c',
8+
dependencies: [simple2_dep]
9+
)
10+
11+
pkgg.generate(simple_lib,
12+
requires: simple2_dep,
13+
)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#include"simple.h"
2+
#include <simple2.h>
3+
4+
int simple_function(void) {
5+
return simple_simple_function();
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#ifndef SIMPLE_H_
2+
#define SIMPLE_H_
3+
4+
int simple_function(void);
5+
6+
#endif
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
EXPORTS
2+
exposed_function2 @1
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
project('simple2', 'c', meson_version: '>=1.9.0')
2+
lib2 = library('simple2', 'simple2.c', vs_module_defs: 'exports.def')
3+
lib_dep = declare_dependency(link_with: lib2, include_directories: include_directories('.'))
4+
5+
meson.override_dependency('simple2', lib_dep)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#include"simple2.h"
2+
3+
int simple_simple_function(void) {
4+
return 42;
5+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#ifndef SIMPLE2_H_
2+
#define SIMPLE2_H_
3+
4+
int simple_simple_function(void);
5+
6+
#endif
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"installed": [
3+
{ "type": "file", "file": "usr/lib/pkgconfig/simple.pc"},
4+
{ "type": "file", "file": "usr/lib/pkgconfig/simple2.pc"}
5+
],
6+
"matrix": {
7+
"options": {
8+
"default_library": [
9+
{ "val": "shared" },
10+
{ "val": "static" },
11+
{ "val": "both" }
12+
]
13+
}
14+
}
15+
}

0 commit comments

Comments
 (0)