2025-01-22 16:18:30 +01:00

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