This change adds an explicit dependency on generator.ml for every file it
generates, except java files. Java is left for another time because it's
considerably trickier.
It also adds a build rule for src/libguestfs.la so it can be rebuilt as required
from other directories.
It does this by creating a top level make file, subdir-rules.mk, which can be
included from sub-directories. sub-directories need to define 'generator_built'
to include local files which are built by generator.ml, and they will be updated
automatically.
This fixes parallel make, and will automatically re-create generated files when
make is run from any directory.
It also fixes the problem which efad4f53 was targetting. Specifically,
src/guestfs_protocol.(c|h) had an erroneous dependency on stamp-generator, and
therefore generator.ml, despite not being directly created by it. This caused
them to be recreated every time generator.ml ran rather than only when
src/guestfs_protocol.x was updated, which cascaded into a daemon and therefore
appliance update.
This patch also changes the contents of the distribution tarball by including
files created by rpcgen.
---
Makefile.am | 12 ++++++++-
appliance/Makefile.am | 2 +
capitests/Makefile.am | 9 +++++-
daemon/Makefile.am | 26 +++++++++++++++++----
examples/Makefile.am | 2 +
fish/Makefile.am | 21 ++++++++++------
fuse/Makefile.am | 2 +
haskell/Makefile.am | 12 +++++++++-
images/Makefile.am | 2 +
inspector/Makefile.am | 2 +
java/Makefile.am | 10 ++++++++
ocaml/Makefile.am | 13 ++++++++--
perl/Makefile.am | 13 +++++++---
python/Makefile.am | 11 ++++++--
regressions/Makefile.am | 2 +
ruby/Makefile.am | 11 ++++++--
src/Makefile.am | 35 +++++++++++++++-------------
ruby/Makefile.am => subdir-rules.mk | 42 +++++++++-------------------------
test-tool/Makefile.am | 2 +
tools/Makefile.am | 2 +
20 files changed, 153 insertions(+), 78 deletions(-)
copy ruby/Makefile.am => subdir-rules.mk (56%)
diff --git a/Makefile.am b/Makefile.am
index 87efb2d..9332a10 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -15,6 +15,8 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+include $(top_srcdir)/subdir-rules.mk
+
ACLOCAL_AMFLAGS = -I m4
SUBDIRS = gnulib/lib hivex src daemon appliance fish po examples images \
@@ -54,9 +56,15 @@ if HAVE_HASKELL
SUBDIRS += haskell
endif
+generator_built = \
+ guestfs-structs.pod \
+ guestfs-actions.pod \
+ guestfish-actions.pod
+
EXTRA_DIST = \
- guestfs.pod guestfs-actions.pod guestfs-structs.pod \
- guestfish.pod guestfish-actions.pod \
+ $(generator_built) \
+ guestfs.pod \
+ guestfish.pod \
html/pod.css \
HACKING TODO \
libguestfs.pc libguestfs.pc.in \
diff --git a/appliance/Makefile.am b/appliance/Makefile.am
index b9bf953..bf1183d 100644
--- a/appliance/Makefile.am
+++ b/appliance/Makefile.am
@@ -15,6 +15,8 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+include $(top_srcdir)/subdir-rules.mk
+
EXTRA_DIST = \
libguestfs-supermin-helper \
kmod.whitelist.in \
diff --git a/capitests/Makefile.am b/capitests/Makefile.am
index 3b80c0e..74bfab0 100644
--- a/capitests/Makefile.am
+++ b/capitests/Makefile.am
@@ -15,8 +15,13 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-EXTRA_DIST = \
- tests.c
+include $(top_srcdir)/subdir-rules.mk
+
+generator_built = tests.c
+
+BUILT_SOURCES = $(generator_built)
+
+EXTRA_DIST = $(BUILT_SOURCES)
# Tests. These are auto-generated from the test descriptions
# in the generator.
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index d049da6..1716c2f 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -19,6 +19,25 @@ ACLOCAL_AMFLAGS = -I m4
SUBDIRS = lib tests .
+libsrcdir = $(top_builddir)/../src
+
+generator_built = \
+ actions.h \
+ stubs.c \
+ names.c
+
+.PHONY: force
+
+$(generator_built): force
+ $(MAKE) -C $(libsrcdir) stamp-generator
+
+BUILT_SOURCES = $(generator_built)
+
+EXTRA_DIST = $(BUILT_SOURCES)
+
+$(libsrcdir)/guestfs_protocol.o: force
+ $(MAKE) -C $(libsrcdir) guestfs_protocol.o
+
noinst_PROGRAMS = guestfsd
guestfsd_SOURCES = \
actions.h \
@@ -83,11 +102,8 @@ guestfsd_SOURCES = \
wc.c \
xattr.c \
zero.c \
- zerofree.c \
- $(top_builddir)/../src/guestfs_protocol.h \
- $(top_builddir)/../src/guestfs_protocol.c
+ zerofree.c
+guestfsd_LDADD = $(libsrcdir)/guestfs_protocol.o lib/libgnu.a
AM_CPPFLAGS = -I$(srcdir)/lib -Ilib
guestfsd_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
-
-LDADD = lib/libgnu.a
diff --git a/examples/Makefile.am b/examples/Makefile.am
index adbb934..04bbe5e 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -1,5 +1,7 @@
# libguestfs examples
+include $(top_srcdir)/subdir-rules.mk
+
noinst_PROGRAMS = hello to-xml
hello_SOURCES = hello.c
diff --git a/fish/Makefile.am b/fish/Makefile.am
index c8ba3ea..795952a 100644
--- a/fish/Makefile.am
+++ b/fish/Makefile.am
@@ -15,17 +15,26 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+include $(top_srcdir)/subdir-rules.mk
+
bin_PROGRAMS = guestfish
+generator_built = \
+ cmds.c \
+ completion.c
+
+BUILT_SOURCES = \
+ $(generator_built) \
+ rc_protocol.h \
+ rc_protocol.c
+
EXTRA_DIST = \
+ $(BUILT_SOURCES) \
rc_protocol.x
-CLEANFILES = rc_protocol.c rc_protocol.h
-
guestfish_SOURCES = \
+ $(generator_built) \
alloc.c \
- cmds.c \
- completion.c \
destpaths.c \
echo.c \
edit.c \
@@ -44,10 +53,6 @@ guestfish_SOURCES = \
librc_protocol_la_SOURCES = rc_protocol.c
librc_protocol_la_CFLAGS = -Wall -Wno-unused
-BUILT_SOURCES = \
- rc_protocol.c \
- rc_protocol.h
-
guestfish_CFLAGS = \
-I$(top_srcdir)/src -I$(top_builddir)/src \
-I$(top_srcdir)/fish -I$(top_builddir)/fish \
diff --git a/fuse/Makefile.am b/fuse/Makefile.am
index d582c65..5ffdb95 100644
--- a/fuse/Makefile.am
+++ b/fuse/Makefile.am
@@ -15,6 +15,8 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+include $(top_srcdir)/subdir-rules.mk
+
EXTRA_DIST = guestmount.pod test-fuse.sh
if HAVE_FUSE
diff --git a/haskell/Makefile.am b/haskell/Makefile.am
index dcaf18a..1836a14 100644
--- a/haskell/Makefile.am
+++ b/haskell/Makefile.am
@@ -15,7 +15,15 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-EXTRA_DIST = *.hs run-bindtests
+include $(top_srcdir)/subdir-rules.mk
+
+generator_built = \
+ Guestfs.hs \
+ Bindtests.hs
+
+# $(generator_built) isn't redundant below as the wildcard rule won't match, and
+# therefore won't generate, the files if they haven't been created yet
+EXTRA_DIST = $(generator_built) *.hs run-bindtests
CLEANFILES = *~
@@ -32,6 +40,8 @@ check_DATA = Bindtests
GHCFLAGS = -I$(top_builddir)/src -L$(top_builddir)/src/.libs
+all: Bindtests Guestfs005Load Guestfs010Launch Guestfs050LVCreate
+
Bindtests: Bindtests.hs Guestfs.hs
$(GHC) $(GHCFLAGS) -main-is $(shell basename $@) --make -o $@ $< -lguestfs
diff --git a/images/Makefile.am b/images/Makefile.am
index ff6bc5d..c30d8c4 100644
--- a/images/Makefile.am
+++ b/images/Makefile.am
@@ -15,6 +15,8 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+include $(top_srcdir)/subdir-rules.mk
+
# Old RHEL 5 autoconf doesn't have builddir.
builddir ?= $(top_builddir)/images
diff --git a/inspector/Makefile.am b/inspector/Makefile.am
index 058e565..0878725 100644
--- a/inspector/Makefile.am
+++ b/inspector/Makefile.am
@@ -15,6 +15,8 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+include $(top_srcdir)/subdir-rules.mk
+
EXTRA_DIST = \
run-inspector-locally \
virt-inspector \
diff --git a/java/Makefile.am b/java/Makefile.am
index 6ddf8b4..abd11ee 100644
--- a/java/Makefile.am
+++ b/java/Makefile.am
@@ -15,9 +15,19 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+include $(top_srcdir)/subdir-rules.mk
+
# Old RHEL 5 autoconf doesn't have builddir.
builddir ?= $(top_builddir)/java
+# XXX: Need to fix generator.ml dependencies
+#
+# Files generated by generator.ml:
+# Makefile.inc
+# All files listed in Makefile.inc
+# com_redhat_et_libguestfs_GuestFS.c
+# Bindtests.java
+
java_prefix = com/redhat/et/libguestfs
# Pull in automatically generated built sources
diff --git a/ocaml/Makefile.am b/ocaml/Makefile.am
index bb7407a..5b51497 100644
--- a/ocaml/Makefile.am
+++ b/ocaml/Makefile.am
@@ -15,12 +15,19 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+include $(top_srcdir)/subdir-rules.mk
+
+generator_built = \
+ guestfs.mli \
+ guestfs.ml \
+ guestfs_c_actions.c \
+ bindtests.ml
+
EXTRA_DIST = \
- guestfs.mli guestfs.ml \
- guestfs_c.c guestfs_c.h guestfs_c_actions.c \
+ $(generator_built) \
+ guestfs_c.c guestfs_c.h \
guestfs_inspector.mli guestfs_inspector.ml \
.depend META.in \
- bindtests.ml \
run-bindtests \
t/*.ml
diff --git a/perl/Makefile.am b/perl/Makefile.am
index 4b7ed99..b766244 100644
--- a/perl/Makefile.am
+++ b/perl/Makefile.am
@@ -15,17 +15,22 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+include $(top_srcdir)/subdir-rules.mk
+
+generator_built = \
+ Guestfs.xs \
+ lib/Sys/Guestfs.pm \
+ bindtests.pl
+
EXTRA_DIST = \
+ $(generator_built) \
Makefile.PL.in \
- Guestfs.xs \
examples/README \
examples/LICENSE \
examples/*.pl \
- lib/Sys/Guestfs.pm \
lib/Sys/Guestfs/Lib.pm \
run-bindtests \
run-perl-tests \
- bindtests.pl \
t/*.t \
typemap
@@ -42,7 +47,7 @@ TESTS_ENVIRONMENT = \
INSTALLDIRS = site
-all: Makefile-pl
+all: Makefile-pl $(generator_built)
$(MAKE) -f Makefile-pl
Makefile-pl: Makefile.PL
diff --git a/python/Makefile.am b/python/Makefile.am
index da52cfa..519bda7 100644
--- a/python/Makefile.am
+++ b/python/Makefile.am
@@ -18,10 +18,15 @@
# Old RHEL 5 autoconf doesn't have builddir.
builddir ?= $(top_builddir)/python
-EXTRA_DIST = \
- guestfs.py \
+include $(top_srcdir)/subdir-rules.mk
+
+generator_built = \
guestfs-py.c \
- bindtests.py \
+ guestfs.py \
+ bindtests.py
+
+EXTRA_DIST = \
+ $(generator_built) \
run-bindtests \
run-python-tests \
t/*.py
diff --git a/regressions/Makefile.am b/regressions/Makefile.am
index 058b60d..7ceb0ce 100644
--- a/regressions/Makefile.am
+++ b/regressions/Makefile.am
@@ -21,6 +21,8 @@
#
# See also capitests/
+include $(top_srcdir)/subdir-rules.mk
+
TESTS = \
rhbz503169c10.sh \
rhbz503169c13.sh \
diff --git a/ruby/Makefile.am b/ruby/Makefile.am
index 7ea0107..82d130d 100644
--- a/ruby/Makefile.am
+++ b/ruby/Makefile.am
@@ -15,14 +15,19 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+include $(top_srcdir)/subdir-rules.mk
+
+generator_built = \
+ ext/guestfs/_guestfs.c \
+ bindtests.rb
+
EXTRA_DIST = \
+ $(generator_built) \
Rakefile.in \
- ext/guestfs/_guestfs.c \
ext/guestfs/extconf.rb \
lib/guestfs.rb \
run-bindtests \
run-ruby-tests \
- bindtests.rb \
tests/tc_*.rb
CLEANFILES = \
@@ -43,7 +48,7 @@ TESTS_ENVIRONMENT = \
LD_LIBRARY_PATH=$(top_builddir)/src/.libs \
LIBGUESTFS_PATH=$(top_builddir)/appliance
-all:
+all: $(generator_built)
rake build
endif
diff --git a/src/Makefile.am b/src/Makefile.am
index 2774ffc..f3abe35 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -15,12 +15,28 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-EXTRA_DIST = \
+include $(top_srcdir)/subdir-rules.mk
+
+generator_built = \
guestfs_protocol.x \
+ guestfs-structs.h \
+ guestfs-actions.h \
+ guestfs-internal-actions.h \
+ guestfs-actions.c \
+ guestfs-bindtests.c
+
+$(generator_built): stamp-generator
+
+BUILT_SOURCES = \
+ $(generator_built) \
+ guestfs_protocol.c \
+ guestfs_protocol.h
+
+EXTRA_DIST = \
+ $(BUILT_SOURCES) \
MAX_PROC_NR \
stamp-generator \
- generator.ml \
- guestfs-internal-actions.h
+ generator.ml
# Rerun the generator if it has changed.
# Git removes empty directories, so in cases where the
@@ -34,21 +50,10 @@ stamp-generator: generator.ml
mkdir -p $(top_srcdir)/java/com/redhat/et/libguestfs
cd $(top_srcdir) && ocaml -warn-error A src/generator.ml
-$(BUILT_SOURCES): stamp-generator
-
include_HEADERS = guestfs.h guestfs-actions.h guestfs-structs.h
lib_LTLIBRARIES = libguestfs.la
-BUILT_SOURCES = \
- guestfs_protocol.x \
- guestfs_protocol.c \
- guestfs_protocol.h \
- guestfs-structs.h \
- guestfs-actions.h \
- guestfs-actions.c \
- guestfs-bindtests.c
-
# This convenience library is solely to avoid compiler warnings
# in its generated sources.
libprotocol_la_SOURCES = \
@@ -57,8 +62,6 @@ libprotocol_la_SOURCES = \
libprotocol_la_CFLAGS =
-CLEANFILES = guestfs_protocol.c guestfs_protocol.h
-
# From the libtool info file, with comments:
#
# | 1. Start with version information of `0:0:0' for each libtool library.
diff --git a/ruby/Makefile.am b/subdir-rules.mk
similarity index 56%
copy from ruby/Makefile.am
copy to subdir-rules.mk
index 7ea0107..fd8bfef 100644
--- a/ruby/Makefile.am
+++ b/subdir-rules.mk
@@ -1,4 +1,4 @@
-# libguestfs Ruby bindings
+# libguestfs
# Copyright (C) 2009 Red Hat Inc.
#
# This program is free software; you can redistribute it and/or modify
@@ -15,35 +15,15 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-EXTRA_DIST = \
- Rakefile.in \
- ext/guestfs/_guestfs.c \
- ext/guestfs/extconf.rb \
- lib/guestfs.rb \
- run-bindtests \
- run-ruby-tests \
- bindtests.rb \
- tests/tc_*.rb
+# Define a force dependency which will always be rebuilt
+.PHONY: force
-CLEANFILES = \
- lib/*~ \
- tests/*~ \
- ext/guestfs/*~ \
- ext/guestfs/extconf.h \
- ext/guestfs/_guestfs.o \
- ext/guestfs/_guestfs.so \
- ext/guestfs/mkmf.log \
- ext/guestfs/Makefile
+# Rebuild rules for common dependencies
+$(top_builddir)/src/libguestfs.la: force
+ $(MAKE) -C $(top_builddir)/src libguestfs.la
-if HAVE_RUBY
-
-TESTS = run-bindtests run-ruby-tests
-
-TESTS_ENVIRONMENT = \
- LD_LIBRARY_PATH=$(top_builddir)/src/.libs \
- LIBGUESTFS_PATH=$(top_builddir)/appliance
-
-all:
- rake build
-
-endif
+# Automatically build targets defined in generator_built
+# generator_built is defined in individual Makefiles
+$(generator_built): $(top_builddir)/src/stamp-generator
+$(top_builddir)/src/stamp-generator: force
+ $(MAKE) -C $(top_builddir)/src stamp-generator
diff --git a/test-tool/Makefile.am b/test-tool/Makefile.am
index 510a42f..d58f137 100644
--- a/test-tool/Makefile.am
+++ b/test-tool/Makefile.am
@@ -15,6 +15,8 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+include $(top_srcdir)/subdir-rules.mk
+
EXTRA_DIST = libguestfs-test-tool.pod
CLEANFILES =
diff --git a/tools/Makefile.am b/tools/Makefile.am
index f48edae..3055ab7 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -15,6 +15,8 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+include $(top_srcdir)/subdir-rules.mk
+
tools = cat df edit ls rescue tar win-reg
EXTRA_DIST = \
--
1.6.5.2