Make auto-debuild configuration idempotent
[mass-build.git] / build_system.py
index 79a89c30801b7b62a557fbe9ee8177e22b186a6e..979a47ac35e078c8200f7e60b3888d14e97d983d 100644 (file)
@@ -50,26 +50,40 @@ try:
                                'name': config['debName'],
                                'email': config['debEMail'],
                        }
                                'name': config['debName'],
                                'email': config['debEMail'],
                        }
-                       if buildSystem == 'cmakeParameters':
-                               self.autoDebuildConfig['cmakeParameters'] = module.get('cmakeParameters', [])
+                       self.copyOption(config, 'jobs', 'parallelJobs')
+                       self.copyOption(module, 'dbgPackage')
+                       self.copyOption(module, 'skipFiles', 'binarySkipFiles')
+                       self.copyOption(module, 'installFiles', 'binaryInstall')
+                       self.copyOption(module, 'buildDepends')
+                       self.copyOption(module, 'binaryDepends')
+                       self.copyOption(module, 'binaryRecommends')
+                       if buildSystem == 'cmake':
+                               self.copyOption(module, 'cmakeParameters')
                        self.vcs = vcs
                        self.configured = False # make sure configure is called before build/install
 
                        self.vcs = vcs
                        self.configured = False # make sure configure is called before build/install
 
+               def copyOption(self, src, name, dstName = None):
+                       if dstName is None: dstName = name # per default, stick with original name
+                       if name in src:
+                               self.autoDebuildConfig[dstName] = src[name]
+
                def configure(self, force=False): # force is ignored
                def configure(self, force=False): # force is ignored
+                       if self.configured: return # do not configure twice
                        self.autoDebuildConfig['version'] = self.vcs.version() # by now, data has been fetched, so this is possible
                        self.autoDebuildConfig['version'] = self.vcs.version() # by now, data has been fetched, so this is possible
-                       self.vcs.ignore('/debian/') # make sure the debian folder is ignored
+                       if self.autoDebuildConfig['version'] is None:
+                               raise Exception("VCS did not provide us with a proper version, please fix this")
                        os.chdir(self.sourceFolder)
                        os.chdir(self.sourceFolder)
-                       print self.autoDebuildConfig
+                       #print self.autoDebuildConfig
                        self.files = auto_debuild.createDebianFiles(self.autoDebuildConfig)
                        self.configured = True
 
                def build(self):
                        self.files = auto_debuild.createDebianFiles(self.autoDebuildConfig)
                        self.configured = True
 
                def build(self):
-                       if not self.configured: self.configure()
+                       self.configure() # make sure we are configured (this call is idempotent)
                        os.chdir(self.sourceFolder)
                        auto_debuild.buildDebianPackage(self.autoDebuildConfig)
 
                def install(self):
                        os.chdir(self.sourceFolder)
                        auto_debuild.buildDebianPackage(self.autoDebuildConfig)
 
                def install(self):
-                       if not self.configured: self.configure()
+                       self.configure() # make sure we are configured (this call is idempotent)
                        os.chdir(self.sourceFolder)
                        subprocess.check_call(['sudo', 'dpkg', '--install'] + self.files)
 except ImportError:
                        os.chdir(self.sourceFolder)
                        subprocess.check_call(['sudo', 'dpkg', '--install'] + self.files)
 except ImportError: