Skip to contentSkip to conversation

utils/checkpackagelib/lib_mk.py: handle 'else' and 'elif' statements

PATCH New Thomas De Schampheleire 3 participants 3 messages Dec 9, 2020 – Jan 5, 2021

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 utils/checkpackagelib/lib_mk.py: handle 'else' and 'elif' statements

From: Thomas De Schampheleire <[email protected]>

An 'else' or 'elif' clause inside a make conditional should not be indented in the same way as the if/endif clause. check-package did not recognize the else statement and expected an indentation.

For example:

ifdef FOOBAR
interesting
else
more interesting
endif

would, according to check-package, need to become:

ifdef FOOBAR
interesting
else
more interesting
endif

Treat 'else' and 'elif' the same as if-like keywords in the Indent test, but take into account that 'else' is also valid shell, so we need to correctly handle line continuation to prevent complaining about the 'else' in:

ifdef FOOBAR

	if true; \
	    ... \
	else \
	    ... \
	fi

endif

We don't add the 'else' and 'elif' statements to start_conditional, because it would cause incorrect nesting counting in class OverriddenVariable.

---
 utils/checkpackagelib/lib_mk.py | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
utils/checkpackagelib/lib_mk.py +3 -2
index 45e37e4598..0278354434 100644
@@ -16,12 +16,13 @@ from checkpackagelib.lib import Utf8Characters         # noqa: F401
 
 # used in more than one check
 start_conditional = ["ifdef", "ifeq", "ifndef", "ifneq"]
+continue_conditional = ["elif", "else"]
 end_conditional = ["endif"]
 
 
 class Indent(_CheckFunction):
     COMMENT = re.compile(r"^\s*#")
-    CONDITIONAL = re.compile(r"^\s*({})\s".format("|".join(start_conditional + end_conditional)))
+    CONDITIONAL = re.compile(r"^\s*({})\s".format("|".join(start_conditional + end_conditional + continue_conditional)))
     ENDS_WITH_BACKSLASH = re.compile(r"^[^#].*\\$")
     END_DEFINE = re.compile(r"^\s*endef\s")
     MAKEFILE_TARGET = re.compile(r"^[^# \t]+:\s")
@@ -43,7 +44,7 @@ class Indent(_CheckFunction):
         expect_tabs = False
         if self.define or self.backslash or self.makefile_target:
             expect_tabs = True
-        if self.CONDITIONAL.search(text):
+        if not self.backslash and self.CONDITIONAL.search(text):
             expect_tabs = False
 
         # calculate for next line
Signature · 1 line
2.26.2
#1 lore raw

PATCH 1/1 utils/checkpackagelib/lib_mk.py: handle 'else' and 'elif' statements

Quoted 34 lines · On Wed, 9 Dec 2020 16:32:18 +0100 Thomas De Schampheleire…

From: Thomas De Schampheleire <[email protected]>

An 'else' or 'elif' clause inside a make conditional should not be indented in the same way as the if/endif clause. check-package did not recognize the else statement and expected an indentation.

For example:

ifdef FOOBAR
interesting
else
more interesting
endif

would, according to check-package, need to become:

ifdef FOOBAR
interesting
else
more interesting
endif

Treat 'else' and 'elif' the same as if-like keywords in the Indent test, but take into account that 'else' is also valid shell, so we need to correctly handle line continuation to prevent complaining about the 'else' in:

ifdef FOOBAR

	if true; \
	    ... \
	else \
	    ... \
	fi

endif

Quoted 7 lines

We don't add the 'else' and 'elif' statements to start_conditional, because it would cause incorrect nesting counting in class OverriddenVariable.

---
 utils/checkpackagelib/lib_mk.py | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Applied to master, thanks.

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
#2 lore raw

PATCH 1/1 utils/checkpackagelib/lib_mk.py: handle 'else' and 'elif' statements

In reply to Thomas De Schampheleire
Quoted 33 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Thomas" == Thomas De Schampheleire <[email protected]> writes:

From: Thomas De Schampheleire <[email protected]> An 'else' or 'elif' clause inside a make conditional should not be indented in the same way as the if/endif clause. check-package did not recognize the else statement and expected an indentation.

For example:

ifdef FOOBAR
interesting
else
more interesting
endif

would, according to check-package, need to become:

ifdef FOOBAR
interesting
else
more interesting
endif

Treat 'else' and 'elif' the same as if-like keywords in the Indent test, but take into account that 'else' is also valid shell, so we need to correctly handle line continuation to prevent complaining about the 'else' in:

ifdef FOOBAR

	if true; \
	    ... \
	else \
	    ... \
	fi
Quoted 6 lines

endif

We don't add the 'else' and 'elif' statements to start_conditional, because it would cause incorrect nesting counting in class OverriddenVariable.

Committed to 2020.02.x and 2020.11.x, thanks.

Signature · 1 line
Bye, Peter Korsgaard