summaryrefslogtreecommitdiffstats
path: root/source-builder/sb/macros.py
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2016-03-07 11:56:02 +1100
committerChris Johns <chrisj@rtems.org>2016-03-07 15:02:58 +1100
commit3a972f610213bab8374b5518f6a139ceed95823a (patch)
tree9ee412fc09f09ea4d83a785981180100ac157891 /source-builder/sb/macros.py
parentClean up 4.9 build issues. (diff)
downloadrtems-source-builder-3a972f610213bab8374b5518f6a139ceed95823a.tar.bz2
sb: Update code base to support Python3 and Python2.
Fix Windows support to allow MSYS2 Python to be used. Updates #2619.
Diffstat (limited to 'source-builder/sb/macros.py')
-rw-r--r--source-builder/sb/macros.py67
1 files changed, 46 insertions, 21 deletions
diff --git a/source-builder/sb/macros.py b/source-builder/sb/macros.py
index d2bdc91..2af8d36 100644
--- a/source-builder/sb/macros.py
+++ b/source-builder/sb/macros.py
@@ -21,6 +21,8 @@
# Macro tables.
#
+from __future__ import print_function
+
import re
import os
import string
@@ -41,7 +43,7 @@ class macros:
def __iter__(self):
return self
- def next(self):
+ def __next__(self):
if self.index < len(self.keys):
key = self.keys[self.index]
self.index += 1
@@ -51,6 +53,19 @@ class macros:
def iterkeys(self):
return self.keys
+ def _unicode_to_str(self, us):
+ try:
+ if type(us) == unicode:
+ return us.encode('ascii', 'replace')
+ except:
+ pass
+ try:
+ if type(us) == bytes:
+ return us.encode('ascii', 'replace')
+ except:
+ pass
+ return us
+
def __init__(self, name = None, original = None, sbdir = '.'):
self.files = []
self.macro_filter = re.compile(r'%{[^}]+}')
@@ -124,7 +139,7 @@ class macros:
return text
def __iter__(self):
- return macros.macro_iterator(self.keys())
+ return macros.macro_iterator(list(self.keys()))
def __getitem__(self, key):
macro = self.get(key)
@@ -133,14 +148,20 @@ class macros:
return macro[2]
def __setitem__(self, key, value):
+ key = self._unicode_to_str(key)
if type(key) is not str:
raise TypeError('bad key type (want str): %s' % (type(key)))
+ if type(value) is not tuple:
+ value = self._unicode_to_str(value)
if type(value) is str:
value = ('none', 'none', value)
if type(value) is not tuple:
raise TypeError('bad value type (want tuple): %s' % (type(value)))
if len(value) != 3:
raise TypeError('bad value tuple (len not 3): %d' % (len(value)))
+ value = (self._unicode_to_str(value[0]),
+ self._unicode_to_str(value[1]),
+ self._unicode_to_str(value[2]))
if type(value[0]) is not str:
raise TypeError('bad value tuple type field: %s' % (type(value[0])))
if type(value[1]) is not str:
@@ -163,11 +184,11 @@ class macros:
return self.has_key(key)
def __len__(self):
- return len(self.keys())
+ return len(list(self.keys()))
def keys(self, globals = True):
if globals:
- keys = self.macros['global'].keys()
+ keys = list(self.macros['global'].keys())
else:
keys = []
for rm in self.get_read_maps():
@@ -182,7 +203,7 @@ class macros:
def has_key(self, key):
if type(key) is not str:
raise TypeError('bad key type (want str): %s' % (type(key)))
- if self.key_filter(key) not in self.keys():
+ if self.key_filter(key) not in list(self.keys()):
return False
return True
@@ -195,7 +216,7 @@ class macros:
self.macros.pop(_map, None)
def maps(self):
- return self.macros.keys()
+ return list(self.macros.keys())
def map_keys(self, _map):
if _map in self.macros:
@@ -226,7 +247,7 @@ class macros:
trace_me = False
if trace_me:
- print '[[[[]]]] parsing macros'
+ print('[[[[]]]] parsing macros')
macros = { 'global': {} }
map = 'global'
lc = 0
@@ -238,11 +259,12 @@ class macros:
#print 'l:%s' % (l[:-1])
if len(l) == 0:
continue
+ l = self._unicode_to_str(l)
l_remaining = l
for c in l:
if trace_me:
- print ']]]]]]]] c:%s(%d) s:%s t:"%s" m:%r M:%s' % \
- (c, ord(c), state, token, macro, map)
+ print(']]]]]]]] c:%s(%d) s:%s t:"%s" m:%r M:%s' % \
+ (c, ord(c), state, token, macro, map))
l_remaining = l_remaining[1:]
if c is '#' and not state.startswith('value'):
break
@@ -345,7 +367,10 @@ class macros:
else:
raise error.internal('bad state: %s' % (state))
if state is 'macro':
- macros[map][macro[0].lower()] = (macro[1], macro[2], macro[3])
+ macros[map][self._unicode_to_str(macro[0].lower())] = \
+ (self._unicode_to_str(macro[1]),
+ self._unicode_to_str(macro[2]),
+ self._unicode_to_str(macro[3]))
macro = []
token = ''
state = 'key'
@@ -365,7 +390,7 @@ class macros:
mc.close()
self.files += [n]
return
- except IOError, err:
+ except IOError as err:
pass
raise error.general('opening macro file: %s' % \
(path.host(self.expand(name))))
@@ -481,22 +506,22 @@ class macros:
if __name__ == "__main__":
import copy
import sys
- m = macros(name = 'defaults.mc')
+ m = macros()
d = copy.copy(m)
m['test1'] = 'something'
- if d.has_key('test1'):
- print 'error: copy failed.'
+ if 'test1' in d:
+ print('error: copy failed.')
sys.exit(1)
m.parse("[test]\n" \
"test1: none, undefine, ''\n" \
"name: none, override, 'pink'\n")
- print 'set test:', m.set_read_map('test')
+ print('set test:', m.set_read_map('test'))
if m['name'] != 'pink':
- print 'error: override failed. name is %s' % (m['name'])
+ print('error: override failed. name is %s' % (m['name']))
sys.exit(1)
- if m.has_key('test1'):
- print 'error: map undefine failed.'
+ if 'test1' in m:
+ print('error: map undefine failed.')
sys.exit(1)
- print 'unset test:', m.unset_read_map('test')
- print m
- print m.keys()
+ print('unset test:', m.unset_read_map('test'))
+ print(m)
+ print(list(m.keys()))