Should I add the getopt(3) POSIXMEHARDER, e.g.
rpm --define '%foo(+) <%*>' --eval '%{foo bar %(echo -n "quux")
baz}' <bar quux baz>
Note %foo(+) ...
It would be nice to have an answer to "feature regression" as well.
Too bad "+'
is an opt-out disabler of POSIXMEHARDER, likely a opt-in enabler is
more workable
work for macros.
Hmm, perhaps %foo(+) and %foo(-) as switches ...
73 de Jeff
On Mar 16, 2008, at 5:27 AM, 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: 16-Mar-2008
> 10:27:10
> Branch: HEAD Handle: 2008031609270901
>
> Modified files:
> rpm CHANGES
> rpm/rpmio macro.c
>
> Log:
> RPM really has to use the POPT_CONTEXT_POSIXMEHARDER flag to
> (again)
> correctly parse macro arguments *without* option/argument
> permutations
> now that we are using POPT instead of getopt(3)!
>
> Broken behavior without POPT_CONTEXT_POSIXMEHARDER:
> $ rpm --define '%foo() <%*>' --eval '%{foo bar %(echo -n
> "quux") baz}'
> error: Unknown option in macro foo(): -n: unknown option
> <%*>
>
> Fixed behavior with POPT_CONTEXT_POSIXMEHARDER:
> $ rpm --define '%foo() <%*>' --eval '%{foo bar %(echo -n
> "quux") baz}'
> <bar quux baz>
>
> Summary:
> Revision Changes Path
> 1.2249 +1 -0 rpm/CHANGES
> 2.192 +1 -1 rpm/rpmio/macro.c
>
> ______________________________________________________________________
> ______
>
> patch -p0 <<'@@ .'
> Index: rpm/CHANGES
>
> ======================================================================
> ======
> $ cvs diff -u -r1.2248 -r1.2249 CHANGES
> --- rpm/CHANGES 14 Mar 2008 22:55:18 -0000 1.2248
> +++ rpm/CHANGES 16 Mar 2008 09:27:09 -0000 1.2249
> @@ -1,4 +1,5 @@
> 5.0.0 -> 5.1a1:
> + - rse: fix macro option/argument parsing (again), this time
> by using POPT_CONTEXT_POSIXMEHARDER
> - afb: fix endianness detection when compiling Mac OS X
> Universal Binaries.
> - jbj: install rpmmtree in bindir, its at least as
> functional as mtree(8).
> - jbj: add rpmmtree (from mtree(8) in OpenBSD).
> @@ .
> patch -p0 <<'@@ .'
> Index: rpm/rpmio/macro.c
>
> ======================================================================
> ======
> $ cvs diff -u -r2.191 -r2.192 macro.c
> --- rpm/rpmio/macro.c 13 Mar 2008 22:39:32 -0000 2.191
> +++ rpm/rpmio/macro.c 16 Mar 2008 09:27:10 -0000 2.192
> @@ -1077,7 +1077,7 @@
>
> /* Parse the options, defining option macros. */
> /*@-nullstate@*/
> - optCon = poptGetContext(argv[0], argc, argv, optTbl,
> POPT_CONTEXT_NO_EXEC);
> + optCon = poptGetContext(argv[0], argc, argv, optTbl,
> POPT_CONTEXT_NO_EXEC|POPT_CONTEXT_POSIXMEHARDER);
> /*@=nullstate@*/
> while ((c = poptGetNextOpt(optCon)) > 0) {
> const char * optArg = poptGetOptArg(optCon);
> @@ .
> ______________________________________________________________________
> RPM Package Manager http://rpm5.org
> CVS Sources Repository rpm-cvs@rpm5.org
Received on Sun Mar 16 14:59:38 2008