Initialize defines in HXProject.

This way, XML and HXP projects will use the same logic for `targetType`, among other things.
This commit is contained in:
Joseph Cloutier
2024-01-12 14:49:42 -05:00
parent 24bc9b2495
commit 6725825469
2 changed files with 174 additions and 175 deletions

View File

@@ -102,7 +102,7 @@ class HXProject extends Script
Haxelib.debug = inputData.haxelibDebug;
initialize();
initializeStatics();
var classRef = Type.resolveClass(inputData.name);
var instance = Type.createInstance(classRef, []);
@@ -114,11 +114,11 @@ class HXProject extends Script
File.saveContent(outputFile, serializer.toString());
}
public function new()
public function new(defines:Map<String, Dynamic> = null)
{
super();
initialize();
initializeStatics();
command = _command;
config = new ConfigData();
@@ -162,13 +162,17 @@ class HXProject extends Script
windows = [window];
assets = new Array<Asset>();
if (_userDefines != null)
if (defines != null)
{
defines = MapTools.copy(_userDefines);
this.defines = MapTools.copy(defines);
}
else if (_userDefines != null)
{
this.defines = MapTools.copy(_userDefines);
}
else
{
defines = new Map<String, String>();
this.defines = new Map<String, String>();
}
dependencies = new Array<Dependency>();
@@ -198,6 +202,8 @@ class HXProject extends Script
samplePaths = new Array<String>();
splashScreens = new Array<SplashScreen>();
targetHandlers = new Map<String, String>();
initializeDefines();
}
public function clone():HXProject
@@ -661,9 +667,168 @@ class HXProject extends Script
@:privateAccess projectXML.parseXML(new Access(Xml.parse(xml).firstElement()), "");
merge(projectXML);
}
// #end
private static function initialize():Void
private function initializeDefines():Void
{
switch (platformType)
{
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("hl"))
{
defines.set("targetType", "hl");
defines.set("native", "1");
defines.set("hl", "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 (target == Platform.AIR)
{
defines.set("targetType", "swf");
defines.set("flash", "1");
if (targetFlags.exists("ios")) defines.set("ios", "1");
if (targetFlags.exists("android")) defines.set("android", "1");
}
else if (target == Platform.WINDOWS && (targetFlags.exists("uwp") || targetFlags.exists("winjs")))
{
targetFlags.set("uwp", "");
targetFlags.set("winjs", "");
defines.set("targetType", "js");
defines.set("html5", "1");
defines.set("uwp", "1");
defines.set("winjs", "1");
}
else if (platformType == DESKTOP && target != cast System.hostPlatform)
{
defines.set("native", "1");
if (target == Platform.WINDOWS && targetFlags.exists("mingw"))
{
defines.set("targetType", "cpp");
defines.set("cpp", "1");
defines.set("mingw", "1");
}
else
{
defines.set("targetType", "neko");
defines.set("neko", "1");
}
}
else if (target == Platform.WEB_ASSEMBLY)
{
defines.set("webassembly", "1");
defines.set("wasm", "1");
defines.set("emscripten", "1");
defines.set("targetType", "cpp");
defines.set("native", "1");
defines.set("cpp", "1");
}
else if (targetFlags.exists("cpp")
|| ((platformType != PlatformType.WEB) && !targetFlags.exists("html5")))
{
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");
}
if (targetFlags.exists("static"))
{
defines.set("static_link", "1");
}
if (defines.exists("SWF_PLAYER"))
{
environment.set("SWF_PLAYER", defines.get("SWF_PLAYER"));
}
defines.set(Std.string(target).toLowerCase(), "1");
defines.set("target", Std.string(target).toLowerCase());
defines.set("platform", defines.get("target"));
switch (System.hostPlatform)
{
case WINDOWS:
defines.set("host", "windows");
case MAC:
defines.set("host", "mac");
case LINUX:
defines.set("host", "linux");
default:
defines.set("host", "unknown");
}
#if lime
defines.set("lime-tools", "1");
#end
defines.set("hxp", "1"); // TODO: Version?
}
private static function initializeStatics():Void
{
if (!initialized)
{

View File

@@ -27,12 +27,7 @@ class ProjectXMLParser extends HXProject
public function new(path:String = "", defines:Map<String, Dynamic> = null, includePaths:Array<String> = null, useExtensionPath:Bool = false)
{
super();
if (defines != null)
{
this.defines = MapTools.copy(defines);
}
super(defines);
if (includePaths != null)
{
@@ -43,173 +38,12 @@ class ProjectXMLParser extends HXProject
this.includePaths = new Array<String>();
}
initialize();
if (path != "")
{
process(path, useExtensionPath);
}
}
private function initialize():Void
{
switch (platformType)
{
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("hl"))
{
defines.set("targetType", "hl");
defines.set("native", "1");
defines.set("hl", "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 (target == Platform.AIR)
{
defines.set("targetType", "swf");
defines.set("flash", "1");
if (targetFlags.exists("ios")) defines.set("ios", "1");
if (targetFlags.exists("android")) defines.set("android", "1");
}
else if (target == Platform.WINDOWS && (targetFlags.exists("uwp") || targetFlags.exists("winjs")))
{
targetFlags.set("uwp", "");
targetFlags.set("winjs", "");
defines.set("targetType", "js");
defines.set("html5", "1");
defines.set("uwp", "1");
defines.set("winjs", "1");
}
else if (platformType == DESKTOP && target != cast System.hostPlatform)
{
defines.set("native", "1");
if (target == Platform.WINDOWS && targetFlags.exists("mingw"))
{
defines.set("targetType", "cpp");
defines.set("cpp", "1");
defines.set("mingw", "1");
}
else
{
defines.set("targetType", "neko");
defines.set("neko", "1");
}
}
else if (target == Platform.WEB_ASSEMBLY)
{
defines.set("webassembly", "1");
defines.set("wasm", "1");
defines.set("emscripten", "1");
defines.set("targetType", "cpp");
defines.set("native", "1");
defines.set("cpp", "1");
}
else if (targetFlags.exists("cpp")
|| ((platformType != PlatformType.WEB) && !targetFlags.exists("html5")))
{
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");
}
if (targetFlags.exists("static"))
{
defines.set("static_link", "1");
}
if (defines.exists("SWF_PLAYER"))
{
environment.set("SWF_PLAYER", defines.get("SWF_PLAYER"));
}
defines.set(Std.string(target).toLowerCase(), "1");
defines.set("target", Std.string(target).toLowerCase());
defines.set("platform", defines.get("target"));
switch (System.hostPlatform)
{
case WINDOWS:
defines.set("host", "windows");
case MAC:
defines.set("host", "mac");
case LINUX:
defines.set("host", "linux");
default:
defines.set("host", "unknown");
}
#if lime
defines.set("lime-tools", "1");
#end
defines.set("hxp", "1"); // TODO: Version?
}
private function isValidElement(element:Access, section:String):Bool
{
if (element.x.get("if") != null)