Changeset fba1136 in rtems-source-builder


Ignore:
Timestamp:
Feb 19, 2013, 8:00:56 AM (7 years ago)
Author:
Chris Johns <chrisj@…>
Branches:
4.10, 4.11, 4.9, master
Children:
972ad8c
Parents:
8d7624e
Message:

Build Sets can reference other build sets.

A build set can invoke another build set. This allows an 'all'
type build set that builds all the RTEMS archs.

Change the get config call to return a map of paths and files.

Location:
source-builder/sb
Files:
2 edited

Legend:

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

    r8d7624e rfba1136  
    467467        return package.name()
    468468
    469 def get_configs(opts, _defaults, ext = '.cfg'):
     469def get_configs(opts, _defaults):
    470470
    471471    def _scan(_path, ext):
     
    474474            prefix = root[len(_path) + 1:]
    475475            for file in files:
    476                 if file.endswith(ext):
    477                     configs += [path.join(prefix, file)]
     476                for e in ext:
     477                    if file.endswith(e):
     478                        configs += [path.join(prefix, file)]
    478479        return configs
    479480
    480     paths = []
    481     configs = []
    482     files = []
     481    configs = { 'paths': [], 'files': [] }
    483482    for cp in opts.expand('%{_configdir}', _defaults).split(':'):
    484         paths += [path.host(path.abspath(cp))]
    485         files += _scan(cp, ext)
    486     for f in sorted(files):
    487         config = f
    488         if config.endswith(ext):
    489             config = config[:0 - len(ext)]
    490         configs += [config]
    491     return paths, configs
     483        configs['paths'] += [path.host(path.abspath(cp))]
     484        configs['files'] += _scan(cp, ['.cfg', '.bset'])
     485    configs['files'] = sorted(configs['files'])
     486    return configs
    492487
    493488def run(args):
  • source-builder/sb/setbuilder.py

    r8d7624e rfba1136  
    5353    """Build a set builds a set of packages."""
    5454
    55     def __init__(self, bset, _defaults, opts):
     55    def __init__(self, bset, _configs, _defaults, opts):
    5656        _trace(opts, '_bset:%s: init' % (bset))
    5757        self.opts = opts
     58        self.configs = _configs
    5859        self.defaults = _defaults
    5960        self.bset = bset
     
    6465        if not self.opts.quiet():
    6566            log.output(text)
     67
     68    def _find_config(self, config):
     69        if config.endswith('.bset') or config.endswith('.cfg'):
     70            names = [config]
     71        else:
     72            names = ['%s.cfg' % (path.basename(config)),
     73                     '%s.bset' % (path.basename(config))]
     74        for c in self.configs['files']:
     75            if path.basename(c) in names:
     76                if path.dirname(config).endswith(path.dirname(config)):
     77                    return c
     78        return None
    6679
    6780    def copy(self, src, dst):
     
    168181                        raise error.general('invalid directive in build set files: %s' % (l))
    169182                else:
    170                     configs += [l.strip()]
     183                    l = l.strip()
     184                    c = self._find_config(l)
     185                    if c is None:
     186                        raise error.general('cannot find file: %s' % (l))
     187                    configs += [c]
    171188        except:
    172189            bset.close()
     
    192209        return self.parse(bset)
    193210
    194     def make(self):
     211    def build(self):
    195212
    196213        _trace(self.opts, '_bset:%s: make' % (self.bset))
     
    205222            builds = []
    206223            for s in range(0, len(configs)):
    207                 b = build.build(configs[s], _defaults = self.defaults, opts = self.opts)
    208                 if s == 0:
    209                     tmproot = self.first_package(b)
    210                 b.make()
    211                 self.every_package(b, tmproot)
    212                 if s == len(configs) - 1:
    213                     self.last_package(b, tmproot)
    214                 builds += [b]
     224                if configs[s].endswith('.bset'):
     225                    bs = buildset(configs[s], _configs = self.configs, _defaults = self.defaults, opts = self.opts)
     226                    bs.build()
     227                    del bs
     228                elif configs[s].endswith('.cfg'):
     229                    b = build.build(configs[s], _defaults = self.defaults, opts = self.opts)
     230                    if s == 0:
     231                        tmproot = self.first_package(b)
     232                    b.make()
     233                    self.every_package(b, tmproot)
     234                    if s == len(configs) - 1:
     235                        self.last_package(b, tmproot)
     236                    builds += [b]
     237                else:
     238                    raise error.general('invalid config type: %s' % (configs[s]))
    215239            if not self.opts.no_clean():
    216240                for b in builds:
     
    233257        _notice(opts, 'Source Builder - Set Builder, v%s' % (version))
    234258        if not check.host_setup(opts, _defaults):
    235             if not opts.force():
    236                 raise error.general('host build environment is not set up correctly (use --force to proceed)')
    237             _notice(opts, 'warning: forcing build with known host setup problems')
     259            raise error.general('host build environment is not set up correctly')
     260        configs = build.get_configs(opts, _defaults)
    238261        if opts.get_arg('--list-configs') or opts.get_arg('--list-bsets'):
    239262            if opts.get_arg('--list-configs'):
     
    241264            else:
    242265                ext = '.bset'
    243             paths, configs = build.get_configs(opts, _defaults, ext = ext)
    244             for p in paths:
     266            for p in configs['paths']:
    245267                print 'Examining: %s' % (os.path.relpath(p))
    246             for c in configs:
    247                 print '    %s' % (c)
     268            for c in configs['files']:
     269                if c.endswith(ext):
     270                    print '    %s' % (c)
    248271        else:
    249272            for bset in opts.params():
    250                 c = buildset(bset, _defaults = _defaults, opts = opts)
    251                 c.make()
    252                 del c
     273                b = buildset(bset, _configs = configs, _defaults = _defaults, opts = opts)
     274                b.build()
     275                del b
    253276    except error.general, gerr:
    254277        print gerr
Note: See TracChangeset for help on using the changeset viewer.