From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: anthony@codemonkey.ws
Subject: [Qemu-devel] [PATCH v3 03/29] build: add rules for nesting
Date: Thu, 7 Jun 2012 09:39:48 +0200 [thread overview]
Message-ID: <1339054814-20939-4-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1339054814-20939-1-git-send-email-pbonzini@redhat.com>
This adds the 'magic' rules that take care of subdirectories.
The subdirectory makefiles in the source tree are not complete; they
only define some variables (listed in nested-vars) according to the
configuration.
The magic rules descend into subdirectory makefiles and gather the
evaluated values of those variables. The values from all subdirectories
are joined together, each prefixed with the subdirectory name, and used
by the "real" makefiles.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
rules.mak | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/rules.mak b/rules.mak
index efef6f2..f65283c 100644
--- a/rules.mak
+++ b/rules.mak
@@ -73,3 +73,42 @@ TRACETOOL=$(PYTHON) $(SRC_PATH)/scripts/tracetool.py
# will delete the target of a rule if commands exit with a nonzero exit status
.DELETE_ON_ERROR:
+
+# magic to descend into other directories
+
+obj := .
+old-nested-dirs :=
+
+define push-var
+$(eval save-$2-$1 = $(value $1))
+$(eval $1 :=)
+endef
+
+define pop-var
+$(eval subdir-$2-$1 := $(if $(filter $2,$(save-$2-$1)),$(addprefix $2,$($1))))
+$(eval $1 = $(value save-$2-$1) $$(subdir-$2-$1))
+$(eval save-$2-$1 :=)
+endef
+
+define unnest-dir
+$(foreach var,$(nested-vars),$(call push-var,$(var),$1/))
+$(eval obj := $(obj)/$1)
+$(eval include $(SRC_PATH)/$1/Makefile.objs)
+$(eval obj := $(patsubst %/$1,%,$(obj)))
+$(foreach var,$(nested-vars),$(call pop-var,$(var),$1/))
+endef
+
+define unnest-vars-1
+$(eval nested-dirs := $(filter-out \
+ $(old-nested-dirs), \
+ $(sort $(foreach var,$(nested-vars), $(filter %/, $($(var)))))))
+$(if $(nested-dirs),
+ $(foreach dir,$(nested-dirs),$(call unnest-dir,$(patsubst %/,%,$(dir))))
+ $(eval old-nested-dirs := $(old-nested-dirs) $(nested-dirs))
+ $(call unnest-vars-1))
+endef
+
+define unnest-vars
+$(call unnest-vars-1)
+$(foreach var,$(nested-vars),$(eval $(var) := $(filter-out %/, $($(var)))))
+endef
--
1.7.10.1
next prev parent reply other threads:[~2012-06-07 7:40 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-07 7:39 [Qemu-devel] [PULL v3 00/29] per-directory Makefile.objs snippets, limit vpath (ab)use Paolo Bonzini
2012-06-07 7:39 ` [Qemu-devel] [PATCH v3 01/29] build: remove trace-nested-y Paolo Bonzini
2012-06-07 7:39 ` [Qemu-devel] [PATCH v3 02/29] build: do not sprinkle around GENERATED_HEADERS dependencies Paolo Bonzini
2012-06-07 7:39 ` Paolo Bonzini [this message]
2012-06-07 7:39 ` [Qemu-devel] [PATCH v3 04/29] build: move *-user/ objects to nested Makefile.objs Paolo Bonzini
2012-06-07 7:39 ` [Qemu-devel] [PATCH v3 05/29] build: move obj-TARGET-y variables " Paolo Bonzini
2012-06-07 7:39 ` [Qemu-devel] [PATCH v3 06/29] build: move libobj-y variable " Paolo Bonzini
2012-06-07 21:10 ` Blue Swirl
2012-06-07 23:18 ` Paolo Bonzini
2012-06-08 8:03 ` Andreas Färber
2012-06-07 7:39 ` [Qemu-devel] [PATCH v3 07/29] dump: do not compile dump.o for user-mode emulation Paolo Bonzini
2012-06-07 7:39 ` [Qemu-devel] [PATCH v3 08/29] dump: change cpu_get_note_size to return ssize_t Paolo Bonzini
2012-06-11 1:52 ` Wen Congyang
2012-06-07 7:39 ` [Qemu-devel] [PATCH v3 09/29] dump: remove dumping stuff from cpu-all.h Paolo Bonzini
2012-06-07 7:39 ` [Qemu-devel] [PATCH v3 10/29] build: move other target-*/ objects to nested Makefile.objs Paolo Bonzini
2012-06-07 7:39 ` [Qemu-devel] [PATCH v3 11/29] build: move rules for nesting to Makefile.objs Paolo Bonzini
2012-06-07 7:39 ` [Qemu-devel] [PATCH v3 12/29] build: adapt qom/Makefile and move it " Paolo Bonzini
2012-06-07 7:39 ` [Qemu-devel] [PATCH v3 13/29] build: move block/ objects to nested Makefile.objs Paolo Bonzini
2012-06-07 7:39 ` [Qemu-devel] [PATCH v3 14/29] build: move net/ " Paolo Bonzini
2012-06-07 7:40 ` [Qemu-devel] [PATCH v3 15/29] build: move fsdev/ " Paolo Bonzini
2012-06-07 7:40 ` [Qemu-devel] [PATCH v3 16/29] build: move ui/ " Paolo Bonzini
2012-06-07 7:40 ` [Qemu-devel] [PATCH v3 17/29] build: move audio/ " Paolo Bonzini
2012-06-07 7:40 ` [Qemu-devel] [PATCH v3 18/29] build: move slirp/ " Paolo Bonzini
2012-06-07 7:40 ` [Qemu-devel] [PATCH v3 19/29] build: move qapi/ " Paolo Bonzini
2012-06-07 7:40 ` [Qemu-devel] [PATCH v3 20/29] build: move qga/ " Paolo Bonzini
2012-06-07 7:40 ` [Qemu-devel] [PATCH v3 21/29] build: move target-independent hw/ " Paolo Bonzini
2012-06-07 7:40 ` [Qemu-devel] [PATCH v3 22/29] build: convert libhw " Paolo Bonzini
2012-06-07 7:40 ` [Qemu-devel] [PATCH v3 23/29] build: move per-target hw/ objects " Paolo Bonzini
2012-06-07 7:40 ` [Qemu-devel] [PATCH v3 24/29] build: move device tree to per-target Makefile.objs Paolo Bonzini
2012-06-07 7:40 ` [Qemu-devel] [PATCH v3 25/29] build: libcacard Makefile cleanups Paolo Bonzini
2012-06-07 7:40 ` [Qemu-devel] [PATCH v3 26/29] build: limit usage of vpath Paolo Bonzini
2012-06-07 7:40 ` [Qemu-devel] [PATCH v3 27/29] build: compile oslib-obj-y once Paolo Bonzini
2012-06-07 7:40 ` [Qemu-devel] [PATCH v3 28/29] configure: ensure directory exists when creating symlink Paolo Bonzini
2012-06-12 18:44 ` Andreas Färber
2012-06-07 7:40 ` [Qemu-devel] [PATCH v3 29/29] build: do not create directories at configure time Paolo Bonzini
2012-06-07 12:31 ` [Qemu-devel] [PULL v3 00/29] per-directory Makefile.objs snippets, limit vpath (ab)use Andreas Färber
2012-06-07 12:47 ` Anthony Liguori
2012-06-07 14:14 ` Paolo Bonzini
2012-06-08 13:59 ` Anthony Liguori
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1339054814-20939-4-git-send-email-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=anthony@codemonkey.ws \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).