mirror of
https://git.rtems.org/rtems-source-builder
synced 2024-10-09 07:15:10 +08:00
sb: Support --dry-run --with-download for 3rd party RTEMS BSP packages.
The building of 3rd party packages for an RTEMS BSP requires a valid BSP so the standard method to download the source for releasing does not work. This change adds support to allow this. The RTEMS BSP support will not generate an error is no BSP or tools are provided or found. The change addis logic operators to the %if statement so you can '||' to 'or' and '&&' to 'and' logic expressions. A new %log directive has been added to clean up the messages. A new %{!define ...} has been added to aid checking within logic expressions. All command line --with/--without now appear as macros. Add version.version to get just the RTEMS major and minor version. Some pkg-config issues have been resolved. Closes #2655.
This commit is contained in:
parent
5881078202
commit
0e22c3c7ff
@ -12,7 +12,18 @@
|
||||
# (--with-tools) is not provided use the prefix.
|
||||
#
|
||||
|
||||
%if %{_target} == %{nil}
|
||||
#
|
||||
# If a dry-run and with download ignore errors and correct setting for tools
|
||||
# and BSPs. Only after the source to download.
|
||||
#
|
||||
%if %{_dry_run} && %{defined with_download}
|
||||
%log BSP configuration errors ignored
|
||||
%define rtems_bsp_error 0
|
||||
%else
|
||||
%define rtems_bsp_error 1
|
||||
%endif
|
||||
|
||||
%if %{_target} == %{nil} && %{rtems_bsp_error}
|
||||
%error No RTEMS target specified: --rtems-bsp=arch/bsp (or --target=target)
|
||||
%endif
|
||||
|
||||
@ -21,7 +32,10 @@
|
||||
%endif
|
||||
|
||||
%ifn %{defined with_rtems_bsp}
|
||||
%error No RTEMS BSP specified: --rtems-bsp=arch/bsp (or --with-rtems-bsp=bsp)
|
||||
%if %{rtems_bsp_error}
|
||||
%error No RTEMS BSP specified: --rtems-bsp=arch/bsp (or --with-rtems-bsp=bsp)
|
||||
%endif
|
||||
%define with_rtems_bsp sparc/erc32
|
||||
%endif
|
||||
|
||||
%ifn %{defined with_tools}
|
||||
@ -56,12 +70,12 @@
|
||||
%define rtems_bsp_ldflags %{pkgconfig ldflags %{_host}-%{rtems_bsp}}
|
||||
%define rtems_bsp_libs %{pkgconfig libs %{_host}-%{rtems_bsp}}
|
||||
|
||||
%if %{rtems_bsp_cflags} == %{nil}
|
||||
%if %{rtems_bsp_cflags} == %{nil} && %{rtems_bsp_error}
|
||||
%error No RTEMS target CFLAGS found; Please check the --rtems-bsp option.
|
||||
%endif
|
||||
|
||||
%if %{rtems_bsp_ccflags} == %{nil}
|
||||
%define rtems_bsp_ccflags %{rtems_bsp_cflags}
|
||||
%define rtems_bsp_ccflags %{rtems_bsp_cflags}
|
||||
%endif
|
||||
|
||||
#
|
||||
|
@ -220,7 +220,7 @@ try:
|
||||
except ImportError:
|
||||
print("incorrect package config installation", file = sys.stderr)
|
||||
sys.exit(1)
|
||||
except pkgconfig.error, e:
|
||||
except pkgconfig.error as e:
|
||||
print('error: %s' % (e), file = sys.stderr)
|
||||
sys.exit(1)
|
||||
sys.exit(ec)
|
||||
|
@ -132,6 +132,7 @@ def host_setup(opts):
|
||||
|
||||
sane = True
|
||||
|
||||
log.trace('--- check host set up : start"')
|
||||
for d in list(opts.defaults.keys()):
|
||||
try:
|
||||
(test, constraint, value) = opts.defaults.get(d)
|
||||
@ -152,6 +153,7 @@ def host_setup(opts):
|
||||
log.trace('%c %15s: %r -> "%s"' % (tag, d, opts.defaults.get(d), value))
|
||||
if sane and not ok:
|
||||
sane = False
|
||||
log.trace('--- check host set up : end"')
|
||||
|
||||
return sane
|
||||
|
||||
|
@ -574,6 +574,14 @@ class file:
|
||||
s = s.replace(m, '0')
|
||||
expanded = True
|
||||
mn = None
|
||||
elif m.startswith('%{!defined'):
|
||||
n = self._label(m[10:-1].strip())
|
||||
if n in self.macros:
|
||||
s = s.replace(m, '0')
|
||||
else:
|
||||
s = s.replace(m, '1')
|
||||
expanded = True
|
||||
mn = None
|
||||
elif m.startswith('%{path '):
|
||||
pl = m[7:-1].strip().split()
|
||||
ok = False
|
||||
@ -752,13 +760,45 @@ class file:
|
||||
def add(x, y):
|
||||
return x + ' ' + str(y)
|
||||
|
||||
istrue = False
|
||||
if isvalid:
|
||||
if len(ls) == 2:
|
||||
s = ls[1]
|
||||
else:
|
||||
s = (ls[1] + ' ' + ls[2])
|
||||
ifls = s.split()
|
||||
if len(ls) == 1:
|
||||
self._error('invalid if expression: ' + reduce(add, ls, ''))
|
||||
|
||||
cistrue = True # compound istrue
|
||||
sls = reduce(add, ls[1:], '').split()
|
||||
cls = sls
|
||||
|
||||
while len(cls) > 0 and isvalid:
|
||||
|
||||
join_op = 'none'
|
||||
|
||||
if cls[0] == '||' or cls[0] == '&&':
|
||||
if cls[0] == '||':
|
||||
join_op = 'or'
|
||||
elif cls[0] == '&&':
|
||||
join_op = 'and'
|
||||
cls = cls[1:]
|
||||
ori = 0
|
||||
andi = 0
|
||||
i = len(cls)
|
||||
if '||' in cls:
|
||||
ori = cls.index('||')
|
||||
if '&&' in cls:
|
||||
andi = cls.index('&&')
|
||||
if ori > 0 or andi > 0:
|
||||
if ori < andi:
|
||||
i = ori
|
||||
else:
|
||||
i = andi
|
||||
if ori == 0:
|
||||
i = andi
|
||||
ls = cls[:i]
|
||||
if len(ls) == 0:
|
||||
self._error('invalid if expression: ' + reduce(add, sls, ''))
|
||||
cls = cls[i:]
|
||||
|
||||
istrue = False
|
||||
|
||||
ifls = ls
|
||||
if len(ifls) == 1:
|
||||
#
|
||||
# Check if '%if %{x} == %{nil}' has both parts as nothing
|
||||
@ -835,10 +875,22 @@ class file:
|
||||
istrue = False
|
||||
else:
|
||||
self._error('invalid %if operator: ' + reduce(add, ls, ''))
|
||||
if invert:
|
||||
istrue = not istrue
|
||||
log.trace('config: %s: _if: %s %s' % (self.name, ifls, str(istrue)))
|
||||
return self._ifs(config, ls, '%if', istrue, isvalid, dir, info)
|
||||
|
||||
if join_op == 'or':
|
||||
if istrue:
|
||||
cistrue = True
|
||||
elif join_op == 'and':
|
||||
if not istrue:
|
||||
cistrue = False
|
||||
else:
|
||||
cistrue = istrue
|
||||
|
||||
log.trace('config: %s: _if: %s %s %s %s' % (self.name, ifls, str(cistrue),
|
||||
join_op, str(istrue)))
|
||||
|
||||
if invert:
|
||||
cistrue = not cistrue
|
||||
return self._ifs(config, ls, '%if', cistrue, isvalid, dir, info)
|
||||
|
||||
def _ifos(self, config, ls, isvalid, dir, info):
|
||||
isos = False
|
||||
@ -922,6 +974,9 @@ class file:
|
||||
elif ls[0] == '%error':
|
||||
if isvalid:
|
||||
return ('data', ['%%error %s' % (self._name_line_msg(l[7:]))])
|
||||
elif ls[0] == '%log':
|
||||
if isvalid:
|
||||
return ('data', ['%%log %s' % (self._name_line_msg(l[4:]))])
|
||||
elif ls[0] == '%warning':
|
||||
if isvalid:
|
||||
return ('data', ['%%warning %s' % (self._name_line_msg(l[9:]))])
|
||||
@ -1019,9 +1074,11 @@ class file:
|
||||
if l.startswith('%error'):
|
||||
l = self._expand(l)
|
||||
raise error.general('config error: %s' % (l[7:]))
|
||||
elif l.startswith('%log'):
|
||||
l = self._expand(l)
|
||||
log.output(l[4:])
|
||||
elif l.startswith('%warning'):
|
||||
l = self._expand(l)
|
||||
log.stderr('warning: %s' % (l[9:]))
|
||||
log.warning(l[9:])
|
||||
if not directive:
|
||||
l = self._expand(l)
|
||||
|
@ -254,6 +254,13 @@ class command_line:
|
||||
else:
|
||||
value = '='.join(los[1:])
|
||||
long_opt[1](lo, long_opt[0], value)
|
||||
else:
|
||||
if a.startswith('--with'):
|
||||
if len(los) != 1:
|
||||
value = los[1]
|
||||
else:
|
||||
value = '1'
|
||||
self.defaults[los[0][2:].replace('-', '_').lower()] = ('none', 'none', value)
|
||||
else:
|
||||
self.opts['params'].append(a)
|
||||
arg += 1
|
||||
@ -548,7 +555,7 @@ class command_line:
|
||||
raise error.general('invalid --rtems-bsp option')
|
||||
rtems_version = self.parse_args('--rtems-version')
|
||||
if rtems_version is None:
|
||||
rtems_version = '%d.%d' % (version.major, version.minor)
|
||||
rtems_version = version.version()
|
||||
else:
|
||||
rtems_version = rtems_version[1]
|
||||
self.args.append('--target=%s-rtems%s' % (ab[0], rtems_version))
|
||||
|
@ -214,6 +214,7 @@ class package(object):
|
||||
if prefix:
|
||||
self._log('prefix: %s' % (prefix))
|
||||
if type(prefix) is str:
|
||||
self.prefix = []
|
||||
for p in prefix.split(os.pathsep):
|
||||
self.prefix += [path.shell(p)]
|
||||
elif type(prefix) is list:
|
||||
|
@ -60,6 +60,8 @@ class buildset:
|
||||
self.macros = copy.copy(opts.defaults)
|
||||
else:
|
||||
self.macros = copy.copy(macros)
|
||||
log.trace('_bset: %s: macro defaults' % (bset))
|
||||
log.trace(str(self.macros))
|
||||
self.bset = bset
|
||||
_target = self.macros.expand('%{_target}')
|
||||
if len(_target):
|
||||
|
@ -111,5 +111,8 @@ def load_release_hashes(macros):
|
||||
raise error.general('invalid release hash in VERSION')
|
||||
sources.hash((hs[0], hash[0], hs[1]), macros, hash_error)
|
||||
|
||||
def version():
|
||||
return _version
|
||||
|
||||
if __name__ == '__main__':
|
||||
print('Version: %s' % (str()))
|
||||
|
Loading…
x
Reference in New Issue
Block a user