RPM Community Forums

Mailing List Message of <rpm-devel>

Re: [CVS] RPM: rpm/ CHANGES rpm/lib/ poptALL.c

From: Jeff Johnson <n3npq@mac.com>
Date: Thu 27 Dec 2007 - 18:19:34 CET
Message-Id: <4E52A45F-67F8-4ABD-9C94-C26FCBFCDF53@mac.com>
Careful ...

Macros also have a scoping level (which is imperfectly implemented
but can't ever be changed because of "legacy compatibility).

There are already two macro primitives:
     %undefine foo	# as in "pop"
and
     %unglobal foo	# as in erase
each of which could be used in
     rpm --define "%undefine foo"
constructs already.

Clearly not obvious, I have no problems with --undefine at all.

But there are always additional expectations to meet, sigh.

73 de Jeff

On Dec 27, 2007, at 12:07 PM, Ralf S. Engelschall wrote:

>   RPM Package Manager, CVS Repository
>   http://rpm5.org/cvs/
>    
> ______________________________________________________________________ 
> ______
>
>   Server: rpm5.org                         Name:   Ralf S. Engelschall
>   Root:   /v/rpm/cvs                       Email:  rse@rpm5.org
>   Module: rpm                              Date:   27-Dec-2007  
> 18:07:09
>   Branch: HEAD                             Handle: 2007122717070900
>
>   Modified files:
>     rpm                     CHANGES
>     rpm/lib                 poptALL.c
>
>   Log:
>     To be able to completely disable an RPM Lua part from the CLI  
> one can
>     AFAIK only write a construct like...
>
>        %__foo_enabled 1
>        [...] %{?__foo_enabled:%{lua: <code>}} [...]
>
>     ...in an "rpmmacros" file. To let <code> now be optionally  
> disabled
>     under run-time from the CLI one has to configure an "rpmpopt"  
> containing:
>
>        rpm alias --disable-foo --undefine '__foo_enabled'
>
>     So, let us implement "rpm --undefine <macro>" as the  
> counterpart to "rpm
>     --define '<macro> <value>'" now to support this.
>
>     OTOH, even if one could solve the above issue also with other  
> tools, for
>     consistency reasons it is good to have both --define and -- 
> undefine!
>
>   Summary:
>     Revision    Changes     Path
>     1.2024      +1  -0      rpm/CHANGES
>     2.67        +21 -0      rpm/lib/poptALL.c
>    
> ______________________________________________________________________ 
> ______
>
>   patch -p0 <<'@@ .'
>   Index: rpm/CHANGES
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r1.2023 -r1.2024 CHANGES
>   --- rpm/CHANGES	27 Dec 2007 16:44:13 -0000	1.2023
>   +++ rpm/CHANGES	27 Dec 2007 17:07:09 -0000	1.2024
>   @@ -1,4 +1,5 @@
>    5.0b3 -> 5.0b4:
>   +    - rse: implement "rpm --undefine <macro>" as the counterpart  
> to "rpm --define '<macro> <value>'"
>        - afb: added %__objext,%__libext,%__shlibext,%__exeext for  
> file extensions.
>        - rse: make size of line buffer for .spec file parsing run- 
> time configurable via macro _spec_line_buffer_size
>        - rse: improve %patch macro implementation: less expansion  
> redundancy and macro namespace collision avoidance
>   @@ .
>   patch -p0 <<'@@ .'
>   Index: rpm/lib/poptALL.c
>    
> ====================================================================== 
> ======
>   $ cvs diff -u -r2.66 -r2.67 poptALL.c
>   --- rpm/lib/poptALL.c	25 Dec 2007 19:22:34 -0000	2.66
>   +++ rpm/lib/poptALL.c	27 Dec 2007 17:07:09 -0000	2.67
>   @@ -22,6 +22,7 @@
>    #ifdef  DEAD	/* XXX remember the previous definition however. */
>    #define POPT_RCFILE		-995
>    #endif
>   +#define POPT_UNDEFINE		-994
>
>    /*@access headerTagIndices @*/		/* XXX rpmcliFini */
>    /*@access headerTagTableEntry @*/	/* XXX rpmcliFini */
>   @@ -226,6 +227,23 @@
>    /*@=type@*/
>    	s = _free(s);
>        }	break;
>   +    case POPT_UNDEFINE:
>   +    {	char *s, *t;
>   +	/* XXX Convert '-' in macro name to underscore, skip leading %. */
>   +	s = t = xstrdup(arg);
>   +	while (*t && !xisspace(*t)) {
>   +	    if (*t == '-') *t = '_';
>   +	    t++;
>   +	}
>   +	t = s;
>   +	if (*t == '%') t++;
>   +/*@-type@*/
>   +	rpmcliConfigured();
>   +	(void) rpmUndefineMacro(NULL, t);
>   +	(void) rpmUndefineMacro(rpmCLIMacroContext, t);
>   +/*@=type@*/
>   +	s = _free(s);
>   +    }	break;
>        case 'E':
>    	rpmcliConfigured();
>    	{   const char *val = rpmExpand(arg, NULL);
>   @@ -369,6 +387,9 @@
>     { "define", 'D', POPT_ARG_STRING, NULL, 'D',
>    	N_("define MACRO with value EXPR"),
>    	N_("'MACRO EXPR'") },
>   + { "undefine", '\0', POPT_ARG_STRING, NULL, POPT_UNDEFINE,
>   +	N_("undefine MACRO"),
>   +	N_("'MACRO'") },
>     { "eval", 'E', POPT_ARG_STRING, NULL, 'E',
>    	N_("print macro expansion of EXPR"),
>    	N_("'EXPR'") },
>   @@ .
> ______________________________________________________________________
> RPM Package Manager                                    http://rpm5.org
> CVS Sources Repository                                rpm-cvs@rpm5.org
Received on Thu Dec 27 18:19:49 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.