On 08/09/09 11:39, Richard W.M. Jones wrote:
Re:
https://bugzilla.redhat.com/show_bug.cgi?id=521674
Perl modules are unversioned, but should carry version numbers
Currently perl RPM deps are unversioned. Apparently if we add a
version number into the perl module(s) then we can fix that, eg:
our $VERSION = "1.0.68";
This would allow Perl users to specify the version either through an
RPM dependency or in code like this:
use Sys::Guestfs 1.0.68;
The file in question (perl/lib/Sys/Guestfs.pm) is generated. Up to
this point I have resisted putting the version number into any
generated files. One reason is that it's unnecessary churn for those
files. Another is that we shouldn't encourage users to depend on
specific versions (instead, they should test for required features).
Another is that the version of Sys::Guestfs doesn't really tell you
what is available in the dynamically-loaded libguestfs.so, nor in the
daemon/appliance.
Worked example:
Your program needs $g->zerofree.
(1) May or may not exist in the Perl library.
(2) May or may not exist in the C API (libguestfs.so).
(3) May or may not exist in the daemon (stubs.c:zerofree_stub)
(4) May or may not have been added to the appliance (/usr/bin/zerofree)
Since so much can potentially go wrong, I think the only realistic
solution is along these lines:
eval { $g->zerofree(...) }; die "zerofree failed: $@" if $@;
Do other languages offer equivalent runtime detection? [OCaml - no]
How do we ensure in RPM/dpkg that a consistent set of packages are
installed? RPM only "knows" version numbers, unless we export lots of
fine-grained dependencies. So far the solution has been to depend on
the C library, like:
Requires: libguestfs>= 1.0.68
Rich.
I agree that feature tests are required in code. However, I think there
are other things to consider:
1. The above argument only applies to the libguestfs API and its
language bindings. This doesn't quite cover everything e.g.
Sys::Guestfs::Lib.
2. While a version number doesn't guarantee the presence of a feature,
it can guarantee the absence of a feature. So it's still meaningful to
say that my program requires version x.y.z, although it may also require
other things.
3. When faced with a program not working because feature X is absent, it
would be help to know if you need to upgrade to a new libguestfs, or fix
the one you've got.
Matt
--
Matthew Booth, RHCA, RHCSS
Red Hat Engineering, Virtualisation Team
M: +44 (0)7977 267231
GPG ID: D33C3490
GPG FPR: 3733 612D 2D05 5458 8A8A 1600 3441 EA19 D33C 3490