Bruce Dubbs wrote:
> Doing some debugging, I'm making some progress.  I made some debug 
> printouts and in the first case got:
> 
>    required_pkgconfig_version 999.999
> 
> but in the second
> 
>    required_pkgconfig_version a=b
> 
> (which for some reason returns a positive number for
> compare_versions ("0.26", "a=b") but that's a nonsense comparison due to 
> the invalid command line parsing.

rpmvercmp() is screwy (in pkg.c).  It compares the two as numbers (since
the first char of the first string is a digit), but ends up doing it
piecewise: comparing "0" to "" (since the first char of the second arg
is not a digit).  This triggers a line preceded with a comment pointing
at RH bugzilla, bug 50977 -- the code returns 1 if the first item was
numeric, and -1 otherwise.

But the real bug is below.

> I'm continuing to check.

This looked interesting, so I started digging as well.  I think I found it.

poptGetNextOption, after it invokes the callback for
--define-variable=a=b (the operation of which sets the longArg local
variable), does not reset longArg to NULL.  So on the next time through
its loop (after invoking the --define-variable callback, before invoking
the --atleast-pkgconfig-version callback), on line 389 of popt.c, sets
con->os->nextArg to longArg (the old "a=b" string).  What it should do
is set nextArg to nextCharArg (the next item on the command line).  This
happens if longArg is NULL.

Adding a "longArg = NULL;" as the first line of the "while (!done) {"
loop makes the tests pass.  I don't *think* it breaks anything else, but
I don't know for sure.

Short patch attached.  It can probably be turned into a sed.
diff -Naur pkg-config-0.26/popt/popt.c pkg-config-0.26-patched/popt/popt.c
--- pkg-config-0.26/popt/popt.c 2011-05-15 02:06:06.000000000 -0700
+++ pkg-config-0.26-patched/popt/popt.c 2011-09-04 12:44:26.000000000 -0700
@@ -297,6 +297,8 @@
     int singleDash;
 
     while (!done) {
+       longArg = NULL;
+
        while (!con->os->nextCharArg && con->os->next == con->os->argc 
                && con->os > con->optionStack)
            con->os--;

Attachment: signature.asc
Description: OpenPGP digital signature

-- 
http://linuxfromscratch.org/mailman/listinfo/lfs-dev
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page

Reply via email to