Message ID | 20220925113032.1949844-33-bmeng.cn@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | tests/qtest: Enable running qtest on Windows | expand |
On 25/09/2022 13.30, Bin Meng wrote: > From: Xuzhou Cheng <xuzhou.cheng@windriver.com> > > Commit dd2107497275 ("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> > --- > > (no changes since v2) > > Changes in v2: > - Use __declspec(selectany) for the common weak symbol on Windows > > tests/qtest/libqtest-single.h | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/tests/qtest/libqtest-single.h b/tests/qtest/libqtest-single.h > index 4e7d0ae1dc..851724cbcb 100644 > --- a/tests/qtest/libqtest-single.h > +++ b/tests/qtest/libqtest-single.h > @@ -13,7 +13,11 @@ > > #include "libqtest.h" > > +#ifndef _WIN32 > QTestState *global_qtest __attribute__((common, weak)); > +#else > +__declspec(selectany) QTestState *global_qtest; > +#endif > > /** > * qtest_start: Good to know that it works also on Windows somehow! Reviewed-by: Thomas Huth <thuth@redhat.com>
diff --git a/tests/qtest/libqtest-single.h b/tests/qtest/libqtest-single.h index 4e7d0ae1dc..851724cbcb 100644 --- a/tests/qtest/libqtest-single.h +++ b/tests/qtest/libqtest-single.h @@ -13,7 +13,11 @@ #include "libqtest.h" +#ifndef _WIN32 QTestState *global_qtest __attribute__((common, weak)); +#else +__declspec(selectany) QTestState *global_qtest; +#endif /** * qtest_start: