qemu-trivial
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v9 4/5] win32: Simplify gmtime_r detection not depends on if


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH v9 4/5] win32: Simplify gmtime_r detection not depends on if _POSIX_C_SOURCE are defined on msys2/mingw
Date: Tue, 13 Oct 2020 10:37:27 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.3.1

On 10/13/20 1:43 AM, Yonggang Luo wrote:
We remove the CONFIG_LOCALTIME_R detection option in configure, and move the 
check
existence of gmtime_r from configure into C header and source directly by using 
macro
`_POSIX_THREAD_SAFE_FUNCTIONS`.
Before this patch, the configure script are always assume the compiler doesn't 
define
_POSIX_C_SOURCE macro at all, but that's not true, because thirdparty library 
such
as ncursesw may define -D_POSIX_C_SOURCE in it's pkg-config file. And that C 
Flags will
added -D_POSIX_C_SOURCE into each QEMU_CFLAGS. And that's causing the following 
compiling error:
n file included from C:/work/xemu/qemu/include/qemu/osdep.h:119,
                  from ../softmmu/main.c:25:
C:/work/xemu/qemu/include/sysemu/os-win32.h:53:12: error: redundant 
redeclaration of 'gmtime_r' [-Werror=redundant-decls]
    53 | struct tm *gmtime_r(const time_t *timep, struct tm *result);
       |            ^~~~~~~~
In file included from C:/work/xemu/qemu/include/qemu/osdep.h:94,
                  from ../softmmu/main.c:25:
C:/CI-Tools/msys64/mingw64/x86_64-w64-mingw32/include/time.h:284:36: note: 
previous definition of 'gmtime_r' was here
   284 | __forceinline struct tm *__CRTDECL gmtime_r(const time_t *_Time, 
struct tm *_Tm) {
       |                                    ^~~~~~~~
In file included from C:/work/xemu/qemu/include/qemu/osdep.h:119,
                  from ../softmmu/main.c:25:
C:/work/xemu/qemu/include/sysemu/os-win32.h:55:12: error: redundant 
redeclaration of 'localtime_r' [-Werror=redundant-decls]
    55 | struct tm *localtime_r(const time_t *timep, struct tm *result);
       |            ^~~~~~~~~~~
In file included from C:/work/xemu/qemu/include/qemu/osdep.h:94,
                  from ../softmmu/main.c:25:
C:/CI-Tools/msys64/mingw64/x86_64-w64-mingw32/include/time.h:281:36: note: 
previous definition of 'localtime_r' was here
   281 | __forceinline struct tm *__CRTDECL localtime_r(const time_t *_Time, 
struct tm *_Tm) {
       |                                    ^~~~~~~~~~~

^^^ very verbose but OK.

vvv This part is duplicated, can you remove?

Compiling C object libcommon.fa.p/hw_gpio_zaurus.c.obj
In file included from C:/work/xemu/qemu/include/qemu/osdep.h:119,
                  from ../hw/i2c/smbus_slave.c:16:
C:/work/xemu/qemu/include/sysemu/os-win32.h:53:12: error: redundant 
redeclaration of 'gmtime_r' [-Werror=redundant-decls]
    53 | struct tm *gmtime_r(const time_t *timep, struct tm *result);
       |            ^~~~~~~~
In file included from C:/work/xemu/qemu/include/qemu/osdep.h:94,
                  from ../hw/i2c/smbus_slave.c:16:
C:/CI-Tools/msys64/mingw64/x86_64-w64-mingw32/include/time.h:284:36: note: 
previous definition of 'gmtime_r' was here
   284 | __forceinline struct tm *__CRTDECL gmtime_r(const time_t *_Time, 
struct tm *_Tm) {
       |                                    ^~~~~~~~
In file included from C:/work/xemu/qemu/include/qemu/osdep.h:119,
                  from ../hw/i2c/smbus_slave.c:16:
C:/work/xemu/qemu/include/sysemu/os-win32.h:55:12: error: redundant 
redeclaration of 'localtime_r' [-Werror=redundant-decls]
    55 | struct tm *localtime_r(const time_t *timep, struct tm *result);
       |            ^~~~~~~~~~~
In file included from C:/work/xemu/qemu/include/qemu/osdep.h:94,
                  from ../hw/i2c/smbus_slave.c:16:
C:/CI-Tools/msys64/mingw64/x86_64-w64-mingw32/include/time.h:281:36: note: 
previous definition of 'localtime_r' was here
   281 | __forceinline struct tm *__CRTDECL localtime_r(const time_t *_Time, 
struct tm *_Tm) {
       |                                    ^~~~~~~~~~~
Compiling C object libcommon.fa.p/hw_dma_xilinx_axidma.c.obj

After this patch, whenever ncursesw or other thirdparty libraries tried to 
define or not
define  _POSIX_C_SOURCE, the source will building properly. Because now, we 
don't make any
assumption if _POSIX_C_SOURCE are defined. We solely relied on if the macro 
`_POSIX_THREAD_SAFE_FUNCTIONS`
are defined in msys2/mingw header.

The _POSIX_THREAD_SAFE_FUNCTIONS are defined in mingw header like this:

```
#if defined(_POSIX_C_SOURCE) && !defined(_POSIX_THREAD_SAFE_FUNCTIONS)
#define _POSIX_THREAD_SAFE_FUNCTIONS 200112L
#endif

#ifdef _POSIX_THREAD_SAFE_FUNCTIONS
__forceinline struct tm *__CRTDECL localtime_r(const time_t *_Time, struct tm 
*_Tm) {
   return localtime_s(_Tm, _Time) ? NULL : _Tm;
}
__forceinline struct tm *__CRTDECL gmtime_r(const time_t *_Time, struct tm 
*_Tm) {
   return gmtime_s(_Tm, _Time) ? NULL : _Tm;
}
__forceinline char *__CRTDECL ctime_r(const time_t *_Time, char *_Str) {
   return ctime_s(_Str, 0x7fffffff, _Time) ? NULL : _Str;
}
__forceinline char *__CRTDECL asctime_r(const struct tm *_Tm, char * _Str) {
   return asctime_s(_Str, 0x7fffffff, _Tm) ? NULL : _Str;
}
#endif
```

Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
  configure                 | 34 ----------------------------------
  include/sysemu/os-win32.h |  4 ++--
  util/oslib-win32.c        |  4 ++--
  3 files changed, 4 insertions(+), 38 deletions(-)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]