Changeset 6b0d76c in rtems-source-builder


Ignore:
Timestamp:
Mar 19, 2016, 6:23:50 AM (3 years ago)
Author:
Chris Johns <chrisj@…>
Branches:
4.11
Children:
febf4fb
Parents:
57b93eb
Message:

sb: fix the if logic to handle directives in if statements.

Directives in if statements end at the end of an if. The cannot
change or split across directive boundaries.

Add more trace detail to config.py.

Updates #2661.

Location:
source-builder/sb
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • source-builder/sb/config.py

    r57b93eb r6b0d76c  
    222222    """Parse a config file."""
    223223
    224     _directive = [ '%description',
     224    _directive = [ '%include',
     225                   '%description',
    225226                   '%prep',
    226227                   '%build',
    227228                   '%clean',
    228                    '%install',
    229                    '%include',
    230229                   '%install',
    231230                   '%testing' ]
     
    277276        self.in_error = False
    278277        self.lc = 0
     278        self.if_depth = 0
    279279        self.conditionals = {}
    280280        self._packages = {}
     
    681681            if ls[1] == 'select':
    682682                self.macros.lock_read_map()
    683                 log.trace('config: %s: _disable_select: %s' % (self.name, ls[1]))
     683                log.trace('config: %s: %3d: _disable_select: %s' % (self.name, self.lc,
     684                                                                     ls[1]))
    684685            else:
    685686                log.warning('invalid disable statement: %s' % (ls[1]))
     
    690691        else:
    691692            r = self.macros.set_read_map(ls[1])
    692             log.trace('config: %s: _select: %s %s %r' % \
    693                           (self.name, r, ls[1], self.macros.maps()))
     693            log.trace('config: %s: %3d: _select: %s %s %r' % \
     694                          (self.name, self.lc,
     695                           r, ls[1], self.macros.maps()))
    694696
    695697    def _sources(self, ls):
     
    728730
    729731    def _ifs(self, config, ls, label, iftrue, isvalid, dir, info):
     732        log.trace('config: %s: %3d: _ifs[%i]: dir=%s %i %r' % \
     733                  (self.name, self.lc, self.if_depth, str(dir), len(ls), ls))
     734        in_dir = dir
    730735        in_iftrue = True
    731736        data = []
     
    745750                    raise error.general('terminating build')
    746751                if r[1] == '%endif':
    747                     log.trace('config: %s: _ifs: %s %s' % (self.name, r[1], this_isvalid))
     752                    log.trace('config: %s: %3d: _ifs[%i]: %%endif: dir=%s %s %s %r' % \
     753                              (self.name, self.lc, self.if_depth,
     754                               str(dir), r[1], this_isvalid, data))
     755                    if in_dir is None:
     756                        if dir is not None:
     757                            dir, info, data = self._process_directive(r, dir, info, data)
     758                    else:
     759                        if in_dir != dir:
     760                            self._error('directives cannot change scope across if statements')
     761
    748762                    return data
    749763                if r[1] == '%else':
     
    772786        cls = sls
    773787
     788        log.trace('config: %s: %3d: _if[%i]: %s' % (self.name, self.lc,
     789                                                    self.if_depth, sls))
     790
     791        self.if_depth += 1
     792
    774793        while len(cls) > 0 and isvalid:
    775794
     
    782801                    join_op = 'and'
    783802                cls = cls[1:]
    784                 log.trace('config: %s: _if: joining: %s' % (self.name, join_op))
     803                log.trace('config: %s: %3d: _if[%i]: joining: %s' % (self.name, self.lc,
     804                                                                     self.if_depth,
     805                                                                     join_op))
    785806            ori = 0
    786807            andi = 0
     
    788809            if '||' in cls:
    789810                ori = cls.index('||')
    790                 log.trace('config: %s: _if: OR found at %i' % (self.name, ori))
     811                log.trace('config: %s: %3d: _if[%i}: OR found at %i' % (self.name, self.lc,
     812                                                                        self.if_depth,
     813                                                                        ori))
    791814            if '&&' in cls:
    792815                andi = cls.index('&&')
    793                 log.trace('config: %s: _if: AND found at %i' % (self.name, andi))
     816                log.trace('config: %s: %3d: _if[%i]: AND found at %i' % (self.name, self.lc,
     817                                                                         self.if_depth,
     818                                                                         andi))
    794819            if ori > 0 or andi > 0:
    795820                if ori == 0:
     
    801826                else:
    802827                    i = andi
    803                 log.trace('config: %s: _if: next OP found at %i' % (self.name, i))
     828                log.trace('config: %s: %3d: _if[%i]: next OP found at %i' % (self.name, self.lc,
     829                                                                             self.if_depth,
     830                i))
    804831            ls = cls[:i]
    805832            if len(ls) == 0:
     
    898925                cistrue = istrue
    899926
    900             log.trace('config: %s: _if:  %s %s %s %s' % (self.name, ifls, str(cistrue),
    901                                                          join_op, str(istrue)))
     927            log.trace('config: %s: %3d: _if[%i]:  %s %s %s %s' % (self.name, self.lc,
     928                                                                  self.if_depth,
     929                                                                  ifls, str(cistrue),
     930                                                                  join_op, str(istrue)))
    902931
    903932        if invert:
    904933            cistrue = not cistrue
    905         return self._ifs(config, ls, '%if', cistrue, isvalid, dir, info)
     934
     935        ifs_return = self._ifs(config, ls, '%if', cistrue, isvalid, dir, info)
     936
     937        self.if_depth -= 1
     938
     939        log.trace('config: %s: %3d: _if[%i]: %r' % (self.name, self.lc,
     940                                                    self.if_depth, ifs_return))
     941
     942        return ifs_return
    906943
    907944    def _ifos(self, config, ls, isvalid, dir, info):
     
    948985            if len(l) == 0:
    949986                continue
    950             log.trace('config: %s: %03d: %s %s' % \
     987            log.trace('config: %s: %0d: %s %s' % \
    951988                          (self.name, self.lc, str(isvalid), l))
    952989            lo = l
     
    10021039                    d = self._if(config, ls, isvalid, dir, info)
    10031040                    if len(d):
    1004                         log.trace('config: %s: %%if: %s' % (self.name, d))
     1041                        log.trace('config: %s: %3d: %%if: %s' % (self.name, self.lc, d))
    10051042                        return ('data', d)
    10061043                elif ls[0] == '%ifn':
    10071044                    d = self._if(config, ls, isvalid, dir, info, True)
    10081045                    if len(d):
    1009                         log.trace('config: %s: %%ifn: %s' % (self.name, d))
     1046                        log.trace('config: %s: %3d: %%ifn: %s' % (self.name, self.lc, d))
    10101047                        return ('data', d)
    10111048                elif ls[0] == '%ifos':
     
    10501087                        for d in self._directive:
    10511088                            if ls[0].strip() == d:
     1089                                log.trace('config: %s: %0d: _parse: directive: %s' % \
     1090                                          (self.name, self.lc, ls[0].strip()))
    10521091                                return ('directive', ls[0].strip(), ls[1:])
    10531092                        log.warning("unknown directive: '" + ls[0] + "'")
     
    10821121
    10831122    def _process_data(self, results, directive, info, data):
     1123        log.trace('config: %s: %3d: _process_data: result=#%r# directive=#%s# info=#%r# data=#%r#' % \
     1124                  (self.name, self.lc, results, directive, info, data))
    10841125        new_data = []
    10851126        for l in results[1]:
     
    10961137                l = self._expand(l)
    10971138                ls = self.tags.split(l, 1)
    1098                 log.trace('config: %s: _tag: %s %s' % (self.name, l, ls))
     1139                log.trace('config: %s: %3d: _tag: %s %s' % (self.name, self.lc, l, ls))
    10991140                if len(ls) > 1:
    11001141                    info = ls[0].lower()
     
    11101151            else:
    11111152                l = self._expand(l)
    1112                 log.trace('config: %s: _data: %s %s' % (self.name, l, new_data))
     1153                log.trace('config: %s: %3d: _data: %s %s' % (self.name, self.lc, l, new_data))
    11131154                new_data.append(l)
    11141155        return (directive, info, data + new_data)
     
    11261167
    11271168    def _directive_extend(self, dir, data):
     1169        log.trace('config: %s: %3d: _directive_extend: %s: %r' % (self.name, self.lc, dir, data))
    11281170        self._packages[self.package].directive_extend(dir, data)
    11291171
  • source-builder/sb/setbuilder.py

    r57b93eb r6b0d76c  
    366366                            deps += b.config.includes()
    367367                        builds += [b]
     368                        #
     369                        # Dump post build macros.
     370                        #
     371                        log.trace('_bset: macros post-build')
     372                        log.trace(str(macros))
    368373                    else:
    369374                        raise error.general('invalid config type: %s' % (configs[s]))
Note: See TracChangeset for help on using the changeset viewer.