qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: "Yonggang Luo" <luoyonggang@gmail.com>,
	qemu-devel@nongnu.org,
	"Daniel P . Berrangé" <berrange@redhat.com>
Cc: "QEMU Trivial" <qemu-trivial@nongnu.org>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Laurent Vivier" <laurent@vivier.eu>,
	"Gerd Hoffmann" <kraxel@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Alex Bennée" <alex.bennee@linaro.org>
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	[thread overview]
Message-ID: <4d300fcc-7ca9-aaa4-7bc4-e513ae558dc0@redhat.com> (raw)
In-Reply-To: <20201012234348.1427-5-luoyonggang@gmail.com>

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	other threads:[~2020-10-13  8:45 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-12 23:43 [PATCH v9 0/5] Fixes curses on msys2/mingw Yonggang Luo
2020-10-12 23:43 ` [PATCH v9 1/5] configure: fixes indent of $meson setup Yonggang Luo
2020-10-13  8:35   ` Philippe Mathieu-Daudé
2020-10-12 23:43 ` [PATCH v9 2/5] curses: Fixes compiler error that complain don't have langinfo.h on msys2/mingw Yonggang Luo
2020-10-13  8:35   ` Philippe Mathieu-Daudé
2020-10-12 23:43 ` [PATCH v9 3/5] curses: Fixes curses compiling errors Yonggang Luo
2020-10-12 23:43 ` [PATCH v9 4/5] win32: Simplify gmtime_r detection not depends on if _POSIX_C_SOURCE are defined on msys2/mingw Yonggang Luo
2020-10-13  8:37   ` Philippe Mathieu-Daudé [this message]
2020-10-12 23:43 ` [PATCH v9 5/5] configure: Fixes ncursesw detection under msys2/mingw by convert them to meson Yonggang Luo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4d300fcc-7ca9-aaa4-7bc4-e513ae558dc0@redhat.com \
    --to=philmd@redhat.com \
    --cc=alex.bennee@linaro.org \
    --cc=berrange@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=laurent@vivier.eu \
    --cc=luoyonggang@gmail.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-trivial@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).