args = parser.parse_args()
# load config
-config = imp.load_source('config', args.config)
+config = imp.load_source('config', args.config).__dict__
os.remove(args.config+'c') # remove compiled python file
projects = OrderedDict() # all projects
workProjects = [] # projects we work on
# an entire Project
class Project:
- def __init__(self, folder, module):
+ def __init__(self, config, folder, module):
self.folder = folder
self.name = module['name']
# VCS
else:
raise Exception("Unknown VCS type "+vcsName)
# build system
- buildSystemName = module.get('build-system', 'cmake')
- if buildSystemName == 'cmake':
- self.buildSystem = build_system.CMake(self.sourceFolder(), self.buildFolder(), config)
+ if config.get('buildDeb', False):
+ self.buildSystem = build_system.AutoDebuild(self.sourceFolder(), self.buildFolder(), module, self.vcs, config)
else:
- raise Exception("Unknown build system type "+buildSystemName)
+ buildSystemName = module.get('build-system', 'cmake')
+ if buildSystemName == 'cmake':
+ self.buildSystem = build_system.CMake(self.sourceFolder(), self.buildFolder(), module, config)
+ else:
+ raise Exception("Unknown build system type "+buildSystemName)
def sourceFolder(self):
return os.path.join(self.folder, self.name)
def buildFolder(self):
- return os.path.join(config.buildDir, self.sourceFolder())
+ return os.path.join(config['buildDir'], self.sourceFolder())
# return the position of the given item in the list
def findInList(list, item):
raise Exception("%s not found in list" % str(item))
# populate list of projects
-def loadProjects(modules, folder=''):
+def loadProjects(config, modules, folder=''):
for module in modules:
if 'folder' in module: # a subpath
- loadProjects(module['modules'], os.path.join(folder, module['folder']))
+ loadProjects(config, module['modules'], os.path.join(folder, module['folder']))
else: # a proper project
if module['name'] in projects:
raise Exception("Duplicate module name "+module['name'])
- projects[module['name']] = Project(folder, module)
+ projects[module['name']] = Project(config, folder, module)
# now check what we have to do
-loadProjects(config.modules)
+loadProjects(config, config['modules'])
if args.modules:
if args.resume_from is not None:
raise Exception("Can not use --resume-from and manually specify modules")
try:
for phase in args.phases:
if phase == 'update':
+ print "Updating",project.sourceFolder()
project.vcs.update()
elif phase == 'configure':
+ print "Configuring",project.sourceFolder()
project.buildSystem.configure(force=args.reconfigure)
elif phase == 'compile':
+ print "Compiling",project.sourceFolder()
project.buildSystem.build()
+ print "Installing",project.sourceFolder()
project.buildSystem.install()
else:
raise Exception("Invalid phase "+phase)