Hello!
Scenario: I have packages atf-c, atf-c++, atf-sh. (Any set of two or more packages works for this trick; I happen to have these three from the same source alphabetically early in my list of packages.)
$ pkgconf --modversion atf-c atf-c++ atf-sh
0.20
0.20
... so where did the third one go?
Spelunking the code, I see that --modversion (and some other flags) put us into a mode where we only consider one package at a time by setting maximum_package_count — perfectly reasonable (though I don't know if this behaviour is actually documented anywhere except here in the source, so surprising in that regard):
|
/* if these selectors are used, it means that we are inquiring about a single package. |
|
* so signal to libpkgconf that we do not want to use the dependency resolver for more than one level, |
|
* and also limit the SAT problem to a single package. |
|
*/ |
|
if (((want_flags & PKG_REQUIRES) == PKG_REQUIRES || |
|
(want_flags & PKG_REQUIRES_PRIVATE) == PKG_REQUIRES_PRIVATE || |
|
(want_flags & PKG_PROVIDES) == PKG_PROVIDES || |
|
(want_flags & PKG_VARIABLES) == PKG_VARIABLES || |
|
(want_flags & PKG_MODVERSION) == PKG_MODVERSION || |
|
(want_flags & PKG_PATH) == PKG_PATH || |
|
want_variable != NULL)) |
|
{ |
|
maximum_package_count = 1; |
|
maximum_traverse_depth = 1; |
|
} |
However, the logic to actually enforce this erroneously compares cardinal pkgq.length to ordinal maximum_package_count:
|
/* check if there is a limit to the number of packages allowed to be included, if so and we have hit |
|
* the limit, stop adding packages to the queue. |
|
*/ |
|
if (maximum_package_count > 0 && pkgq.length > maximum_package_count) |
|
break; |
(I stumbled across this bug because Cabal does this wrong then fails for mysterious reasons; I'll also file a bug there about this behaviour.)
Hello!
Scenario: I have packages
atf-c,atf-c++,atf-sh. (Any set of two or more packages works for this trick; I happen to have these three from the same source alphabetically early in my list of packages.)... so where did the third one go?
Spelunking the code, I see that
--modversion(and some other flags) put us into a mode where we only consider one package at a time by settingmaximum_package_count— perfectly reasonable (though I don't know if this behaviour is actually documented anywhere except here in the source, so surprising in that regard):pkgconf/cli/main.c
Lines 1113 to 1127 in 78f3abc
However, the logic to actually enforce this erroneously compares cardinal
pkgq.lengthto ordinalmaximum_package_count:pkgconf/cli/main.c
Lines 1324 to 1328 in 78f3abc
(I stumbled across this bug because Cabal does this wrong then fails for mysterious reasons; I'll also file a bug there about this behaviour.)