[libvirt] [PATCH 1/4] build: avoid $(srcdir) in *_SOURCES
Michal Privoznik
mprivozn at redhat.com
Tue Sep 10 09:58:41 UTC 2013
On 09.09.2013 17:51, Eric Blake wrote:
> Trying to enable automake's subdir-objects option resulted in
> the creation of literal directories such as src/$(srcdir)/remote/.
> I traced this to the fact that we had used a literal $(srcdir)
> in a location that later fed an automake *_SOURCES variable.
> This has also been reported as an automake bug:
> http://debbugs.gnu.org/cgi/bugreport.cgi?bug=13928
> but it's better to fix our code than to wait for an automake fix.
>
> Some things to remember that affect VPATH builds, and where an
> in-tree build is blissfully unaware of the issues: if a VPATH
> build fails to find a file that was used as a prereq of any
> other target, then the rule for that file will expand $@ to
> prefer the current build dir (bad because a VPATH build on a
> fresh checkout will then stick $@ in the current directory
> instead of the desired srcdir); conversely, if a VPATH build
> finds the file in srcdir but decides it needs to be rebuilt,
> then the rule for that file will expand $@ to include the
> directory where it was found out-of-date (bad for an explicit
> listing of $(srcdir)/$@ because an incremental VPATH build will
> then expand srcdir twice). As we want these files to go into
> srcdir unconditionally, we have to massage or avoid $@ for any
> recipe that involves one of these files.
>
> Therefore, this patch removes all uses of $(srcdir) from any
> generated file name that later feeds a *_SOURCES variable, and
> then rewrites all the recipes to generate those files to
> hard-code their creation into srcdir without the use of $@.
>
> * src/Makefile.am (REMOTE_DRIVER_GENERATED): Drop $(srcdir); VPATH
> builds know how to find the files, and automake subdir-objects
> fails with it in place.
> (LXC_MONITOR_PROTOCOL_GENERATED, (LXC_MONITOR_GENERATED)
> (ACCESS_DRIVER_GENERATED, LOCK_PROTOCOL_GENERATED): Likewise.
> (*_client_bodies.h): Hard-code rules to write into srcdir, as
> VPATH tries to build $@ locally if missing.
> (util/virkeymaps.h): Likewise.
> (lxc/lxc_monitor_dispatch.h): Likewise.
> (access/viraccessapi*): Likewise.
> (locking/lock_daemon_dispatch_stubs.h): Likewise.
> * daemon/Makeflie.am (DAEMON_GENERATED, remote_dispatch.h):
> Likewise.
>
> Signed-off-by: Eric Blake <eblake at redhat.com>
>
> fixup DAEMON_GENERATED
> ---
> daemon/Makefile.am | 23 ++++++-----
> src/Makefile.am | 109 ++++++++++++++++++++++++++++++-----------------------
> 2 files changed, 74 insertions(+), 58 deletions(-)
>
> diff --git a/daemon/Makefile.am b/daemon/Makefile.am
> index 90689f8..e0b8744 100644
> --- a/daemon/Makefile.am
> +++ b/daemon/Makefile.am
> @@ -29,10 +29,10 @@ INCLUDES = \
>
> CLEANFILES =
>
> -DAEMON_GENERATED = \
> - $(srcdir)/remote_dispatch.h \
> - $(srcdir)/lxc_dispatch.h \
> - $(srcdir)/qemu_dispatch.h \
> +DAEMON_GENERATED = \
> + remote_dispatch.h \
> + lxc_dispatch.h \
> + qemu_dispatch.h \
> $(NULL)
>
> DAEMON_SOURCES = \
> @@ -75,20 +75,23 @@ REMOTE_PROTOCOL = $(top_srcdir)/src/remote/remote_protocol.x
> LXC_PROTOCOL = $(top_srcdir)/src/remote/lxc_protocol.x
> QEMU_PROTOCOL = $(top_srcdir)/src/remote/qemu_protocol.x
>
> -$(srcdir)/remote_dispatch.h: $(srcdir)/../src/rpc/gendispatch.pl \
> +remote_dispatch.h: $(srcdir)/../src/rpc/gendispatch.pl \
> $(REMOTE_PROTOCOL)
> $(AM_V_GEN)$(PERL) -w $(srcdir)/../src/rpc/gendispatch.pl \
> - --mode=server remote REMOTE $(REMOTE_PROTOCOL) > $@
> + --mode=server remote REMOTE $(REMOTE_PROTOCOL) \
> + > $(srcdir)/remote_dispatch.h
The other option is to have this line as:
> $(srcdir)/$@
But this version is okay as is. ACK.
Michal
More information about the libvir-list
mailing list