132 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			132 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | import sys.FileSystem; | ||
|  | 
 | ||
|  | class RunMain | ||
|  | { | ||
|  |    public static function log(s:String) Sys.println(s); | ||
|  |    public static function showMessage() | ||
|  |    { | ||
|  |       var varName = "HXCPP_NONINTERACTIVE"; | ||
|  |       var nonInteractive:Bool =Sys.getEnv(varName)!=null; | ||
|  |       if (!nonInteractive) | ||
|  |          for(arg in Sys.args()) | ||
|  |             if (arg.indexOf("-D"+varName)==0 ) | ||
|  |                nonInteractive = true; | ||
|  | 
 | ||
|  |       var dir = Sys.getCwd(); | ||
|  | 
 | ||
|  |       if (nonInteractive) | ||
|  |       { | ||
|  |          Sys.println('HXCPP in $dir is missing hxcpp.n'); | ||
|  |          Sys.exit(-1); | ||
|  |       } | ||
|  | 
 | ||
|  |       log('This version of hxcpp ($dir) appears to be a source/developement version.'); | ||
|  |       log("Before this can be used, you need to:"); | ||
|  |       log(" 1. Rebuild the main command-line tool, this can be done with:"); | ||
|  |       log("     cd tools/hxcpp"); | ||
|  |       log("     haxe compile.hxml"); | ||
|  |       log(" 2. FOR HXCPP API < 330:"); | ||
|  |       log("    Build the binaries appropriate to your system(s), this can be done with:"); | ||
|  |       log("     cd project"); | ||
|  |       log("     neko build.n"); | ||
|  | 
 | ||
|  |       var gotUserResponse = false; | ||
|  |       sys.thread.Thread.create(function() { | ||
|  |          Sys.sleep(30); | ||
|  |          if (!gotUserResponse) | ||
|  |          { | ||
|  |             Sys.println("\nTimeout waiting for response."); | ||
|  |             Sys.println("Can't continue without hxcpp.n"); | ||
|  |             Sys.exit(-1); | ||
|  |          } | ||
|  |       } ); | ||
|  | 
 | ||
|  |       while(true) | ||
|  |       { | ||
|  |          Sys.print("\nWould you like to do this now [y/n]"); | ||
|  |          var code = Sys.getChar(true); | ||
|  |          gotUserResponse = true; | ||
|  |          if (code<=32) | ||
|  |             break; | ||
|  |          var answer = String.fromCharCode(code); | ||
|  |          if (answer=="y" || answer=="Y") | ||
|  |          { | ||
|  |             log(""); | ||
|  |             setup(); | ||
|  |             if (!executeHxcpp()) | ||
|  |                break; | ||
|  |             return; | ||
|  |          } | ||
|  |          if (answer=="n" || answer=="N") | ||
|  |             break; | ||
|  |       } | ||
|  | 
 | ||
|  |       Sys.println("\nCan't continue without hxcpp.n"); | ||
|  |       Sys.exit(-1); | ||
|  |    } | ||
|  | 
 | ||
|  |    public static function setup() | ||
|  |    { | ||
|  |       log("Compiling hxcpp tool..."); | ||
|  |       run("tools/hxcpp","haxe", [ "compile.hxml"]); | ||
|  |       log("Initial setup complete."); | ||
|  |    } | ||
|  | 
 | ||
|  |    public static function run(dir:String, command:String, args:Array<String>) | ||
|  |    { | ||
|  |       var oldDir:String = ""; | ||
|  |       if (dir!="") | ||
|  |       { | ||
|  |          oldDir = Sys.getCwd(); | ||
|  |          Sys.setCwd(dir); | ||
|  |       } | ||
|  |       Sys.command(command,args); | ||
|  |       if (oldDir!="") | ||
|  |          Sys.setCwd(oldDir); | ||
|  |    } | ||
|  | 
 | ||
|  |    public static function executeHxcpp() | ||
|  |    { | ||
|  |       if (!sys.FileSystem.exists("./hxcpp.n")) | ||
|  |          return false; | ||
|  | 
 | ||
|  |       if (Sys.args().indexOf("-DHXCPP_NEKO_BUILDTOOL=1")<0) | ||
|  |       { | ||
|  |          var os = Sys.systemName(); | ||
|  |          var isWindows = (new EReg("window","i")).match(os); | ||
|  |          var isMac = (new EReg("mac","i")).match(os); | ||
|  |          var isLinux = (new EReg("linux","i")).match(os); | ||
|  |          var binDir = isWindows ? "Windows64" : isMac ? "Mac64" : isLinux ? "Linux64" : null; | ||
|  |          if (binDir!=null) | ||
|  |          { | ||
|  |             var compiled = 'bin/$binDir/BuildTool'; | ||
|  |             if (isWindows) | ||
|  |                compiled += ".exe"; | ||
|  |             if (FileSystem.exists(compiled)) | ||
|  |             { | ||
|  |                var dotN = FileSystem.stat("hxcpp.n").mtime.getTime(); | ||
|  |                var dotExe= FileSystem.stat(compiled).mtime.getTime(); | ||
|  |                if (dotExe<dotN) | ||
|  |                { | ||
|  |                   var path = Sys.getCwd() + compiled; | ||
|  |                   Sys.println('Warning - $path file is out-of-date.  Please delete or rebuild.'); | ||
|  |                } | ||
|  |                else | ||
|  |                { | ||
|  |                   Sys.exit( Sys.command( compiled, Sys.args() ) ); | ||
|  |                } | ||
|  |             } | ||
|  |         } | ||
|  |       } | ||
|  | 
 | ||
|  |       neko.vm.Loader.local().loadModule("./hxcpp.n"); | ||
|  |       return true; | ||
|  |    } | ||
|  | 
 | ||
|  |    public static function main() | ||
|  |    { | ||
|  |      if (!executeHxcpp()) | ||
|  |          showMessage(); | ||
|  |    } | ||
|  | } |