diff options
| author | Xavier Claessens <xavier.claessens@collabora.com> | 2022-09-23 09:19:05 -0400 |
|---|---|---|
| committer | Jussi Pakkanen <jpakkane@gmail.com> | 2022-10-23 13:18:34 +0300 |
| commit | 064165485ce00aac64afd98120fd725032e559fd (patch) | |
| tree | 2d173ee74fb5d582c60dc8c9faf57ed9f05464b0 /test cases | |
| parent | fa2585d0b364143fb588b8bb611eaa4d1c277811 (diff) | |
| download | meson-064165485ce00aac64afd98120fd725032e559fd.tar.gz | |
Fix excluding sources for static lib in both_libraries()
When using both_libraries(), or library() with default_library=both, we
remove all sources from args and kwargs when building the static
library, and replace them by the objects from the shared library. But
sources could also come from any InternalDependency, in which case we
currently build them twice (not efficient) and link both objects into
the static library.
It also means that when we needlessly build those source for the static
library, it miss order dependency on generated headers that we removed
from args/kwargs, which can cause build errors in the case the source
from static lib is compiled before the header in shared lib gets
generated.
This happened in GLib:
https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2917.
Diffstat (limited to 'test cases')
| -rw-r--r-- | test cases/common/254 generated header dep/foo.c | 1 | ||||
| -rw-r--r-- | test cases/common/254 generated header dep/meson.build | 22 |
2 files changed, 23 insertions, 0 deletions
diff --git a/test cases/common/254 generated header dep/foo.c b/test cases/common/254 generated header dep/foo.c new file mode 100644 index 000000000..f4de601ff --- /dev/null +++ b/test cases/common/254 generated header dep/foo.c @@ -0,0 +1 @@ +#include "foo.h" diff --git a/test cases/common/254 generated header dep/meson.build b/test cases/common/254 generated header dep/meson.build new file mode 100644 index 000000000..195d082ac --- /dev/null +++ b/test cases/common/254 generated header dep/meson.build @@ -0,0 +1,22 @@ +project('generated header dep', 'c') + +# Regression test case for a very specific case: +# - Uses both_libraries(), or library() with default_library=both. +# - A header file is generated by a custom_target() and passed as source. +# - A C file that uses that header is passed as a declare_dependency() source. +# Under those specific conditions, the static library used to miss an order +# dependency on the header file. This happened in GLib: +# https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2917. + +python = import('python').find_installation() +header = custom_target( + output: 'foo.h', + capture: true, + command: [python, '-c', 'print("#define FOO")'], +) + +sources_dep = declare_dependency(sources: files('foo.c')) + +both_libraries('foo', header, + dependencies: sources_dep, +) |
