04.05.2023 11:21, Paolo Bonzini wrote:
> meson.build files choose whether to build modules based on foo.found()
> expressions. If a feature is enabled (e.g. --enable-gtk), these expressions
> are true even if the code is not used by any emulator, and this results
> in an unexpected difference between modular and non-modular builds.
>
> For non-modular builds, the files are not included in any binary, and
> therefore the source files are never processed. For modular builds,
> however, all .so files are unconditionally built by default, and therefore
> a normal "make" tries to build them. However, the corresponding trace-*.h
> files are absent due to this conditional:
>
> if have_system
> trace_events_subdirs += [
> ...
> 'ui',
> ...
> ]
> endif
>
> which was added to avoid wasting time running tracetool on unused trace-events
> files. This causes a compilation failure; fix it by skipping module builds
> entirely if (depending on the module directory) have_block or have_system
> are false.
>
> Reported-by: Michael Tokarev <mjt@tls.msk.ru>
> Cc: qemu-stable@nongnu.org
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> meson.build | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/meson.build b/meson.build
> index c44d05a13f95..c7e486e0879a 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -3213,6 +3213,10 @@ modinfo_files = []
> block_mods = []
> softmmu_mods = []
> foreach d, list : modules
> + if not (d == 'block' ? have_block : have_system)
> + continue
> + endif
> +
> foreach m, module_ss : list
> if enable_modules and targetos != 'windows'
> module_ss = module_ss.apply(config_all, strict: false)
Tested-by: Michael Tokarev <mjt@tls.msk.ru>
Thank you for the fix Paolo! Yes that looks like it was the case here.
/mjt