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 <ricardo.martincoski@gmail.com>
[Arnout: add docstring and explain double splitext to
         get_package_prefix_from_filename]
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
(cherry picked from commit ccc12c0f244de23672300b5837b473292c8db931)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
This commit is contained in:
Ricardo Martincoski 2023-01-01 20:36:50 -03:00 committed by Peter Korsgaard
parent bb45657334
commit 4b77aafde8
3 changed files with 59 additions and 14 deletions

View File

@ -124,6 +124,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$",
@ -154,7 +155,7 @@ def get_lib_from_filename(fname):
return checkpackagelib.lib_config
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

View File

@ -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):

View File

@ -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']]),
]