diff mbox

Fix legacy ncurses detection.

Message ID 20161108201019.GM2378@var.home
State New
Headers show

Commit Message

Samuel Thibault Nov. 8, 2016, 8:10 p.m. UTC
Cornelia Huck, on Tue 08 Nov 2016 12:34:49 +0100, wrote:
> > diff --git a/configure b/configure
> > index fd6f898..e200aa8 100755
> > --- a/configure
> > +++ b/configure
> > @@ -2926,7 +2926,7 @@ if test "$curses" != "no" ; then
> >      curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
> >      curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
> >    else
> > -    curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):"
> > +    curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
> 
> This arrives at
> 
> curses_inc_list=":-I/usr/include/ncursesw:"
> 
> which causes the parser below to start with an empty curses_inc (with :
> as separator).

Yes, this is expected.

> configure fails as before (with -Werror; passes without).

Ah!
So are you getting the following message?

“
configure test passed without -Werror but failed with -Werror.
This is probably a bug in the configure script. The failing command
will be at the bottom of config.log.
You can run configure with --disable-werror to bypass this check.
”

If so, you should really have said it, I was really wondering how
configure could just stopping in your case.  That does explain things
indeed.

Could you try the attached patch?  It should be able to really fail
without Werror too.

> > @@ -2955,6 +2955,9 @@ EOF
> >          break
> >        fi
> >      done
> > +    if test "$curses_found" = yes ; then
> > +      break
> > +    fi
> 
> Breaking out as soon as we've found a working config seems like a good
> idea, but I don't think it's related to this issue.

Actually it is: in your case it's the second config which will work, the
third one will fail. Not breaking would mean we keep the failing one.

Samuel
commit 4c5e78e8843fa919f2601d8e44029ed0e711c6d9
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date:   Tue Nov 8 20:57:27 2016 +0100

    Fix cursesw detection
    
    On systems which do not provide ncursesw.pc and whose /usr/include/curses.h
    does not include wide support, we should not only try with no -I, i.e.
    /usr/include, but also with -I/usr/include/ncursesw.
    
    To properly detect for wide support with and without -Werror, we need to
    check for the presence of e.g. the WACS_DEGREE macro.
    
    We also want to stop at the first curses_inc_list configuration which works.
    
    Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>

Comments

Cornelia Huck Nov. 9, 2016, 8:58 a.m. UTC | #1
On Tue, 8 Nov 2016 21:10:19 +0100
Samuel Thibault <samuel.thibault@gnu.org> wrote:

> Cornelia Huck, on Tue 08 Nov 2016 12:34:49 +0100, wrote:
> > > diff --git a/configure b/configure
> > > index fd6f898..e200aa8 100755
> > > --- a/configure
> > > +++ b/configure
> > > @@ -2926,7 +2926,7 @@ if test "$curses" != "no" ; then
> > >      curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
> > >      curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
> > >    else
> > > -    curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):"
> > > +    curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
> > 
> > This arrives at
> > 
> > curses_inc_list=":-I/usr/include/ncursesw:"
> > 
> > which causes the parser below to start with an empty curses_inc (with :
> > as separator).
> 
> Yes, this is expected.
> 
> > configure fails as before (with -Werror; passes without).
> 
> Ah!
> So are you getting the following message?
> 
> “
> configure test passed without -Werror but failed with -Werror.
> This is probably a bug in the configure script. The failing command
> will be at the bottom of config.log.
> You can run configure with --disable-werror to bypass this check.
> ”
> 
> If so, you should really have said it, I was really wondering how
> configure could just stopping in your case.  That does explain things
> indeed.

I said so in my very first mail for the issue... appears I was unclear.

> 
> Could you try the attached patch?  It should be able to really fail
> without Werror too.

With your patch, configure runs through and detects curses=no. Not sure
that's correct, though: SLES12SP1 _does_ have curses, but not a .pc
file for ncursesw. I don't know enough about curses to say whether it
should be that way...
Samuel Thibault Nov. 9, 2016, 9:04 a.m. UTC | #2
Hello,

Cornelia Huck, on Wed 09 Nov 2016 09:58:59 +0100, wrote:
> On Tue, 8 Nov 2016 21:10:19 +0100
> Samuel Thibault <samuel.thibault@gnu.org> wrote:
> > Cornelia Huck, on Tue 08 Nov 2016 12:34:49 +0100, wrote:
> > “
> > configure test passed without -Werror but failed with -Werror.
> > This is probably a bug in the configure script. The failing command
> > will be at the bottom of config.log.
> > You can run configure with --disable-werror to bypass this check.
> > ”
> > 
> > If so, you should really have said it, I was really wondering how
> > configure could just stopping in your case.  That does explain things
> > indeed.
> 
> I said so in my very first mail for the issue... appears I was unclear.

Do you mean "configure barfs about -Werror."?
Yes it was unclear to me :)

> > Could you try the attached patch?  It should be able to really fail
> > without Werror too.
> 
> With your patch, configure runs through and detects curses=no. Not sure
> that's correct, though: SLES12SP1 _does_ have curses, but not a .pc
> file for ncursesw. I don't know enough about curses to say whether it
> should be that way...

Please post config.log so we can have a clue about what is going
wrong.  All these error messages are meant to be reported verbatim, not
reinterpreted :)

Samuel
Cornelia Huck Nov. 9, 2016, 9:12 a.m. UTC | #3
On Wed, 9 Nov 2016 10:04:02 +0100
Samuel Thibault <samuel.thibault@gnu.org> wrote:

> Please post config.log so we can have a clue about what is going
> wrong.  All these error messages are meant to be reported verbatim, not
> reinterpreted :)

Well, no error here - just curses=no.

config.log attached. The difference seems to be that the statement you
added in the sample program causes a real error instead of a warning.
Is the SLES12SP1 version of curses supposed to do that? (Maybe Michal
knows.)
diff mbox

Patch

diff --git a/configure b/configure
index fd6f898..f35edf8 100755
--- a/configure
+++ b/configure
@@ -2926,7 +2926,7 @@  if test "$curses" != "no" ; then
     curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
     curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
   else
-    curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):"
+    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"
   fi
   curses_found=no
@@ -2941,6 +2941,7 @@  int main(void) {
   resize_term(0, 0);
   addwstr(L"wide chars\n");
   addnwstr(&wch, 1);
+  add_wch(WACS_DEGREE);
   return s != 0;
 }
 EOF
@@ -2955,6 +2956,9 @@  EOF
         break
       fi
     done
+    if test "$curses_found" = yes ; then
+      break
+    fi
   done
   unset IFS
   if test "$curses_found" = "yes" ; then