forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			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();
 | |
|    }
 | |
| }
 |