diff --git a/lime/project/ConfigData.hx b/lime/project/ConfigData.hx index 10774c5af..990ebab4a 100644 --- a/lime/project/ConfigData.hx +++ b/lime/project/ConfigData.hx @@ -362,7 +362,7 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic { } - public function parse (elem:Fast):Void { + public function parse (elem:Fast, substitute:String->String = null):Void { var bucket = this; var bucketType = ""; @@ -386,21 +386,22 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic { } - parseAttributes (elem, bucket); - parseChildren (elem, bucket); + parseAttributes (elem, bucket, substitute); + parseChildren (elem, bucket, 0, substitute); log ("> current config : " + this); } - private function parseAttributes (elem:Fast, bucket:Dynamic):Void { + private function parseAttributes (elem:Fast, bucket:Dynamic, substitute:String->String = null):Void { for (attrName in elem.x.attributes ()) { if (attrName != "type") { var attrValue = elem.x.get (attrName); + if (substitute != null) attrValue = substitute (attrValue); setNode (bucket, attrName, attrValue); } @@ -410,7 +411,7 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic { } - private function parseChildren (elem:Fast, bucket:Dynamic, depth:Int = 0):Void { + private function parseChildren (elem:Fast, bucket:Dynamic, depth:Int = 0, substitute:String->String = null):Void { for (child in elem.elements) { @@ -437,19 +438,19 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic { if (hasAttributes) { - parseAttributes (child, arrayBucket); + parseAttributes (child, arrayBucket, substitute); } if (hasChildren) { - parseChildren (child, arrayBucket, d); + parseChildren (child, arrayBucket, d, substitute); } if (!hasChildren && !hasAttributes) { - parseValue (child, arrayBucket); + parseValue (child, arrayBucket, substitute); } @@ -457,7 +458,7 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic { if (!hasChildren && !hasAttributes) { - parseValue (child, bucket); + parseValue (child, bucket, substitute); } else { @@ -465,13 +466,13 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic { if (hasAttributes) { - parseAttributes (child, childBucket); + parseAttributes (child, childBucket, substitute); } if (hasChildren) { - parseChildren (child, childBucket, d); + parseChildren (child, childBucket, d, substitute); } @@ -483,11 +484,13 @@ abstract ConfigData(Dynamic) to Dynamic from Dynamic { } - private function parseValue (elem:Fast, bucket:Dynamic):Void { + private function parseValue (elem:Fast, bucket:Dynamic, substitute:String->String = null):Void { if (elem.innerHTML != "") { - setNode (bucket, elem.name, elem.innerHTML); + var value = elem.innerHTML; + if (substitute != null) value = substitute (value); + setNode (bucket, elem.name, value); } diff --git a/lime/project/ProjectXMLParser.hx b/lime/project/ProjectXMLParser.hx index 6973b0042..97fa8309a 100644 --- a/lime/project/ProjectXMLParser.hx +++ b/lime/project/ProjectXMLParser.hx @@ -66,44 +66,53 @@ class ProjectXMLParser extends HXProject { case MOBILE: + defines.set ("platformType", "mobile"); defines.set ("mobile", "1"); case DESKTOP: + defines.set ("platformType", "desktop"); defines.set ("desktop", "1"); case WEB: + defines.set ("platformType", "web"); defines.set ("web", "1"); case CONSOLE: + defines.set ("platformType", "console"); defines.set ("console", "1"); } if (targetFlags.exists ("neko")) { + defines.set ("targetType", "neko"); defines.set ("native", "1"); defines.set ("neko", "1"); } else if (targetFlags.exists ("java")) { + defines.set ("targetType", "java"); defines.set ("native", "1"); defines.set ("java", "1"); } else if (targetFlags.exists ("nodejs")) { + defines.set ("targetType", "nodejs"); defines.set ("native", "1"); defines.set ("nodejs", "1"); } else if (targetFlags.exists ("cs")) { + defines.set ("targetType", "cs"); defines.set ("native", "1"); defines.set ("cs", "1"); } else if (target == Platform.FIREFOX) { + defines.set ("targetType", "js"); defines.set ("html5", "1"); } else if (platformType == DESKTOP && target != PlatformHelper.hostPlatform) { @@ -112,32 +121,42 @@ class ProjectXMLParser extends HXProject { if (target == Platform.WINDOWS) { + defines.set ("targetType", "cpp"); defines.set ("cpp", "1"); defines.set ("mingw", "1"); } else { + defines.set ("targetType", "neko"); defines.set ("neko", "1"); } } else if (targetFlags.exists ("cpp") || ((platformType != PlatformType.WEB) && !targetFlags.exists ("html5")) || target == Platform.EMSCRIPTEN) { + defines.set ("targetType", "cpp"); defines.set ("native", "1"); defines.set ("cpp", "1"); + } else if (target == Platform.FLASH) { + + defines.set ("targetType", "swf"); + } if (debug) { + defines.set ("buildType", "debug"); defines.set ("debug", "1"); } else if (targetFlags.exists ("final")) { + defines.set ("buildType", "final"); defines.set ("final", "1"); } else { + defines.set ("buildType", "release"); defines.set ("release", "1"); } @@ -156,6 +175,7 @@ class ProjectXMLParser extends HXProject { defines.set (Std.string (target).toLowerCase (), "1"); defines.set ("target", Std.string (target).toLowerCase ()); + defines.set ("platform", defines.get ("target")); } @@ -2044,7 +2064,7 @@ class ProjectXMLParser extends HXProject { case "config": - config.parse (element); + config.parse (element, substitute); case "prebuild": @@ -2058,7 +2078,7 @@ class ProjectXMLParser extends HXProject { if (StringTools.startsWith (element.name, "config:")) { - config.parse (element); + config.parse (element, substitute); } diff --git a/lime/tools/platforms/AndroidPlatform.hx b/lime/tools/platforms/AndroidPlatform.hx index 5d76a7ea3..79c2a28ae 100644 --- a/lime/tools/platforms/AndroidPlatform.hx +++ b/lime/tools/platforms/AndroidPlatform.hx @@ -52,7 +52,7 @@ class AndroidPlatform extends PlatformTarget { } - targetDirectory = project.app.path + "/android/" + buildType; + targetDirectory = PathHelper.combine (project.app.path, project.config.getString ("android.output-directory", "android/" + buildType)); } diff --git a/lime/tools/platforms/EmscriptenPlatform.hx b/lime/tools/platforms/EmscriptenPlatform.hx index e049b3b53..944e94443 100644 --- a/lime/tools/platforms/EmscriptenPlatform.hx +++ b/lime/tools/platforms/EmscriptenPlatform.hx @@ -29,7 +29,7 @@ class EmscriptenPlatform extends PlatformTarget { super (command, _project, targetFlags); - targetDirectory = project.app.path + "/emscripten/" + buildType; + targetDirectory = PathHelper.combine (project.app.path, project.config.getString ("emscripten.output-directory", "emscripten/" + buildType)); outputFile = targetDirectory + "/bin/" + project.app.file + ".js"; } diff --git a/lime/tools/platforms/FirefoxPlatform.hx b/lime/tools/platforms/FirefoxPlatform.hx index a6daeca05..4f5e62ffd 100644 --- a/lime/tools/platforms/FirefoxPlatform.hx +++ b/lime/tools/platforms/FirefoxPlatform.hx @@ -42,7 +42,7 @@ class FirefoxPlatform extends HTML5Platform { private override function initialize (command:String, project:HXProject):Void { - targetDirectory = project.app.path + "/firefox/" + buildType; + targetDirectory = PathHelper.combine (project.app.path, project.config.getString ("firefox.output-directory", "firefox/" + buildType)); outputFile = targetDirectory + "/bin/" + project.app.file + ".js"; } diff --git a/lime/tools/platforms/FlashPlatform.hx b/lime/tools/platforms/FlashPlatform.hx index 4c6b9425f..b078958f1 100644 --- a/lime/tools/platforms/FlashPlatform.hx +++ b/lime/tools/platforms/FlashPlatform.hx @@ -37,7 +37,7 @@ class FlashPlatform extends PlatformTarget { super (command, _project, targetFlags); - targetDirectory = project.app.path + "/flash/" + buildType; + targetDirectory = PathHelper.combine (project.app.path, project.config.getString ("flash.output-directory", "flash/" + buildType)); } diff --git a/lime/tools/platforms/HTML5Platform.hx b/lime/tools/platforms/HTML5Platform.hx index 2272bd568..326d67a0f 100644 --- a/lime/tools/platforms/HTML5Platform.hx +++ b/lime/tools/platforms/HTML5Platform.hx @@ -110,7 +110,7 @@ class HTML5Platform extends PlatformTarget { private function initialize (command:String, project:HXProject):Void { - targetDirectory = project.app.path + "/html5/" + buildType; + targetDirectory = PathHelper.combine (project.app.path, project.config.getString ("html5.output-directory", "html5/" + buildType)); outputFile = targetDirectory + "/bin/" + project.app.file + ".js"; } diff --git a/lime/tools/platforms/IOSPlatform.hx b/lime/tools/platforms/IOSPlatform.hx index ce54b5b15..89d70d86b 100644 --- a/lime/tools/platforms/IOSPlatform.hx +++ b/lime/tools/platforms/IOSPlatform.hx @@ -38,7 +38,7 @@ class IOSPlatform extends PlatformTarget { super (command, _project, targetFlags); - targetDirectory = PathHelper.combine (project.app.path, "ios/" + buildType); + targetDirectory = PathHelper.combine (project.app.path, project.config.getString ("ios.output-directory", "ios/" + buildType)); } diff --git a/lime/tools/platforms/LinuxPlatform.hx b/lime/tools/platforms/LinuxPlatform.hx index 8c6618d8c..47b01ea1b 100644 --- a/lime/tools/platforms/LinuxPlatform.hx +++ b/lime/tools/platforms/LinuxPlatform.hx @@ -71,7 +71,7 @@ class LinuxPlatform extends PlatformTarget { } - targetDirectory = project.app.path + "/linux" + (is64 ? "64" : "") + (isRaspberryPi ? "-rpi" : "") + "/" + targetType + "/" + buildType; + targetDirectory = PathHelper.combine (project.app.path, project.config.getString ("linux.output-directory", "linux" + (is64 ? "64" : "") + (isRaspberryPi ? "-rpi" : "") + "/" + targetType + "/" + buildType)); applicationDirectory = targetDirectory + "/bin/"; executablePath = PathHelper.combine (applicationDirectory, project.app.file); diff --git a/lime/tools/platforms/MacPlatform.hx b/lime/tools/platforms/MacPlatform.hx index 5718601a4..6e5a78745 100644 --- a/lime/tools/platforms/MacPlatform.hx +++ b/lime/tools/platforms/MacPlatform.hx @@ -75,7 +75,7 @@ class MacPlatform extends PlatformTarget { } - targetDirectory = project.app.path + "/mac" + (is64 ? "64" : "") + "/" + targetType + "/" + buildType; + targetDirectory = PathHelper.combine (project.app.path, project.config.getString ("mac.output-directory", "mac" + (is64 ? "64" : "") + "/" + targetType + "/" + buildType)); applicationDirectory = targetDirectory + "/bin/" + project.app.file + ".app"; contentDirectory = applicationDirectory + "/Contents/Resources"; executableDirectory = applicationDirectory + "/Contents/MacOS"; diff --git a/lime/tools/platforms/TVOSPlatform.hx b/lime/tools/platforms/TVOSPlatform.hx index 36da6478c..29aeee502 100644 --- a/lime/tools/platforms/TVOSPlatform.hx +++ b/lime/tools/platforms/TVOSPlatform.hx @@ -38,7 +38,7 @@ class TVOSPlatform extends PlatformTarget { super (command, _project, targetFlags); - targetDirectory = PathHelper.combine (project.app.path, "tvos/" + buildType); + targetDirectory = PathHelper.combine (project.app.path, project.config.getString ("tvos.output-directory", "tvos/" + buildType)); } diff --git a/lime/tools/platforms/TizenPlatform.hx b/lime/tools/platforms/TizenPlatform.hx index 2f8f070aa..2779262e7 100644 --- a/lime/tools/platforms/TizenPlatform.hx +++ b/lime/tools/platforms/TizenPlatform.hx @@ -28,7 +28,7 @@ class TizenPlatform extends PlatformTarget { super (command, _project, targetFlags); - targetDirectory = project.app.path + "/tizen/" + buildType; + targetDirectory = PathHelper.combine (project.app.path, project.config.getString ("tizen.output-directory", "tizen/" + buildType)); } diff --git a/lime/tools/platforms/WindowsPlatform.hx b/lime/tools/platforms/WindowsPlatform.hx index 090fc6052..ca4a97d37 100644 --- a/lime/tools/platforms/WindowsPlatform.hx +++ b/lime/tools/platforms/WindowsPlatform.hx @@ -68,7 +68,7 @@ class WindowsPlatform extends PlatformTarget { } - targetDirectory = project.app.path + "/windows" + (is64 ? "64" : "") + "/" + targetType + "/" + buildType; + targetDirectory = PathHelper.combine (project.app.path, project.config.getString ("windows.output-directory", "windows" + (is64 ? "64" : "") + "/" + targetType + "/" + buildType)); applicationDirectory = targetDirectory + "/bin/"; executablePath = applicationDirectory + project.app.file + ".exe";