Changeset 38ed59a in rtems-source-builder


Ignore:
Timestamp:
Mar 17, 2016, 5:39:57 AM (4 years ago)
Author:
Chris Johns <chrisj@…>
Branches:
4.10, 4.9, master
Children:
89a94d0
Parents:
1bbb766
git-author:
Chris Johns <chrisj@…> (03/17/16 05:39:57)
git-committer:
Chris Johns <chrisj@…> (03/17/16 05:50:05)
Message:

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.

Files:
8 edited

Legend:

Unmodified
Added
Removed
  • rtems/config/rtems-bsp.cfg

    r1bbb766 r38ed59a  
    1313#
    1414
    15 %if %{_target} == %{nil}
     15#
     16# If a dry-run and with download ignore errors and correct setting for tools
     17# and BSPs. Only after the source to download.
     18#
     19%if %{_dry_run} && %{defined with_download}
     20 %log BSP configuration errors ignored
     21 %define rtems_bsp_error 0
     22%else
     23 %define rtems_bsp_error 1
     24%endif
     25
     26%if %{_target} == %{nil} && %{rtems_bsp_error}
    1627 %error No RTEMS target specified: --rtems-bsp=arch/bsp (or --target=target)
    1728%endif
     
    2233
    2334%ifn %{defined with_rtems_bsp}
    24  %error No RTEMS BSP specified: --rtems-bsp=arch/bsp (or --with-rtems-bsp=bsp)
     35 %if %{rtems_bsp_error}
     36  %error No RTEMS BSP specified: --rtems-bsp=arch/bsp (or --with-rtems-bsp=bsp)
     37 %endif
     38 %define with_rtems_bsp sparc/erc32
    2539%endif
    2640
     
    5771%define rtems_bsp_libs      %{pkgconfig libs    %{_host}-%{rtems_bsp}}
    5872
    59 %if %{rtems_bsp_cflags} == %{nil}
     73%if %{rtems_bsp_cflags} == %{nil} && %{rtems_bsp_error}
    6074 %error No RTEMS target CFLAGS found; Please check the --rtems-bsp option.
    6175%endif
    6276
    6377%if %{rtems_bsp_ccflags} == %{nil}
    64   %define rtems_bsp_ccflags %{rtems_bsp_cflags}
     78 %define rtems_bsp_ccflags %{rtems_bsp_cflags}
    6579%endif
    6680
  • source-builder/pkg-config

    r1bbb766 r38ed59a  
    221221    print("incorrect package config installation", file = sys.stderr)
    222222    sys.exit(1)
    223 except pkgconfig.error, e:
     223except pkgconfig.error as e:
    224224    print('error: %s' % (e), file = sys.stderr)
    225225    sys.exit(1)
  • source-builder/sb/check.py

    r1bbb766 r38ed59a  
    133133    sane = True
    134134
     135    log.trace('--- check host set up : start"')
    135136    for d in list(opts.defaults.keys()):
    136137        try:
     
    153154            if sane and not ok:
    154155                sane = False
     156    log.trace('--- check host set up : end"')
    155157
    156158    return sane
  • source-builder/sb/config.py

    r1bbb766 r38ed59a  
    575575                    expanded = True
    576576                    mn = None
     577                elif m.startswith('%{!defined'):
     578                    n = self._label(m[10:-1].strip())
     579                    if n in self.macros:
     580                        s = s.replace(m, '0')
     581                    else:
     582                        s = s.replace(m, '1')
     583                    expanded = True
     584                    mn = None
    577585                elif m.startswith('%{path '):
    578586                    pl = m[7:-1].strip().split()
     
    753761            return x + ' ' + str(y)
    754762
    755         istrue = False
    756         if isvalid:
    757             if len(ls) == 2:
    758                 s = ls[1]
    759             else:
    760                 s = (ls[1] + ' ' + ls[2])
    761             ifls = s.split()
     763        if len(ls) == 1:
     764            self._error('invalid if expression: ' + reduce(add, ls, ''))
     765
     766        cistrue = True # compound istrue
     767        sls = reduce(add, ls[1:], '').split()
     768        cls = sls
     769
     770        while len(cls) > 0 and isvalid:
     771
     772            join_op = 'none'
     773
     774            if cls[0] == '||' or cls[0] == '&&':
     775                if cls[0] == '||':
     776                    join_op = 'or'
     777                elif cls[0] == '&&':
     778                    join_op = 'and'
     779                cls = cls[1:]
     780            ori = 0
     781            andi = 0
     782            i = len(cls)
     783            if '||' in cls:
     784                ori = cls.index('||')
     785            if '&&' in cls:
     786                andi = cls.index('&&')
     787            if ori > 0 or andi > 0:
     788                if ori < andi:
     789                    i = ori
     790                else:
     791                    i = andi
     792                if ori == 0:
     793                    i = andi
     794            ls = cls[:i]
     795            if len(ls) == 0:
     796                self._error('invalid if expression: ' + reduce(add, sls, ''))
     797            cls = cls[i:]
     798
     799            istrue = False
     800
     801            ifls = ls
    762802            if len(ifls) == 1:
    763803                #
     
    836876                else:
    837877                    self._error('invalid %if operator: ' + reduce(add, ls, ''))
    838             if invert:
    839                 istrue = not istrue
    840             log.trace('config: %s: _if:  %s %s' % (self.name, ifls, str(istrue)))
    841         return self._ifs(config, ls, '%if', istrue, isvalid, dir, info)
     878
     879            if join_op == 'or':
     880                if istrue:
     881                    cistrue = True
     882            elif join_op == 'and':
     883                if not istrue:
     884                    cistrue = False
     885            else:
     886                cistrue = istrue
     887
     888            log.trace('config: %s: _if:  %s %s %s %s' % (self.name, ifls, str(cistrue),
     889                                                         join_op, str(istrue)))
     890
     891        if invert:
     892            cistrue = not cistrue
     893        return self._ifs(config, ls, '%if', cistrue, isvalid, dir, info)
    842894
    843895    def _ifos(self, config, ls, isvalid, dir, info):
     
    923975                    if isvalid:
    924976                        return ('data', ['%%error %s' % (self._name_line_msg(l[7:]))])
     977                elif ls[0] == '%log':
     978                    if isvalid:
     979                        return ('data', ['%%log %s' % (self._name_line_msg(l[4:]))])
    925980                elif ls[0] == '%warning':
    926981                    if isvalid:
     
    10201075                l = self._expand(l)
    10211076                raise error.general('config error: %s' % (l[7:]))
     1077            elif l.startswith('%log'):
     1078                l = self._expand(l)
     1079                log.output(l[4:])
    10221080            elif l.startswith('%warning'):
    10231081                l = self._expand(l)
    1024                 log.stderr('warning: %s' % (l[9:]))
    10251082                log.warning(l[9:])
    10261083            if not directive:
  • source-builder/sb/options.py

    r1bbb766 r38ed59a  
    255255                        value = '='.join(los[1:])
    256256                    long_opt[1](lo, long_opt[0], value)
     257                else:
     258                    if a.startswith('--with'):
     259                        if len(los) != 1:
     260                            value = los[1]
     261                        else:
     262                            value = '1'
     263                        self.defaults[los[0][2:].replace('-', '_').lower()] = ('none', 'none', value)
    257264            else:
    258265                self.opts['params'].append(a)
     
    549556            rtems_version = self.parse_args('--rtems-version')
    550557            if rtems_version is None:
    551                 rtems_version = '%d.%d' % (version.major, version.minor)
     558                rtems_version = version.version()
    552559            else:
    553560                rtems_version = rtems_version[1]
  • source-builder/sb/pkgconfig.py

    r1bbb766 r38ed59a  
    215215            self._log('prefix: %s' % (prefix))
    216216            if type(prefix) is str:
     217                self.prefix = []
    217218                for p in prefix.split(os.pathsep):
    218219                    self.prefix += [path.shell(p)]
  • source-builder/sb/setbuilder.py

    r1bbb766 r38ed59a  
    6161        else:
    6262            self.macros = copy.copy(macros)
     63        log.trace('_bset: %s: macro defaults' % (bset))
     64        log.trace(str(self.macros))
    6365        self.bset = bset
    6466        _target = self.macros.expand('%{_target}')
  • source-builder/sb/version.py

    r1bbb766 r38ed59a  
    112112                sources.hash((hs[0], hash[0], hs[1]), macros, hash_error)
    113113
     114def version():
     115    return _version
     116
    114117if __name__ == '__main__':
    115118    print('Version: %s' % (str()))
Note: See TracChangeset for help on using the changeset viewer.