From ccc12c0f244de23672300b5837b473292c8db931 Mon Sep 17 00:00:00 2001 From: Ricardo Martincoski Date: Sun, 1 Jan 2023 20:36:50 -0300 Subject: [PATCH] utils/check-package: check linux-tools Each linux tool uses a fragment of a .mk file, named, for instance: package/linux-tools/linux-tool-cpupower.mk.in So currently check-package does not check these files. Add the support in check-package script. At the same time, factor out a function to derive package prefix from the filename being checked, so the fix (calling os.path.splitext twice) can be applied in a single place. Signed-off-by: Ricardo Martincoski [Arnout: add docstring and explain double splitext to get_package_prefix_from_filename] Signed-off-by: Arnout Vandecappelle --- utils/check-package | 3 ++- utils/checkpackagelib/lib_mk.py | 30 ++++++++++++--------- utils/checkpackagelib/test_lib_mk.py | 40 ++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 14 deletions(-) diff --git a/utils/check-package b/utils/check-package index cbb3613e19..3741a2ccdc 100755 --- a/utils/check-package +++ b/utils/check-package @@ -126,6 +126,7 @@ DO_CHECK_INTREE = re.compile(r"|".join([ DO_NOT_CHECK_INTREE = re.compile(r"|".join([ r"boot/barebox/barebox\.mk$", r"fs/common\.mk$", + r"package/alchemy/atom.mk.in$", r"package/doc-asciidoc\.mk$", r"package/pkg-\S*\.mk$", r"support/dependencies/[^/]+\.mk$", @@ -163,7 +164,7 @@ def get_lib_from_filename(fname): return checkpackagelib.lib_defconfig if fname.endswith(".hash"): return checkpackagelib.lib_hash - if fname.endswith(".mk"): + if fname.endswith(".mk") or fname.endswith(".mk.in"): return checkpackagelib.lib_mk if fname.endswith(".patch"): return checkpackagelib.lib_patch diff --git a/utils/checkpackagelib/lib_mk.py b/utils/checkpackagelib/lib_mk.py index 4d97571f50..1e6bd708a5 100644 --- a/utils/checkpackagelib/lib_mk.py +++ b/utils/checkpackagelib/lib_mk.py @@ -49,6 +49,18 @@ class Ifdef(_CheckFunction): text] +def get_package_prefix_from_filename(filename): + """Return a tuple (pkgname, PKGNAME) with the package name derived from the file name""" + # Double splitext to support .mk.in + package = os.path.splitext(os.path.splitext(os.path.basename(filename))[0])[0] + # linux tools do not use LINUX_TOOL_ prefix for variables + package = package.replace("linux-tool-", "") + # linux extensions do not use LINUX_EXT_ prefix for variables + package = package.replace("linux-ext-", "") + package_upper = package.replace("-", "_").upper() + return package, package_upper + + class Indent(_CheckFunction): COMMENT = re.compile(r"^\s*#") CONDITIONAL = re.compile(r"^\s*({})\s".format("|".join(start_conditional + end_conditional + continue_conditional))) @@ -207,12 +219,10 @@ class RemoveDefaultPackageSourceVariable(_CheckFunction): packages_that_may_contain_default_source = ["binutils", "gcc", "gdb"] def before(self): - package, _ = os.path.splitext(os.path.basename(self.filename)) - package_upper = package.replace("-", "_").upper() - self.package = package + self.package, package_upper = get_package_prefix_from_filename(self.filename) self.FIND_SOURCE = re.compile( r"^{}_SOURCE\s*=\s*{}-\$\({}_VERSION\)\.tar\.gz" - .format(package_upper, package, package_upper)) + .format(package_upper, self.package, package_upper)) def check_line(self, lineno, text): if self.FIND_SOURCE.search(text): @@ -282,16 +292,10 @@ class TypoInPackageVariable(_CheckFunction): VARIABLE = re.compile(r"^(define\s+)?([A-Z0-9_]+_[A-Z0-9_]+)") def before(self): - package, _ = os.path.splitext(os.path.basename(self.filename)) - package = package.replace("-", "_").upper() - # linux tools do not use LINUX_TOOL_ prefix for variables - package = package.replace("LINUX_TOOL_", "") - # linux extensions do not use LINUX_EXT_ prefix for variables - package = package.replace("LINUX_EXT_", "") - self.package = package - self.REGEX = re.compile(r"(HOST_|ROOTFS_)?({}_[A-Z0-9_]+)".format(package)) + _, self.package = get_package_prefix_from_filename(self.filename) + self.REGEX = re.compile(r"(HOST_|ROOTFS_)?({}_[A-Z0-9_]+)".format(self.package)) self.FIND_VIRTUAL = re.compile( - r"^{}_PROVIDES\s*(\+|)=\s*(.*)".format(package)) + r"^{}_PROVIDES\s*(\+|)=\s*(.*)".format(self.package)) self.virtual = [] def check_line(self, lineno, text): diff --git a/utils/checkpackagelib/test_lib_mk.py b/utils/checkpackagelib/test_lib_mk.py index 11fecdd5cf..208b1ecdc2 100644 --- a/utils/checkpackagelib/test_lib_mk.py +++ b/utils/checkpackagelib/test_lib_mk.py @@ -74,6 +74,40 @@ def test_Ifdef(testname, filename, string, expected): assert warnings == expected +get_package_prefix_from_filename = [ + ('linux extension', + 'linux/linux-ext-aufs.mk', + ['aufs', 'AUFS']), + ('linux tool', + 'package/linux-tools/linux-tool-gpio.mk.in', + ['gpio', 'GPIO']), + ('boot', + 'boot/binaries-marvell/binaries-marvell.mk', + ['binaries-marvell', 'BINARIES_MARVELL']), + ('toolchain', + 'toolchain/toolchain-external/toolchain-external-bootlin/toolchain-external-bootlin.mk', + ['toolchain-external-bootlin', 'TOOLCHAIN_EXTERNAL_BOOTLIN']), + ('package, underscore, subfolder', + 'package/x11r7/xapp_bitmap/xapp_bitmap.mk', + ['xapp_bitmap', 'XAPP_BITMAP']), + ('package, starting with number', + 'package/4th/4th.mk', + ['4th', '4TH']), + ('package, long name', + 'package/perl-mojolicious-plugin-authentication/perl-mojolicious-plugin-authentication.mk', + ['perl-mojolicious-plugin-authentication', 'PERL_MOJOLICIOUS_PLUGIN_AUTHENTICATION']), + ('package, case sensitive', + 'package/libeXosip2/libeXosip2.mk', + ['libeXosip2', 'LIBEXOSIP2']), + ] + + +@pytest.mark.parametrize('testname,filename,expected', get_package_prefix_from_filename) +def test_get_package_prefix_from_filename(testname, filename, expected): + prefix_lower, prefix_upper = m.get_package_prefix_from_filename(filename) + assert [prefix_lower, prefix_upper] == expected + + Indent = [ ('ignore comment at beginning of line', 'any', @@ -567,6 +601,12 @@ TypoInPackageVariable = [ 'OTHERS_VAR = \n', [['any.mk:2: possible typo: OTHERS_VAR -> *ANY*', 'OTHERS_VAR = \n']]), + ('linux tool', + 'package/linux-tools/linux-tool-cpupower.mk.in', + 'CPUPOWER_DEPENDENCIES =\n' + 'POWER_DEPENDENCIES +=\n', + [['package/linux-tools/linux-tool-cpupower.mk.in:2: possible typo: POWER_DEPENDENCIES -> *CPUPOWER*', + 'POWER_DEPENDENCIES +=\n']]), ]