Message ID | 20201001173230.829-3-luoyonggang@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Fixes curses on msys2/mingw | expand |
On Fri, Oct 02, 2020 at 01:32:28AM +0800, Yonggang Luo wrote: > 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> > --- > ui/curses.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > 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")) { If you're removing use of nl_langinfo / langinfo.h then you need to also update configure, because it is checking for this function and header file when validating curses library support. Regards, Daniel
On Fri, Oct 2, 2020 at 11:36 PM Daniel P. Berrangé <berrange@redhat.com> wrote: > > On Fri, Oct 02, 2020 at 01:32:28AM +0800, Yonggang Luo wrote: > > 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> > > --- > > ui/curses.c | 10 +++++----- > > 1 file changed, 5 insertions(+), 5 deletions(-) > > > > 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")) { > > If you're removing use of nl_langinfo / langinfo.h then you need > to also update configure, because it is checking for this function > and header file when validating curses library support. The change of configure are waiting for meson 0.56, so I didn't post that yet And this patch is a pre-request for msys2/mingw support and won't hurt other platform We are converting everything to meson, so I am not willing to change configure this time > > > 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 :| > -- 此致 礼 罗勇刚 Yours sincerely, Yonggang Luo
On Sat, Oct 03, 2020 at 12:38:50AM +0800, 罗勇刚(Yonggang Luo) wrote: > On Fri, Oct 2, 2020 at 11:36 PM Daniel P. Berrangé <berrange@redhat.com> > wrote: > > > > On Fri, Oct 02, 2020 at 01:32:28AM +0800, Yonggang Luo wrote: > > > 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> > > > --- > > > ui/curses.c | 10 +++++----- > > > 1 file changed, 5 insertions(+), 5 deletions(-) > > > > > > 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")) { > > > > If you're removing use of nl_langinfo / langinfo.h then you need > > to also update configure, because it is checking for this function > > and header file when validating curses library support. > The change of configure are waiting for meson 0.56, so I didn't post that > yet And this patch > is a pre-request for msys2/mingw support and won't hurt other platform > > We are converting everything to meson, so I am not willing to change > configure this time I don't see why the configure change has any dependancy on meson 0.56. It just requires you to remove the mentioned header file and function from the configure check. This patch needs to include that or it is incomplete IMHO Regards, Daniel
On 02/10/20 18:42, Daniel P. Berrangé wrote: > I don't see why the configure change has any dependancy on meson 0.56. > It just requires you to remove the mentioned header file and function > from the configure check. This patch needs to include that or it is > incomplete IMHO I agree, moving the check to Meson is waiting for 0.56 but for now the configure check needs to be maintained. Paolo
On Sat, Oct 3, 2020 at 12:42 AM Daniel P. Berrangé <berrange@redhat.com> wrote: > > On Sat, Oct 03, 2020 at 12:38:50AM +0800, 罗勇刚(Yonggang Luo) wrote: > > On Fri, Oct 2, 2020 at 11:36 PM Daniel P. Berrangé <berrange@redhat.com> > > wrote: > > > > > > On Fri, Oct 02, 2020 at 01:32:28AM +0800, Yonggang Luo wrote: > > > > 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> > > > > --- > > > > ui/curses.c | 10 +++++----- > > > > 1 file changed, 5 insertions(+), 5 deletions(-) > > > > > > > > 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")) { > > > > > > If you're removing use of nl_langinfo / langinfo.h then you need > > > to also update configure, because it is checking for this function > > > and header file when validating curses library support. > > The change of configure are waiting for meson 0.56, so I didn't post that > > yet And this patch > > is a pre-request for msys2/mingw support and won't hurt other platform > > > > We are converting everything to meson, so I am not willing to change > > configure this time > > I don't see why the configure change has any dependancy on meson 0.56. > It just requires you to remove the mentioned header file and function > from the configure check. This patch needs to include that or it is > incomplete IMHO > Because the configure script change far more complicated than you imgaine. And I post that before > 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 :| > -- 此致 礼 罗勇刚 Yours sincerely, Yonggang Luo
On 02/10/20 19:47, 罗勇刚(Yonggang Luo) wrote: > Because the configure script change far more complicated than you > imgaine. And I post that before Daniel is literally asking for a two-line change: diff --git a/configure b/configure index fee5faa054..ffd72b571d 100755 --- a/configure +++ b/configure @@ -3671,7 +3671,6 @@ 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'; @@ -3680,7 +3679,6 @@ int main(void) { addwstr(L"wide chars\n"); addnwstr(&wch, 1); add_wch(WACS_DEGREE); - codeset = nl_langinfo(CODESET); return codeset != 0; } EOF Paolo
gotcha On Sat, Oct 3, 2020 at 1:49 AM Paolo Bonzini <pbonzini@redhat.com> wrote: > > On 02/10/20 19:47, 罗勇刚(Yonggang Luo) wrote: > > Because the configure script change far more complicated than you > > imgaine. And I post that before > > Daniel is literally asking for a two-line change: > > diff --git a/configure b/configure > index fee5faa054..ffd72b571d 100755 > --- a/configure > +++ b/configure > @@ -3671,7 +3671,6 @@ 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'; > @@ -3680,7 +3679,6 @@ int main(void) { > addwstr(L"wide chars\n"); > addnwstr(&wch, 1); > add_wch(WACS_DEGREE); > - codeset = nl_langinfo(CODESET); > return codeset != 0; > } > EOF > > Paolo > -- 此致 礼 罗勇刚 Yours sincerely, Yonggang Luo
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];