import os, datetime, sys, shlex, fnmatch class LogFile: """ A log file class """ f = None printOutput = False def __init__( self, fileName, mode, _printOutput ): self.printOutput = _printOutput self.f = open( fileName, mode ) def Close( self ): self.f.close() def WriteLine( self, String ): if ( self.printOutput ): print( String ) newString = String + "\n" self.f.write( newString ) def PrintUsage(): print( "Usage:" ) print( sys.executable + " " ) ## ## Main ## log = LogFile( "unity_build_extract.log", 'a', True ) if len( sys.argv ) < 2: PrintUsage(); sys.exit( 0 ) now = datetime.datetime.now() log.WriteLine( "Extract started at " + now.strftime( "%Y-%m-%d %H:%M:%S" ) ) projectName = sys.argv[ 1 ] log.WriteLine( "project to open: " + projectName ) outputFileName = sys.argv[ 2 ] log.WriteLine( "extracting to: " + outputFileName ) includeName = [] # tokenize project file try: f = open( projectName, "r" ) string = f.read() lexer = shlex.shlex( string ) lexer.whitespace += '"' lexer.whitespace_split = True for token in lexer: if fnmatch.fnmatch( token, "*.cpp" ): if not fnmatch.fnmatch( token, "*UnityBuild*" ): includeName.append( token ) f.close() except IOError, e: log.WriteLine( "failed to open " + projectName ) sys.exit( 0 ) fixedIncludeName = [] # fix up the path for include in includeName: fixedIncludeName.append( os.path.normpath( os.path.join( "..\\", include ) ) ) try: f = open( outputFileName, "w" ) for include in fixedIncludeName: fileName = os.path.basename( include ) f.write( "#pragma message( \"" + fileName + " START: \" __TIMESTAMP__ )\n" ) f.write( "#include \"" + include + "\"\n" ) f.write( "#pragma message( \"" + fileName + " END: \" __TIMESTAMP__ )\n" ) f.close() except IOError, e: log.WriteLine( "failed to open " + outputFileName ) sys.exit( 0 ) log.Close()