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();
 | 
						|
   }
 | 
						|
}
 |