summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2020-03-02 14:45:29 +1100
committerChris Johns <chrisj@rtems.org>2020-03-03 11:18:05 +1100
commit175ce0bcb0618c22d67735f4c83b0ab140a1f609 (patch)
treec967d91c461b3b18da98ebc7dcd1a471c2cee514
parent5ec0913ada0b639226f5368970874481f28f0d72 (diff)
sb/config: Expanded nested shell commands
Updates #3893
-rw-r--r--source-builder/sb/config.py9
1 files changed, 7 insertions, 2 deletions
diff --git a/source-builder/sb/config.py b/source-builder/sb/config.py
index d4c58aa..e781b8e 100644
--- a/source-builder/sb/config.py
+++ b/source-builder/sb/config.py
@@ -419,7 +419,7 @@ class file:
print('-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=')
return macros
- def _shell(self, line):
+ def _shell(self, line, nesting = 0):
#
# Parse the line and handle nesting '()' pairs. If on Windows
# handle embedded '"' (double quotes) as the command is run as
@@ -442,6 +442,9 @@ class file:
output))
return output
+ if nesting > 200:
+ raise error.general('shell macro failed: too many nesting levels')
+
updating = True
while updating:
updating = False
@@ -455,9 +458,11 @@ class file:
if braces > 0:
braces -= 1
else:
- line = line[:pos] + _exec(line[pos:p + 1]) + line[p + 1:]
+ shell_cmd = '%(' + self._shell(line[pos + 2:p], nesting + 1) + ')'
+ line = line[:pos] + _exec(shell_cmd) + line[p + 1:]
updating = True
break
+
return line
def _pkgconfig_check(self, test):