On 1/23/23 22:52, Stefan Weil wrote: > Am 23.01.23 um 20:38 schrieb Andrey Drobyshev: > >> Hi Stefan, >> >> On 1/23/23 19:28, Stefan Weil wrote: >>> Hi, >>> >>> cross builds fail with this code. Please see details below. >>> >>> Am 29.11.22 um 18:38 schrieb Andrey Drobyshev via: >>>> This commit allows QGA to write to Windows event log using Win32 API's >>>> ReportEvent() [1], much like syslog() under *nix guests. >>>> >>>> In order to generate log message definitions we use a very basic >>>> message >>>> text file [2], so that every QGA's message gets ID 1. The tools >>>> "windmc" and "windres" respectively are used to generate ".rc" file and >>>> COFF object file, and then the COFF file is linked into qemu-ga.exe. >>>> >>>> [1] >>>> https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-reporteventa >>>> [2] >>>> https://learn.microsoft.com/en-us/windows/win32/eventlog/message-text-files >>>> >>>> Originally-by: Yuri Pudgorodskiy <y...@virtuozzo.com> >>>> Signed-off-by: Andrey Drobyshev <andrey.drobys...@virtuozzo.com> >>>> --- >>>> configure | 3 +++ >>>> qga/installer/qemu-ga.wxs | 5 +++++ >>>> qga/main.c | 16 +++++++++++++--- >>>> qga/meson.build | 19 ++++++++++++++++++- >>>> qga/messages-win32.mc | 9 +++++++++ >>>> 5 files changed, 48 insertions(+), 4 deletions(-) >>>> create mode 100644 qga/messages-win32.mc >>>> >>>> diff --git a/configure b/configure >>>> index 26c7bc5154..789a4f6cc9 100755 >>>> --- a/configure >>>> +++ b/configure >>>> @@ -372,6 +372,7 @@ smbd="$SMBD" >>>> strip="${STRIP-${cross_prefix}strip}" >>>> widl="${WIDL-${cross_prefix}widl}" >>>> windres="${WINDRES-${cross_prefix}windres}" >>>> +windmc="${WINDMC-${cross_prefix}windmc}" >>> Here the needed cross prefix is added ... >>> >>>> pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}" >>>> query_pkg_config() { >>>> "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@" >>> [...] >>>> diff --git a/qga/meson.build b/qga/meson.build >>>> index 3cfb9166e5..1ff159edc1 100644 >>>> --- a/qga/meson.build >>>> +++ b/qga/meson.build >>>> @@ -98,7 +98,24 @@ if targetos == 'windows' >>>> endif >>>> endif >>>> -qga = executable('qemu-ga', qga_ss.sources(), >>>> +qga_objs = [] >>>> +if targetos == 'windows' >>>> + windmc = find_program('windmc', required: true) >>> ... but here the cross prefix is missing and the cross build aborts >>> because windmc does not exist. >> There's no need for the cross prefix here. After you've run ./configure >> with --cross-prefix, argument, you'll see the following in >> build/config-meson.cross file: >> >> [binaries] >> .... >> widl = ['x86_64-w64-mingw32-widl'] >> windres = ['x86_64-w64-mingw32-windres'] >> windmc = ['x86_64-w64-mingw32-windmc'] >> >> And these are the actual values meson's find_program() is going to be >> looking for. So it doesn't seem like there's anything broken here, it's >> a matter of build requirements. > > > My configure terminates with an error because of the missing windmc > before it has written config-meson.cross. I have run an incremental build: > > Program windmc found: NO > > ../../../qga/meson.build:103:2: ERROR: Program 'windmc' not found or not > executable > > A full log can be found at > /qemu/bin/debug/x86_64-w64-mingw32/meson-logs/meson-log.txt > ninja: error: rebuilding 'build.ninja': subcommand failed > FAILED: build.ninja > /usr/bin/python3 /qemu/meson/meson.py --internal regenerate /qemu > /home/stefan/src/gitlab/qemu-project/qemu/bin/debug/x86_64-w64-mingw32 > --backend ninja > make: *** [Makefile:165: run-ninja] Fehler 1 > make: Verzeichnis „/qemu/bin/debug/x86_64-w64-mingw32“ wird verlassen > > A clean fresh build works indeed fine. >
I don't think the issue is caused by this particular patch. Here's what's happening: Makefile:72 > # force a rerun of configure if config-host.mak is too old or corrupted > > ifeq ($(MESON),) > > .PHONY: config-host.mak > > x := $(shell rm -rf meson-private meson-info meson-logs) > > > endif Makefile:92 > # 1. ensure config-host.mak is up-to-date > > > config-host.mak: $(SRC_PATH)/configure > $(SRC_PATH)/scripts/meson-buildoptions.sh $(SRC_PATH)/VERSION > @echo config-host.mak is out-of-date, running configure > > @if test -f meson-private/coredata.dat; then \ > > ./config.status --skip-meson; \ > > else \ > > ./config.status && touch build.ninja.stamp; \ > > fi configure:2529 > if test "$skip_meson" = no; then > ... > echo "widl = [$(meson_quote $widl)]" >> $cross > > echo "windres = [$(meson_quote $windres)]" >> $cross > > echo "windmc = [$(meson_quote $windmc)]" >> $cross Now if you checkout a revision which doesn't have this patch, perform a build, then checkout to a revision which has this patch and try to perform a build again, ./configure will be called with --skip-meson and config-meson.cross won't be regenerated. I'm not sure how we could detect a necessity to regenerate config-meson.cross in this case. Your suggestions are welcome, if any.