Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/osbuilder.py
diff options
context:
space:
mode:
authorDaniel Drake <dsd@laptop.org>2012-03-02 17:07:40 (GMT)
committer Daniel Drake <dsd@laptop.org>2012-03-07 16:44:10 (GMT)
commit372ce5398ef7248f8ccbba5ceeeeda696cc7a44b (patch)
tree3f40e1dcd8799d2dadfa485291de20d333bf4378 /osbuilder.py
parent8fb855083fe819814c0e2eaa373cfe3aeaee8d3e (diff)
Accept multiple config files
Allow multiple config files to be specified on the command line. They will be parsed in the order specified. This replaces the additional-defaults functionality provided before.
Diffstat (limited to 'osbuilder.py')
-rwxr-xr-xosbuilder.py36
1 files changed, 14 insertions, 22 deletions
diff --git a/osbuilder.py b/osbuilder.py
index 7fa7750..32d5c48 100755
--- a/osbuilder.py
+++ b/osbuilder.py
@@ -69,7 +69,7 @@ class Stage(object):
env['OOB__statedir'] = self.osb.statedir
env['OOB__fsmount'] = self.osb.fsmount
- env['oob_config_dir'] = os.path.dirname(self.osb.build_config)
+ env['oob_config_dir'] = os.path.dirname(self.osb.build_configs[0])
envpath = env['PATH'].split(':')
for dir in ('/sbin', '/usr/sbin'):
@@ -254,9 +254,10 @@ class OsBuilderException(Exception):
pass
class OsBuilder(object):
- def __init__(self, build_config, additional_defaults):
- self.build_config = os.path.abspath(build_config)
- self.additional_defaults = additional_defaults
+ def __init__(self, build_configs):
+ self.build_configs = []
+ for cfg in build_configs:
+ self.build_configs.append(os.path.abspath(cfg))
print " * OLPC OS builder v%s" % VERSION
if INSTALLED:
@@ -280,12 +281,9 @@ class OsBuilder(object):
# load config to find module list
# and set interpolation default for oob_config_dir
self.cfg = SafeConfigParser({'oob_config_dir':
- os.path.dirname(self.build_config)})
- self.cfg.read(self.build_config)
-
- # read in defaults specified on the command line
- if self.additional_defaults is not None:
- self.cfg.read(self.additional_defaults)
+ os.path.dirname(self.build_configs[0])})
+ for cfg in self.build_configs:
+ self.cfg.read(cfg)
if self.cfg.has_option('global', 'suggested_oob_version'):
suggested = self.cfg.get('global','suggested_oob_version')
@@ -329,7 +327,7 @@ class OsBuilder(object):
"""Read and validate config (including module defaults)"""
# reset config since we want to load the module defaults first
self.cfg = SafeConfigParser({'oob_config_dir':
- os.path.dirname(self.build_config)})
+ os.path.dirname(self.build_configs[0])})
for mod in self.modules:
m = re.match(r"[A-Za-z_][A-Za-z0-9_]*$", mod)
@@ -344,12 +342,9 @@ class OsBuilder(object):
# read in defaults
self.cfg.read(os.path.join(modpath, 'defaults.ini'))
- # read in defaults specified on the command line
- if self.additional_defaults is not None:
- self.cfg.read(self.additional_defaults)
-
# now load the users config, overriding other settings where specified
- self.cfg.read(self.build_config)
+ for cfg in self.build_configs:
+ self.cfg.read(cfg)
for section in self.cfg.sections():
m = re.match(r"[A-Za-z_][A-Za-z0-9_]*$", section)
@@ -414,23 +409,20 @@ class OsBuilder(object):
print " * Output is in", self.outputdir
def main():
- op = OptionParser(usage="%prog [options] buildconfig", version=VERSION)
+ op = OptionParser(usage="%prog [options] buildconfig [buildconfig2...]", version=VERSION)
op.add_option('--no-clean-output', dest="clean_output",
action="store_false", default=True,
help="Don't clean output directory on startup")
op.add_option('--no-clean-intermediates', dest="clean_intermediates",
action="store_false", default=True,
help="Don't clean intermediates directory on startup or exit")
- op.add_option('--additional-defaults', dest="additional_defaults",
- action="store", default=None,
- help="Additional config file with default settings")
(options, args) = op.parse_args()
- if len(args) != 1:
+ if len(args) < 1:
op.error("incorrect number of arguments")
try:
- osb = OsBuilder(args[0], options.additional_defaults)
+ osb = OsBuilder(args)
osb.build(clean_output=options.clean_output,
clean_intermediates=options.clean_intermediates)
except OsBuilderException, e: