From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35703) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YAWrO-00072A-GJ for qemu-devel@nongnu.org; Sun, 11 Jan 2015 23:44:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YAWrI-0001BH-CR for qemu-devel@nongnu.org; Sun, 11 Jan 2015 23:44:14 -0500 Received: from mx1.redhat.com ([209.132.183.28]:38835) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YAWrI-0001B7-3U for qemu-devel@nongnu.org; Sun, 11 Jan 2015 23:44:08 -0500 From: Fam Zheng Date: Mon, 12 Jan 2015 12:43:09 +0800 Message-Id: <1421037791-32021-2-git-send-email-famz@redhat.com> In-Reply-To: <1421037791-32021-1-git-send-email-famz@redhat.com> References: <1421037791-32021-1-git-send-email-famz@redhat.com> Subject: [Qemu-devel] [PATCH 1/3] rules.mak: Fix module build List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Brian Jackson , Peter Maydell , Michael Tokarev , =?UTF-8?q?Andreas=20F=C3=A4rber?= , Stefan Hajnoczi , Bharata B Rao , Paolo Bonzini , Richard Henderson Module build is broken since commit c261d774fb ( rules.mak: Fix DSO build by pulling in archive symbols). That commit added .mo placeholders of DSO to -y variables, in order to pull stub symbols to executable. But the placeholders are unintentionally expanded in -y, rather than filtered out while linking. Fix it by moving the -objs expanding to before inserting .mo placeholders. Note that passing -cflags and -libs to member objects are also moved to keep it happening before object expanding. Reported-by: Bharata B Rao Signed-off-by: Fam Zheng --- rules.mak | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/rules.mak b/rules.mak index f500fef..3a05627 100644 --- a/rules.mak +++ b/rules.mak @@ -326,7 +326,17 @@ define unnest-vars $(if $1,$(call fix-paths,$1/,,$2)) # Descend and include every subdir Makefile.objs - $(foreach v, $2, $(call unnest-var-recursive,$1,$2,$v)) + $(foreach v, $2, + $(call unnest-var-recursive,$1,$2,$v) + # Pass the .mo-cflags and .mo-libs along to its member objects + $(foreach o, $(filter %.mo,$($v)), + $(foreach p,$($o-objs), + $(if $($o-cflags), $(eval $p-cflags += $($o-cflags))) + $(if $($o-libs), $(eval $p-libs += $($o-libs)))))) + + # For all %.mo objects that are directly added into -y, just expand them + $(foreach v,$(filter %-y,$2), + $(eval $v := $(foreach o,$($v),$(if $($o-objs),$($o-objs),$o)))) $(foreach v,$(filter %-m,$2), # All .o found in *-m variables are single object modules, create .mo @@ -353,18 +363,9 @@ define unnest-vars # according to .mo-objs. Report error if not set $(if $($o-objs), $(eval $(o:%.mo=%$(DSOSUF)): module-common.o $($o-objs)), - $(error $o added in $v but $o-objs is not set)) - # Pass the .mo-cflags and .mo-libs along to member objects - $(foreach p,$($o-objs), - $(if $($o-cflags), $(eval $p-cflags += $($o-cflags))) - $(if $($o-libs), $(eval $p-libs += $($o-libs))))) + $(error $o added in $v but $o-objs is not set))) $(shell mkdir -p ./ $(sort $(dir $($v)))) # Include all the .d files $(eval -include $(addsuffix *.d, $(sort $(dir $($v))))) $(eval $v := $(filter-out %/,$($v)))) - - # For all %.mo objects that are directly added into -y, expand them to %.mo-objs - $(foreach v,$2, - $(eval $v := $(foreach o,$($v),$(if $($o-objs),$($o-objs),$o)))) - endef -- 2.1.0