From patchwork Sun May 13 19:07:37 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Petazzoni X-Patchwork-Id: 912565 Return-Path: X-Original-To: incoming-buildroot@patchwork.ozlabs.org Delivered-To: patchwork-incoming-buildroot@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=busybox.net (client-ip=140.211.166.136; helo=silver.osuosl.org; envelope-from=buildroot-bounces@busybox.net; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=bootlin.com Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40kYJG1V3tz9s0w for ; Mon, 14 May 2018 05:08:14 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 2451F253CA; Sun, 13 May 2018 19:08:11 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id zx7grjVuGcCZ; Sun, 13 May 2018 19:08:06 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by silver.osuosl.org (Postfix) with ESMTP id 08408253F8; Sun, 13 May 2018 19:08:05 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by ash.osuosl.org (Postfix) with ESMTP id 556081C44AF for ; Sun, 13 May 2018 19:08:01 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id 52D0B87FCE for ; Sun, 13 May 2018 19:08:01 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id aXLf_x2yQCLu for ; Sun, 13 May 2018 19:08:00 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail.bootlin.com (mail.bootlin.com [62.4.15.54]) by fraxinus.osuosl.org (Postfix) with ESMTP id 65E7D88236 for ; Sun, 13 May 2018 19:08:00 +0000 (UTC) Received: by mail.bootlin.com (Postfix, from userid 110) id 83402208B1; Sun, 13 May 2018 21:07:58 +0200 (CEST) Received: from localhost (LFbn-TOU-1-408-85.w86-206.abo.wanadoo.fr [86.206.234.85]) by mail.bootlin.com (Postfix) with ESMTPSA id 58C2C206F6; Sun, 13 May 2018 21:07:58 +0200 (CEST) From: Thomas Petazzoni To: Buildroot List Date: Sun, 13 May 2018 21:07:37 +0200 Message-Id: <20180513190737.26079-9-thomas.petazzoni@bootlin.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180513190737.26079-1-thomas.petazzoni@bootlin.com> References: <20180513190737.26079-1-thomas.petazzoni@bootlin.com> Subject: [Buildroot] [PATCH 8/8] utils/check-package: verify the prefix of package Config.in options X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.24 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Petazzoni , Ricardo Martincoski MIME-Version: 1.0 Errors-To: buildroot-bounces@busybox.net Sender: "buildroot" This commit adds a new check in the check-package tool to verify that the prefix used to name Config.in options are matching the name of the package. For now, only Config.in files in package/ are checked, because Config.in files in fs/, linux/ and boot/ obey to different rules. The check might be extended later to cover other files. A series of expections is added, mainly to cope with virtual packages such as zlib, cryptodev, openssl, jpeg and mysql. Signed-off-by: Thomas Petazzoni --- utils/checkpackagelib/lib_config.py | 75 +++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/utils/checkpackagelib/lib_config.py b/utils/checkpackagelib/lib_config.py index 1d273f1c5f..3ffd725351 100644 --- a/utils/checkpackagelib/lib_config.py +++ b/utils/checkpackagelib/lib_config.py @@ -60,6 +60,81 @@ class AttributesOrder(_CheckFunction): text] +class ConfigVariableName(_CheckFunction): + PACKAGE_NAME = re.compile(".*/([^/]+)/(Config.*)") + OPTION_ONLY = re.compile("^config (BR2_PACKAGE_.*)") + EXCLUDES = ["package/Config.in", + "package/Config.in.host"] + EXCEPTIONS = { + "package/zlib/Config.in": ["BR2_PACKAGE_LIBZLIB"], + "package/cryptodev/Config.in": ["BR2_PACKAGE_OCF_LINUX"], + "package/libcurl/Config.in": ["BR2_PACKAGE_CURL"], + "package/luajit/Config.in": ["BR2_PACKAGE_LUAINTERPRETER_ABI_VERSION"], + "package/mono/Config.in": ["BR2_PACKAGE_HOST_MONO_ARCH_SUPPORTS"], + "package/rustc/Config.in.host": ["BR2_PACKAGE_HOST_RUST", + "BR2_PACKAGE_HOST_RUST_BIN"], + "package/openssl/Config.in": ["BR2_PACKAGE_LIBOPENSSL", + "BR2_PACKAGE_LIBOPENSSL_BIN", + "BR2_PACKAGE_LIBOPENSSL_ENGINES", + "BR2_PACKAGE_LIBRESSL", + "BR2_PACKAGE_LIBRESSL_BIN"], + "package/erlang/Config.in": ["BR2_PACKAGE_HOST_ERLANG_ARCH_SUPPORTS"], + "package/jpeg/Config.in": ["BR2_PACKAGE_LIBJPEG"], + "package/mysql/Config.in": ["BR2_PACKAGE_MARIADB", + "BR2_PACKAGE_ORACLE_MYSQL", + "BR2_PACKAGE_MARIADB_SERVER", + "BR2_PACKAGE_ORACLE_MYSQL_SERVER"], + } + + def _check_file(self): + if not self.filename.startswith("package/"): + return False + if self.filename in self.EXCLUDES: + return False + return True + + def _check_symbol(self, symbol): + if self.filename in self.EXCEPTIONS and \ + symbol in self.EXCEPTIONS[self.filename]: + return False + else: + return True + + def before(self): + if not self._check_file(): + return + m = self.PACKAGE_NAME.search(self.filename) + if not m: + print "NOT FOUND: %s" % self.filename + package = m.group(1) + config_file_name = m.group(2) + if config_file_name == "Config.in.host": + self.config_prefix = "BR2_PACKAGE_HOST_" + package.replace("-", "_").upper() + else: + self.config_prefix = "BR2_PACKAGE_" + package.replace("-", "_").upper() + + def check_line(self, lineno, text): + if not self._check_file(): + return + if _empty_or_comment(text): + return + + m = self.OPTION_ONLY.search(text) + if m: + option = m.group(1) + # virtual package related options don't have the suffix of + # the current package, but this is expected. + if option.startswith("BR2_PACKAGE_PROVIDES_"): + return + if option.startswith("BR2_PACKAGE_HAS_"): + return + if not self._check_symbol(option): + return + if not option.startswith(self.config_prefix): + return ["{}:{}: option '{}' doesn't start with '{}' prefix" + .format(self.filename, lineno, option, self.config_prefix)] + + class HelpText(_CheckFunction): HELP_TEXT_FORMAT = re.compile("^\t .{,62}$") URL_ONLY = re.compile("^(http|https|git)://\S*$")