Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: buggy configure completion - when both --enable-foo and --disable-foo are listed



Vincent Lefevre wrote on Wed, Aug 31, 2016 at 08:15:55 +0200:
> On 2016-08-31 03:00:55 +0000, Daniel Shahaf wrote:
> > Vincent Lefevre wrote on Wed, Aug 31, 2016 at 01:23:32 +0200:
> > > With zsh 5.2, I get the following, which doesn't make sense:
> > > 
> > > zira:~/software/mpfr> ./configure --enable-decimal-float[Tab]
> > > Completing option
> > > --enable-decimal-float  -- build conversion functions from/to decimal floats
> > > --enable-decimal-float  -- explicitly disable decimal floats support
> > > 
> > > One has from the "configure --help" output:
> > > 
> > >   --disable-decimal-float explicitly disable decimal floats support
> > >   --enable-decimal-float  build conversion functions from/to decimal floats
> > >                           [default=autodetect]
> > 
> > What do you expect to see?  How should the two strings ("build .." and
> > "explicitly ...") be handled?
> > 
> > Minimal example:
> > 
> > % print -rl -- '#!/bin/sh' 'cat <<"EOF"' '  --enable-foo  enable foo' '  --disable-foo  disable foo' 'EOF' >configure
> > % chmod +x configure
> > % ./configure --<TAB>
> > --disable-foo  --enable-foo  -- enable foo                                    
> > --disable-foo  --enable-foo  -- disable foo                                   
> 
> The problem is that it says "build conversion functions from/to
> decimal floats" after --enable-decimal-float while it corresponds
> to --disable-decimal-float.

I see.  I missed that in my previous reply.  Thanks for spelling it out.

I agree, the current completion is misleading.  This occurs with zsh's
configure script too:
.
% ./configure --enable-<TAB>
--enable-dynamic             -- turn off dynamically loaded binary modules

> So, I'd say, either
> 
> --enable-decimal-float  -- build conversion functions from/to decimal floats
> --disable-decimal-float -- explicitly disable decimal floats support
> 

You can sort of get this with a matchspec.  If you take the _configure
function in master, delete the -s parameter, and add a -M parameter,
like this:

_configure () {
        _arguments -M 'B:--en=--dis B:--dis=--en' : -- -i '(--(disable|enable)-FEATURE* --(with|without)-PACKAGE*)' '*=(E|)PREFIX*:prefix directory:_files -/' '*=PROGRAM*:program:_command_names -e' '*=NAME*executable*:program:_command_names -e' '*=NAME*:file:_files'
}

The behaviour of this function is different in three ways from the
_configure function in current master:

1) This function shows the correct --disable/--enable argument to the
left of each description:
.
% ./configure --en<TAB>
> option
--disable-dynamic            - turn off dynamically loaded binary modules
--disable-dynamic-nss        - do not call functions that will require dynamic NSS
--disable-gdbm               - turn off search for gdbm library
   …able-additional-fpath    - add directories to default function path
   …able-ansi2knr            - translate source to K&R C before compiling
   …able-cap                 - enable the search for POSIX capabilities (may
.
... and if you choose one of the first three options, the string inserted
in to the command line is "--enable-dynamic", not "--disable-dynamic".

2) Completing «./configure --<TAB>» will show next to each docstring
*either* the --enable-* or --disable-*, but not both.  This means the
user can tell at a glance whether the docstring describes --enable or
--disable, but also that (in the above example) the user has to type 'e'
'n' <TAB> to get compsys to fill in the rest of the word "-enable-dynamic".

3) «./configure --e<TAB>» won't offer the --enable-* counterparts of
options shown in the first output as --disable-*.  (I assume some smarter
matchspec could take care of this.)

Or maybe there's a better approach that doesn't use matchspecs at all.

> (thus skipping the --disable-decimal-float when one completes on
> --enable[Tab]), or add "=no" for the disable cases, e.g.:
> 
> --enable-decimal-float    -- build conversion functions from/to decimal floats
> --enable-decimal-float=no -- explicitly disable decimal floats support

Cheers,

Daniel



Messages sorted by: Reverse Date, Date, Thread, Author