[Buildroot] [PATCH 8/8] utils/check-package: verify the prefix of package Config.in options
Thomas Petazzoni
thomas.petazzoni at bootlin.com
Sun May 13 19:07:37 UTC 2018
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 <thomas.petazzoni at bootlin.com>
---
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*$")
--
2.14.3
More information about the buildroot
mailing list