qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Yonggang Luo <luoyonggang@gmail.com>
Cc: Kevin Wolf <kwolf@redhat.com>, Ed Maste <emaste@freebsd.org>,
	qemu-block@nongnu.org, Stefan Weil <sw@weilnetz.de>,
	Xie Changlong <xiechanglong.d@gmail.com>,
	Peter Lieven <pl@kamp.de>,
	qemu-devel@nongnu.org, Michael Roth <mdroth@linux.vnet.ibm.com>,
	Richard Henderson <richard.henderson@linaro.org>,
	Gerd Hoffmann <kraxel@redhat.com>,
	Wen Congyang <wencongyang2@huawei.com>,
	Samuel Thibault <samuel.thibault@ens-lyon.org>,
	Max Reitz <mreitz@redhat.com>, Li-Wen Hsu <lwhsu@freebsd.org>,
	Markus Armbruster <armbru@redhat.com>
Subject: Re: [PATCH v2 03/21] configure: Fixes ncursesw detection under msys2/mingw and enable curses
Date: Wed, 9 Sep 2020 13:50:49 +0100	[thread overview]
Message-ID: <20200909125049.GU1011023@redhat.com> (raw)
In-Reply-To: <20200909094617.1582-4-luoyonggang@gmail.com>

On Wed, Sep 09, 2020 at 05:45:59PM +0800, Yonggang Luo wrote:
> The mingw pkg-config are showing following absolute path and contains : as the separator,
> so we must handling : properly.
> 
> -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199506L -IC:/CI-Tools/msys64/mingw64/include/ncursesw:-I/usr/include/ncursesw:
> -DNCURSES_WIDECHAR -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199506L -IC -pipe -lncursesw -lgnurx -ltre -lintl -liconv
> -DNCURSES_WIDECHAR -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199506L -IC -lncursesw
> -DNCURSES_WIDECHAR -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199506L -IC -lcursesw
> -DNCURSES_WIDECHAR /CI-Tools/msys64/mingw64/include/ncursesw -pipe -lncursesw -lgnurx -ltre -lintl -liconv
> -DNCURSES_WIDECHAR /CI-Tools/msys64/mingw64/include/ncursesw -lncursesw
> -DNCURSES_WIDECHAR /CI-Tools/msys64/mingw64/include/ncursesw -lcursesw
> -DNCURSES_WIDECHAR -I/usr/include/ncursesw -pipe -lncursesw -lgnurx -ltre -lintl -liconv
> -DNCURSES_WIDECHAR -I/usr/include/ncursesw -lncursesw
> -DNCURSES_WIDECHAR -I/usr/include/ncursesw -lcursesw
> 
> msys2/mingw lacks the POSIX-required langinfo.h.
> 
> gcc test.c -DNCURSES_WIDECHAR -I/mingw64/include/ncursesw -pipe -lncursesw -lgnurx -ltre -lintl -liconv
> test.c:4:10: fatal error: langinfo.h: No such file or directory
>     4 | #include <langinfo.h>
>       |          ^~~~~~~~~~~~
> compilation terminated.
> 
> So we using g_get_codeset instead of nl_langinfo(CODESET)
> 
> Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
> Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  configure   |  9 +++------
>  ui/curses.c | 10 +++++-----
>  2 files changed, 8 insertions(+), 11 deletions(-)
> 
> diff --git a/configure b/configure
> index f4f8bc3756..2e6d54e15b 100755
> --- a/configure
> +++ b/configure
> @@ -3653,8 +3653,8 @@ if test "$iconv" = "no" ; then
>  fi
>  if test "$curses" != "no" ; then
>    if test "$mingw32" = "yes" ; then
> -    curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
> -    curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
> +    curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/${MSYSTEM,,}/include/ncursesw:"
> +    curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw"

The original code would try  ncurses via pkg-config and if that failed, would
falback to pdcurses.

The new code tries ncursesw via pkg-config and then tries ncursesw again
via manually specified args, and doesn't try  ncurses or pdcurses at all.

This fixes your build as you've installed ncursesw, but breaks anyone
who was using ncurses or pdcurses previously. At least on Fedora only
pdcurses is available for mingw, so I don't think we should be dropping
this. It looks like we just need to check all three of ncursesw, ncurses
and pdcurses.

Copying Samuel who introduced this logic originally in 
commit 8ddc5bf9e5de51c2a4842c01dd3a97f5591776fd

>    else
>      curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
>      curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
> @@ -3664,17 +3664,14 @@ if test "$curses" != "no" ; then
>  #include <locale.h>
>  #include <curses.h>
>  #include <wchar.h>
> -#include <langinfo.h>
>  int main(void) {
> -  const char *codeset;
>    wchar_t wch = L'w';
>    setlocale(LC_ALL, "");
>    resize_term(0, 0);
>    addwstr(L"wide chars\n");
>    addnwstr(&wch, 1);
>    add_wch(WACS_DEGREE);
> -  codeset = nl_langinfo(CODESET);
> -  return codeset != 0;
> +  return 0;
>  }
>  EOF
>    IFS=:
> diff --git a/ui/curses.c b/ui/curses.c
> index a59b23a9cf..12bc682cf9 100644
> --- a/ui/curses.c
> +++ b/ui/curses.c
> @@ -30,7 +30,6 @@
>  #endif
>  #include <locale.h>
>  #include <wchar.h>
> -#include <langinfo.h>
>  #include <iconv.h>
>  
>  #include "qapi/error.h"
> @@ -526,6 +525,7 @@ static void font_setup(void)
>      iconv_t nativecharset_to_ucs2;
>      iconv_t font_conv;
>      int i;
> +    g_autofree gchar *local_codeset = g_get_codeset();
>  
>      /*
>       * Control characters are normally non-printable, but VGA does have
> @@ -566,14 +566,14 @@ static void font_setup(void)
>        0x25bc
>      };
>  
> -    ucs2_to_nativecharset = iconv_open(nl_langinfo(CODESET), "UCS-2");
> +    ucs2_to_nativecharset = iconv_open(local_codeset, "UCS-2");
>      if (ucs2_to_nativecharset == (iconv_t) -1) {
>          fprintf(stderr, "Could not convert font glyphs from UCS-2: '%s'\n",
>                          strerror(errno));
>          exit(1);
>      }
>  
> -    nativecharset_to_ucs2 = iconv_open("UCS-2", nl_langinfo(CODESET));
> +    nativecharset_to_ucs2 = iconv_open("UCS-2", local_codeset);
>      if (nativecharset_to_ucs2 == (iconv_t) -1) {
>          iconv_close(ucs2_to_nativecharset);
>          fprintf(stderr, "Could not convert font glyphs to UCS-2: '%s'\n",
> @@ -581,7 +581,7 @@ static void font_setup(void)
>          exit(1);
>      }
>  
> -    font_conv = iconv_open(nl_langinfo(CODESET), font_charset);
> +    font_conv = iconv_open(local_codeset, font_charset);
>      if (font_conv == (iconv_t) -1) {
>          iconv_close(ucs2_to_nativecharset);
>          iconv_close(nativecharset_to_ucs2);
> @@ -602,7 +602,7 @@ static void font_setup(void)
>      /* DEL */
>      convert_ucs(0x7F, 0x2302, ucs2_to_nativecharset);
>  
> -    if (strcmp(nl_langinfo(CODESET), "UTF-8")) {
> +    if (strcmp(local_codeset, "UTF-8")) {
>          /* Non-Unicode capable, use termcap equivalents for those available */
>          for (i = 0; i <= 0xFF; i++) {
>              wchar_t wch[CCHARW_MAX];
> -- 
> 2.28.0.windows.1
> 
> 

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



  reply	other threads:[~2020-09-09 12:52 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-09  9:45 [PATCH v2 00/21] W32, W64 msys2/mingw patches Yonggang Luo
2020-09-09  9:45 ` [PATCH v2 01/21] block: Fixes nfs compiling error on msys2/mingw Yonggang Luo
2020-09-09 12:24   ` Daniel P. Berrangé
2020-09-10  7:01   ` Peter Lieven
2020-09-10  7:14     ` 罗勇刚(Yonggang Luo)
2020-09-10  7:29       ` Peter Lieven
2020-09-10  9:02         ` 罗勇刚(Yonggang Luo)
2020-09-09  9:45 ` [PATCH v2 02/21] ci: fixes msys2 build by upgrading capstone to 4.0.2 Yonggang Luo
2020-09-09 12:26   ` Daniel P. Berrangé
2020-09-09 15:27     ` 罗勇刚(Yonggang Luo)
2020-09-09  9:45 ` [PATCH v2 03/21] configure: Fixes ncursesw detection under msys2/mingw and enable curses Yonggang Luo
2020-09-09 12:50   ` Daniel P. Berrangé [this message]
2020-09-09 12:55     ` 罗勇刚(Yonggang Luo)
2020-09-09 13:22       ` Daniel P. Berrangé
2020-10-02 17:49   ` 罗勇刚(Yonggang Luo)
2020-09-09  9:46 ` [PATCH v2 04/21] curses: Fixes curses compiling errors Yonggang Luo
2020-09-09 12:51   ` Daniel P. Berrangé
2020-09-09 13:26   ` Peter Maydell
2020-09-09 15:58     ` 罗勇刚(Yonggang Luo)
2020-09-09  9:46 ` [PATCH v2 05/21] tests: disable /char/stdio/* tests in test-char.c on win32 Yonggang Luo
2020-09-09 12:52   ` Daniel P. Berrangé
2020-09-09 18:10     ` 罗勇刚(Yonggang Luo)
2020-09-09  9:46 ` [PATCH v2 06/21] ci: Enable msys2 ci in cirrus Yonggang Luo
2020-09-09 12:53   ` Daniel P. Berrangé
2020-09-09  9:46 ` [PATCH v2 07/21] tests: Trying fixes test-replication.c on msys2/mingw Yonggang Luo
2020-09-09 12:55   ` Daniel P. Berrangé
2020-09-09 12:59     ` 罗勇刚(Yonggang Luo)
2020-09-09  9:46 ` [PATCH v2 08/21] tests: test-replication disable /replication/secondary/* " Yonggang Luo
2020-09-09 12:58   ` Daniel P. Berrangé
2020-09-09  9:46 ` [PATCH v2 09/21] osdep: These function are only available on Non-Win32 system Yonggang Luo
2020-09-09 12:59   ` Daniel P. Berrangé
2020-09-09  9:46 ` [PATCH v2 10/21] meson: Use -b to ignore CR vs. CR-LF issues on Windows Yonggang Luo
2020-09-09 12:59   ` Daniel P. Berrangé
2020-09-09  9:46 ` [PATCH v2 11/21] meson: disable crypto tests are empty under win32 Yonggang Luo
2020-09-09 13:00   ` Daniel P. Berrangé
2020-09-09  9:46 ` [PATCH v2 12/21] meson: remove empty else and duplicated gio deps Yonggang Luo
2020-09-09 13:00   ` Daniel P. Berrangé
2020-09-09  9:46 ` [PATCH v2 13/21] vmstate: Fixes test-vmstate.c on msys2/mingw Yonggang Luo
2020-09-09 13:05   ` Daniel P. Berrangé
2020-09-09  9:46 ` [PATCH v2 14/21] cirrus: Building freebsd in a single short Yonggang Luo
2020-09-09 17:32   ` Ed Maste
2020-09-09 18:16     ` Daniel P. Berrangé
2020-09-09 18:28       ` 罗勇刚(Yonggang Luo)
2020-09-09  9:46 ` [PATCH v2 15/21] tests: Convert g_free to g_autofree macro in test-logging.c Yonggang Luo
2020-09-09 13:08   ` Daniel P. Berrangé
2020-09-09  9:46 ` [PATCH v2 16/21] rcu: add uninit destructor for rcu Yonggang Luo
2020-09-09  9:46 ` [PATCH v2 17/21] tests: Fixes test-io-channel-socket.c tests under msys2/mingw Yonggang Luo
2020-09-09 13:08   ` Daniel P. Berrangé
2020-09-09  9:46 ` [PATCH v2 18/21] tests: fixes aio-win32 about aio_remove_fd_handler, get it consistence with aio-posix.c Yonggang Luo
2020-09-09  9:46 ` [PATCH v2 19/21] tests: Fixes test-io-channel-file by mask only owner file state mask bits Yonggang Luo
2020-09-09 13:10   ` Daniel P. Berrangé
2020-09-09  9:46 ` [PATCH v2 20/21] tests: fix test-util-sockets.c Yonggang Luo
2020-09-09 13:11   ` Daniel P. Berrangé
2020-09-09  9:46 ` [PATCH v2 21/21] tests: Fixes test-qdev-global-props.c Yonggang Luo
2020-09-09 13:18   ` Daniel P. Berrangé

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=20200909125049.GU1011023@redhat.com \
    --to=berrange@redhat.com \
    --cc=armbru@redhat.com \
    --cc=emaste@freebsd.org \
    --cc=kraxel@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=luoyonggang@gmail.com \
    --cc=lwhsu@freebsd.org \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=mreitz@redhat.com \
    --cc=pl@kamp.de \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=samuel.thibault@ens-lyon.org \
    --cc=sw@weilnetz.de \
    --cc=wencongyang2@huawei.com \
    --cc=xiechanglong.d@gmail.com \
    /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).