From 35812d61b32f4bc646842ee74b2092ee5ed17466 Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Thu, 19 Jun 2014 12:45:17 -0700 Subject: [PATCH] Trim down run script --- run.n | Bin 180252 -> 16736 bytes script/RunScript.hx | 115 +++ script/build.hxml | 2 - script/src/RunScript.hx | 1656 --------------------------------- script/src/project/Haxelib.hx | 27 - 5 files changed, 115 insertions(+), 1685 deletions(-) create mode 100644 script/RunScript.hx delete mode 100644 script/src/RunScript.hx delete mode 100644 script/src/project/Haxelib.hx diff --git a/run.n b/run.n index 47b5e5b4703bbfc24214e316243772206d297088..4b608dfa8d99dc83679168d459831536e9971621 100644 GIT binary patch delta 8021 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 fFNZMNk5@mNBCEXiV}tb~jOUa_m)MJuFT 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 DoG|5Q diff --git a/script/RunScript.hx b/script/RunScript.hx new file mode 100644 index 000000000..e439f9cba --- /dev/null +++ b/script/RunScript.hx @@ -0,0 +1,115 @@ +package; + + +import haxe.io.Bytes; +import haxe.io.Path; +import sys.FileSystem; + + +class RunScript { + + + public static function runCommand (path:String, command:String, args:Array, throwErrors:Bool = true):Int { + + var oldPath:String = ""; + + if (path != null && path != "") { + + oldPath = Sys.getCwd (); + + try { + + Sys.setCwd (path); + + } catch (e:Dynamic) { + + //Sys.stderr ().write (Bytes.ofString ("Cannot set current working directory to \"" + path + "\"")); + //Sys.exit (1); + //error ("Cannot set current working directory to \"" + path + "\""); + + } + + } + + var result:Dynamic = Sys.command (command, args); + + if (oldPath != "") { + + Sys.setCwd (oldPath); + + } + + if (throwErrors && result != 0) { + + Sys.exit (1); + + } + + return result; + + } + + + public static function main () { + + var args = Sys.args (); + var command = args[0]; + + if (command == "rebuild") { + + // When the command-line tools are called from haxelib, + // the last argument is the project directory and the + // path to Lime is the current working directory + + var ignoreLength = 0; + var lastArgument = new Path (args[args.length - 1]).toString (); + + if (((StringTools.endsWith (lastArgument, "/") && lastArgument != "/") || StringTools.endsWith (lastArgument, "\\")) && !StringTools.endsWith (lastArgument, ":\\")) { + + lastArgument = lastArgument.substr (0, lastArgument.length - 1); + + } + + if (FileSystem.exists (lastArgument) && FileSystem.isDirectory (lastArgument)) { + + Sys.setCwd (lastArgument); + //args.pop (); + ignoreLength++; + + } + + for (arg in args) { + + if (StringTools.startsWith (arg, "-D")) { + + ignoreLength++; + + } else if (StringTools.startsWith (arg, "--") && arg.indexOf ("=") > -1) { + + ignoreLength++; + + } else if (StringTools.startsWith (arg, "-")) { + + ignoreLength++; + + } + + } + + if (args.length == 2 + ignoreLength) { + + args.insert (1, "lime"); + + } + + } + + var workingDirectory = args.pop (); + var args = [ "run", "aether" ].concat (args); + + Sys.exit (runCommand (workingDirectory, "haxelib", args)); + + } + + +} \ No newline at end of file diff --git a/script/build.hxml b/script/build.hxml index 1507b22ca..9274d5db2 100644 --- a/script/build.hxml +++ b/script/build.hxml @@ -1,4 +1,2 @@ -main RunScript -neko ../run.n --lib lime-tools --cp src diff --git a/script/src/RunScript.hx b/script/src/RunScript.hx deleted file mode 100644 index fdc11d05b..000000000 --- a/script/src/RunScript.hx +++ /dev/null @@ -1,1656 +0,0 @@ -package; - - -import haxe.io.Eof; -import haxe.Http; -import haxe.io.Path; -import haxe.Json; -import neko.Lib; -import project.Architecture; -import project.Haxelib; -import sys.io.File; -import sys.io.Process; -import sys.FileSystem; -import helpers.FileHelper; -import helpers.LogHelper; -import helpers.PathHelper; -import helpers.PlatformHelper; - - -class RunScript { - - - private static var buildLib = "hxcpp"; - private static var isLinux:Bool; - private static var isMac:Bool; - private static var isWindows:Bool; - private static var limeDirectory:String; - //private static var nmeFilters:Array = [ "obj", ".git", ".gitignore", ".svn", ".DS_Store", "all_objs", "Export", "tools", "project" ]; - - - private static function build (path:String = "", targets:Array = null, flags:Map = null, defines:Array = null):Void { - - if (path == "") { - - path = PathHelper.combine (limeDirectory, "project"); - - } - - var buildFile = "Build.xml"; - - if (FileSystem.exists (path) && !FileSystem.isDirectory (path)) { - - buildFile = Path.withoutDirectory (path); - path = Path.directory (path); - - } - - if (targets == null) { - - targets = []; - - if (isWindows) { - - targets.push ("windows"); - - } else if (isLinux) { - - targets.push ("linux"); - - } else if (isMac) { - - targets.push ("mac"); - - } - - } - - if (flags == null) { - - flags = new Map (); - - } - - if (flags.exists ("clean")) { - - targets.unshift ("clean"); - - } - - for (target in targets) { - - if (target == "tools") { - - var toolsDirectory = PathHelper.getHaxelib (new Haxelib("aether"), true); - var extendedToolsDirectory = PathHelper.getHaxelib (new Haxelib("lime-tools-extended"), false); - - if (extendedToolsDirectory != null && extendedToolsDirectory != "") { - - var buildScript = File.getContent (PathHelper.combine (extendedToolsDirectory, "build.hxml")); - buildScript = StringTools.replace (buildScript, "\r\n", "\n"); - buildScript = StringTools.replace (buildScript, "\n", " "); - - runCommand (toolsDirectory, "haxe", buildScript.split (" ")); - - } else { - - runCommand (toolsDirectory, "haxe", [ "build.hxml" ]); - - } - - var platforms = [ "Windows", "Mac", "Mac64", "Linux", "Linux64" ]; - - for (platform in platforms) { - - var source = PathHelper.combine (limeDirectory, "ndll/" + platform + "/lime.ndll"); - var target = PathHelper.combine (toolsDirectory, "ndll/" + platform + "/lime.ndll"); - - if (!FileSystem.exists (source)) { - - if (flags.exists ("verbose")) { - - LogHelper.warn ("", "Warning: Source path \"" + source + "\" does not exist"); - - } - - } else { - - FileHelper.copyIfNewer (source, target); - - } - - } - - } else if (target == "clean") { - - var directories = [ PathHelper.combine (path, "obj") ]; - var files = [ PathHelper.combine (path, "all_objs"), PathHelper.combine (path, "vc100.pdb"), PathHelper.combine (path, "vc110.pdb") ]; - - if (PathHelper.getHaxelib (new Haxelib ("openfl-wiiu")) != "") { - - directories.push (PathHelper.combine (PathHelper.getHaxelib (new Haxelib ("openfl-wiiu")), "project/obj")); - directories.push (PathHelper.combine (PathHelper.getHaxelib (new Haxelib ("openfl-wiiu")), "project/all_objs")); - - } - - for (directory in directories) { - - removeDirectory (directory); - - } - - for (file in files) { - - if (FileSystem.exists (file)) { - - FileSystem.deleteFile (file); - - } - - } - - } else { - - if (target == "all") { - - //runCommand (PathHelper.getHaxelib (new Haxelib ("nmedev")), "haxe", [ "build.hxml" ]); - - if (isWindows) { - - buildLibrary ("windows", flags, defines, path, buildFile); - - } else if (isLinux) { - - buildLibrary ("linux", flags, defines, path, buildFile); - //buildLibrary ("linux", flags, defines.concat ([ "rpi" ])); - - } else if (isMac) { - - buildLibrary ("mac", flags, defines, path, buildFile); - buildLibrary ("ios", flags, defines, path, buildFile); - - } - - buildLibrary ("android", flags, defines, path, buildFile); - buildLibrary ("blackberry", flags, defines, path, buildFile); - buildLibrary ("emscripten", flags, defines, path, buildFile); - buildLibrary ("webos", flags, defines, path, buildFile); - - buildDocumentation (); - - } else if (target == "documentation") { - - buildDocumentation (); - - } else { - - buildLibrary (target, flags, defines, path, buildFile); - - } - - } - - } - - } - - - static private function buildDocumentation ():Void { - - /*var scriptPath = PathHelper.combine (openFLDirectory, "script"); - var documentationPath = PathHelper.combine (openFLDirectory, "documentation"); - - PathHelper.mkdir (documentationPath); - - runCommand (scriptPath, "haxe", [ "documentation.hxml" ]); - - FileHelper.copyFile (PathHelper.combine (openFLDirectory, "haxedoc.xml"), documentationPath + "/openfl.xml"); - - runCommand (documentationPath, "haxedoc", [ "openfl.xml", "-f", "openfl", "-f", "flash" ]);*/ - - } - - - static private function buildLibrary (target:String, flags:Map = null, defines:Array = null, path:String = "", buildFile:String = ""):Void { - - if (flags == null) { - - flags = new Map (); - - } - - if (defines == null) { - - defines = []; - - } - - if (path == "") { - - path = PathHelper.combine (limeDirectory, "project"); - - } - - var buildSharedLibs = false; - var sharedLibsPath = ""; - - if (target == "wiiu" && path == PathHelper.combine (limeDirectory, "project")) { - - path = PathHelper.combine (PathHelper.getHaxelib (new Haxelib ("openfl-wiiu"), true), "project"); - - } - - if (buildFile == "") { - - buildFile = "Build.xml"; - - } - - // The -Ddebug directive creates a debug build of the library, but the -Dfulldebug directive - // will create a debug library using the ".debug" suffix on the file name, so both the release - // and debug libraries can exist in the same directory - - switch (target) { - - case "android": - - //mkdir (PathHelper.combine (path, "../ndll/Android")); - - if (buildSharedLibs) { - - runCommand (sharedLibsPath, "neko", [ "build.n", "android-armv5" ].concat (defines)); - runCommand (sharedLibsPath, "neko", [ "build.n", "android-armv7" ].concat (defines)); - - } - - if (!flags.exists ("debug")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dandroid" ].concat (defines)); - synchronizeNDLL ("Android/liblime.so"); - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dandroid", "-DHXCPP_ARMV7", "-DHXCPP_ARM7" ].concat (defines)); - synchronizeNDLL ("Android/liblime-v7.so"); - - } - - if (!flags.exists ("release")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dandroid", "-Ddebug", "-Dfulldebug" ].concat (defines)); - synchronizeNDLL ("Android/liblime-debug.so"); - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dandroid", "-DHXCPP_ARMV7", "-DHXCPP_ARM7", "-Ddebug", "-Dfulldebug" ].concat (defines)); - synchronizeNDLL ("Android/liblime-debug-v7.so"); - - } - - case "blackberry": - - //mkdir (nmeDirectory + "/ndll/BlackBerry"); - - if (buildSharedLibs) { - - runCommand (sharedLibsPath, "neko", [ "build.n", "blackberry" ].concat (defines)); - - } - - if (!flags.exists ("debug")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dblackberry" ].concat (defines)); - synchronizeNDLL ("BlackBerry/lime.so"); - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dblackberry", "-Dsimulator" ].concat (defines)); - synchronizeNDLL ("BlackBerry/lime-x86.so"); - - } - - if (!flags.exists ("release")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dblackberry", "-Ddebug", "-Dfulldebug" ].concat (defines)); - synchronizeNDLL ("BlackBerry/lime-debug.so"); - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dblackberry", "-Dsimulator", "-Ddebug", "-Dfulldebug" ].concat (defines)); - synchronizeNDLL ("BlackBerry/lime-debug-x86.so"); - - } - - case "emscripten": - - if (buildSharedLibs) { - - runCommand (sharedLibsPath, "neko", [ "build.n", "emscripten" ].concat (defines)); - - } - - if (!flags.exists ("debug")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Demscripten" ].concat (defines)); - synchronizeNDLL ("Emscripten/lime.a"); - - } - - if (!flags.exists ("release")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Demscripten", "-Ddebug", "-Dfulldebug" ].concat (defines)); - synchronizeNDLL ("Emscripten/lime-debug.a"); - - } - - case "ios": - - if (buildSharedLibs) { - - runCommand (sharedLibsPath, "neko", [ "build.n", "ios", "-DHXCPP_CPP11" ].concat (defines)); - - } - - //mkdir (nmeDirectory + "/ndll/iPhone"); - - if (!flags.exists ("debug")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Diphoneos", "-DHXCPP_CPP11" ].concat (defines)); - synchronizeNDLL ("iPhone/liblime.iphoneos.a"); - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Diphoneos", "-DHXCPP_CPP11", "-DHXCPP_ARMV7" ].concat (defines)); - synchronizeNDLL ("iPhone/liblime.iphoneos-v7.a"); - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Diphonesim", "-DHXCPP_CPP11" ].concat (defines)); - synchronizeNDLL ("iPhone/liblime.iphonesim.a"); - - } - - if (!flags.exists ("release")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Diphoneos", "-DHXCPP_CPP11", "-Ddebug", "-Dfulldebug" ].concat (defines)); - synchronizeNDLL ("iPhone/liblime-debug.iphoneos.a"); - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Diphoneos", "-DHXCPP_CPP11", "-DHXCPP_ARMV7", "-Ddebug", "-Dfulldebug" ].concat (defines)); - synchronizeNDLL ("iPhone/liblime-debug.iphoneos-v7.a"); - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Diphonesim", "-DHXCPP_CPP11", "-Ddebug", "-Dfulldebug" ].concat (defines)); - synchronizeNDLL ("iPhone/liblime-debug.iphonesim.a"); - - } - - case "linux": - - if (!flags.exists ("rpi")) { - - if (buildSharedLibs) { - - if (isRunning64 ()) runCommand (sharedLibsPath, "neko", [ "build.n", "linux-m64" ].concat (defines)); - runCommand (sharedLibsPath, "neko", [ "build.n", "linux-m32" ].concat (defines)); - - } - - if (!flags.exists ("32") && isRunning64 ()) { - - //mkdir (nmeDirectory + "/ndll/Linux64"); - - if (!flags.exists ("debug")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dlinux", "-DHXCPP_M64" ].concat (defines)); - synchronizeNDLL ("Linux64/lime.ndll"); - - } - - if (!flags.exists ("release")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dlinux", "-DHXCPP_M64", "-Ddebug", "-Dfulldebug" ].concat (defines)); - synchronizeNDLL ("Linux64/lime-debug.ndll"); - - } - - } - - //mkdir (nmeDirectory + "/ndll/Linux"); - - if (!flags.exists ("64")) { - - if (!flags.exists ("debug")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dlinux" ].concat (defines)); - synchronizeNDLL ("Linux/lime.ndll"); - - } - - if (!flags.exists ("release")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dlinux", "-Ddebug", "-Dfulldebug" ].concat (defines)); - synchronizeNDLL ("Linux/lime-debug.ndll"); - - } - - } - - } else { - - //mkdir (nmeDirectory + "/ndll/RPi"); - - if (buildSharedLibs) { - - runCommand (sharedLibsPath, "neko", [ "build.n", "rpi" ].concat (defines)); - - } - - if (!flags.exists ("debug")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dlinux", "-Drpi" ].concat (defines)); - synchronizeNDLL ("RPi/lime.ndll"); - - } - - if (!flags.exists ("release")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dlinux", "-Drpi", "-Ddebug", "-Dfulldebug" ].concat (defines)); - synchronizeNDLL ("RPi/lime-debug.ndll"); - - } - - } - - case "mac": - - //mkdir (nmeDirectory + "/ndll/Mac"); - - if (buildSharedLibs) { - - runCommand (sharedLibsPath, "neko", [ "build.n", "mac" ].concat (defines)); - - } - - if (!flags.exists ("64")) { - - if (!flags.exists ("debug")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dmac" ].concat (defines)); - synchronizeNDLL ("Mac/lime.ndll"); - - } - - if (!flags.exists ("release")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dmac", "-Ddebug", "-Dfulldebug" ].concat (defines)); - synchronizeNDLL ("Mac/lime-debug.ndll"); - - } - - } - - if (!flags.exists ("32")) { - - if (!flags.exists ("debug")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dmac", "-DHXCPP_M64" ].concat (defines)); - synchronizeNDLL ("Mac64/lime.ndll"); - - } - - if (!flags.exists ("release")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dmac", "-DHXCPP_M64", "-Ddebug", "-Dfulldebug" ].concat (defines)); - synchronizeNDLL ("Mac64/lime-debug.ndll"); - - } - - } - - case "tizen": - - if (buildSharedLibs) { - - runCommand (sharedLibsPath, "neko", [ "build.n", "tizen" ].concat (defines)); - - } - - if (!flags.exists ("debug")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dtizen" ].concat (defines)); - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dtizen", "-Dsimulator" ].concat (defines)); - - } - - if (!flags.exists ("release")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dtizen", "-Ddebug", "-Dfulldebug" ].concat (defines)); - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dtizen", "-Dsimulator", "-Ddebug", "-Dfulldebug" ].concat (defines)); - - } - - case "webos": - - //mkdir (nmeDirectory + "/ndll/webOS"); - - if (buildSharedLibs) { - - runCommand (sharedLibsPath, "neko", [ "build.n", "webos" ].concat (defines)); - - } - - if (!flags.exists ("debug")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dwebos" ].concat (defines)); - synchronizeNDLL ("webOS/lime.so"); - - } - - if (!flags.exists ("release")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dwebos", "-Ddebug", "-Dfulldebug" ].concat (defines)); - synchronizeNDLL ("webOS/lime-debug.so"); - - } - - case "windows": - - //mkdir (nmeDirectory + "/ndll/Windows"); - - if (buildSharedLibs) { - - runCommand (sharedLibsPath, "neko", [ "build.n", "windows" ].concat (defines)); - - } - - //if (!flags.exists ("winrt")) { - - if (Sys.environment ().exists ("VS110COMNTOOLS") && Sys.environment ().exists ("VS100COMNTOOLS")) { - - Sys.putEnv ("HXCPP_MSVC", Sys.getEnv ("VS100COMNTOOLS")); - - } - - if (!flags.exists ("debug")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dwindows" ].concat (defines)); - synchronizeNDLL ("Windows/lime.ndll"); - - } - - if (!flags.exists ("release")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dwindows", "-Ddebug", "-Dfulldebug" ].concat (defines)); - synchronizeNDLL ("Windows/lime-debug.ndll"); - - } - - //} - - /*if (Sys.environment ().exists ("VS110COMNTOOLS") && !flags.exists ("win32")) { - - Sys.putEnv ("HXCPP_MSVC", Sys.getEnv ("VS110COMNTOOLS")); - - var conflictingFiles = [ PathHelper.combine (path, "obj/lib/nme-debug.pdb") ]; - - for (file in conflictingFiles) { - - if (FileSystem.exists (file)) { - - FileSystem.deleteFile (file); - - } - - } - - if (!flags.exists ("debug")) { - - runCommand (path, "haxelib", [ "run", "hxcpp", "Build.xml", "-Dwinrt" ].concat (defines)); - synchronizeNDLL ("WinRT/nme.ndll"); - - } - - if (!flags.exists ("release")) { - - runCommand (path, "haxelib", [ "run", "hxcpp", "Build.xml", "-Dfulldebug", "-Dwinrt" ].concat (defines)); - synchronizeNDLL ("WinRT/nme-debug.ndll"); - - } - - }*/ - - case "wiiu": - - if (buildSharedLibs) { - - //runCommand (sharedLibsPath, "neko", [ "build.n", "wiiu" ].concat (defines)); - - } - - if (!flags.exists ("debug")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dnintendo", "-Dwiiu", "-Dtoolchain=wiiu", "-I" + PathHelper.getHaxelib (new Haxelib ("openfl-wiiu")) ].concat (defines)); - - } - - if (!flags.exists ("release")) { - - runCommand (path, "haxelib", [ "run", buildLib, buildFile, "-Dnintendo", "-Dwiiu", "-Ddebug", "-Dfulldebug", "-Dtoolchain=wiiu", "-I" + PathHelper.getHaxelib (new Haxelib ("openfl-wiiu")) ].concat (defines)); - - } - - } - - } - - - private static function downloadFile (remotePath:String, localPath:String) { - - var out = File.write (localPath, true); - var progress = new Progress (out); - var h = new Http (remotePath); - - h.onError = function (e) { - progress.close(); - FileSystem.deleteFile (localPath); - throw e; - }; - - h.customRequest (false, progress); - - } - - - public static function error (message:String = "", e:Dynamic = null):Void { - - if (message != "") { - - if (lime_error_output == null) { - - try { - - lime_error_output = Lib.load ("lime", "lime_error_output", 1); - - } catch (e:Dynamic) { - - lime_error_output = Lib.println; - - } - - } - - try { - - lime_error_output ("Error: " + message + "\n"); - - } catch (e:Dynamic) {} - - } - - if (e != null) { - - Lib.rethrow (e); - - } - - Sys.exit (1); - - } - - - private static function getHostname ():String { - - var result = ""; - - if (!isWindows) { - - var proc = new Process ("hostname", []); - - try { - - result = proc.stdout.readLine (); - - } catch (e:Dynamic) { }; - - proc.close(); - - } - - return result; - - } - - - private static function getRevision ():String { - - var nmeVersion = getVersion (); - var result = nmeVersion + "-r0"; - - if (FileSystem.exists (PathHelper.combine (limeDirectory, ".git"))) { - - var cacheCwd = Sys.getCwd (); - Sys.setCwd (limeDirectory); - - var proc = new Process ("git", [ "describe", "--tags" ]); - - try { - - var description = proc.stdout.readLine (); - result = nmeVersion + description.substr (description.indexOf ("-")); - - } catch (e:Dynamic) { }; - - proc.close(); - Sys.setCwd (cacheCwd); - - } else if (FileSystem.exists (PathHelper.combine (limeDirectory, ".svn"))) { - - var cacheCwd = Sys.getCwd (); - Sys.setCwd (limeDirectory); - - var proc = new Process ("svn", [ "info" ]); - - try { - - while (true) { - - result = proc.stdout.readLine (); - - var checkString = "Revision: "; - var index = result.indexOf (checkString); - - if (index > -1) { - - result = nmeVersion + "-r" + result.substr (checkString.length); - break; - - } - - } - - } catch (e:Dynamic) { }; - - proc.close(); - Sys.setCwd (cacheCwd); - - } - - return result; - - } - - - private static function getVersion (library:String = "lime", haxelibFormat:Bool = false):String { - - var libraryPath = limeDirectory; - - if (library != "lime") { - - libraryPath = PathHelper.getHaxelib (new Haxelib (library)); - - } - - if (FileSystem.exists (libraryPath + "/haxelib.json")) { - - var json = Json.parse (File.getContent (libraryPath + "/haxelib.json")); - var result:String = json.version; - - if (haxelibFormat) { - - return StringTools.replace (result, ".", ","); - - } else { - - return result; - - } - - } else if (FileSystem.exists (libraryPath + "/haxelib.xml")) { - - for (element in Xml.parse (File.getContent (libraryPath + "/haxelib.xml")).firstElement ().elements ()) { - - if (element.nodeName == "version") { - - if (haxelibFormat) { - - return StringTools.replace (element.get ("name"), ".", ","); - - } else { - - return element.get ("name"); - - } - - } - - } - - } - - return ""; - - } - - - public static function isRunning64 ():Bool { - - if (Sys.systemName () == "Linux") { - - var proc = new Process ("uname", [ "-m" ]); - var result = ""; - - try { - - while (true) { - - var line = proc.stdout.readLine (); - - if (line.substr (0,1) != "-") { - - result = line; - break; - - } - - } - - } catch (e:Dynamic) { }; - - proc.close(); - - return result == "x86_64"; - - } else { - - return false; - - } - - } - - - public static function mkdir (directory:String):Void { - - directory = StringTools.replace (directory, "\\", "/"); - var total = ""; - - if (directory.substr (0, 1) == "/") { - - total = "/"; - - } - - var parts = directory.split("/"); - var oldPath = ""; - - if (parts.length > 0 && parts[0].indexOf (":") > -1) { - - oldPath = Sys.getCwd (); - Sys.setCwd (parts[0] + "\\"); - parts.shift (); - - } - - for (part in parts) { - - if (part != "." && part != "") { - - if (total != "") { - - total += "/"; - - } - - total += part; - - if (!FileSystem.exists (total)) { - - //print("mkdir " + total); - - FileSystem.createDirectory (total); - - } - - } - - } - - if (oldPath != "") { - - Sys.setCwd (oldPath); - - } - - } - - - private static function param (name:String, ?passwd:Bool):String { - - Sys.print (name + ": "); - - if (passwd) { - var s = new StringBuf (); - var c; - while ((c = Sys.getChar(false)) != 13) - s.addChar (c); - Sys.print (""); - return s.toString (); - } - - try { - - return Sys.stdin ().readLine (); - - } catch (e:Eof) { - - return ""; - - } - - } - - - private static function removeDirectory (directory:String):Void { - - if (FileSystem.exists (directory) && FileSystem.isDirectory (directory)) { - - for (file in FileSystem.readDirectory (directory)) { - - var path = directory + "/" + file; - - if (FileSystem.isDirectory (path)) { - - removeDirectory (path); - - } else { - - FileSystem.deleteFile (path); - - } - - } - - FileSystem.deleteDirectory (directory); - - } - - } - - - public static function runCommand (path:String, command:String, args:Array, throwErrors:Bool = true):Int { - - var oldPath:String = ""; - - if (path != null && path != "") { - - //trace ("cd " + path); - - oldPath = Sys.getCwd (); - - try { - - Sys.setCwd (path); - - } catch (e:Dynamic) { - - error ("Cannot set current working directory to \"" + path + "\""); - - } - - } - - //trace (command + (args==null ? "": " " + args.join(" ")) ); - - var result:Dynamic = Sys.command (command, args); - - //if (result == 0) - // trace("Ok."); - - - if (oldPath != "") { - - Sys.setCwd (oldPath); - - } - - if (throwErrors && result != 0) { - - Sys.exit (1); - //throw ("Error running: " + command + " " + args.join (" ") + " [" + path + "]"); - - } - - return result; - - } - - - public static function main () { - - if (new EReg ("window", "i").match (Sys.systemName ())) { - - isLinux = false; - isMac = false; - isWindows = true; - - } else if (new EReg ("linux", "i").match (Sys.systemName ())) { - - isLinux = true; - isMac = false; - isWindows = false; - - } else if (new EReg ("mac", "i").match (Sys.systemName ())) { - - isLinux = false; - isMac = true; - isWindows = false; - - } - - var args = Sys.args (); - var command = args[0]; - - if (command == "rebuild" || command == "release") { - - // When the command-line tools are called from haxelib, - // the last argument is the project directory and the - // path to NME is the current working directory - - var lastArgument = new Path (args[args.length - 1]).toString (); - - if (((StringTools.endsWith (lastArgument, "/") && lastArgument != "/") || StringTools.endsWith (lastArgument, "\\")) && !StringTools.endsWith (lastArgument, ":\\")) { - - lastArgument = lastArgument.substr (0, lastArgument.length - 1); - - } - - if (FileSystem.exists (lastArgument) && FileSystem.isDirectory (lastArgument)) { - - Sys.setCwd (lastArgument); - args.pop (); - - } - - var targets:Array = null; - var flags = new Map (); - var ignoreLength = 0; - var defines = []; - - for (arg in args) { - - var equals = arg.indexOf ("="); - - if (StringTools.startsWith (arg, "-D")) { - - defines.push (arg); - ignoreLength++; - - } else if (equals > -1 && StringTools.startsWith (arg, "--")) { - - var argValue = arg.substr (equals + 1); - var field = arg.substr (2, equals - 2); - - if (StringTools.startsWith (field, "haxelib-")) { - - var name = field.substr (8); - PathHelper.haxelibOverrides.set (name, PathHelper.tryFullPath (argValue)); - - } - - ignoreLength++; - - } else if (StringTools.startsWith (arg, "-")) { - - switch (arg) { - - case "-v", "-verbose": - - LogHelper.verbose = true; - flags.set ("verbose", ""); - defines.push ("-verbose"); - - case "-d", "-debug": - - flags.set ("debug", ""); - - case "-nocolor": - - LogHelper.enableColor = false; - Sys.putEnv ("HXCPP_NO_COLOR", ""); - - default: - - flags.set (arg.substr (1), ""); - - } - - ignoreLength++; - - } - - } - - limeDirectory = PathHelper.getHaxelib (new Haxelib ("lime"), true); - - var path = ""; - - if (args.length == 2 + ignoreLength) { - - //if (FileSystem.exists (PathHelper.tryFullPath ("include.xml"))) { - - //path = PathHelper.tryFullPath ("project"); - - //} else { - - if (!FileSystem.exists (PathHelper.combine (limeDirectory, "project"))) { - - //Sys.println ("This command must be run from a development checkout of NME"); - //return; - - } - - path = PathHelper.combine (limeDirectory, "project"); - - //} - - targets = args[1].split (","); - - } else if (args.length > 2 + ignoreLength) { - - path = args[1]; - targets = args[2].split (","); - - if (((StringTools.endsWith (path, "/") && path != "/") || StringTools.endsWith (path, "\\")) && !StringTools.endsWith (path, ":\\")) { - - path = path.substr (0, path.length - 1); - - } - - if (!FileSystem.exists (path)) { - - if (FileSystem.exists (PathHelper.tryFullPath (path))) { - - path = PathHelper.combine (PathHelper.tryFullPath (path), "project"); - - } else { - - path = PathHelper.combine (PathHelper.getHaxelib (new Haxelib (path), true), "project"); - - } - - } else { - - var haxelib = PathHelper.getHaxelib (new Haxelib (path)); - - if (FileSystem.isDirectory (path)) { - - path = PathHelper.combine (path, "project"); - - } else { - - path = PathHelper.combine (Path.directory (path), "project"); - - } - - if (!FileSystem.exists (path) && haxelib != null) { - - path = PathHelper.combine (haxelib, "project"); - - } - - } - - } - - switch (command) { - - case "rebuild": - - if (path != PathHelper.combine (limeDirectory, "project") && !flags.exists ("debug")) { - - flags.set ("release", ""); - - } - - build (path, targets, flags, defines); - - case "release": - - release (targets); - - } - - } else { - - limeDirectory = PathHelper.getHaxelib (new Haxelib ("lime"), true); - - if (command == "setup") { - - var toolsDirectory = PathHelper.getHaxelib (new Haxelib ("aether")); - - if (toolsDirectory == null || toolsDirectory == "" || toolsDirectory.indexOf ("is not installed") > -1) { - - Sys.command ("haxelib install aether"); - - } - - } - - var flags = new Map (); - var defines = new Array (); - - for (i in 0...args.length) { - - var arg = args[i]; - - switch (arg) { - - case "-rebuild", "-clean", "-32", "-64": - - flags.set (arg.substr (1), ""); - - case "-d", "-debug": - - flags.set ("debug", ""); - - case "-v", "-verbose": - - flags.set ("verbose", ""); - - default: - - if (arg.indexOf ("--macro") == 0) { - - args[i] = '"' + arg + '"'; - - } - - if (arg.indexOf ("-D") == 0) { - - defines.push (arg); - - } - - } - - } - - if (flags.exists ("rebuild")) { - - var target = ""; - - for (i in 1...args.length) { - - switch (args[i]) { - - case "cpp", "neko": - - target = Std.string (PlatformHelper.hostPlatform).toLowerCase (); - continue; - - case "windows", "mac", "linux", "emscripten", "ios", "android", "blackberry", "tizen", "webos": - - target = args[i]; - continue; - - default: - - } - - } - - if (target == "windows") { - - flags.set ("win32", ""); - - } else if (target == "linux") { - - if (!flags.exists ("64") && !flags.exists ("32")) { - - if (PlatformHelper.hostArchitecture == Architecture.X64) { - - flags.set ("64", ""); - - } else { - - flags.set ("32", ""); - - } - - } - - } - - if (!flags.exists ("debug")) { - - flags.set ("release", ""); - - } - - build ("", [ target, "tools" ], flags, defines); - - } - - var workingDirectory = args.pop (); - /*var define = "-Dopenfl"; - - var version = getVersion (); - - if (version != null && version != "") { - - define += "=" + version.substr (0, 3); - - }*/ - - var args = [ "run", "aether" /*, define*/ ].concat (args); - - Sys.exit (runCommand (workingDirectory, "haxelib", args)); - - } - - } - - - public static function recursiveCopy (source:String, destination:String, ignore:Array = null) { - - if (ignore == null) { - - ignore = []; - - } - - mkdir (destination); - - var files = FileSystem.readDirectory (source); - - for (file in files) { - - var ignoreFile = false; - - for (ignoreName in ignore) { - - if (StringTools.endsWith (ignoreName, "/")) { - - if (FileSystem.isDirectory (source + "/" + file) && file == ignoreName.substr (0, file.length - 1)) { - - ignoreFile = true; - - } - - } else if (file == ignoreName || StringTools.endsWith (source + "/" + file, "/" + ignoreName)) { - - ignoreFile = true; - - } - - } - - if (!ignoreFile) { - - var itemDestination:String = destination + "/" + file; - var itemSource:String = source + "/" + file; - - if (FileSystem.isDirectory (itemSource)) { - - recursiveCopy (itemSource, itemDestination, ignore); - - } else { - - Sys.println ("Copying " + itemSource); - File.copy (itemSource, itemDestination); - - } - - } - - } - - } - - - private static function release (targets:Array = null):Void { - - if (targets == null) { - - targets = [ "zip" ]; - - } - - /*for (target in targets) { - - switch (target) { - - case "upload": - - var user = param ("FTP username"); - var password = param ("FTP password", true); - - if (isWindows) { - - runCommand (openFLDirectory, "script\\upload-build.bat", [ user, password, openFLNativeDirectory, "Windows/nme.ndll" ]); - runCommand (openFLDirectory, "script\\upload-build.bat", [ user, password, openFLNativeDirectory, "Windows/nme-debug.ndll" ]); - - if (Sys.environment ().exists ("VS110COMNTOOLS")) { - - //runCommand (nmeDirectory, "tools\\run-script\\upload-build.bat", [ user, password, openFLNativeDirectory, "WinRTx64/nme.ndll" ]); - //runCommand (nmeDirectory, "tools\\run-script\\upload-build.bat", [ user, password, openFLNativeDirectory, "WinRTx64/nme-debug.ndll" ]); - runCommand (openFLDirectory, "script\\upload-build.bat", [ user, password, openFLNativeDirectory, "WinRTx86/nme.ndll" ]); - runCommand (openFLDirectory, "script\\upload-build.bat", [ user, password, openFLNativeDirectory, "WinRTx86/nme-debug.ndll" ]); - - } - - } else if (isLinux) { - - runCommand (openFLDirectory, "script/upload-build.sh", [ user, password, openFLNativeDirectory, "Linux/nme.ndll" ]); - runCommand (openFLDirectory, "script/upload-build.sh", [ user, password, openFLNativeDirectory, "Linux/nme-debug.ndll" ]); - runCommand (openFLDirectory, "script/upload-build.sh", [ user, password, openFLNativeDirectory, "Linux64/nme.ndll" ]); - runCommand (openFLDirectory, "script/upload-build.sh", [ user, password, openFLNativeDirectory, "Linux64/nme-debug.ndll" ]); - - } else if (isMac) { - - runCommand (openFLDirectory, "script/upload-build.sh", [ user, password, openFLNativeDirectory, "Mac/nme.ndll" ]); - runCommand (openFLDirectory, "script/upload-build.sh", [ user, password, openFLNativeDirectory, "Mac/nme-debug.ndll" ]); - runCommand (openFLDirectory, "script/upload-build.sh", [ user, password, openFLNativeDirectory, "iPhone/libnme.iphoneos.a" ]); - runCommand (openFLDirectory, "script/upload-build.sh", [ user, password, openFLNativeDirectory, "iPhone/libnme.iphoneos-v7.a" ]); - runCommand (openFLDirectory, "script/upload-build.sh", [ user, password, openFLNativeDirectory, "iPhone/libnme.iphonesim.a" ]); - runCommand (openFLDirectory, "script/upload-build.sh", [ user, password, openFLNativeDirectory, "iPhone/libnme-debug.iphoneos.a" ]); - runCommand (openFLDirectory, "script/upload-build.sh", [ user, password, openFLNativeDirectory, "iPhone/libnme-debug.iphoneos-v7.a" ]); - runCommand (openFLDirectory, "script/upload-build.sh", [ user, password, openFLNativeDirectory, "iPhone/libnme-debug.iphonesim.a" ]); - - } - - case "download": - - if (!isWindows) { - - downloadFile ("http://www.nme.io/builds/ndll/Windows/nme.ndll", PathHelper.combine (openFLNativeDirectory, "ndll/Windows/nme.ndll")); - downloadFile ("http://www.nme.io/builds/ndll/Windows/nme-debug.ndll", PathHelper.combine (openFLNativeDirectory, "ndll/Windows/nme-debug.ndll")); - //downloadFile ("http://www.nme.io/builds/ndll/WinRTx64/nme.ndll", nmeDirectory + "/ndll/WinRTx64/nme.ndll"); - //downloadFile ("http://www.nme.io/builds/ndll/WinRTx64/nme-debug.ndll", nmeDirectory + "/ndll/WinRTx64/nme-debug.ndll"); - downloadFile ("http://www.nme.io/builds/ndll/WinRTx86/nme.ndll", PathHelper.combine (openFLNativeDirectory, "ndll/WinRTx86/nme.ndll")); - downloadFile ("http://www.nme.io/builds/ndll/WinRTx86/nme-debug.ndll", PathHelper.combine (openFLNativeDirectory, "ndll/WinRTx86/nme-debug.ndll")); - - } - - if (!isLinux) { - - downloadFile ("http://www.nme.io/builds/ndll/Linux/nme.ndll", PathHelper.combine (openFLNativeDirectory, "ndll/Linux/nme.ndll")); - downloadFile ("http://www.nme.io/builds/ndll/Linux/nme-debug.ndll", PathHelper.combine (openFLNativeDirectory, "ndll/Linux/nme-debug.ndll")); - downloadFile ("http://www.nme.io/builds/ndll/Linux64/nme.ndll", PathHelper.combine (openFLNativeDirectory, "ndll/Linux64/nme.ndll")); - downloadFile ("http://www.nme.io/builds/ndll/Linux64/nme-debug.ndll", PathHelper.combine (openFLNativeDirectory, "ndll/Linux64/nme-debug.ndll")); - - } - - if (!isMac) { - - downloadFile ("http://www.nme.io/builds/ndll/Mac/nme.ndll", PathHelper.combine (openFLNativeDirectory, "ndll/Mac/nme.ndll")); - downloadFile ("http://www.nme.io/builds/ndll/Mac/nme-debug.ndll", PathHelper.combine (openFLNativeDirectory, "ndll/Mac/nme-debug.ndll")); - downloadFile ("http://www.nme.io/builds/ndll/iPhone/libnme.iphoneos.a", PathHelper.combine (openFLNativeDirectory, "ndll/iPhone/libnme.iphoneos.a")); - downloadFile ("http://www.nme.io/builds/ndll/iPhone/libnme.iphoneos-v7.a", PathHelper.combine (openFLNativeDirectory, "ndll/iPhone/libnme.iphoneos-v7.a")); - downloadFile ("http://www.nme.io/builds/ndll/iPhone/libnme.iphonesim.a", PathHelper.combine (openFLNativeDirectory, "ndll/iPhone/libnme.iphonesim.a")); - downloadFile ("http://www.nme.io/builds/ndll/iPhone/libnme-debug.iphoneos.a", PathHelper.combine (openFLNativeDirectory, "ndll/iPhone/libnme-debug.iphoneos.a")); - downloadFile ("http://www.nme.io/builds/ndll/iPhone/libnme-debug.iphoneos-v7.a", PathHelper.combine (openFLNativeDirectory, "ndll/iPhone/libnme-debug.iphoneos-v7.a")); - downloadFile ("http://www.nme.io/builds/ndll/iPhone/libnme-debug.iphonesim.a", PathHelper.combine (openFLNativeDirectory, "ndll/iPhone/libnme-debug.iphonesim.a")); - - } - - case "zip": - - var tempPath = "../openfl-native-release-zip"; - var targetPath = ""; - - targetPath = "../openfl-native-" + getRevision () + ".zip"; - - recursiveCopy (openFLNativeDirectory, openFLNativeDirectory + tempPath + "/openfl-native", nmeFilters); - - if (FileSystem.exists (openFLNativeDirectory + targetPath)) { - - FileSystem.deleteFile (openFLNativeDirectory + targetPath); - - } - - if (!isWindows) { - - runCommand (openFLNativeDirectory + tempPath, "zip", [ "-r", targetPath, "*" ]); - removeDirectory (openFLNativeDirectory + tempPath); - - } - - case "installer": - - var hxlibcPath = PathHelper.getHaxelib (new Haxelib (buildLib)); - var nmePath = PathHelper.getHaxelib (new Haxelib ("lime")); - var swfPath = PathHelper.getHaxelib (new Haxelib ("swf")); - var actuatePath = PathHelper.getHaxelib (new Haxelib ("actuate")); - var svgPath = PathHelper.getHaxelib (new Haxelib ("svg")); - - var hxlibcVersion = getVersion (buildLib, true); - var nmeVersion = getVersion ("lime", true); - var swfVersion = getVersion ("swf", true); - var actuateVersion = getVersion ("actuate", true); - var svgVersion = getVersion ("svg", true); - - var tempPath = "../nme-release-installer"; - - if (isMac) { - - //var targetPath = "../NME-" + getVersion () + "-Mac-" + getRevision () + ".mpkg"; - - var haxePath = "/usr/lib/haxe"; - var nekoPath = "/usr/lib/neko"; - - removeDirectory (nmeDirectory + tempPath); - recursiveCopy (nmeDirectory + "/tools/installer/mac", nmeDirectory + tempPath, [ ]); - - recursiveCopy (haxePath, nmeDirectory + tempPath + "/resources/haxe/usr/lib/haxe", [ "lib" ]); - recursiveCopy (nekoPath, nmeDirectory + tempPath + "/resources/haxe/usr/lib/neko", []); - - recursiveCopy (hxlibcPath, nmeDirectory + tempPath + "/resources/hxlibc/usr/lib/haxe/lib/hxlibc/" + hxlibcVersion, [ "obj", "all_objs", ".git", ".svn" ]); - recursiveCopy (nmePath, nmeDirectory + tempPath + "/resources/nme/usr/lib/haxe/lib/nme/" + nmeVersion, nmeFilters); - recursiveCopy (nmePath + "/tools/project", nmeDirectory + tempPath + "/resources/nme/usr/lib/haxe/lib/nme/" + nmeVersion + "/tools/project"); - recursiveCopy (swfPath, nmeDirectory + tempPath + "/resources/swf/usr/lib/haxe/lib/swf/" + swfVersion, [ ".git", ".svn" ]); - recursiveCopy (actuatePath, nmeDirectory + tempPath + "/resources/actuate/usr/lib/haxe/lib/actuate/" + actuateVersion, [ ".git", ".svn" ]); - recursiveCopy (svgPath, nmeDirectory + tempPath + "/resources/svg/usr/lib/haxe/lib/svg/" + svgVersion, [ ".git", ".svn" ]); - - File.saveContent (nmeDirectory + tempPath + "/resources/hxlibc/usr/lib/haxe/lib/hxlibc/.current", getVersion (buildLib)); - File.saveContent (nmeDirectory + tempPath + "/resources/nme/usr/lib/haxe/lib/nme/.current", getVersion ("lime")); - File.saveContent (nmeDirectory + tempPath + "/resources/swf/usr/lib/haxe/lib/swf/.current", getVersion ("swf")); - File.saveContent (nmeDirectory + tempPath + "/resources/actuate/usr/lib/haxe/lib/actuate/.current", getVersion ("actuate")); - File.saveContent (nmeDirectory + tempPath + "/resources/svg/usr/lib/haxe/lib/svg/.current", getVersion ("svg")); - - runCommand (nmeDirectory + tempPath, "chmod", [ "+x", "./prep.sh" ]); - runCommand (nmeDirectory + tempPath, "./prep.sh", [ ]); - - runCommand (nmeDirectory + tempPath, "/Applications/PackageMaker.app/Contents/MacOS/PackageMaker", [ nmeDirectory + tempPath + "/Installer.pmdoc" ]); - removeDirectory (nmeDirectory + tempPath); - - } else if (isWindows) { - - var haxePath = "C:\\Motion-Twin\\haxe"; - var nekoPath = "C:\\Motion-Twin\\neko"; - - removeDirectory (nmeDirectory + tempPath); - recursiveCopy (nmeDirectory + "/tools/installer/windows", nmeDirectory + tempPath, []); - - recursiveCopy (haxePath, nmeDirectory + tempPath + "/resources/haxe", [ "lib" ]); - recursiveCopy (nekoPath, nmeDirectory + tempPath + "/resources/neko", []); - - recursiveCopy (hxlibcPath, nmeDirectory + tempPath + "/resources/hxlibc/" + hxlibcVersion, [ "obj", "all_objs", ".git", ".svn" ]); - recursiveCopy (nmePath, nmeDirectory + tempPath + "/resources/nme/" + nmeVersion, nmeFilters); - recursiveCopy (nmePath + "/tools/project", nmeDirectory + tempPath + "/resources/nme/" + nmeVersion + "/tools/project"); - recursiveCopy (swfPath, nmeDirectory + tempPath + "/resources/swf/" + swfVersion, [ ".git", ".svn" ]); - recursiveCopy (actuatePath, nmeDirectory + tempPath + "/resources/actuate/" + actuateVersion, [ ".git", ".svn" ]); - recursiveCopy (svgPath, nmeDirectory + tempPath + "/resources/svg/" + svgVersion, [ ".git", ".svn" ]); - - File.saveContent (nmeDirectory + tempPath + "/resources/hxlibc/.current", getVersion (buildLib)); - File.saveContent (nmeDirectory + tempPath + "/resources/nme/.current", getVersion ("lime")); - File.saveContent (nmeDirectory + tempPath + "/resources/swf/.current", getVersion ("swf")); - File.saveContent (nmeDirectory + tempPath + "/resources/actuate/.current", getVersion ("actuate")); - File.saveContent (nmeDirectory + tempPath + "/resources/svg/.current", getVersion ("svg")); - - var args = [ "/DVERSION=" + getVersion ("lime"), "/DVERSION_FOLDER=" + nmeVersion, "/DHAXE_VERSION=2.10", "/DNEKO_VERSION=1.8.2", "/DHXLIBC_VERSION=" + getVersion (buildLib), "/DACTUATE_VERSION=" + getVersion ("actuate"), "/DSWF_VERSION=" + getVersion ("swf"), "/DSVG_VERSION=" + getVersion ("svg") ]; - args.push ("/DOUTPUT_PATH=../NME-" + getVersion ("lime") + "-Windows.exe"); - args.push ("Installer.nsi"); - - Sys.putEnv ("PATH", Sys.getEnv ("PATH") + ";C:\\Program Files (x86)\\NSIS"); - - runCommand (nmeDirectory + tempPath, "makensis", args); - removeDirectory (nmeDirectory + tempPath); - - } - - } - - }*/ - - } - - - private static function synchronizeNDLL (path:String):Void { - - /*if (FileSystem.exists (nmeDirectory + "ndll/" + path)) { - - mkdir (Path.directory (PathHelper.combine (openFLNativeDirectory, "ndll/" + path))); - File.copy (nmeDirectory + "ndll/" + path, openFLNativeDirectory + "ndll/" + path); - - } else if (FileSystem.exists (openFLNativeDirectory + "ndll/" + path)) { - - FileSystem.deleteFile (openFLNativeDirectory + "ndll/" + path); - - }*/ - - } - - - private static var lime_error_output; - - -} - - -class Progress extends haxe.io.Output { - - var o : haxe.io.Output; - var cur : Int; - var max : Int; - var start : Float; - - public function new(o) { - this.o = o; - cur = 0; - start = haxe.Timer.stamp(); - } - - function bytes(n) { - cur += n; - if( max == null ) - Lib.print(cur+" bytes\r"); - else - Lib.print(cur+"/"+max+" ("+Std.int((cur*100.0)/max)+"%)\r"); - } - - public override function writeByte(c) { - o.writeByte(c); - bytes(1); - } - - public override function writeBytes(s,p,l) { - var r = o.writeBytes(s,p,l); - bytes(r); - return r; - } - - public override function close() { - super.close(); - o.close(); - var time = haxe.Timer.stamp() - start; - var speed = (cur / time) / 1024; - time = Std.int(time * 10) / 10; - speed = Std.int(speed * 10) / 10; - Lib.print("Download complete : " + cur + " bytes in " + time + "s (" + speed + "KB/s)\n"); - } - - public override function prepare(m) { - max = m; - } - -} diff --git a/script/src/project/Haxelib.hx b/script/src/project/Haxelib.hx deleted file mode 100644 index f8656a485..000000000 --- a/script/src/project/Haxelib.hx +++ /dev/null @@ -1,27 +0,0 @@ -package project; - - -class Haxelib { - - - public var name:String; - public var version:String; - - - public function new (name:String, version:String = "") { - - this.name = name; - this.version = version; - - } - - - public function clone ():Haxelib { - - var haxelib = new Haxelib (name, version); - return haxelib; - - } - - -} \ No newline at end of file