diff options
Diffstat (limited to 'SixenseSDK/install/install.py')
-rwxr-xr-x | SixenseSDK/install/install.py | 349 |
1 files changed, 349 insertions, 0 deletions
diff --git a/SixenseSDK/install/install.py b/SixenseSDK/install/install.py new file mode 100755 index 0000000..0e6bd37 --- /dev/null +++ b/SixenseSDK/install/install.py @@ -0,0 +1,349 @@ +#!/usr/bin/python + +import sys +import os.path +from optparse import OptionParser +from shutil import rmtree, copy, copytree +import subprocess + +cmdOpts = '' +cmdArgs = '' +config = '' + +menu = """ +Please select your operating system: +1. Windows 32 bit +2. Windows 64 bit +3. Linux 32 bit +4. Linux 65 bit +5. OSX 32 bit +6. OSX 64 bit +""" + +def isInt( s ): + try: + int(s) + return True + except ValueError: + return False + + +class SDKPackager: + def __init__( self ): + self.versionMajor = 1 + self.versionMinor = 0 + self.versionMacro = 1 + + self.currentDirectory = os.path.dirname(os.path.realpath(__file__)) + self.platform = "" + + self.linux_32 = [] + self.linux_64 = [] + self.osx = [] + self.osx64 = [] + + print "\nSixense SDK Installation Script v%02d.%02d.%02d" % ( self.versionMajor, self.versionMinor, self.versionMacro ) + if( not cmdOpts.printVersionAndExit ): + print "============================================" + + def cleanString( self, string ): + string = string.lstrip() + string = string.rstrip(" \t\r\n\0") + return string + + def cleanList( self, lst): + if "" in lst: + lst.remove("") + return lst + + def forceString( self, value ): + if not isinstance(value, str): + return value[0] + else: + return value + + def getValue( self, key ): + returnValue = [] + + file = open(cmdOpts.config) + for line in file: + line = self.cleanString(line) + if len(line) == 0: + continue + + if line[0] == '#': + continue + + pairs = line.split("=") + + keyFile = self.cleanString(pairs[0]) + if keyFile == key: + for element in pairs[1].split(","): + returnValue.append(self.cleanString(element)) + return returnValue + + return returnValue + + def find_in_file(self, filename, searchstr): # see whether a string appears in a file at all, and tell on which line + libfd = open(filename,"r") + contents = libfd.readlines() + libfd.close() + index = 0 + for fline in contents: + if searchstr in fline: + return True, index + index = index + 1 + return False, index + + def append_to_file(self, filename, newstr): + libfd = open(filename,"a") + libfd.write(newstr) + libfd.close() + + def parseConfig( self ): + + print "-----------------------------------------------" + print "Parsing Config File %s" % cmdOpts.config + print "-----------------------------------------------" + + self.parseItem() + + def parseItem( self ): + print "Finding Items" + file = open(cmdOpts.config) + + for line in file: + line = self.cleanString(line) + + if len(line) == 0: + continue + + if line[0] == '#': + continue + + pairs = line.split("=") + + key = self.cleanString(pairs[0]) + value = [] + + if key == "linux_32" and self.platform == "linux_32": + sys.stdout.write("Found Linux 32 bit") + sys.stdout.flush() + for element in pairs[1].split(","): + if len(element) > 0: + self.linux_32.append(self.cleanString(element)) + print " Done" + if key == "linux_64" and self.platform == "linux_64": + sys.stdout.write("Found Linux 64 bit") + sys.stdout.flush() + for element in pairs[1].split(","): + if len(element) > 0: + self.linux_64.append(self.cleanString(element)) + print " Done" + if key == "osx_32" and self.platform == "osx_32": + sys.stdout.write("Found OSX 32 bit") + sys.stdout.flush() + for element in pairs[1].split(","): + if len(element) > 0: + self.osx.append(self.cleanString(element)) + print " Done" + if key == "osx_64" and self.platform == "osx_64": + sys.stdout.write("Found OSX 64 bit") + sys.stdout.flush() + for element in pairs[1].split(","): + if len(element) > 0: + self.osx64.append(self.cleanString(element)) + print " Done" + + file.close() + print "Done\n" + + def chooseTargetPlatform( self ): + response = "" + print menu + + response = raw_input("Enter Selection: ") + + if response == "3": + self.platform = "linux_32" + elif response == "4": + self.platform = "linux_64" + elif response == "5": + self.platform = "osx_32" + elif response == "6": + self.platform = "osx_64" + else: + if response == "1" or response == "2": + print "Currently Unsupported Target Operating System" + else: + print "Invalid Selection" + self.chooseTargetPlatform() + + def preInstall( self ): + return + + def install( self ): + self.copyFilesHelper( self.linux_32, "Linux 32 bit" ) + self.copyFilesHelper( self.linux_64, "Linux 64 bit" ) + self.copyFilesHelper( self.osx, "OSX 32 bit" ) + self.copyFilesHelper( self.osx64, "OSX 64 bit" ) + return + + def copyFilesHelper( self, folderList, userText ): + if not cmdOpts.verbose: + self.firstErrorAfterHeader = True + destination = "" + source = "" + files = [] + if len(folderList) > 0: + sys.stdout.write("- for %s\r" % userText) + sys.stdout.flush() + if cmdOpts.verbose: + print "" + for element in folderList: + destination = self.getValue(element+"_destination") + source = self.getValue(element+"_source") + files = self.getValue(element+"_file") + source = self.cleanList(source) + files = self.cleanList(files) + for outfile in files: + self.copyFileParser( destination, source, outfile ) + if not cmdOpts.verbose: + sys.stdout.write("%46s\r" % "Done") + sys.stdout.write("- for %s\n" % userText) + sys.stdout.flush() + else: + print "Done\n" + + def copyFileParser( self, dstPath, srcPath, srcFile ): + dst = "" + src = "" + if not isinstance(dstPath, str): + dst = dstPath[0] + else: + dst = dstPath + if not isinstance(srcPath, str): + src = srcPath[0] + else: + src = srcPath + + pathsExist = True + + if not os.path.isdir(src): + if self.firstErrorAfterHeader: + print "" + self.firstErrorAfterHeader = False + print "Source Path Does Not Exist: %s" % src + pathsExist = False + if not os.path.isdir(dst): + if self.firstErrorAfterHeader: + print "" + self.firstErrorAfterHeader = False + print "Destination Path Does Not Exist: %s" % dst + pathsExist = False + + if not pathsExist: + return + + #copy all files + if srcFile.split('.')[0] == '*' and srcFile.split('.')[1] == '*': + for filename in os.listdir( os.path.join(".",src) ): + self.copyFile( dst, src, filename ) + #copy all files by extention + elif srcFile.split('.')[0] == '*' and srcFile.split('.')[1] != '*': + for filename in os.listdir( os.path.join(".",src) ): + if os.path.isfile(filename): + if filename.split('.')[1] == srcFile.split('.')[1]: + self.copyFile( dst, src, filename ) + #copy all files starting with <> + elif srcFile.split('.')[0] != '*' and srcFile.split('.')[1] == '*': + for filename in os.listdir( os.path.join(".",src) ): + if filename.split('.')[0] == srcFile.split('.')[0]: + self.copyFile( dst, src, filename ) + #copy individual file + else: + self.copyFile( dst, src, srcFile ) + + def copyFile( self, dstPath, srcPath, srcFile ): + fileExists = True + + if not os.path.isfile(os.path.join(srcPath,srcFile)): + if os.path.isdir(os.path.join(srcPath,srcFile)): + if cmdOpts.verbose: + print "Copying all files from %s to %s" % (os.path.join(srcPath,srcFile), dstPath ) + copytree(srcPath,os.path.join(dstPath,srcFile)) + return + else: + if self.firstErrorAfterHeader: + print "" + self.firstErrorAfterHeader = False + print "Source File Does Not Exist: %s" % os.path.join(srcPath,srcFile) + fileExists = False + + if not fileExists: + return + + if cmdOpts.verbose: + print "Copying File %s from %s to %s" % (srcFile, srcPath, dstPath ) + copy( os.path.join(srcPath,srcFile), dstPath) + + def postInstall( self ): + if self.platform =="linux_32" or self.platform == "linux_64": + configFile = self.forceString(self.getValue("linux_library_config_file")) + libPath = self.forceString(self.getValue("linux_library_path")) + if os.path.isfile( configFile ): + found, index = self.find_in_file(configFile,libPath) # is lib path already there? + if found: + print "Library path is already registered in %s, on line %d." % (configFile,index) + else: + print "Library path not registered yet. Adding library path to %s..." % configFile + self.append_to_file(configFile,"\n"+libPath+"\n") + lib_update_cmd = "ldconfig" + p = subprocess.Popen(lib_update_cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) + else: + print "Unable to Find ld.so.conf" + + def run( self ): + self.chooseTargetPlatform() + self.parseConfig() + self.preInstall() + self.install() + self.postInstall() + +# main program starts here +if __name__ == '__main__': + #configFile = "sdk_hierarchy_default" + + parser = OptionParser(usage="%prog [options]") + + parser.add_option('',"--version", + action="store_true", + dest="printVersionAndExit", + default=False, + help="Prints the version and exits",) + + parser.add_option('-c',"--config", + action="store", + dest="config", + default="install.cfg", + help="Config File to use",) + + parser.add_option('-v',"--verbose", + action="store_true", + dest="verbose", + default=False, + help="Print Extra Information",) + + parser.add_option('-w',"--warning", + action="store_true", + dest="warning", + default=False, + help="Print Only Warning Information",) + + (cmdOpts, cmdArgs) = parser.parse_args() + + package = SDKPackager() + + if( cmdOpts.printVersionAndExit ): + exit() + package.run() |