diff mbox series

[26/51] tests/qtest: libqtest: Move global_qtest definition back to libqtest.c

Message ID 20220824094029.1634519-27-bmeng.cn@gmail.com (mailing list archive)
State New, archived
Headers show
Series tests/qtest: Enable running qtest on Windows | expand

Commit Message

Bin Meng Aug. 24, 2022, 9:40 a.m. UTC
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.

Let's move the definition of global_qtest back to libqtest.c.

Signed-off-by: Xuzhou Cheng <xuzhou.cheng@windriver.com>
Signed-off-by: Bin Meng <bin.meng@windriver.com>
---

 tests/qtest/libqtest-single.h | 2 +-
 tests/qtest/libqtest.c        | 2 ++
 2 files changed, 3 insertions(+), 1 deletion(-)

Comments

Thomas Huth Aug. 25, 2022, 11:59 a.m. UTC | #1
On 24/08/2022 11.40, 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.
> 
> Let's move the definition of global_qtest back to libqtest.c.
> 
> Signed-off-by: Xuzhou Cheng <xuzhou.cheng@windriver.com>
> Signed-off-by: Bin Meng <bin.meng@windriver.com>
> ---
> 
>   tests/qtest/libqtest-single.h | 2 +-
>   tests/qtest/libqtest.c        | 2 ++
>   2 files changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/tests/qtest/libqtest-single.h b/tests/qtest/libqtest-single.h
> index 4e7d0ae1dc..3294985d7b 100644
> --- a/tests/qtest/libqtest-single.h
> +++ b/tests/qtest/libqtest-single.h
> @@ -13,7 +13,7 @@
>   
>   #include "libqtest.h"
>   
> -QTestState *global_qtest __attribute__((common, weak));
> +extern QTestState *global_qtest;
>   
>   /**
>    * qtest_start:
> diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c
> index 34744ace7c..909583dad3 100644
> --- a/tests/qtest/libqtest.c
> +++ b/tests/qtest/libqtest.c
> @@ -65,6 +65,8 @@ struct QTestState
>       GList *pending_events;
>   };
>   
> +QTestState *global_qtest;
> +
>   static GHookList abrt_hooks;
>   static struct sigaction sigact_old;

I'm a little bit afraid that this could cause people to abuse global_qtest 
again in code that should be usable by multiple test instances. This was 
very painful to get rid off in the past...

Could you maybe use some #ifdef WIN32 here to keep the common+weak case on 
Linux and just declare it in libqtest.c on Windows?

  Thomas
diff mbox series

Patch

diff --git a/tests/qtest/libqtest-single.h b/tests/qtest/libqtest-single.h
index 4e7d0ae1dc..3294985d7b 100644
--- a/tests/qtest/libqtest-single.h
+++ b/tests/qtest/libqtest-single.h
@@ -13,7 +13,7 @@ 
 
 #include "libqtest.h"
 
-QTestState *global_qtest __attribute__((common, weak));
+extern QTestState *global_qtest;
 
 /**
  * qtest_start:
diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c
index 34744ace7c..909583dad3 100644
--- a/tests/qtest/libqtest.c
+++ b/tests/qtest/libqtest.c
@@ -65,6 +65,8 @@  struct QTestState
     GList *pending_events;
 };
 
+QTestState *global_qtest;
+
 static GHookList abrt_hooks;
 static struct sigaction sigact_old;