summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Brunet <charles.brunet@optelgroup.com>2024-09-10 08:20:22 -0400
committerDylan Baker <dylan@pnwbakers.com>2024-09-11 09:16:47 -0700
commit8a641cac5f7fd01c5e213c170c1babc18088369d (patch)
tree6a1fc92eaaa5c7c9d052019b54ec35648d547261
parent68d620ea8eeaf4e6bfb23277586a053b3b074ebb (diff)
downloadmeson-8a641cac5f7fd01c5e213c170c1babc18088369d.tar.gz
Fix pkgconfig.generate handling of BothLibraries dependencies
Was caused by 7b3169f. Fixes #13657.
-rw-r--r--mesonbuild/modules/pkgconfig.py7
-rw-r--r--test cases/common/278 pkgconfig-gen/meson.build19
-rw-r--r--test cases/common/278 pkgconfig-gen/simple.c6
-rw-r--r--test cases/common/278 pkgconfig-gen/simple.h6
-rw-r--r--test cases/common/278 pkgconfig-gen/simple2/exports.def2
-rw-r--r--test cases/common/278 pkgconfig-gen/simple2/meson.build2
-rw-r--r--test cases/common/278 pkgconfig-gen/simple2/simple2.c5
-rw-r--r--test cases/common/278 pkgconfig-gen/simple2/simple2.h6
-rw-r--r--test cases/common/278 pkgconfig-gen/test.json15
9 files changed, 68 insertions, 0 deletions
diff --git a/mesonbuild/modules/pkgconfig.py b/mesonbuild/modules/pkgconfig.py
index 61de8fc43..1bdf82931 100644
--- a/mesonbuild/modules/pkgconfig.py
+++ b/mesonbuild/modules/pkgconfig.py
@@ -195,6 +195,13 @@ class DependenciesHelper:
if obj.found():
if obj.objects:
raise mesonlib.MesonException('.pc file cannot refer to individual object files.')
+
+ # Ensure BothLibraries are resolved:
+ if self.pub_libs and isinstance(self.pub_libs[0], build.StaticLibrary):
+ obj = obj.get_as_static(recursive=True)
+ else:
+ obj = obj.get_as_shared(recursive=True)
+
processed_libs += obj.get_link_args()
processed_cflags += obj.get_compile_args()
self._add_lib_dependencies(obj.libraries, obj.whole_libraries, obj.ext_deps, public, private_external_deps=True)
diff --git a/test cases/common/278 pkgconfig-gen/meson.build b/test cases/common/278 pkgconfig-gen/meson.build
new file mode 100644
index 000000000..3f158882f
--- /dev/null
+++ b/test cases/common/278 pkgconfig-gen/meson.build
@@ -0,0 +1,19 @@
+project('pkgconfig-get', 'c')
+
+pkgg = import('pkgconfig')
+
+subdir('simple2')
+
+lib = library('simple', 'simple.c', dependencies: lib_dep)
+libver = '1.0'
+h = install_headers('simple.h')
+
+
+pkgg.generate(
+ lib,
+ version : libver,
+ name : 'libsimple',
+ filebase : 'simple',
+ description : 'A simple demo library.',
+ libraries: [lib_dep],
+) \ No newline at end of file
diff --git a/test cases/common/278 pkgconfig-gen/simple.c b/test cases/common/278 pkgconfig-gen/simple.c
new file mode 100644
index 000000000..da1d909f7
--- /dev/null
+++ b/test cases/common/278 pkgconfig-gen/simple.c
@@ -0,0 +1,6 @@
+#include"simple.h"
+#include <simple2.h>
+
+int simple_function(void) {
+ return simple_simple_function();
+}
diff --git a/test cases/common/278 pkgconfig-gen/simple.h b/test cases/common/278 pkgconfig-gen/simple.h
new file mode 100644
index 000000000..6896bfd17
--- /dev/null
+++ b/test cases/common/278 pkgconfig-gen/simple.h
@@ -0,0 +1,6 @@
+#ifndef SIMPLE_H_
+#define SIMPLE_H_
+
+int simple_function(void);
+
+#endif
diff --git a/test cases/common/278 pkgconfig-gen/simple2/exports.def b/test cases/common/278 pkgconfig-gen/simple2/exports.def
new file mode 100644
index 000000000..42c911b93
--- /dev/null
+++ b/test cases/common/278 pkgconfig-gen/simple2/exports.def
@@ -0,0 +1,2 @@
+EXPORTS
+ simple_simple_function @1
diff --git a/test cases/common/278 pkgconfig-gen/simple2/meson.build b/test cases/common/278 pkgconfig-gen/simple2/meson.build
new file mode 100644
index 000000000..c8f13c05e
--- /dev/null
+++ b/test cases/common/278 pkgconfig-gen/simple2/meson.build
@@ -0,0 +1,2 @@
+lib2 = library('simple2', 'simple2.c', vs_module_defs: 'exports.def')
+lib_dep = declare_dependency(link_with: lib2, include_directories: include_directories('.'))
diff --git a/test cases/common/278 pkgconfig-gen/simple2/simple2.c b/test cases/common/278 pkgconfig-gen/simple2/simple2.c
new file mode 100644
index 000000000..215b2aef8
--- /dev/null
+++ b/test cases/common/278 pkgconfig-gen/simple2/simple2.c
@@ -0,0 +1,5 @@
+#include"simple2.h"
+
+int simple_simple_function(void) {
+ return 42;
+}
diff --git a/test cases/common/278 pkgconfig-gen/simple2/simple2.h b/test cases/common/278 pkgconfig-gen/simple2/simple2.h
new file mode 100644
index 000000000..472e135f2
--- /dev/null
+++ b/test cases/common/278 pkgconfig-gen/simple2/simple2.h
@@ -0,0 +1,6 @@
+#ifndef SIMPLE2_H_
+#define SIMPLE2_H_
+
+int simple_simple_function(void);
+
+#endif
diff --git a/test cases/common/278 pkgconfig-gen/test.json b/test cases/common/278 pkgconfig-gen/test.json
new file mode 100644
index 000000000..99b18086c
--- /dev/null
+++ b/test cases/common/278 pkgconfig-gen/test.json
@@ -0,0 +1,15 @@
+{
+ "installed": [
+ { "type": "file", "file": "usr/include/simple.h"},
+ { "type": "file", "file": "usr/lib/pkgconfig/simple.pc"}
+ ],
+ "matrix": {
+ "options": {
+ "default_library": [
+ { "val": "shared" },
+ { "val": "static" },
+ { "val": "both" }
+ ]
+ }
+ }
+}