[Libguestfs] [libnbd] Some IRC questions

Richard W.M. Jones rjones at redhat.com
Sun Jun 2 10:14:58 UTC 2019


01:58 < eblake_> it would be nice if libnbd had a way to query if nbd support were compiled in
01:58 < eblake_> whether a constant we set in the .h file, or a runtime function
01:58 < eblake_> it would also be nice if libnbd.h declared a macro LIBNBD_VERSION
01:59 < eblake_> although my OCaml skills are too weak to figure out how to reflect something from configure.ac into the generator output

A constant defined by the generator is possible like this (but not
necessarily a good idea, see below).

(1) Create a file called something like generator/config.ml.in which
contains:

  let package = "@PACKAGE_NAME@"
  let version = "@PACKAGE_VERSION@"
  let has_libxml2 = "@HAS_LIBXML2@" = "1"

For an example see:
https://github.com/libguestfs/supermin/blob/master/src/config.ml.in

(2) Generate config.ml using configure.

(3) Use AC_SUBST etc as appropriate.

(4) In generator/generator, add near the top:

  #mod_use "config.ml"

(5) The variables can be used from the OCaml code as Config.version, etc.

However I don't think this isn't a good idea.  One problem is that you
end up with the version of the library that your program compiled
against, not the version it is linked against (and similarly for other
features like URI support).  So as you say above a runtime function
is better, which can be added as an ordinary API.

This is what we did in libguestfs:

http://libguestfs.org/guestfs.3.html#guestfs_version
http://libguestfs.org/guestfs.3.html#guestfs_feature_available

02:00 < eblake_> ^ make that if libxml2 support for uri parsing were compiled in
02:01 < eblake_> and the spec file needs an update: libnbd-0.1.2-1.fc29.x86_64 gives:
02:01 < eblake_> nbdkit: error: failure while creating nbd handle: nbd_connect_uri: libnbd was compiled without libxml2 support, so we do not support NBD URI: 
                 Operation not supported

This is fixed now in the Fedora libnbd-0.1.2-2 packages.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
libguestfs lets you edit virtual machines.  Supports shell scripting,
bindings from many languages.  http://libguestfs.org




More information about the Libguestfs mailing list