On 03/21/2014 12:12 AM, Nehal J Wani wrote:
>> @@ -1120,6 +1135,10 @@
networkBuildDhcpDaemonCommandLine(virNetworkObjPtr network,
>>
>> cmd = virCommandNew(dnsmasqCapsGetBinaryPath(caps));
>> virCommandAddArgFormat(cmd, "--conf-file=%s", configfile);
>> +
>> + /* This helper is used to create custom leases file for libvirt */
>> + virCommandAddArgFormat(cmd, "--dhcp-script=%s", LIBEXECDIR
"/libvirt_leaseshelper");
>
> This is a bit hard-coded, and won't play nicely with ./run. Ideally, we
> should be constructing the name so that if argv[0] is an uninstalled
> in-tree binary, then we convert to a name relative to the build tree
> instead of LIBEXECDIR; that way, when using ./run, we test the
> just-built libvirt_leaseshelper instead of a pre-installed version.
I'm not very clear about how to go about this. I understand that we
want some magic to be set by ./run so that it understands where to
pick the binary from, (I always have to build libvirt with
--libexecdir=$PWD/src, since I never run make install) but what exact
changes do I have to make here? Could you please give an example?
Do NOT use --libexecdir=$PWD/src - that is a sure recipe for a broken
setup. --libexecdir should only ever point to the location where you
plan to install things, but you do NOT plan to install into your build tree.
An example for setting build-relative paths can be seen in commit
e562e82. In fact, look at daemon/libvirtd.c: it specifically checks for
argv[0] starting with lt-libvirtd or .libs/libvirtd, both of which are
evidence of an in-tree build. In those cases, it resets several
variables naming directories to be a build-relative file name; in all
other cases, the variables default to their install-relative name. The
idea is that you do not directly want to do virCommandAddArgFormat(...
LIBEXECDIR "/libvirt_leaseshelper"), but instead want to do:
char *leaseshelper;
if (test for in-tree binary)
VIR_STRDUP(leaseshelper,
"../rel/to/build-tree/libvirt_leaseshelper");
else
VIR_STRDUP(leaseshelper, LIBEXECDIR "/libvirt_leaseshelper");
virCommandAddArgFormat(..., leaseshelper);
(some hand-waving there, but hopefully enough to get the point across)
>> + } else {
>> + printf(_("Usage: %s ACTION MAC|CLIENTID IP HOSTNAME\n"
>> + " or: %s ACTION MAC|CLIENTID IP\n"),
>
> Could be compressed to one line as "%s ACTION MAC|CLIENTID IP
> [HOSTNAME]". Maybe worth listing the set of valid ACTION verbs.
Should I change this to:
printf(_("Usage: %s ACTION MAC|CLIENTID IP [HOSTNAME]\n")
and then display the meaning of 'ACTION' or simply do:
printf(_("Usage: %s add|old|del mac|clientid ip [hostname]\n")
The latter works fine for me. Or even two lines:
"Usage: %s add|old|del mac|clientid ip [hostname]\n"
"Designed for use with 'dnsmasq --dhcp-script\n"
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org