def execute(self): if self._option == "": self.reportError("Missing svn option, use one of " + str(self._options)) return False if self._option not in self._options: self.reportError("not supported svn option, use one of " + str(self._options)) return False if self._projectPath == "": self.reportError("Missing required project path option") return False if self._option == "co" or self._option == "checkout": if self._svnUrl == "": self.reportError("Missing required svn url ption") return False self._projectPath = os.path.abspath(self._projectPath) projectName = os.path.basename(self._projectPath) print "Executing Plugin:" + str(self.__class__) bmutil = BMUtil() svnCommand = "svn " + self._option if self._option in ['co', 'checkout']: svnCommand += " " + self._svnUrl + " " + self._projectPath else: if self._option in ['up', 'update']: svnCommand += " " + self._projectPath os.system(svnCommand) return True
def unpack(self, unPackList): sep = os.path.sep dmutil = BMUtil() for file in unPackList: tmpstr = file[file.rfind(sep) + 1:] print "* unpacking ", tmpstr dmutil.untargz(file, self._dmplugin.getDepManPath())
def execute(self): if self._cmakeGenerator=="": self.reportError("Missing valid generator option") return False if self._projectPath=="": self.reportError("Missing required project path option") return False if self._cmakeGenerator!="" and self._projectPath!="": self._projectPath = os.path.abspath(self._projectPath) projectName = os.path.basename(self._projectPath) if self._projectGenerationPath=="": self._projectGenerationPath=os.path.abspath(os.path.join(self._projectPath,"BMCMake")) if self._installPath=="": self._installPath=os.path.abspath(self._projectPath+os.path.sep+".."+os.path.sep+projectName+"-install") if self._buildType=="": self._buildType="Release" bmutil = BMUtil() print " * Creating Project Generation Path: "+self._projectGenerationPath bmutil.mkdir(self._projectGenerationPath) olddir = os.getcwd() os.chdir(self._projectGenerationPath) if os.path.exists("CMakeCache.txt"): os.remove("CMakeCache.txt") cmakeCommand = "cmake "+self._cmakeOtherOptions+" -G\""+self._cmakeGenerator+"\" -DCMAKE_BUILD_TYPE="+self._buildType+" -DCMAKE_INSTALL_PREFIX="+self._installPath+" "+self._projectPath print " * Running CMAKE: " + cmakeCommand os.system(cmakeCommand) os.chdir(olddir) return True
def execute(self): util = BMUtil() bmpath = util.buildmanPlugInPath() try: util.mkdir(bmpath) #shutil.copy(sys.path[0]+os.path.sep+"bmplugins"+os.path.sep+"TestPlugIn.py_",util.buildmanPlugInPath()+os.path.sep+"TestPlugIn.py") except: self.reportError("Error creating buildman directory or copying test plugin") return False return True
def execute(self): if self._path == "": self.reportError("Missing required path option") self._path = os.path.abspath(self._path) util = BMUtil() if not os.path.exists(self._path): return True if os.path.isdir(self._path): print "* Removing directory " + self._path util.rmdir(self._path) else: print "* Removing file " + self._path os.remove(self._path) return True
def clean(self): self._dmplugin = PlugInManager().getPlugInInstance("DepManPlugIn") if self._dmplugin == None: self.reportError("PlugIn `depman` not found") self.setExecute(False) return self._default_repository = self._dmplugin.getDepManPath() #the extra parameter "all" enables dmn to clear the cache directory print "* cleaning..." util = BMUtil() util.rmdir(self._default_repository + os.path.sep + "include") util.rmdir(self._default_repository + os.path.sep + "lib") util.rmdir(self._default_repository + os.path.sep + "bin") util.rmdir(self._default_repository + os.path.sep + "share") util.rmdir(self._default_repository + os.path.sep + "Frameworks") if self._delete_cache: util.rmdir(self._default_repository + os.path.sep + ".cache") return True
def extract(self): self._dmupdate = PlugInManager().getPlugInInstance( "DepManUpdatePlugIn") if self._dmupdate == None: self.reportError("PlugIn `depman update` not found") return if self._depmanNode == None: self.loadXMLFile(self._xmlFile) if not self._isInteractive: if self._isFromCache: self._dmupdate.setForceCache() else: self._dmupdate.setForceRemote() dependency_filenamepaths = self._dmupdate.getDependencies( self._depmanNode) package_namepath = self.parsePackage(self._depmanNode) print dependency_filenamepaths, self._destDir, self._filter bmutil = BMUtil() for file in dependency_filenamepaths: bmutil.untargzFiltered(file, self._destDir, self._filter)
except KeyError: pass # If any of the following calls raises an exception, # there's a problem we can't handle -- let the caller handle it. fp, pathname, description = imp.find_module(name,paths) try: return imp.load_module(name, fp, pathname, description) finally: # Since we may exit via an exception, close fp explicitly. if fp: fp.close() util = BMUtil() searchPaths=[os.path.join(sys.path[0],'bmplugins'),util.buildmanPlugInPath(),os.path.join(sys.path[0],'../bmplugins')] plugList = [] for dir in searchPaths: if not os.path.exists(dir): continue for f in os.listdir(dir): if f.endswith('.py') and not f.startswith('__init__'): plugList.append(f[0:-3]) print plugList for m in plugList: bmimport(m,searchPaths)
def create(self): self._dmplugin = PlugInManager().getPlugInInstance("DepManPlugIn") if self._dmplugin == None: self.reportError("PlugIn `depman` not found") return False #user questions if self._is_Interactive: self._group = raw_input("Group: ") self._artifact = raw_input("Artifact: ") self._version = raw_input("Version: ") tmpstr = "" for p in self._dmplugin.getSupportedPlatforms(): tmpstr = tmpstr + p + " " print "( ", tmpstr, ")" tmstr = "Platform [*]:" self._platform = raw_input( string.replace(tmstr, "*", self._dmplugin.getOSPlatform())) if len(self._platform) == 0: self._platform = self._dmplugin.getOSPlatform() tmpstr = "" for p in self._dmplugin.getSupportedCompilers(): tmpstr = tmpstr + p + " " print "( ", tmpstr, ")" tmstr = "Compiler [*]:" self._compiler = raw_input( string.replace(tmstr, "*", self._dmplugin.getOSCompiler())) if len(self._compiler) == 0: self._compiler = self._dmplugin.getOSCompiler() tmpstr = "" for p in self._dmplugin.getSupportedArchs(): tmpstr = tmpstr + p + " " print "( ", tmpstr, ")" tmstr = "Architecture [*]:" self._arch = raw_input( string.replace(tmstr, "*", self._dmplugin.getOSArch())) if len(self._arch) == 0: self._arch = self._dmplugin.getOSArch() tmpstr = "" for p in self._dmplugin.getSupportedLibraryTypes(): tmpstr = tmpstr + p + " " print "( ", tmpstr, ")" self._ltype = raw_input("Library Type: ") upload_response = raw_input("Upload to server? (y/n): ") if upload_response == "y" or upload_response == "yes": self._upload = True if self._packageNode != None: for n in self._packageNode.childNodes: if n.localName == "package": processPackage = True if n.hasAttributes(): if n.attributes.has_key("platform"): values = n.attributes.get("platform").value.split( ",") if self._dmplugin.getOSPlatform() in values: processPackage = True else: processPackage = False if processPackage: print "Processing for platform..." for p in n.childNodes: if p.localName == "group": self._group = p.childNodes[0].nodeValue if p.localName == "artifact": self._artifact = p.childNodes[0].nodeValue if p.localName == "version": self._version = p.childNodes[0].nodeValue if p.localName == "platform": self._platform = p.childNodes[0].nodeValue if p.localName == "compiler": self._compiler = p.childNodes[0].nodeValue if p.localName == "arch": self._arch = p.childNodes[0].nodeValue if p.localName == "libraryType": self._ltype = p.childNodes[0].nodeValue if p.localName == "upload": #TODO: Maybe upload should be an external plugin for k in p.childNodes: if k.localName == "sshserver": self._default_ssh = k.childNodes[ 0].nodeValue if k.localName == "destdir": self._default_destdir = k.childNodes[ 0].nodeValue if k.localName == "username": self._default_login = k.childNodes[ 0].nodeValue if self._group == "": self.reportError("Group cannot be empty") return False if self._artifact == "": self.reportError("Artifact cannot be empty") return False if self._version == "": self.reportError("Version cannog be empty") return self._group = self._group.replace(".", "/") if self._platform == "default": self._platform = self._dmplugin.getOSPlatform() if self._compiler == "default": self._compiler = self._dmplugin.getOSCompiler() if self._arch == "default": self._arch = self._dmplugin.getOSArch() #let's check user input consistency if self._platform not in self._dmplugin.getSupportedPlatforms(): self.reportError("Platform not supported: " + self._platform + ". Supported platforms:" + str(self._dmplugin.getSupportedPlatforms())) return False if self._compiler not in self._dmplugin.getSupportedCompilers(): self.reportError("Compiler not supported: " + self._compiler + ". Supported compilers:" + str(self._dmplugin.getSupportedCompilers())) return False if self._arch not in self._dmplugin.getSupportedArchs(): self.reportError("Architecture not supported: " + self._arch + ". Supported archs:" + str(self._dmplugin.getSupportedArchs())) return False if self._ltype not in self._dmplugin.getSupportedLibraryTypes(): self.reportError("Library type not supported: " + self._ltype + ". Supported libraries:" + str(self._dmplugin.getSupportedLibraryTypes())) return False #artifact and md5 generation file_name = self._artifact + "-" + self._version + "-" + self._platform + "-" + self._compiler + "-" + self._arch + "-" + self._ltype tarname = file_name + ".tar.gz" md5name = tarname + ".md5" dmfile = file_name + ".xml" dmutil = BMUtil() tmpdir = self._dmplugin.getDepManPath( ) + os.path.sep + ".cache" + os.path.sep + self._group + os.path.sep + self._artifact + os.path.sep + self._version + os.path.sep + self._platform + os.path.sep + self._compiler + os.path.sep + self._arch + os.path.sep + self._ltype dmutil.mkdir(tmpdir) print tmpdir + os.path.sep + tarname, self._path dmutil.targz(os.path.join(tmpdir, tarname), self._path) #print "targz ",tmpdir+os.path.sep+tarname dmutil.createMD5(tmpdir + os.path.sep + tarname, tmpdir + os.path.sep + md5name) if self._xmlfile != "": shutil.copyfile(self._xmlfile, tmpdir + os.path.sep + dmfile) print "Artifact " + tarname + " created in:\n" + tmpdir if self._upload: dmutil.rmdir( ".dmn_tmp") # Prevent for uploading bad previous compilations! sshtmpdir = ".dmn_tmp" + os.path.sep + self._group + os.path.sep + self._artifact + os.path.sep + self._version + os.path.sep + self._platform + os.path.sep + self._compiler + os.path.sep + self._arch + os.path.sep + self._ltype dmutil.mkdir(sshtmpdir) shutil.copyfile(tmpdir + os.path.sep + tarname, sshtmpdir + os.path.sep + tarname) shutil.copyfile(tmpdir + os.path.sep + md5name, sshtmpdir + os.path.sep + md5name) if self._xmlfile != "": shutil.copyfile(tmpdir + os.path.sep + dmfile, sshtmpdir + os.path.sep + dmfile) url = self._default_ssh destdir = self._default_destdir login = self._default_login if self._is_Interactive: tmstr = "SSH Server [*]:" url = raw_input(string.replace(tmstr, "*", self._default_ssh)) if len(url) == 0: url = self._default_ssh tmstr = "Destination Directory [*]:" destdir = raw_input( string.replace(tmstr, "*", self._default_destdir)) if len(destdir) == 0: destdir = self._default_destdir tmstr = "Login [*]:" login = raw_input( string.replace(tmstr, "*", self._default_login)) if len(login) == 0: login = self._default_login download_dir = self._group + "/" + self._artifact + "/" + self._version + "/" + self._platform + "/" + self._compiler + "/" + self._arch + "/" + self._ltype print "* Uploading ", tarname print "* Uploading ", md5name #scp base_ssh = destdir url_ssh = url scpcommand = "scp" pscppath = "" if sys.platform == "win32": scpcommand = self._dmplugin.getDepManDataPath( ) + os.path.sep + "win32" + os.path.sep + "pscp.exe" scpcommand = '"' + os.path.normpath(scpcommand) + '"' cmdstr = scpcommand + " -r " + ".dmn_tmp" + os.path.sep + "*" + " " + login + "@" + url_ssh + ":" + base_ssh print cmdstr os.system(cmdstr) #scp dmutil.rmdir(".dmn_tmp")