miduo_client/Assets/Scripts/Editor/XUPorter/XCBuildConfiguration.cs

200 lines
7.2 KiB
C#

using UnityEngine;
using System.Collections;
namespace UnityEditor.XCodeEditor
{
public class XCBuildConfiguration : PBXObject
{
protected const string BUILDSETTINGS_KEY = "buildSettings";
protected const string HEADER_SEARCH_PATHS_KEY = "HEADER_SEARCH_PATHS";
protected const string LIBRARY_SEARCH_PATHS_KEY = "LIBRARY_SEARCH_PATHS";
protected const string FRAMEWORK_SEARCH_PATHS_KEY = "FRAMEWORK_SEARCH_PATHS";
protected const string OTHER_C_FLAGS_KEY = "OTHER_CFLAGS";
protected const string OTHER_LDFLAGS_KEY = "OTHER_LDFLAGS";
public XCBuildConfiguration( string guid, PBXDictionary dictionary ) : base( guid, dictionary )
{
}
public PBXSortedDictionary buildSettings {
get {
if( ContainsKey( BUILDSETTINGS_KEY ) ) {
if (_data[BUILDSETTINGS_KEY].GetType() == typeof(PBXDictionary)) {
PBXSortedDictionary ret = new PBXSortedDictionary();
ret.Append((PBXDictionary)_data[BUILDSETTINGS_KEY]);
return ret;
}
return (PBXSortedDictionary)_data[BUILDSETTINGS_KEY];
}
return null;
}
}
protected bool AddSearchPaths( string path, string key, bool recursive = true )
{
PBXList paths = new PBXList();
paths.Add( path );
return AddSearchPaths( paths, key, recursive );
}
protected bool AddSearchPaths( PBXList paths, string key, bool recursive = true, bool quoted = false ) //we want no quoting whenever we can get away with it
{
//Debug.Log ("AddSearchPaths " + paths + key + (recursive?" recursive":"") + " " + (quoted?" quoted":""));
bool modified = false;
if( !ContainsKey( BUILDSETTINGS_KEY ) )
this.Add( BUILDSETTINGS_KEY, new PBXSortedDictionary() );
foreach( string path in paths ) {
string currentPath = path;
//Debug.Log ("path " + currentPath);
if( !((PBXDictionary)_data[BUILDSETTINGS_KEY]).ContainsKey( key ) ) {
((PBXDictionary)_data[BUILDSETTINGS_KEY]).Add( key, new PBXList() );
}
else if( ((PBXDictionary)_data[BUILDSETTINGS_KEY])[key] is string ) {
PBXList list = new PBXList();
list.Add( ((PBXDictionary)_data[BUILDSETTINGS_KEY])[key] );
((PBXDictionary)_data[BUILDSETTINGS_KEY])[key] = list;
}
//Xcode uses space as the delimiter here, so if there's a space in the filename, we *must* quote. Escaping with slash may work when you are in the Xcode UI, in some situations, but it doesn't work here.
if (currentPath.Contains(@" ")) quoted = true;
if (quoted) {
//if it ends in "/**", it wants to be recursive, and the "/**" needs to be _outside_ the quotes
if (currentPath.EndsWith("/**")) {
currentPath = "\\\"" + currentPath.Replace("/**", "\\\"/**");
} else {
currentPath = "\\\"" + currentPath + "\\\"";
}
}
//Debug.Log ("currentPath = " + currentPath);
if( !((PBXList)((PBXDictionary)_data[BUILDSETTINGS_KEY])[key]).Contains( currentPath ) ) {
((PBXList)((PBXDictionary)_data[BUILDSETTINGS_KEY])[key]).Add( currentPath );
modified = true;
}
}
return modified;
}
public bool AddHeaderSearchPaths( PBXList paths, bool recursive = true )
{
return this.AddSearchPaths( paths, HEADER_SEARCH_PATHS_KEY, recursive );
}
public bool AddLibrarySearchPaths( PBXList paths, bool recursive = true )
{
Debug.Log ("AddLibrarySearchPaths " + paths);
return this.AddSearchPaths( paths, LIBRARY_SEARCH_PATHS_KEY, recursive );
}
public bool AddFrameworkSearchPaths( PBXList paths, bool recursive = true )
{
return this.AddSearchPaths( paths, FRAMEWORK_SEARCH_PATHS_KEY, recursive );
}
public bool AddOtherCFlags( string flag )
{
//Debug.Log( "INIZIO 1" );
PBXList flags = new PBXList();
flags.Add( flag );
return AddOtherCFlags( flags );
}
public bool AddOtherCFlags( PBXList flags )
{
//Debug.Log( "INIZIO 2" );
bool modified = false;
if( !ContainsKey( BUILDSETTINGS_KEY ) )
this.Add( BUILDSETTINGS_KEY, new PBXSortedDictionary() );
foreach( string flag in flags ) {
if( !((PBXDictionary)_data[BUILDSETTINGS_KEY]).ContainsKey( OTHER_C_FLAGS_KEY ) ) {
((PBXDictionary)_data[BUILDSETTINGS_KEY]).Add( OTHER_C_FLAGS_KEY, new PBXList() );
}
else if ( ((PBXDictionary)_data[BUILDSETTINGS_KEY])[ OTHER_C_FLAGS_KEY ] is string ) {
string tempString = (string)((PBXDictionary)_data[BUILDSETTINGS_KEY])[OTHER_C_FLAGS_KEY];
((PBXDictionary)_data[BUILDSETTINGS_KEY])[ OTHER_C_FLAGS_KEY ] = new PBXList();
((PBXList)((PBXDictionary)_data[BUILDSETTINGS_KEY])[OTHER_C_FLAGS_KEY]).Add( tempString );
}
if( !((PBXList)((PBXDictionary)_data[BUILDSETTINGS_KEY])[OTHER_C_FLAGS_KEY]).Contains( flag ) ) {
((PBXList)((PBXDictionary)_data[BUILDSETTINGS_KEY])[OTHER_C_FLAGS_KEY]).Add( flag );
modified = true;
}
}
return modified;
}
public bool AddOtherLinkerFlags( string flag )
{
PBXList flags = new PBXList();
flags.Add( flag );
return AddOtherLinkerFlags( flags );
}
public bool AddOtherLinkerFlags( PBXList flags )
{
bool modified = false;
if( !ContainsKey( BUILDSETTINGS_KEY ) )
this.Add( BUILDSETTINGS_KEY, new PBXSortedDictionary() );
foreach( string flag in flags ) {
if( !((PBXDictionary)_data[BUILDSETTINGS_KEY]).ContainsKey( OTHER_LDFLAGS_KEY ) ) {
((PBXDictionary)_data[BUILDSETTINGS_KEY]).Add( OTHER_LDFLAGS_KEY, new PBXList() );
}
else if ( ((PBXDictionary)_data[BUILDSETTINGS_KEY])[ OTHER_LDFLAGS_KEY ] is string ) {
string tempString = (string)((PBXDictionary)_data[BUILDSETTINGS_KEY])[OTHER_LDFLAGS_KEY];
((PBXDictionary)_data[BUILDSETTINGS_KEY])[ OTHER_LDFLAGS_KEY ] = new PBXList();
if( !string.IsNullOrEmpty(tempString) ) {
((PBXList)((PBXDictionary)_data[BUILDSETTINGS_KEY])[OTHER_LDFLAGS_KEY]).Add( tempString );
}
}
if( !((PBXList)((PBXDictionary)_data[BUILDSETTINGS_KEY])[OTHER_LDFLAGS_KEY]).Contains( flag ) ) {
((PBXList)((PBXDictionary)_data[BUILDSETTINGS_KEY])[OTHER_LDFLAGS_KEY]).Add( flag );
modified = true;
}
}
return modified;
}
public bool overwriteBuildSetting(string settingName, string settingValue) {
Debug.Log ("overwriteBuildSetting " + settingName + " " + settingValue);
bool modified = false;
if( !ContainsKey( BUILDSETTINGS_KEY ) ) {
Debug.Log ("creating key " + BUILDSETTINGS_KEY);
this.Add( BUILDSETTINGS_KEY, new PBXSortedDictionary() );
}
if( !((PBXDictionary)_data[BUILDSETTINGS_KEY]).ContainsKey( settingName ) ) {
Debug.Log("adding key " + settingName);
((PBXDictionary)_data[BUILDSETTINGS_KEY]).Add( settingName, new PBXList() );
}
else if ( ((PBXDictionary)_data[BUILDSETTINGS_KEY])[ settingName ] is string ) {
//Debug.Log("key is string:" + settingName);
//string tempString = (string)((PBXDictionary)_data[BUILDSETTINGS_KEY])[settingName];
((PBXDictionary)_data[BUILDSETTINGS_KEY])[ settingName ] = new PBXList();
//((PBXList)((PBXDictionary)_data[BUILDSETTINGS_KEY])[settingName]).Add( tempString );
}
if( !((PBXList)((PBXDictionary)_data[BUILDSETTINGS_KEY])[settingName]).Contains( settingValue ) ) {
Debug.Log("setting " + settingName + " to " + settingValue);
((PBXList)((PBXDictionary)_data[BUILDSETTINGS_KEY])[settingName]).Add( settingValue );
modified = true;
}
return modified;
}
}
}