There's a pragmatic subset which can be dealt with. Once again, look
to Debian. They've defined a number of virtual "provides" tags. For
example, exim provides a "mail-transport-agent". mutt can then
depend on a "mail-transport-agent". Its up to the toolchain to
figure out if that dependency has been resolved.
Task:: was created for exactly this reason, inspired by debian's
task-foo packages.
How would a system without a package manager determine the installed
version of perl? python? ruby? postgres? It would likely run some
command for each package, where "some command" means possibly applying
regexps to the output of `$foo --version`.
I added a fairly naive first pass approach in Module::Install with the
command...
requires_external_bin('cvs');
This does a simple "which" check to see if any version of that software
is available at the default command name within the path.
It does not propogate to META.yml, and I'm not sure I can see how it
could sanely.
Does the META.yml need to
contain those commands and regexps or do the tools need a-priori
knowledge of how to get version numbers for *every* possibly
dependency?
Nope, META.yml is for Perl, in my opinion :)
Adam K