sb/config: Expanded nested shell commands

Updates #3893
This commit is contained in:
Chris Johns 2020-03-02 14:45:29 +11:00
parent 5ec0913ada
commit 175ce0bcb0

View File

@ -419,7 +419,7 @@ class file:
print('-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=') print('-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=')
return macros return macros
def _shell(self, line): def _shell(self, line, nesting = 0):
# #
# Parse the line and handle nesting '()' pairs. If on Windows # Parse the line and handle nesting '()' pairs. If on Windows
# handle embedded '"' (double quotes) as the command is run as # handle embedded '"' (double quotes) as the command is run as
@ -442,6 +442,9 @@ class file:
output)) output))
return output return output
if nesting > 200:
raise error.general('shell macro failed: too many nesting levels')
updating = True updating = True
while updating: while updating:
updating = False updating = False
@ -455,9 +458,11 @@ class file:
if braces > 0: if braces > 0:
braces -= 1 braces -= 1
else: 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 updating = True
break break
return line return line
def _pkgconfig_check(self, test): def _pkgconfig_check(self, test):