Update example config: Support passing arbitrary module options
[mass-build.git] / kdebuildpy.py
index 3fd5812579751eb08e3ad6e111c791109b30a601..b56eb86b5d932f72333eac60d97f5d4dbe1156bb 100755 (executable)
@@ -22,14 +22,14 @@ parser.add_argument("modules",  metavar='MODULE', nargs='*',
 args = parser.parse_args()
 
 # load config
 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:
 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
                self.folder = folder
                self.name = module['name']
                # VCS
@@ -41,17 +41,20 @@ class Project:
                else:
                        raise Exception("Unknown VCS type "+vcsName)
                # build system
                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:
                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):
        
        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):
 
 # return the position of the given item in the list
 def findInList(list, item):
@@ -61,17 +64,17 @@ def findInList(list, item):
        raise Exception("%s not found in list" % str(item))
 
 # populate list of projects
        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
        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'])
                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
 
 # 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")
 if args.modules:
        if args.resume_from is not None:
                raise Exception("Can not use --resume-from and manually specify modules")
@@ -93,11 +96,15 @@ for project in workProjects:
        try:
                for phase in args.phases:
                        if phase == 'update':
        try:
                for phase in args.phases:
                        if phase == 'update':
+                               print "Updating",project.sourceFolder()
                                project.vcs.update()
                        elif phase == 'configure':
                                project.vcs.update()
                        elif phase == 'configure':
+                               print "Configuring",project.sourceFolder()
                                project.buildSystem.configure(force=args.reconfigure)
                        elif phase == 'compile':
                                project.buildSystem.configure(force=args.reconfigure)
                        elif phase == 'compile':
+                               print "Compiling",project.sourceFolder()
                                project.buildSystem.build()
                                project.buildSystem.build()
+                               print "Installing",project.sourceFolder()
                                project.buildSystem.install()
                        else:
                                raise Exception("Invalid phase "+phase)
                                project.buildSystem.install()
                        else:
                                raise Exception("Invalid phase "+phase)