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
Attachment:
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list