summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2019-07-08 22:44:02 +1000
committerChris Johns <chrisj@rtems.org>2019-07-21 21:09:34 +1000
commit8922c8bbb0e14a14f480b136d76f18818d870da9 (patch)
tree930b2829d2599127b2e0127dbb8aac0613d19b8e
parent5/packages: Add curl and update all packages with RTEMS 5 and LibBSD (diff)
downloadrtems-source-builder-8922c8bbb0e14a14f480b136d76f18818d870da9.tar.bz2
sb/config: Fix GDB probes when using python-config.
- Fix the config file handling of shell calls where the shell command has nesting braces. - Fix the bool check to support a '!' next to the check value.
-rw-r--r--source-builder/config/gdb-common-1.cfg5
-rw-r--r--source-builder/sb/config.py47
2 files changed, 39 insertions, 13 deletions
diff --git a/source-builder/config/gdb-common-1.cfg b/source-builder/config/gdb-common-1.cfg
index 9018448..159b8a5 100644
--- a/source-builder/config/gdb-common-1.cfg
+++ b/source-builder/config/gdb-common-1.cfg
@@ -108,8 +108,9 @@
%define gdb-host-libs -L '%{host_ldflags}'
%endif
%if %{gdb-python-config} != %{nil}
- %define gdb-python-config-libs -l '%(%{gdb-python-config} --ldflags)'
- %define gdb-python-lib-check %(%{_sbdir}/sb/rtems-build-dep -c %{__cc} %{gdb-host-libs} %{gdb-python-config-libs})
+ %define gdb-python-lib-filter awk 'BEGIN{FS=" "}/python/{for(i=1;i<NF;++i)if(match($i,".*python.*")) print "lib"substr($i,3)"*";}'
+ %define gdb-python-config-libs %(%{gdb-python-config} --ldflags | %{gdb-python-lib-filter})
+ %define gdb-python-lib-check %(%{_sbdir}/sb/rtems-build-dep -c %{__cc} %{gdb-host-libs} -l %{gdb-python-config-libs})
%else
%define gdb-python-lib-check %(%{_sbdir}/sb/rtems-build-dep -c %{__cc} %{gdb-host-libs} -l %{gdb-python-ver-lib})
%endif
diff --git a/source-builder/sb/config.py b/source-builder/sb/config.py
index df81d42..93a74f3 100644
--- a/source-builder/sb/config.py
+++ b/source-builder/sb/config.py
@@ -49,13 +49,17 @@ except:
sys.exit(1)
def _check_bool(value):
+ istrue = None
if value.isdigit():
if int(value) == 0:
istrue = False
else:
istrue = True
else:
- istrue = None
+ if type(value) is str and len(value) == 2 and value[0] == '!':
+ istrue = _check_bool(value[1])
+ if type(istrue) is bool:
+ istrue = not istrue
return istrue
def _check_nil(value):
@@ -416,20 +420,41 @@ class file:
return macros
def _shell(self, line):
- sl = self.sf.findall(line)
- if len(sl):
- e = execute.capture_execution()
- for s in sl:
+ #
+ # Parse the line and handle nesting '()' pairs.
+ #
+ def _exec(shell_macro):
+ output = ''
+ if len(shell_macro) > 3:
+ e = execute.capture_execution()
if options.host_windows:
- cmd = '%s -c "%s"' % (self.macros.expand('%{__sh}'), s[2:-1])
+ cmd = '%s -c "%s"' % (self.macros.expand('%{__sh}'), shell_macro[2:-1])
else:
- cmd = s[2:-1]
+ cmd = shell_macro[2:-1]
exit_code, proc, output = e.shell(cmd)
log.trace('shell-output: %d %s' % (exit_code, output))
- if exit_code == 0:
- line = line.replace(s, output)
- else:
- raise error.general('shell macro failed: %s:%d: %s' % (s, exit_code, output))
+ if exit_code != 0:
+ raise error.general('shell macro failed: %s: %d: %s' % (cmd,
+ exit_code,
+ output))
+ return output
+
+ updating = True
+ while updating:
+ updating = False
+ pos = line.find('%(')
+ if pos >= 0:
+ braces = 0
+ for p in range(pos + 2, len(line)):
+ if line[p] == '(':
+ braces += 1
+ elif line[p] == ')':
+ if braces > 0:
+ braces -= 1
+ else:
+ line = line[:pos] + _exec(line[pos:p + 1]) + line[p + 1:]
+ updating = True
+ break
return line
def _pkgconfig_check(self, test):