Instead of doing a recursive call into the src/ directory to build
the object files, hard link the source files into the daemon
directory and build them separately.
See:
http://www.redhat.com/archives/libguestfs/2009-November/msg00254.html
Thanks to Jim Meyering for noticing a typo in the original version.
At the time of writing Gnulib didn't support Win32 for its
fsusage API. Therefore this patch uses GetDiskFreeSpaceEx
if it's available (on Windows) otherwise falls back to using
Gnulib fsusage.
Instead of checking for futimens support and falling back
(incorrectly in one case) to using futimes, use gnulib's
module.
However the gnulib module does not yet support Win32, so
this change is only really useful on platforms like RHEL 5.
Use this program as a convenient way to list the filesystems
available in a disk image or libvirt guest.
Example:
$ virt-list-filesystems /dev/vg_trick/Debian5x64
/dev/debian5x64/home
/dev/debian5x64/root
/dev/debian5x64/tmp
/dev/debian5x64/usr
/dev/debian5x64/var
/dev/sda1
This is designed to make it easier for novices to use guestfish
and guestmount. In particular with guestmount this acts as a way
to get a list of filesystems to use with the '-m' option. ie:
$ virt-list-filesystems unknowndisk.img
/dev/sda1
/dev/sda2
$ guestmount -a unknowndisk.img -m /dev/sda1 /mnt
Because all the tested groups are optional, there's not really
a group we can reliably test, therefore test against the
empty list (which should not fail).
This is a bug in the generator which wasn't being tickled. If
you had a test which expected a StringList or DeviceList parameter,
and you passed "" to that test, then you'd (probably) expect to be
testing an empty list, but in fact you got a single element list
containing an empty string. This fixes it so you get an empty list.
make all in the perl directory was missing a check that the library had been
built.
make check in the perl directory was missing a check that the appliance and test
images had been built.
Previously, only the update.sh rule checked the daemon had been built. update.sh
is called directly from within make.sh, so in that path the dependency was never
checked. This adds the daemon dependency explicitly to the rebuild-from-scratch
path.
The current groups are defined very conservatively using the
following criteria:
(a) Would be impossible to implement on Windows because of
sheer architectural differences (eg: mknod).
(b) Already optional (augeas, inotify).
(c) Not currently optional but not implemented on older RHEL and
Debian releases (ntfs-3g.probe, scrub, zerofree).
The optional groups I've defined according to these criteria are:
. augeas
. inotify
. linuxfsuuid
. linuxmodules
. linuxxattrs
. lvm2
. mknod
. ntfs3g
. scrub
. selinux
. zerofree
(Note that these choices don't prevent us from adding more
optional groups in future. On the other hand to avoid breaking
ABIs we would not wish to change the above groups).
The rest of this large commit is really just implementation:
Each optional function is classified using Optional "group"
flag in the generator.
The daemon has to implement a function
int optgroup_<name>_available (void);
for each optional group. Some of these functions are fixed at
compile time, and some do simple run-time tests.
The do_available implementation in the daemon looks up the correct
function in a table and runs it.
We document the optional groups in the guestfs(3) man page.
Also: I added a NOT_AVAILABLE macro in order to unify all the
existing places where we had a message equivalent to
"function __func__ is not available".
Start a new API allowing groups of functions to be tested for
availability.
There are two reasons for this:
(1) If libguestfs is built with missing dependencies (eg. no Augeas lib)
then the corresponding functions are disabled in the appliance. Up till
now there has been no way to test for this except to speculatively
issue commands and check for errors.
(2) When we port the daemon to Win32 it is likely that major pieces of
functionality won't be available (eg. LVM support). This API gives
a way to test for that.
There is no change for existing clients: you still have to check for
errors from individual API calls.
For new clients, you will be able to test for availability of particular
APIs.
Usage scenario (A): An LVM editing tool which requires
both the LVM API and inotify in order to function at all:
char *apis[] = { "inotify", "lvm2", NULL };
r = guestfs_available (g, apis);
if (r == -1) {
/* print an error and exit */
}
Usage scenario (B): A general purpose tool which optionally provides
configuration file editing, but this can be disabled, the result
merely being reduced functionality:
char *apis[] = { "augeas", NULL };
r = guestfs_available (g, apis);
enable_config_edit_menus = r == 0;