From 8a641cac5f7fd01c5e213c170c1babc18088369d Mon Sep 17 00:00:00 2001 From: Charles Brunet Date: Tue, 10 Sep 2024 08:20:22 -0400 Subject: Fix pkgconfig.generate handling of BothLibraries dependencies Was caused by 7b3169f. Fixes #13657. --- mesonbuild/modules/pkgconfig.py | 7 +++++++ test cases/common/278 pkgconfig-gen/meson.build | 19 +++++++++++++++++++ test cases/common/278 pkgconfig-gen/simple.c | 6 ++++++ test cases/common/278 pkgconfig-gen/simple.h | 6 ++++++ .../common/278 pkgconfig-gen/simple2/exports.def | 2 ++ .../common/278 pkgconfig-gen/simple2/meson.build | 2 ++ test cases/common/278 pkgconfig-gen/simple2/simple2.c | 5 +++++ test cases/common/278 pkgconfig-gen/simple2/simple2.h | 6 ++++++ test cases/common/278 pkgconfig-gen/test.json | 15 +++++++++++++++ 9 files changed, 68 insertions(+) create mode 100644 test cases/common/278 pkgconfig-gen/meson.build create mode 100644 test cases/common/278 pkgconfig-gen/simple.c create mode 100644 test cases/common/278 pkgconfig-gen/simple.h create mode 100644 test cases/common/278 pkgconfig-gen/simple2/exports.def create mode 100644 test cases/common/278 pkgconfig-gen/simple2/meson.build create mode 100644 test cases/common/278 pkgconfig-gen/simple2/simple2.c create mode 100644 test cases/common/278 pkgconfig-gen/simple2/simple2.h create mode 100644 test cases/common/278 pkgconfig-gen/test.json 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 + +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" } + ] + } + } +} -- cgit v1.2.3