using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine; namespace DldUtil { public static class GetRspDefines { static string SmcsFilePath { get { return Application.dataPath + "/smcs.rsp"; } } static string McsFilePath { get { return Application.dataPath + "/mcs.rsp"; } } static string UsFilePath { get { return Application.dataPath + "/us.rsp"; } } static string BooFilePath { get { return Application.dataPath + "/boo.rsp"; } } public struct Entry { public int TimesDefinedInSmcs; public int TimesDefinedInMcs; public int TimesDefinedInUs; public int TimesDefinedInBoo; public int TimesDefinedInBuiltIn; } // Unity-made defines are in EditorUserBuildSettings.activeScriptCompilationDefines static bool IsDefineAlreadyInUnity(string defineName) { string[] builtInDefines = EditorUserBuildSettings.activeScriptCompilationDefines; for (int n = 0, len = builtInDefines.Length; n < len; n++) { if (builtInDefines[n] == defineName) { return true; } } return false; } // ======================================================================================== static void IncrementTimesDefinedInBuiltIn(Dictionary table, string define) { if (!table.ContainsKey(define)) { table[define] = new Entry(); } Entry currentDef = table[define]; currentDef.TimesDefinedInBuiltIn++; // assign it back to store it table[define] = currentDef; } static void IncrementTimesDefinedInSmcs(Dictionary table, string define) { if (!table.ContainsKey(define)) { table[define] = new Entry(); } Entry currentDef = table[define]; currentDef.TimesDefinedInSmcs++; // assign it back to store it table[define] = currentDef; } static void IncrementTimesDefinedInMcs(Dictionary table, string define) { if (!table.ContainsKey(define)) { table[define] = new Entry(); } Entry currentDef = table[define]; currentDef.TimesDefinedInMcs++; // assign it back to store it table[define] = currentDef; } static void IncrementTimesDefinedInUs(Dictionary table, string define) { if (!table.ContainsKey(define)) { table[define] = new Entry(); } Entry currentDef = table[define]; currentDef.TimesDefinedInUs++; // assign it back to store it table[define] = currentDef; } static void IncrementTimesDefinedInBoo(Dictionary table, string define) { if (!table.ContainsKey(define)) { table[define] = new Entry(); } Entry currentDef = table[define]; currentDef.TimesDefinedInBoo++; // assign it back to store it table[define] = currentDef; } // ======================================================================================== public static Dictionary GetDefines() { Dictionary result = new Dictionary(); // --------------------------------------------------------- string[] definesInSmcs = GetDefinesInsideFile(SmcsFilePath); if (definesInSmcs != null && definesInSmcs.Length > 0) { for (int n = 0, len = definesInSmcs.Length; n < len; n++) { IncrementTimesDefinedInSmcs(result, definesInSmcs[n]); if (IsDefineAlreadyInUnity(definesInSmcs[n])) { IncrementTimesDefinedInBuiltIn(result, definesInSmcs[n]); } } } // --------------------------------------------------------- string[] definesInMcs = GetDefinesInsideFile(McsFilePath); if (definesInMcs != null && definesInMcs.Length > 0) { for (int n = 0, len = definesInMcs.Length; n < len; n++) { IncrementTimesDefinedInMcs(result, definesInMcs[n]); if (IsDefineAlreadyInUnity(definesInMcs[n])) { IncrementTimesDefinedInBuiltIn(result, definesInMcs[n]); } } } // --------------------------------------------------------- string[] definesInUs = GetDefinesInsideFile(UsFilePath); if (definesInUs != null && definesInUs.Length > 0) { for (int n = 0, len = definesInUs.Length; n < len; n++) { IncrementTimesDefinedInUs(result, definesInUs[n]); if (IsDefineAlreadyInUnity(definesInUs[n])) { IncrementTimesDefinedInBuiltIn(result, definesInUs[n]); } } } // --------------------------------------------------------- string[] definesInBoo = GetDefinesInsideFile(BooFilePath); if (definesInBoo != null && definesInBoo.Length > 0) { for (int n = 0, len = definesInBoo.Length; n < len; n++) { IncrementTimesDefinedInBoo(result, definesInBoo[n]); if (IsDefineAlreadyInUnity(definesInBoo[n])) { IncrementTimesDefinedInBuiltIn(result, definesInBoo[n]); } } } // --------------------------------------------------------- return result; } static string[] GetDefinesInsideFile(string filePath) { if (!File.Exists(filePath)) { return null; } string rawContents = File.ReadAllText(filePath); if (!rawContents.StartsWith("-define:")) { // malformed .rsp file return null; } // remove "-define:" string allDefines = rawContents.Substring(8); //Debug.Log(allDefines); return allDefines.Split(';'); } } }