tests/qtest: libqtest: Adapt global_qtest declaration for win32

Commit dd21074972 ("tests/libqtest: Use libqtest-single.h in tests that require global_qtest")
moved global_qtest to libqtest-single.h, by declaring global_qtest
attribute to be common and weak.

This trick unfortunately does not work on Windows, and building
qtest test cases results in multiple definition errors of the weak
symbol global_qtest, as Windows PE does not have the concept of
the so-called weak symbol like ELF in the *nix world.

However Windows does provide a trick to declare a variable to be
a common symbol, via __declspec(selectany) [1]. It does not provide
the "strong override weak" effect but we don't need it in our use
case anyway. So let's use it for win32.

[1] https://docs.microsoft.com/en-us/cpp/cpp/selectany

Signed-off-by: Xuzhou Cheng <xuzhou.cheng@windriver.com>
Signed-off-by: Bin Meng <bin.meng@windriver.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20220925113032.1949844-33-bmeng.cn@gmail.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
master
Xuzhou Cheng 2022-09-25 19:30:10 +08:00 committed by Thomas Huth
parent b82cbbf0f2
commit 39f0e991e1
1 changed files with 4 additions and 0 deletions

View File

@ -13,7 +13,11 @@
#include "libqtest.h"
#ifndef _WIN32
QTestState *global_qtest __attribute__((common, weak));
#else
__declspec(selectany) QTestState *global_qtest;
#endif
/**
* qtest_start: