On 03/24/2014 02:54 PM, Eric Blake wrote:
On 03/23/2014 02:22 AM, Nehal J Wani wrote:
> When libvirtd is run from a build directory without being installed, it
> should not depend on files from a libvirt package installed in the
> system. Currently, APIs defined in src/ don't know whether libvirtd
> is being run from the build dir or the installed dir. The following
> additions provide the functionality to do so:
>
> src/util/virutil.c
> *virSetUninstalledDir
> *virGetUninstalledDir
>
> Example usage (utility = lxc|iohelper):
> char *path_tmp = virGetUninstalledDir();
> if (path_tmp)
> /* do stuff with ("%s/../../src/libvirt_<utility>", path_tmp)
*/
> else
> /* do stuff with (LIBEXECDIR "/libvirt_<utility>") */
>
Hmm - we already have virFDStreamSetIOHelper() for overriding the
location of libvirt_iohelper, but I like your approach as something a
bit more generic. Do we really need both mechanisms, or should your
series include a followup patch to nuke virFDStreamSetIOHelper() and
instead teach the testsuite to use your new functions (that is,
testutils.c should probably call virSetUninstalledDir).
A bit more to help others not following the IRC conversation. As it is,
virFDStreamSetIOHelper() is not as useful as it could be. Observe this
'git grep' result:
./src/lxc/lxc_conf.c:95:
LIBEXECDIR "/libvirt_lxc",
./src/lxc/lxc_conf.c:114:
LIBEXECDIR "/libvirt_lxc",
./src/fdstream.c:81:static const char *iohelper_path = LIBEXECDIR
"/libvirt_iohelper";
./src/fdstream.c:86: iohelper_path = LIBEXECDIR
"/libvirt_iohelper";
./src/util/virfile.c:239: ret->cmd =
virCommandNewArgList(LIBEXECDIR "/libvirt_iohelper",
./src/storage/storage_backend_disk.c:43:#define PARTHELPER
LIBEXECDIR "/libvirt_parthelper"
Note that the testsuite knows how to run uninstalled libvirt_iohelper
when testing fdstream.c directly, but also note that virfile.c uses
libvirt_iohelper but never uses its overridden location - our existing
override is only half-baked. And even though we have the override hook
for iohelper, daemon/libvirt.c main() is not taking advantage of the
hook - which means if you build libvirt.git on a system where libvirt is
not installed, and try to use ./run to test your just-built binary, it
will fail anywhere it tries to use libvirt_iohelper (because it will be
trying to use the installed location, instead of the just-built in-tree
location). So I'm definitely in favor of this patch, but think it needs
more patches in the series before it is ready to push.
Series is incomplete. It's not worth adding the new function unless you
also have followup patches that use the new function.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org