Panu Matilainen [Mon, 22 Mar 2010 12:09:58 +0000 (14:09 +0200)]
Lose FDSANE() macro, check in c2f() and callers instead
Panu Matilainen [Mon, 22 Mar 2010 11:47:32 +0000 (13:47 +0200)]
Change most of the FDSANE() asserts into good old NULL-checks
- blowing up with an assert failure deep inside io "library" is not
a very friendly thing to do...
Panu Matilainen [Mon, 22 Mar 2010 11:25:57 +0000 (13:25 +0200)]
Lose the useless rpmio refcounting debug junk
- the rpmio API always had this goo, should've gotten rid of it
back in commit
dbdbe8010cd944f026a5a4e5d071eb31d29d81c4 but .. oh well
Panu Matilainen [Mon, 22 Mar 2010 11:05:38 +0000 (13:05 +0200)]
Lose the useless rpmdb refcounting debug junk + switches
- get the debug messages out of API, this is what should've been in commit
dbdbe8010cd944f026a5a4e5d071eb31d29d81c4
Panu Matilainen [Mon, 22 Mar 2010 11:04:26 +0000 (13:04 +0200)]
Lose the useless rpmds refcounting debug junk + switches
- get the debug messages out of API, this is what should've been in commit
dbdbe8010cd944f026a5a4e5d071eb31d29d81c4
Panu Matilainen [Mon, 22 Mar 2010 10:54:44 +0000 (12:54 +0200)]
Lose the useless rpmps refcounting debug junk
- get the debug messages out of API, this is what should've been in commit
dbdbe8010cd944f026a5a4e5d071eb31d29d81c4
Panu Matilainen [Mon, 22 Mar 2010 10:49:45 +0000 (12:49 +0200)]
Lose the useless rpmfi refcounting etc debug messages + debug switches
- get the debug messages out of API, this is what should've been in commit
dbdbe8010cd944f026a5a4e5d071eb31d29d81c4
Panu Matilainen [Mon, 22 Mar 2010 10:40:27 +0000 (12:40 +0200)]
Lose the useless rpmts refcounting debug messages + debug switches
- get the debug messages out of API, this is what should've been in commit
dbdbe8010cd944f026a5a4e5d071eb31d29d81c4 - just wtf have I been thinking?
- also tolerate NULL passed to rpmtsLink() and rpmtsUnlink()
Panu Matilainen [Mon, 22 Mar 2010 09:05:17 +0000 (11:05 +0200)]
Handle obsoletions within the added package set automatically
- similarly to skipping/replacing different versions of a package
getting added to transaction, detect obsoletion too and
skip/replace to avoid installing packages obsoleted by something
else in the set
Panu Matilainen [Mon, 22 Mar 2010 08:37:32 +0000 (10:37 +0200)]
Use package NEVRA for replaced/skipped messages, simplify
- dependency strings look funny when we're talking about packages,
use the full NEVRA instead
- unify the logging calls
Panu Matilainen [Mon, 22 Mar 2010 08:02:49 +0000 (10:02 +0200)]
Avoid redundant headerGet()'s on arch and os
Panu Matilainen [Mon, 22 Mar 2010 07:46:51 +0000 (09:46 +0200)]
Refactor duplicate checking out of rpmtsAddInstallElement()
Panu Matilainen [Mon, 22 Mar 2010 06:42:35 +0000 (08:42 +0200)]
Eliminate redundant if
Panu Matilainen [Fri, 19 Mar 2010 17:58:31 +0000 (19:58 +0200)]
There's nothing to translate in fts.c, remove from POTFILES.in
- should've been in commit
ad43e72d70604eac223fd20c97ca990fa4936ac6, oh well
Panu Matilainen [Fri, 19 Mar 2010 17:55:54 +0000 (19:55 +0200)]
Dont bother hanging onto header in rpmgi
- rpmgi has no use for the header and we dont really need it for iteration
either, just return the header we opened and let caller free
Panu Matilainen [Fri, 19 Mar 2010 17:35:19 +0000 (19:35 +0200)]
Lose some unused leftover rpmgi goo
Panu Matilainen [Fri, 19 Mar 2010 17:25:23 +0000 (19:25 +0200)]
Return headers from rpmgiNext() directly
Panu Matilainen [Fri, 19 Mar 2010 17:15:44 +0000 (19:15 +0200)]
Eliminate rpmgi from public API & ABI
Panu Matilainen [Fri, 19 Mar 2010 17:04:07 +0000 (19:04 +0200)]
Pass args and flags to rpmgi constructor already, lose rpmgiSetArgs()
- tags and the like to constructor make no sense anymore, rpmgi
does nothing but walk manifests and files from argv
- simplifies things further...
Panu Matilainen [Fri, 19 Mar 2010 16:23:52 +0000 (18:23 +0200)]
Bury FTS inside librpmbuild and eliminate from public ABI
Panu Matilainen [Fri, 19 Mar 2010 15:56:53 +0000 (17:56 +0200)]
Rip RPMDBI_PACKAGES iteration support out of rpmgi
- lift the tag-filtering part into query code, that's at least somewhat
useful
- rpmgi is now just a glorified path argument iterator
Panu Matilainen [Fri, 19 Mar 2010 14:30:55 +0000 (16:30 +0200)]
One helluva complicated way to pass our own arg back to us
Panu Matilainen [Fri, 19 Mar 2010 14:55:27 +0000 (16:55 +0200)]
Lose unused temporary/pseudo rpmdbi tags
- we haven't had any temporary dbis since rpm 4.8.0 where Depends
got axed, the rest were just nonexistent fluff anyway
Panu Matilainen [Fri, 19 Mar 2010 14:55:01 +0000 (16:55 +0200)]
Eliminate RPMDBI_ADDED iterator mode from rpmgi
- there already exists a specialized iterator for this purpose for
programmatic purposes and no cli-switches or the like to use this
(as it would be meaningless really in rpm-cli context) so ... rip
Panu Matilainen [Fri, 19 Mar 2010 14:54:00 +0000 (16:54 +0200)]
Eliminate hysterical --hdlist query option and everything implementing it
- This hidden gem used "system hdlist", ie "/usr/share/comps/%{_arch}/hdlist
as the source for queries. Such "system hdlist" hasn't existed anywhere
since RHL 9/FC 1 times...
Panu Matilainen [Fri, 19 Mar 2010 14:52:19 +0000 (16:52 +0200)]
Eliminate --wtfwalk .. err, --ftswalk and everything implementing it
- that's what find + xargs are for, this is just useless cruft
Panu Matilainen [Fri, 19 Mar 2010 14:51:32 +0000 (16:51 +0200)]
Lose useless rpmgi reference counting
- these dont get passed around in a manner where refcounting would
make any difference
Panu Matilainen [Fri, 19 Mar 2010 14:50:58 +0000 (16:50 +0200)]
Lose the hidden and useless transaction add/order through rpmgi hackery
Panu Matilainen [Fri, 19 Mar 2010 14:48:42 +0000 (16:48 +0200)]
Lose unused rpmgiTs()
Panu Matilainen [Fri, 19 Mar 2010 14:45:56 +0000 (16:45 +0200)]
Lose unused qva_char and qva_rc fields from rpmQVKArguments struct
- both are only ever assigned to with useless values and never read...
Panu Matilainen [Fri, 19 Mar 2010 08:49:17 +0000 (10:49 +0200)]
Verify the various version comparison results in testsuite
Panu Matilainen [Fri, 19 Mar 2010 08:03:38 +0000 (10:03 +0200)]
Split upgrade + obsolete erasure element addition to helper functions
- just slicing up the biiig rpmtsAddInstallElement(), no functional changes
Panu Matilainen [Fri, 19 Mar 2010 07:49:45 +0000 (09:49 +0200)]
Lose unused/useless variable
Panu Matilainen [Fri, 19 Mar 2010 07:48:10 +0000 (09:48 +0200)]
Use a macro for the common color skipping checks
Panu Matilainen [Fri, 19 Mar 2010 07:32:17 +0000 (09:32 +0200)]
Dont bother taking ds reference on obsoletes, we dont do it elsewhere either
Panu Matilainen [Fri, 19 Mar 2010 07:18:25 +0000 (09:18 +0200)]
Dead code removal
- this code has last been active sometime < 2004, nobody's been missing it
- based on comments in https://bugzilla.redhat.com/show_bug.cgi?id=134497
it was some highly specific kludge for somebody to begin with and
shouldn't have been in rpm upstream ever but history is lost here...
- move the removePackage() outside the debug goo so the actual action
stands out
Panu Matilainen [Fri, 19 Mar 2010 07:04:12 +0000 (09:04 +0200)]
Use the element color instead of header color
- this is just the same thing, element color has been already calculated
so no need to go through header extensions again
Panu Matilainen [Thu, 18 Mar 2010 21:40:34 +0000 (23:40 +0200)]
Oops, more leftovers from rpmal debug goo
Panu Matilainen [Thu, 18 Mar 2010 21:21:01 +0000 (23:21 +0200)]
Lose leftovers from former rpmal implementation
Panu Matilainen [Thu, 18 Mar 2010 18:51:42 +0000 (20:51 +0200)]
Helper function for pruned iterators used in dependency checking
Panu Matilainen [Thu, 18 Mar 2010 18:32:13 +0000 (20:32 +0200)]
Lose anaconda-specific check from 2000
- the predates lazy rpmdb open through rpmtsInitIterator() from 2001, and
rpmtsCheck() explicitly opens the db anyway so this is completely moot
Panu Matilainen [Thu, 18 Mar 2010 18:06:18 +0000 (20:06 +0200)]
rpmalAdd() prototype cosmetics
Panu Matilainen [Thu, 18 Mar 2010 17:55:57 +0000 (19:55 +0200)]
Lazy rpmal hash creation on first lookup, make rpmalMakeIndex() static
- the "new" hash-based rpmal only uses rpmalMakeIndex() for initial
creation of the hash tables as late as possible for better estimate
of needed hash size, but doesn't require any index regeneration if something
is added
- first call to rpmalSatisfiedDepend() now initializes the hashes, if
significant amount of entries are added after the first call hash
table might get full ... so dont do that ;) (this was already true
with rpmalMakeIndex(), now its just hidden out of sight)
Panu Matilainen [Thu, 18 Mar 2010 17:49:25 +0000 (19:49 +0200)]
Make rpmalAllFileSatisfiesDepend() and rpmalAllSatisfiesDepend() static
- rpmtsCheck() only wants yes/no answers from rpmal, and ordering
wants the best provider, rpmalSatisfiesDepend() works for both
- update comments
Panu Matilainen [Thu, 18 Mar 2010 15:33:05 +0000 (17:33 +0200)]
Minor cleanups to rpmtsAddInstallElement()
- combine some checks where it makes sense
- initialize isSource at declaration
- remove unnecessary NULL check on obsoletes, rpmdsNext() handles it
Panu Matilainen [Thu, 18 Mar 2010 15:12:39 +0000 (17:12 +0200)]
Eww, we dont want obsoletion by file names
- obsoletion is only for package names, anything else has way too
funky side-effects
Panu Matilainen [Thu, 18 Mar 2010 13:28:23 +0000 (15:28 +0200)]
Refuse to install obsoleted packages (RhBug:486565)
- Packages which are obsoleted by some installed package now behave
much like conflicts, ie install is refused unless --nodeps is used
- Unlike conflicts, obsoletes are only tested against installed package
names and not provides. Otherwise it would be impossible to create
compat-packages which provide something that is obsoleted.
- Only check against installed obsoletes, as any obsoletes in the
transaction could and should be handled automatically similarly to
foo-1.0 and foo-2.0 in the same transaction set resulting only in foo-2.0
getting installed.
Panu Matilainen [Thu, 18 Mar 2010 13:24:08 +0000 (15:24 +0200)]
Replace the checkPackageDeps() monster with per-ds problem check helper
- just refactoring to avoid copy-pasteism, no functional changes
Panu Matilainen [Thu, 18 Mar 2010 11:30:41 +0000 (13:30 +0200)]
Lump the copy-paste checkDependentFoo() functions into one
- just pass the dependency type from caller instead
- clarify the comments a bit
- no functional changes
Panu Matilainen [Thu, 18 Mar 2010 11:15:30 +0000 (13:15 +0200)]
Add a new problem type for obsoletes
Panu Matilainen [Thu, 18 Mar 2010 10:37:35 +0000 (12:37 +0200)]
Lose deprecated rpmtsFindPubkey()
- unused in rpm since 4.6.0, and even before that this wasn't really useful
outside rpm internals
Panu Matilainen [Thu, 18 Mar 2010 10:34:44 +0000 (12:34 +0200)]
Add some basic dependency check tests to test-suite
Panu Matilainen [Thu, 18 Mar 2010 10:23:38 +0000 (12:23 +0200)]
Differentiate between conflicts in db versus install set
- this appears to have been broken since its introduction in 2002,
commit
d89ce5854d39a9e896759fb96e6e303c67573bb6...
Panu Matilainen [Wed, 17 Mar 2010 06:04:55 +0000 (08:04 +0200)]
Use a switch-case when switch-case is called for
Panu Matilainen [Mon, 15 Mar 2010 10:37:16 +0000 (12:37 +0200)]
Lose ancient and bitrotten rpmdiff scripts (ticket #148)
- More modern tools for diffing rpms exist, ones that use librpm
instead of trying to parse the lowlevel header structures and tags
by themselves. Nobody appears to use these scripts as they've been
dysfunctional since eons ago, might as well drop them off.
Panu Matilainen [Mon, 15 Mar 2010 10:30:02 +0000 (12:30 +0200)]
Lose useless xinetd service stub (ticket #149)
- this never did anything to begin with, and BDB >= 4.8 doesn't support
RPC at all so...
Panu Matilainen [Mon, 15 Mar 2010 10:00:55 +0000 (12:00 +0200)]
Avoid eating empty lines in spec %prep section (RhBug:573339)
- In spec %prep context empty lines don't usually matter but they can
be significant in eg here-documents.
- Fixes regression from commit
94ff22b129aeb31c38848231e40f87aa4a5613a1
Panu Matilainen [Mon, 15 Mar 2010 09:54:55 +0000 (11:54 +0200)]
Add an enhanced argvSplitString() function for splitting strings to argv's
- Returns the newly created argv instead of useless "this always returns 0"
- By default make a "real" split, including empty strings
- Flags argument allows controlling behavior, for now only flag is to
preserve argvSplit() behavior but leaves room for future enhancements
such as quoted splitting etc
Panu Matilainen [Mon, 15 Mar 2010 07:45:49 +0000 (09:45 +0200)]
Tell python about RPMTRANS_FLAG_NOCONTEXTS
Yuri Chornoivan [Sun, 14 Mar 2010 14:56:27 +0000 (14:56 +0000)]
l10n: Updates to Ukrainian (uk) translation
Transmitted-via: Transifex (www.transifex.net)
Panu Matilainen [Sun, 14 Mar 2010 09:21:22 +0000 (11:21 +0200)]
Default to "not found" for rpmtsSolve() + comment behavior
- this fixes the behavior when (as normally is the case) there is no
depsolve callback set
Panu Matilainen [Sun, 14 Mar 2010 09:17:29 +0000 (11:17 +0200)]
Revert "Unbreak conflicts from commit
1f46534b5444dda77e3a2c757f7c88c5ec93dba0"
- This is completely broken and wrong, duh...
- This reverts commit
d91060373663d703457c6e1abf40b495ea372bf2.
Yuri Chornoivan [Sat, 13 Mar 2010 18:26:27 +0000 (18:26 +0000)]
l10n: Updates to Ukrainian (uk) translation
Transmitted-via: Transifex (www.transifex.net)
Panu Matilainen [Sat, 13 Mar 2010 10:32:45 +0000 (12:32 +0200)]
Add Problems() method to python transaction element class
Panu Matilainen [Sat, 13 Mar 2010 10:28:26 +0000 (12:28 +0200)]
Add a helper function for turning rpm problem set into python list
Panu Matilainen [Sat, 13 Mar 2010 07:29:30 +0000 (09:29 +0200)]
Unbreak conflicts from commit
1f46534b5444dda77e3a2c757f7c88c5ec93dba0
- only call solve callback on requires, conflicts have satisfied/unsatisfied
status backwards here
Panu Matilainen [Fri, 12 Mar 2010 18:48:45 +0000 (20:48 +0200)]
Further minor cleanups to rpmtsCheck()
- if we dont care about rpmtsCloseDB() we dont need a variable for its status
- lose unnecessary rpmtsiFree(), there used to be exit jumps from middle
of the loops but not anymore
Panu Matilainen [Fri, 12 Mar 2010 18:46:00 +0000 (20:46 +0200)]
Lose unused iterator + its freeing
Panu Matilainen [Fri, 12 Mar 2010 18:43:02 +0000 (20:43 +0200)]
Remove unnecessary rpmdsSetNoPromote() calls in checkPackageSet()
- rpmdsNew() sets nopromote to the global default already
Panu Matilainen [Fri, 12 Mar 2010 18:40:05 +0000 (20:40 +0200)]
Add internal API for depsolve callback
- rpmts struct is now fully opaque within depends.c
Panu Matilainen [Fri, 12 Mar 2010 17:41:10 +0000 (19:41 +0200)]
Record problems into the transaction elements causing them
- Any problem found in transaction processing is caused, or at least
triggered by, some transaction element. Having the problems in
elements lets API users easily determine which package caused which
problem instead of having to parse problem strings in vain.
- No problem set stored in transaction set itself now, rpmtsProblems() API p
reserved by making it collect problems from our transaction elements
into a new set. The problem set fiddling in rpmtsRun() wrt %pretrans
and all is a bit crazy - always was, now its just more visible...
- Make rpmtsCheck() pass the associated transaction elements into
the lower level functions. rpmdsProblem() removed from API, it's
not particularly useful outside rpmtsCheck() internals.
- rpmts struct is now opaque within depends.c except for solve callback
- This breaks --badreloc, need to figure out something saner for the
problem filtering
Panu Matilainen [Fri, 12 Mar 2010 14:18:16 +0000 (16:18 +0200)]
Add a few API bits for problem sets in transaction elements
- make rpmteProblems() public and refcount the returned sets
- add public rpmteCleanProblems() to destroy the per-element problem sets
- add internal rpmteAddDepProblem() for adding per-element dependency problems
Panu Matilainen [Fri, 12 Mar 2010 14:11:15 +0000 (16:11 +0200)]
Move rpmps typedef into rpmtypes.h, its common enuf
Panu Matilainen [Fri, 12 Mar 2010 12:38:18 +0000 (14:38 +0200)]
Free iterators in the function which initialized them (symmetry is good)
Panu Matilainen [Fri, 12 Mar 2010 12:36:37 +0000 (14:36 +0200)]
Eliminate a bunch of pointless "can't happen" checks
- if these things actually happen, we're probably better of segfaulting...
Panu Matilainen [Fri, 12 Mar 2010 12:27:52 +0000 (14:27 +0200)]
Further cleanup the return code craziness in dependency checks
- any problems found are added to the problem set, none of these
return codes have been used since forever
Panu Matilainen [Fri, 12 Mar 2010 11:53:01 +0000 (13:53 +0200)]
Clean up dependency checking code
- unsatisfiedDepend() only ever returns 0 or 1, lose the hysterical
can't happen switch-cases and other bogus error code checking
- also lose unnecessary and mis-indented NULL-tests,
rpmdsInit() and rpmdsNext() handle NULL cleanly by themselves
Panu Matilainen [Fri, 12 Mar 2010 09:44:47 +0000 (11:44 +0200)]
Move rpmte-specific problem creation to a helper function
Panu Matilainen [Fri, 12 Mar 2010 08:20:25 +0000 (10:20 +0200)]
Split transaction member information out of rpmts to separate struct
- add internal rpmtsMembers() function to get the member structures
- the main rpmts struct is now opaque within order.c, and much closer
to being so for depends.c and transaction.c too
- no functional changes
Panu Matilainen [Fri, 12 Mar 2010 07:01:25 +0000 (09:01 +0200)]
Turn PSM into a complete blackbox
- The psm structures aren't stored or passed around by any users,
so there's no need for them to separately allocate and free the
struct, bury this all inside rpmpsmRun() which takes care of
initialization, actual actions and freeing.
- There's also no need for refcounting now as allocations are completely
contained within the rpmpsmRun() blackbox. Lose psm-debug foo which
was only used for refcount debugging.
- No functional changes
Panu Matilainen [Fri, 12 Mar 2010 06:32:15 +0000 (08:32 +0200)]
Split file state structures + routines out of rpmte to separate sources
- no functional changes
Yuri Chornoivan [Thu, 11 Mar 2010 17:56:24 +0000 (17:56 +0000)]
l10n: Updates to Ukrainian (uk) translation
Transmitted-via: Transifex (www.transifex.net)
Panu Matilainen [Thu, 11 Mar 2010 11:38:52 +0000 (13:38 +0200)]
Not all scriptlets have bodies (eg -p /sbin/ldconfig), dont expand NULLs
Panu Matilainen [Thu, 11 Mar 2010 11:34:17 +0000 (13:34 +0200)]
More dumb thinko/typo/braindamage in scriptlet expansion patches
- qformat certainly shouldn't default to on, duh
Panu Matilainen [Thu, 11 Mar 2010 11:21:20 +0000 (13:21 +0200)]
Dumb segfault on trigger scripts with no flags, doh
Panu Matilainen [Thu, 11 Mar 2010 10:06:49 +0000 (12:06 +0200)]
Support run-time macro and queryformat expansion on scriptlets
- Add per-scriptlet type flag tags to control special behavior.
- Add rpmlib dependency on scriptlet expansion - if a package relies
on scriptlet expansion it cannot be correctly installed with
a version of rpm that doesn't support it.
- Expansion is always an opt-in behavior, enabled with -q and/or -e argument
in spec. We can't just blindly expand even macros as there's no telling
%{} constructs might mean in whatever language is used for the script.
- Queryformat expansion requires great care with strange and ugly escapes
when writing scriptlets, but OTOH it permits access arbitrary header
data at runtime, which has previously been completely impossible.
- The handling of these expansions needs unifying for all scriptlet types,
the trigger scriptlet handling is uuugly. Macro expansion could be
transparently done from rpmScriptRun(), but because of their similar
syntax, macro expansion needs to happen before query format expansion,
and we dont have the header available in rpmScriptrun()
Yuri Chornoivan [Tue, 9 Mar 2010 18:15:02 +0000 (18:15 +0000)]
l10n: Initial Ukrainian translation
Transmitted-via: Transifex (www.transifex.net)
Panu Matilainen [Mon, 8 Mar 2010 13:00:15 +0000 (15:00 +0200)]
Updated Spanish translation (Héctor Daniel Cabrera through Transifex)
Panu Matilainen [Sun, 7 Mar 2010 10:43:25 +0000 (12:43 +0200)]
Updated Polish translation from Piotr Drąg
Panu Matilainen [Sat, 6 Mar 2010 09:34:09 +0000 (11:34 +0200)]
Minor cleanup to PSM_INIT stage, no functional changes
- lose redundant RPMRC_OK assignment + cosmetics
Panu Matilainen [Sat, 6 Mar 2010 09:17:29 +0000 (11:17 +0200)]
Update translations to shed non-existent messages from recent changes
Panu Matilainen [Sat, 6 Mar 2010 09:04:48 +0000 (11:04 +0200)]
Lose a couple of leftover variables from times before headerPutString()
Panu Matilainen [Sat, 6 Mar 2010 09:03:11 +0000 (11:03 +0200)]
Dont bother translators with internal error debug foo
Panu Matilainen [Sat, 6 Mar 2010 09:01:08 +0000 (11:01 +0200)]
rpmdsN() and rpmdsEVR() returning NULL here is a serious can't happen
Panu Matilainen [Mon, 1 Mar 2010 14:32:54 +0000 (16:32 +0200)]
Lose more ancient compatibility retrofit goo
- FILEUIDS, FILEGIDS and DEFAULTPREFIX are all rpm 1.x - 2.x era,
packages we can't even read anymore...
Panu Matilainen [Mon, 1 Mar 2010 14:13:52 +0000 (16:13 +0200)]
Rip out more rpm 2.x era relocation leftovers
- we can't even read packages from that timeframe, much less relocate them
Panu Matilainen [Mon, 1 Mar 2010 13:55:57 +0000 (15:55 +0200)]
Remove now unused inFtw from file lists
Panu Matilainen [Mon, 1 Mar 2010 13:52:46 +0000 (15:52 +0200)]
Lose ancient prefix remnants from build code
- since commit
840599e3d92e29e8e1c1cf7ecf4ad5c37d3bf021 in 1998, nothing
has set RPMTAG_DEFAULTPREFIX meaning fl.prefix is always NULL...
Ville Skyttä [Fri, 26 Feb 2010 17:25:04 +0000 (19:25 +0200)]
Fix rpmfcAttrDeps() for perl modules (was broken in
c03be327).
Ville Skyttä [Thu, 25 Feb 2010 17:51:25 +0000 (19:51 +0200)]
Emit highest versions of perl module deps, not first versioned ones found.
Requires the "version" module installed (perl >= 5.9 or separately), falls
back to the previous "output first versioned one found" behavior if it is
not available.