[Buildroot] [PATCH 9/9] check-package: check *.mk for typo in variable

Ricardo Martincoski ricardo.martincoski at gmail.com
Sat Dec 31 03:21:10 UTC 2016


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 <ricardo.martincoski at gmail.com>
---

Notes:
    $ time support/scripts/check-package $(find package -type f) >/dev/null 2>/dev/null
    
    real	0m3.088s
    user	0m3.012s
    sys	0m0.072s
    
    CHECK_TYPO_IN_PACKAGE_VARIABLE:
     support/scripts/check-package --include-only check_typo_in_package_variable \
     $(find package -name '*.mk') 2>/dev/null | wc -l
      17
     (cd support/scripts/check-package-example && \
     ../check-package --include-only check_typo_in_package_variable -vv package/*/*)
      package/package1/package1.mk:31: possible typo: LINUX_DEPENDENCIES -> *PACKAGE1*
      LINUX_DEPENDENCIES = messing with others
      package/package1/package1.mk:32: possible typo: PACKACE1_DEPENDENCIES -> *PACKAGE1*
      PACKACE1_DEPENDENCIES = typo
      159 lines processed
      2 warnings generated

 support/scripts/checkpackagelib_mk.py | 44 +++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/support/scripts/checkpackagelib_mk.py b/support/scripts/checkpackagelib_mk.py
index 40574584a..50d22abfc 100644
--- a/support/scripts/checkpackagelib_mk.py
+++ b/support/scripts/checkpackagelib_mk.py
@@ -141,6 +141,50 @@ def check_trailing_backslash(
                 check_trailing_backslash.lastline]
 
 
+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 check_typo_in_package_variable(
+        fname, args, lineno=0, text=None, start=False, end=False):
+    if start:
+        package = PACKAGE_NAME.search(fname).group(1).replace("-", "_").upper()
+        # linux tools do not use LINUX_TOOL_ prefix for variables
+        package = package.replace("LINUX_TOOL_", "")
+        check_typo_in_package_variable.package = package
+        check_typo_in_package_variable.REGEX = re.compile(
+            "^(HOST_)?({}_[A-Z0-9_]+)".format(package))
+        return
+    if end:
+        return
+
+    m = VARIABLE.search(text)
+    if m is None:
+        return
+
+    variable = m.group(1)
+    if ALLOWED.match(variable):
+        return
+    if check_typo_in_package_variable.REGEX.search(text) is None:
+        return ["{}:{}: possible typo: {} -> *{}*"
+                .format(fname, lineno, variable,
+                        check_typo_in_package_variable.package),
+                text]
+
+
 DEFAULT_AUTOTOOLS_FLAG = re.compile("^.*{}".format("|".join([
     "_AUTORECONF\s*=\s*NO",
     "_LIBTOOL_PATCH\s*=\s*YES"])))
-- 
2.11.0




More information about the buildroot mailing list