Received: by 2002:a25:c205:0:0:0:0:0 with SMTP id s5csp1950476ybf; Sun, 1 Mar 2020 22:24:55 -0800 (PST) X-Google-Smtp-Source: APXvYqz/ct5Cai/5cK1IKxEUyypJRhM/S/HxEspBypgbuxm8CNqiwfC3tA/ROXXI7cEk7r1CK36X X-Received: by 2002:a9d:6196:: with SMTP id g22mr12371850otk.204.1583130295234; Sun, 01 Mar 2020 22:24:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1583130295; cv=none; d=google.com; s=arc-20160816; b=EfLsJR7ZK/02w1Ad6I+x52X7bLlVPLjFBWYuob8dGlZdmWxRi/QkCFLzhlD5IQ/WSd 8zgp8YSDcu237sdEiCa77qNhjmFPLmkTvESSNNOmAAODKaEou+C+t/MfwiSyAG2jrUoF LdoaLGII2oLc/zXR1t78p7xyIBt9CI8+GYzGvjl9OnZIg6QdJA/yPCyldZx1gJhFaqez ykA3VUYFMUOmHTtKQpZlw1NnNLutd0sq0DCzICfbN75p8TK10y26SddIbwkLgxY3q4mZ F7KPtd6ae8/WcbnZLKfx3by4PXLhWNQRXRyHWUt/XXBzf76bRYojIaMWJeWywxvnocXE O0fA== 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=wnLhMgIgggfdJrGLtUh15Of/AoVkbl1wJ7X2YZ58njk=; b=T8DcGvvHOUU0KY4xuEAIkefa+LnoNuRW2orzRaw2JzwTBchDkX5OmHF2h9kvtJgGH5 E8Zd+FnPJjkoddKAOKyXI7u8gWLL5ppVZNWdld/vmQHVxysT3juaJEXlBb1Nw5np+aQl MsX7eUNsKNYBNU/249+iMZ5NiwSCIzrkPzuyuy1vO9sROIJjAZ0B4hoE7mPsIgOrbJFp Kz9smfU59r0QwUK3ppMd6pzZlpiaTU3Y6BJbNY9XusP4NsrgNYEjwdDMdF8dzpUg/Fk/ JetMt31b+iei1UOaADQzcjwMqd4cT1n8XKzhmv8eheXVJEG1ljhr3NLZ/VjG6nO2rn1z UzAg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=v6hVUWy5; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f18si6415642oti.289.2020.03.01.22.24.41; Sun, 01 Mar 2020 22:24:55 -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=v6hVUWy5; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726728AbgCBGY3 (ORCPT + 99 others); Mon, 2 Mar 2020 01:24:29 -0500 Received: from conuserg-11.nifty.com ([210.131.2.78]:57529 "EHLO conuserg-11.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725446AbgCBGY2 (ORCPT ); Mon, 2 Mar 2020 01:24:28 -0500 Received: from localhost.localdomain (p14092-ipngnfx01kyoto.kyoto.ocn.ne.jp [153.142.97.92]) (authenticated) by conuserg-11.nifty.com with ESMTP id 0226NfKn030880; Mon, 2 Mar 2020 15:23:43 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-11.nifty.com 0226NfKn030880 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1583130224; bh=wnLhMgIgggfdJrGLtUh15Of/AoVkbl1wJ7X2YZ58njk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=v6hVUWy5WwyAlcJJb3l/KJUxUWIRiIShof48EqopIpSHgwyFLOX9B7ddtMil3lO5g OnYhC0Qib3IRxAzvZeTxW2udp3w08lU8kZBv/luNPtway5Dd2/G+pKLuRQJYlJK5nm +Nyj24K8NjSJw3uZlItRCET9KiBKZ2rTfuNum+2ZqQHJhWNw+l/qAszGAfghwFqZJ2 uEQlGAhEtcHHnFMhxF7wx36tSDKYJ7FkiulE6GgNfdbnBFfjXU/kokU3rWaTDDXojV 0Mya/P4pwfZAMhFEGtbctJFLipEX/QuocdK4CLUl3SeNS2212vG++OzphNyTdeNdt9 SEfeBJrm07mtw== X-Nifty-SrcIP: [153.142.97.92] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Nicolas Pitre , Ulf Magnusson , Geert Uytterhoeven , Masahiro Yamada , Jonathan Corbet , Michal Marek , linux-doc@vger.kernel.org Subject: [PATCH 2/2] kconfig: make 'imply' obey the direct dependency Date: Mon, 2 Mar 2020 15:23:40 +0900 Message-Id: <20200302062340.21453-2-masahiroy@kernel.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200302062340.21453-1-masahiroy@kernel.org> References: <20200302062340.21453-1-masahiroy@kernel.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The 'imply' statement may create unmet direct dependency when the implied symbol depends on m. [Test Code] config FOO tristate "foo" imply BAZ config BAZ tristate "baz" depends on BAR config BAR def_tristate m config MODULES def_bool y option modules If you set FOO=y, BAZ is also promoted to y, which results in the following .config file: CONFIG_FOO=y CONFIG_BAZ=y CONFIG_BAR=m CONFIG_MODULES=y This does not meet the dependency 'BAZ depends on BAR'. Unlike 'select', what is worse, Kconfig never shows the 'WARNING: unmet direct dependencies detected for ...' for this case. Because 'imply' is considered to be weaker than 'depends on', Kconfig should take the direct dependency into account. For clarification, describe this case in kconfig-language.rst too. Signed-off-by: Masahiro Yamada --- Documentation/kbuild/kconfig-language.rst | 7 +++++-- scripts/kconfig/symbol.c | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Documentation/kbuild/kconfig-language.rst b/Documentation/kbuild/kconfig-language.rst index d4d988aea679..68719e78ff85 100644 --- a/Documentation/kbuild/kconfig-language.rst +++ b/Documentation/kbuild/kconfig-language.rst @@ -159,11 +159,11 @@ applicable everywhere (see syntax). Given the following example:: config FOO - tristate + tristate "foo" imply BAZ config BAZ - tristate + tristate "baz" depends on BAR The following values are possible: @@ -174,6 +174,9 @@ applicable everywhere (see syntax). n y n N/m/y m y m M/y/n y y y Y/m/n + n m n N/m + m m m M/n + y m n M/n y n * N === === ============= ============== diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c index b101ef3c377a..3dc81397d003 100644 --- a/scripts/kconfig/symbol.c +++ b/scripts/kconfig/symbol.c @@ -221,7 +221,7 @@ static void sym_calc_visibility(struct symbol *sym) sym_set_changed(sym); } tri = no; - if (sym->implied.expr && sym->dir_dep.tri != no) + if (sym->implied.expr) tri = expr_calc_value(sym->implied.expr); if (tri == mod && sym_get_type(sym) == S_BOOLEAN) tri = yes; @@ -394,6 +394,8 @@ void sym_calc_value(struct symbol *sym) if (sym->implied.tri != no) { sym->flags |= SYMBOL_WRITE; newval.tri = EXPR_OR(newval.tri, sym->implied.tri); + newval.tri = EXPR_AND(newval.tri, + sym->dir_dep.tri); } } calc_newval: -- 2.17.1