From patchwork Sun Feb 19 22:17:24 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ricardo Martincoski X-Patchwork-Id: 729672 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3vRLtL6HBTz9s7R for ; Mon, 20 Feb 2017 09:25:14 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="p3nXnTQ8"; dkim-atps=neutral Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id 4BFF7883E1; Sun, 19 Feb 2017 22:25:13 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org X-Amavis-Alert: BAD HEADER SECTION, Duplicate header field: "References" Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id o0Ky0j1c7Vgi; Sun, 19 Feb 2017 22:25:12 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by fraxinus.osuosl.org (Postfix) with ESMTP id 70E5B8837E; Sun, 19 Feb 2017 22:25:12 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by ash.osuosl.org (Postfix) with ESMTP id 867621C1650 for ; Sun, 19 Feb 2017 22:25:10 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 82807305F9 for ; Sun, 19 Feb 2017 22:25:10 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org X-Amavis-Alert: BAD HEADER SECTION, Duplicate header field: "References" Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id JKKsfzT+moU5 for ; Sun, 19 Feb 2017 22:25:09 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-qk0-f196.google.com (mail-qk0-f196.google.com [209.85.220.196]) by silver.osuosl.org (Postfix) with ESMTPS id 7BB2E2A12A for ; Sun, 19 Feb 2017 22:25:09 +0000 (UTC) Received: by mail-qk0-f196.google.com with SMTP id p22so13284170qka.3 for ; Sun, 19 Feb 2017 14:25:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=Ju9Z3veEK176kzRs4MLX3lWLw72RhRs8S0W4V5+euhQ=; b=p3nXnTQ867HLqZ/FtuTK4k9oFAeW10aj4UxEkdsIEOKudJHFRMOdhpbPYQzo7gF4TU 6wyy4Tife9M2BciUiHCweLONWHBAPKTB+z7TPEvRD3poKNu6Tbk0RwVqt0Sh1T5oRmyT TOyaZ/gCRPX6w4QHYxjoDidtLxtQPN41NC5iwe7tXZWzwEvEpyFozAqdXShwL2yD/nje TCkCzQ/ksolkB6xbUO67QPW+zU1LUM1eazOl9tMT+7xOSjgG/cQ3LWJ9ZVkKnfx4iRaF z2yI9VwWeRXGQhE4zOwUlbZmnExvXIEVljgeBDI4MP/IsqOAVvdkU7lqmVfqJA3qg3BW 0MeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=Ju9Z3veEK176kzRs4MLX3lWLw72RhRs8S0W4V5+euhQ=; b=ne5jmzSkDBg6gLV67gkUcs4KTDROYjTDHRh/p+TL0GVivV9SIsUXdZlkQ7SCGR2Df6 NX7AZeldEnc25RkBTFVvPZTZQE4Vl0YvUqQoIqktJwuRfbVwCc0Uk9OFRcoQ5ZRFe6WT HsHRDeBk98KUh1a2i6tb1R98DqEFt0BTvZPljRzM/Guzzg++7eLvIc4boNF0EVY5EX+M U508Q2c38V4ECxjrybtgGFIrFmkK9/b8ZyHiCzTtvW65JPRPUZ6aSvMstfkOpbXYtmRX KEj/AvRbwi33uXhu7RULDYhd3b8jC2sy0YNfTWjC8XIbMHQIF3CiNfY7LI71y5vHqMPM iAzA== X-Gm-Message-State: AMke39miPatF9ItAW0KHjhRdWVk5y5IVTJTZz6AX8RqkJG3Yzr+okWf92sl39mM7Q8D7RQ== X-Received: by 10.55.89.196 with SMTP id n187mr17032332qkb.17.1487543108428; Sun, 19 Feb 2017 14:25:08 -0800 (PST) Received: from ultri3.home ([201.86.219.185]) by smtp.gmail.com with ESMTPSA id d127sm10970245qka.30.2017.02.19.14.25.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 19 Feb 2017 14:25:07 -0800 (PST) From: Ricardo Martincoski To: buildroot@buildroot.org Date: Sun, 19 Feb 2017 19:17:24 -0300 Message-Id: <20170219221724.27298-10-ricardo.martincoski@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170219221724.27298-1-ricardo.martincoski@gmail.com> References: <20170219221724.27298-1-ricardo.martincoski@gmail.com> In-Reply-To: <20161231032110.11573-1-ricardo.martincoski@gmail.com> References: <20161231032110.11573-1-ricardo.martincoski@gmail.com> Cc: Romain Naour , Thomas De Schampheleire , Ricardo Martincoski Subject: [Buildroot] [PATCH v2 9/9] check-package: check *.mk for typo in variable X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: buildroot-bounces@busybox.net Sender: "buildroot" Warn when a variable is defined in a .mk file and it don't start with the package name. This function generates false warnings and the maintenance of the whitelist can be an extra burden, but it catches some typos really hard to see: - POPLER_CONF_OPTS [1] - BALELD_LICENSE [2] - DRDB_UTILS_DEPENDENCIES [3] - PERL_LIBWWW_LICENSE_FILES [4] - AVRDUDR_LICENSE_FILES [5] - GST1_PLUGINS_ULGY_HAS_GPL_LICENSE [6] - ON2_8170_LICENSE [7] - LIBFDTI_CONF_OPTS [8][9] - IPSEC_DEPENDENCIES [10] [1] http://patchwork.ozlabs.org/patch/681533 [2] http://patchwork.ozlabs.org/patch/643293 [3] http://patchwork.ozlabs.org/patch/449589 [4] http://patchwork.ozlabs.org/patch/464545 [5] http://patchwork.ozlabs.org/patch/305060 [6] http://patchwork.ozlabs.org/patch/253089 [7] http://patchwork.ozlabs.org/patch/250523 [8] http://patchwork.ozlabs.org/patch/394125 [9] https://github.com/buildroot/buildroot/commit/fe7a4b524b72bcb448f7e723873d8244620cb2f1 [10] https://github.com/buildroot/buildroot/commit/dff1d590b2a0fadf58b6eed60029b2ecbab7c710 Signed-off-by: Ricardo Martincoski Cc: Romain Naour --- Changes v1 -> v2: - avoid false positive for variable of virtual package the package under analysis provides (e.g. MYSQL_SOCKET) (Romain); - use classes instead of functions to declare each check (Thomas DS); - I kept the examples of typos it catches, but Peter Korsgaard already fixed the typos listed above; --- Notes: $ time support/scripts/check-package $(find package -type f) >/dev/null 2>/dev/null real 0m3.205s user 0m3.140s sys 0m0.064s TypoInPackageVariable: support/scripts/check-package --include-only TypoInPackageVariable \ $(find package -name '*.mk') 2>/dev/null | wc -l 3 (cd support/scripts/check-package-example && \ ../check-package --include-only TypoInPackageVariable -vv package/*/*) package/package1/package1.mk:33: possible typo: LINUX_DEPENDENCIES -> *PACKAGE1* LINUX_DEPENDENCIES = messing with others package/package1/package1.mk:34: possible typo: PACKACE1_DEPENDENCIES -> *PACKAGE1* PACKACE1_DEPENDENCIES = typo package/package1/package1.mk:39: possible typo: NOT_PROVIDED4_LOCK -> *PACKAGE1* NOT_PROVIDED4_LOCK = lock4 180 lines processed 3 warnings generated support/scripts/checkpackagelib_mk.py | 52 +++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/support/scripts/checkpackagelib_mk.py b/support/scripts/checkpackagelib_mk.py index f66888d21..0740a37f7 100644 --- a/support/scripts/checkpackagelib_mk.py +++ b/support/scripts/checkpackagelib_mk.py @@ -131,6 +131,58 @@ class TrailingBackslash(_CheckFunction): self.lastline] +class TypoInPackageVariable(_CheckFunction): + ALLOWED = re.compile("|".join([ + "ACLOCAL_DIR", + "ACLOCAL_HOST_DIR", + "BR_CCACHE_INITIAL_SETUP", + "BR_NO_CHECK_HASH_FOR", + "LINUX_POST_PATCH_HOOKS", + "LINUX_TOOLS", + "LUA_RUN", + "MKFS_JFFS2", + "MKIMAGE_ARCH", + "PKG_CONFIG_HOST_BINARY", + "TARGET_FINALIZE_HOOKS", + "XTENSA_CORE_NAME"])) + PACKAGE_NAME = re.compile("/([^/]+)\.mk") + VARIABLE = re.compile("^([A-Z0-9_]+_[A-Z0-9_]+)\s*(\+|)=") + + def before(self): + package = self.PACKAGE_NAME.search(self.filename).group(1) + package = package.replace("-", "_").upper() + # linux tools do not use LINUX_TOOL_ prefix for variables + package = package.replace("LINUX_TOOL_", "") + self.package = package + self.REGEX = re.compile("^(HOST_)?({}_[A-Z0-9_]+)".format(package)) + self.FIND_VIRTUAL = re.compile( + "^{}_PROVIDES\s*(\+|)=\s*(.*)".format(package)) + self.virtual = [] + + def check_line(self, lineno, text): + m = self.VARIABLE.search(text) + if m is None: + return + + variable = m.group(1) + + # allow to set variables for virtual package this package provides + v = self.FIND_VIRTUAL.search(text) + if v: + self.virtual += v.group(2).upper().split() + return + for virtual in self.virtual: + if variable.startswith("{}_".format(virtual)): + return + + if self.ALLOWED.match(variable): + return + if self.REGEX.search(text) is None: + return ["{}:{}: possible typo: {} -> *{}*" + .format(self.filename, lineno, variable, self.package), + text] + + class UselessFlag(_CheckFunction): DEFAULT_AUTOTOOLS_FLAG = re.compile("^.*{}".format("|".join([ "_AUTORECONF\s*=\s*NO",