[PATCH 1/2] sb: %if checks are numeric if the left and right values are numbers

chrisj at rtems.org chrisj at rtems.org
Mon Apr 25 11:35:29 UTC 2022


From: Chris Johns <chrisj at rtems.org>

- If the left and right values are numbers make the check numeric.

Update #4631
---
 source-builder/sb/config.py | 59 ++++++++++++++++++-------------------
 1 file changed, 28 insertions(+), 31 deletions(-)

diff --git a/source-builder/sb/config.py b/source-builder/sb/config.py
index 5bc96e2..e79c9c3 100644
--- a/source-builder/sb/config.py
+++ b/source-builder/sb/config.py
@@ -68,6 +68,13 @@ def _check_nil(value):
         istrue = False
     return istrue
 
+def _check_number(value):
+    try:
+        float(value)
+        return True
+    except ValueError:
+        return False
+
 class package:
 
     def __init__(self, name, arch, config):
@@ -996,37 +1003,27 @@ class file:
                             ifls = (' '.join(ifls[:op_pos]), op, ' '.join(ifls[op_pos + 1:]))
                             break
                 if len(ifls) != 3:
-                     self._error('malformed if: ' + reduce(add, ls, ''))
-                if ifls[1] == '==':
-                    if ifls[0] == ifls[2]:
-                        istrue = True
-                    else:
-                        istrue = False
-                elif ifls[1] == '!=' or ifls[1] == '=!':
-                    if ifls[0] != ifls[2]:
-                        istrue = True
-                    else:
-                        istrue = False
-                elif ifls[1] == '>':
-                    if ifls[0] > ifls[2]:
-                        istrue = True
-                    else:
-                        istrue = False
-                elif ifls[1] == '>=' or ifls[1] == '=>':
-                    if ifls[0] >= ifls[2]:
-                        istrue = True
-                    else:
-                        istrue = False
-                elif ifls[1] == '<=' or ifls[1] == '=<':
-                    if ifls[0] <= ifls[2]:
-                        istrue = True
-                    else:
-                        istrue = False
-                elif ifls[1] == '<':
-                    if ifls[0] < ifls[2]:
-                        istrue = True
-                    else:
-                        istrue = False
+                    self._error('malformed if: ' + reduce(add, ls, ''))
+                lhs = ifls[0]
+                operator = ifls[1]
+                rhs = ifls[2]
+                if _check_number(lhs) and _check_number(rhs):
+                    log.trace('config: %s: %3d:  _if: numeric value check' % \
+                              (self.name, self.lc))
+                    lhs = float(lhs)
+                    rhs = float(rhs)
+                if operator == '==':
+                    istrue = lhs == rhs
+                elif operator == '!=' or operator == '=!':
+                    istrue = lhs != rhs
+                elif operator == '>':
+                    istrue = lhs > rhs
+                elif operator == '>=' or operator == '=>':
+                    istrue = lhs >= rhs
+                elif operator == '<=' or operator == '=<':
+                    istrue = lhs <= rhs
+                elif operator == '<':
+                    istrue = lhs < rhs
                 else:
                     self._error('invalid %if operator: ' + reduce(add, ls, ''))
 
-- 
2.24.1



More information about the devel mailing list