Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp7746000imu; Thu, 15 Nov 2018 00:29:57 -0800 (PST) X-Google-Smtp-Source: AJdET5dzrIXd3/2vg56zWhLaYyf3+Dgq8dtiMuNijyKD+TSJycw64FDtnq0ApZgn1L8fS+X5d4UV X-Received: by 2002:a62:7e93:: with SMTP id z141mr4197855pfc.239.1542270597262; Thu, 15 Nov 2018 00:29:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542270597; cv=none; d=google.com; s=arc-20160816; b=neh52SkevRyxznFh/ss37LjuP9Yo2uLDlIn+JqfhRT0hS+lW35d4ox8jHrKe/Io4Cb aUCOg22VLJXbxJYXYBMPMDtBxT7pzFy9gd3XdvwXsm9RixqVTKSC0M9YjjcWnBstde4W o2gYaZJ8ee+4W1Bl6PQs90UKUh26QVE+kIQtgp1o2MtgWx4B8UydCr9Y29Zc57CHgxLV 0sD/TLtmYTQgQq2dfdsYhDw8uXyfF04bvtO7bCZdkt67FaDKVjFyunul2ySORf4QVVON oFUX+G0c0bd7Fpx+9XZsJlu7aQb8qp11FYa+WZ8BGtSl8Zit6WMHj/CY+Qc3wrsJfp8i IFng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:dkim-filter; bh=8FrQ1l+FIpNp9mhpnOeiNDDcSQOuKAHj3p0L9t8+oVg=; b=NK87QmhShJz/mquHaPtWet+Y2qf7K2eRyUZNvc68q9PkkcyjvJNUYX1/Hx1ekFx2gM oz1oTsIGjiG0HntV3VXfYEVghitUu3y05Mtxu2UIkEMXE+odftTc4Ih1xQO33W2kcfNK qZAWB40C9EZl67U9Igz1ZviTXohl2ksIbgWrVkiXdtuTXtm3hze4Cw/eobsqT+bjQzhi RYQocSVqniuUlzUn3ZghCClrtyKYHhEBkIfQJNoM5N2upqNIMzH27XnQnOl8JBArkHoe aQb3hHv4ONogniiQfU/+48siHVHihLpbjwTjbj2kvZ8b6/1bRkHsn3gbIYqShEFAuG5G CVMg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=N8hNiaRR; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t5si20588905pgc.369.2018.11.15.00.29.33; Thu, 15 Nov 2018 00:29:57 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=N8hNiaRR; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729119AbeKOSf1 (ORCPT + 99 others); Thu, 15 Nov 2018 13:35:27 -0500 Received: from conuserg-08.nifty.com ([210.131.2.75]:50789 "EHLO conuserg-08.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729052AbeKOSf1 (ORCPT ); Thu, 15 Nov 2018 13:35:27 -0500 Received: from pug.e01.socionext.com (p14092-ipngnfx01kyoto.kyoto.ocn.ne.jp [153.142.97.92]) (authenticated) by conuserg-08.nifty.com with ESMTP id wAF8RHoc022794; Thu, 15 Nov 2018 17:27:22 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-08.nifty.com wAF8RHoc022794 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1542270443; bh=8FrQ1l+FIpNp9mhpnOeiNDDcSQOuKAHj3p0L9t8+oVg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=N8hNiaRRiFBgErdtghyjjslsGX9+bFsMWLq9hawPuWHpGsV4v6kpjLi8eMOyLYBgv iPndDBblwjYqfkJfwREciKByA2i6KKLug405m9j2Gz/iyYPVK/H+BAxzpXDit2TxpS 5efKazUxOgFyN5XztbGe/9sRU1pnRyCm4A5Qq2ePz3JH2E3/oYZtn1dLnIeCADWT0D HwFfNmEjUU13VtyVtXestrIsZoJFeENbMSt8XuETzxvzm4JL/NoZSGdPPUnV2bCBDT TyHuT7lQ4+usgBIgsAr3Ddt4/1JLgItL+9bn1jOHuKtwD5zuiocqBT9K8qLjRsHB0c i/b9I83zIcL8w== X-Nifty-SrcIP: [153.142.97.92] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: Sam Ravnborg , Nicolas Pitre , Rasmus Villemoes , Masahiro Yamada , Michal Marek , linux-kernel@vger.kernel.org Subject: [PATCH 5/8] kbuild: change if_changed_rule to accept multi-line recipe Date: Thu, 15 Nov 2018 17:27:12 +0900 Message-Id: <1542270435-11181-6-git-send-email-yamada.masahiro@socionext.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1542270435-11181-1-git-send-email-yamada.masahiro@socionext.com> References: <1542270435-11181-1-git-send-email-yamada.masahiro@socionext.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org GNU Make supports 'define' ... 'endef' directive, which can describe a recipe that consists of multiple lines. For example, all: @echo hello @echo world ... can be written as: define greeting @echo hello @echo world endif all: $(greeting) This is useful to confine a series of shell commands into a single macro, keeping readability. However, if_changed_rule cannot accept multi-line recipe. As you see rule_cc_o_c and rule_as_o_S in scripts/Makefile.build, it must be written like this: define rule_cc_o_c @[action1] ; \ [action2] ; \ [action3] endef This does not actually exploit the benefits of 'define' ... 'endef' form. All shell commands must be concatenated with '; \' so that it looks like a single command from the Makefile point of view. '@' can only appear before the first action. The root cause of this misfortune is the '@set -e;' in if_changed_rule. It is easily solvable by moving '@set -e' to the 'cmd' macro. The combo of $(call echo-cmd,*) $(cmd_*) in rule_cc_o_c and rule_as_o_S were replaced with $(call cmd,*). The tailing back-slashes went away. Signed-off-by: Masahiro Yamada --- scripts/Kbuild.include | 6 ++---- scripts/Makefile.build | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include index 1eafc85..5e47bf6 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include @@ -215,7 +215,7 @@ echo-cmd = $(if $($(quiet)cmd_$(1)),\ echo ' $(call escsq,$($(quiet)cmd_$(1)))$(echo-why)';) # printing commands -cmd = @$(echo-cmd) $(cmd_$(1)) +cmd = @set -e; $(echo-cmd) $(cmd_$(1)) # Add $(obj)/ for paths that are not absolute objectify = $(foreach o,$(1),$(if $(filter /%,$(o)),$(o),$(obj)/$(o))) @@ -269,9 +269,7 @@ cmd_and_fixdep = \ # Usage: $(call if_changed_rule,foo) # Will check if $(cmd_foo) or any of the prerequisites changed, # and if so will execute $(rule_foo). -if_changed_rule = $(if $(strip $(any-prereq) $(arg-check) ), \ - @set -e; \ - $(rule_$(1)), @:) +if_changed_rule = $(if $(strip $(any-prereq) $(arg-check)), $(rule_$(1)), @:) ### # why - tell why a target got built diff --git a/scripts/Makefile.build b/scripts/Makefile.build index e5ba9b1..5528a6a 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -263,20 +263,20 @@ cmd_gen_ksymdeps = \ endif define rule_cc_o_c - $(call echo-cmd,checksrc) $(cmd_checksrc) \ - $(call cmd_and_fixdep,cc_o_c) \ - $(cmd_gen_ksymdeps) \ - $(cmd_checkdoc) \ - $(call echo-cmd,objtool) $(cmd_objtool) \ - $(cmd_modversions_c) \ - $(call echo-cmd,record_mcount) $(cmd_record_mcount) + $(call cmd,checksrc) + @$(call cmd_and_fixdep,cc_o_c) + $(call cmd,gen_ksymdeps) + $(call cmd,checkdoc) + $(call cmd,objtool) + $(call cmd,modversions_c) + $(call cmd,record_mcount) endef define rule_as_o_S - $(call cmd_and_fixdep,as_o_S) \ - $(cmd_gen_ksymdeps) \ - $(call echo-cmd,objtool) $(cmd_objtool) \ - $(cmd_modversions_S) + @$(call cmd_and_fixdep,as_o_S) + $(call cmd,gen_ksymdeps) + $(call cmd,objtool) + $(call cmd,modversions_S) endef # List module undefined symbols (or empty line if not enabled) -- 2.7.4