From 7daa3955bc3a1918e40962851f9e8d38597a245e Mon Sep 17 00:00:00 2001
From: gareth
Date: Thu, 22 Mar 2007 10:11:15 +0000
Subject: brought zircon branch into trunk
---
Prebuild/src/Core/Nodes/OptionsNode.cs | 655 +++++++++++++++++++++++++++++++++
1 file changed, 655 insertions(+)
create mode 100644 Prebuild/src/Core/Nodes/OptionsNode.cs
(limited to 'Prebuild/src/Core/Nodes/OptionsNode.cs')
diff --git a/Prebuild/src/Core/Nodes/OptionsNode.cs b/Prebuild/src/Core/Nodes/OptionsNode.cs
new file mode 100644
index 0000000..b5a2f60
--- /dev/null
+++ b/Prebuild/src/Core/Nodes/OptionsNode.cs
@@ -0,0 +1,655 @@
+#region BSD License
+/*
+Copyright (c) 2004-2005 Matthew Holmes (matthew@wildfiregames.com), Dan Moorehead (dan05a@gmail.com)
+
+Redistribution and use in source and binary forms, with or without modification, are permitted
+provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this list of conditions
+ and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
+ and the following disclaimer in the documentation and/or other materials provided with the
+ distribution.
+* The name of the author may not be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+#endregion
+
+#region CVS Information
+/*
+ * $Source$
+ * $Author: jendave $
+ * $Date: 2007-01-08 17:55:40 +0100 (må, 08 jan 2007) $
+ * $Revision: 197 $
+ */
+#endregion
+
+
+
+using System;
+using System.Collections;
+using System.Collections.Specialized;
+using System.Reflection;
+using System.Xml;
+
+using Prebuild.Core.Attributes;
+using Prebuild.Core.Interfaces;
+using Prebuild.Core.Utilities;
+
+namespace Prebuild.Core.Nodes
+{
+ ///
+ ///
+ ///
+ [DataNode("Options")]
+ public class OptionsNode : DataNode
+ {
+ #region Fields
+
+ private static Hashtable m_OptionFields;
+
+ [OptionNode("CompilerDefines")]
+ private string m_CompilerDefines = "";
+
+ ///
+ ///
+ ///
+ public string CompilerDefines
+ {
+ get
+ {
+ return m_CompilerDefines;
+ }
+ set
+ {
+ m_CompilerDefines = value;
+ }
+ }
+
+ [OptionNode("OptimizeCode")]
+ private bool m_OptimizeCode;
+
+ ///
+ ///
+ ///
+ public bool OptimizeCode
+ {
+ get
+ {
+ return m_OptimizeCode;
+ }
+ set
+ {
+ m_OptimizeCode = value;
+ }
+ }
+
+ [OptionNode("CheckUnderflowOverflow")]
+ private bool m_CheckUnderflowOverflow;
+
+ ///
+ ///
+ ///
+ public bool CheckUnderflowOverflow
+ {
+ get
+ {
+ return m_CheckUnderflowOverflow;
+ }
+ set
+ {
+ m_CheckUnderflowOverflow = value;
+ }
+ }
+
+ [OptionNode("AllowUnsafe")]
+ private bool m_AllowUnsafe;
+
+ ///
+ ///
+ ///
+ public bool AllowUnsafe
+ {
+ get
+ {
+ return m_AllowUnsafe;
+ }
+ set
+ {
+ m_AllowUnsafe = value;
+ }
+ }
+
+ [OptionNode("PreBuildEvent")]
+ private string m_PreBuildEvent;
+
+ ///
+ ///
+ ///
+ public string PreBuildEvent
+ {
+ get
+ {
+ return m_PreBuildEvent;
+ }
+ set
+ {
+ m_PreBuildEvent = value;
+ }
+ }
+
+ [OptionNode("PostBuildEvent")]
+ private string m_PostBuildEvent;
+
+ ///
+ ///
+ ///
+ public string PostBuildEvent
+ {
+ get
+ {
+ return m_PostBuildEvent;
+ }
+ set
+ {
+ m_PostBuildEvent = value;
+ }
+ }
+
+ [OptionNode("PreBuildEventArgs")]
+ private string m_PreBuildEventArgs;
+
+ ///
+ ///
+ ///
+ public string PreBuildEventArgs
+ {
+ get
+ {
+ return m_PreBuildEventArgs;
+ }
+ set
+ {
+ m_PreBuildEventArgs = value;
+ }
+ }
+
+ [OptionNode("PostBuildEventArgs")]
+ private string m_PostBuildEventArgs;
+
+ ///
+ ///
+ ///
+ public string PostBuildEventArgs
+ {
+ get
+ {
+ return m_PostBuildEventArgs;
+ }
+ set
+ {
+ m_PostBuildEventArgs = value;
+ }
+ }
+
+ [OptionNode("RunPostBuildEvent")]
+ private string m_RunPostBuildEvent;
+
+ ///
+ ///
+ ///
+ public string RunPostBuildEvent
+ {
+ get
+ {
+ return m_RunPostBuildEvent;
+ }
+ set
+ {
+ m_RunPostBuildEvent = value;
+ }
+ }
+
+ [OptionNode("RunScript")]
+ private string m_RunScript;
+
+ ///
+ ///
+ ///
+ public string RunScript
+ {
+ get
+ {
+ return m_RunScript;
+ }
+ set
+ {
+ m_RunScript = value;
+ }
+ }
+
+ [OptionNode("WarningLevel")]
+ private int m_WarningLevel = 4;
+
+ ///
+ ///
+ ///
+ public int WarningLevel
+ {
+ get
+ {
+ return m_WarningLevel;
+ }
+ set
+ {
+ m_WarningLevel = value;
+ }
+ }
+
+ [OptionNode("WarningsAsErrors")]
+ private bool m_WarningsAsErrors;
+
+ ///
+ ///
+ ///
+ public bool WarningsAsErrors
+ {
+ get
+ {
+ return m_WarningsAsErrors;
+ }
+ set
+ {
+ m_WarningsAsErrors = value;
+ }
+ }
+
+ [OptionNode("SuppressWarnings")]
+ private string m_SuppressWarnings = "";
+
+ ///
+ ///
+ ///
+ public string SuppressWarnings
+ {
+ get
+ {
+ return m_SuppressWarnings;
+ }
+ set
+ {
+ m_SuppressWarnings = value;
+ }
+ }
+
+ [OptionNode("OutputPath")]
+ private string m_OutputPath = "bin/";
+
+ ///
+ ///
+ ///
+ public string OutputPath
+ {
+ get
+ {
+ return m_OutputPath;
+ }
+ set
+ {
+ m_OutputPath = value;
+ }
+ }
+
+ [OptionNode("GenerateDocumentation")]
+ private bool m_GenerateDocumentation;
+
+ ///
+ ///
+ ///
+ public bool GenerateDocumentation
+ {
+ get
+ {
+ return m_GenerateDocumentation;
+ }
+ set
+ {
+ m_GenerateDocumentation = value;
+ }
+ }
+
+ [OptionNode("GenerateXmlDocFile")]
+ private bool m_GenerateXmlDocFile;
+
+ ///
+ ///
+ ///
+ public bool GenerateXmlDocFile
+ {
+ get
+ {
+ return m_GenerateXmlDocFile;
+ }
+ set
+ {
+ m_GenerateXmlDocFile = value;
+ }
+ }
+
+ [OptionNode("XmlDocFile")]
+ private string m_XmlDocFile = "";
+
+ ///
+ ///
+ ///
+ public string XmlDocFile
+ {
+ get
+ {
+ return m_XmlDocFile;
+ }
+ set
+ {
+ m_XmlDocFile = value;
+ }
+ }
+
+ [OptionNode("KeyFile")]
+ private string m_KeyFile = "";
+
+ ///
+ ///
+ ///
+ public string KeyFile
+ {
+ get
+ {
+ return m_KeyFile;
+ }
+ set
+ {
+ m_KeyFile = value;
+ }
+ }
+
+ [OptionNode("DebugInformation")]
+ private bool m_DebugInformation;
+
+ ///
+ ///
+ ///
+ public bool DebugInformation
+ {
+ get
+ {
+ return m_DebugInformation;
+ }
+ set
+ {
+ m_DebugInformation = value;
+ }
+ }
+
+ [OptionNode("RegisterComInterop")]
+ private bool m_RegisterComInterop;
+
+ ///
+ ///
+ ///
+ public bool RegisterComInterop
+ {
+ get
+ {
+ return m_RegisterComInterop;
+ }
+ set
+ {
+ m_RegisterComInterop = value;
+ }
+ }
+
+ [OptionNode("RemoveIntegerChecks")]
+ private bool m_RemoveIntegerChecks;
+
+ ///
+ ///
+ ///
+ public bool RemoveIntegerChecks
+ {
+ get
+ {
+ return m_RemoveIntegerChecks;
+ }
+ set
+ {
+ m_RemoveIntegerChecks = value;
+ }
+ }
+
+ [OptionNode("IncrementalBuild")]
+ private bool m_IncrementalBuild;
+
+ ///
+ ///
+ ///
+ public bool IncrementalBuild
+ {
+ get
+ {
+ return m_IncrementalBuild;
+ }
+ set
+ {
+ m_IncrementalBuild = value;
+ }
+ }
+
+ [OptionNode("BaseAddress")]
+ private string m_BaseAddress = "285212672";
+
+ ///
+ ///
+ ///
+ public string BaseAddress
+ {
+ get
+ {
+ return m_BaseAddress;
+ }
+ set
+ {
+ m_BaseAddress = value;
+ }
+ }
+
+ [OptionNode("FileAlignment")]
+ private int m_FileAlignment = 4096;
+
+ ///
+ ///
+ ///
+ public int FileAlignment
+ {
+ get
+ {
+ return m_FileAlignment;
+ }
+ set
+ {
+ m_FileAlignment = value;
+ }
+ }
+
+ [OptionNode("NoStdLib")]
+ private bool m_NoStdLib;
+
+ ///
+ ///
+ ///
+ public bool NoStdLib
+ {
+ get
+ {
+ return m_NoStdLib;
+ }
+ set
+ {
+ m_NoStdLib = value;
+ }
+ }
+
+ private StringCollection m_FieldsDefined;
+
+ #endregion
+
+ #region Constructors
+
+ ///
+ /// Initializes the class.
+ ///
+ static OptionsNode()
+ {
+ Type t = typeof(OptionsNode);
+
+ m_OptionFields = new Hashtable();
+ foreach(FieldInfo f in t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance))
+ {
+ object[] attrs = f.GetCustomAttributes(typeof(OptionNodeAttribute), false);
+ if(attrs == null || attrs.Length < 1)
+ {
+ continue;
+ }
+
+ OptionNodeAttribute ona = (OptionNodeAttribute)attrs[0];
+ m_OptionFields[ona.NodeName] = f;
+ }
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public OptionsNode()
+ {
+ m_FieldsDefined = new StringCollection();
+ }
+
+ #endregion
+
+ #region Properties
+
+ ///
+ /// Gets the at the specified index.
+ ///
+ ///
+ public object this[string index]
+ {
+ get
+ {
+ if(!m_OptionFields.ContainsKey(index))
+ {
+ return null;
+ }
+
+ FieldInfo f = (FieldInfo)m_OptionFields[index];
+ return f.GetValue(this);
+ }
+ }
+
+ ///
+ /// Gets the at the specified index.
+ ///
+ ///
+ public object this[string index, object defaultValue]
+ {
+ get
+ {
+ object valueObject = this[index];
+ if(valueObject != null && valueObject is string && ((string)valueObject).Length == 0)
+ {
+ return defaultValue;
+ }
+ return valueObject;
+ }
+ }
+
+
+ #endregion
+
+ #region Private Methods
+
+ private void FlagDefined(string name)
+ {
+ if(!m_FieldsDefined.Contains(name))
+ {
+ m_FieldsDefined.Add(name);
+ }
+ }
+
+ private void SetOption(string nodeName, string val)
+ {
+ lock(m_OptionFields)
+ {
+ if(!m_OptionFields.ContainsKey(nodeName))
+ {
+ return;
+ }
+
+ FieldInfo f = (FieldInfo)m_OptionFields[nodeName];
+ f.SetValue(this, Helper.TranslateValue(f.FieldType, val));
+ FlagDefined(f.Name);
+ }
+ }
+
+ #endregion
+
+ #region Public Methods
+
+ ///
+ /// Parses the specified node.
+ ///
+ /// The node.
+ public override void Parse(XmlNode node)
+ {
+ if( node == null )
+ {
+ throw new ArgumentNullException("node");
+ }
+
+ foreach(XmlNode child in node.ChildNodes)
+ {
+ SetOption(child.Name, Helper.InterpolateForEnvironmentVariables(child.InnerText));
+ }
+ }
+
+ ///
+ /// Copies to.
+ ///
+ /// The opt.
+ public void CopyTo(OptionsNode opt)
+ {
+ if(opt == null)
+ {
+ return;
+ }
+
+ foreach(FieldInfo f in m_OptionFields.Values)
+ {
+ if(m_FieldsDefined.Contains(f.Name))
+ {
+ f.SetValue(opt, f.GetValue(this));
+ opt.m_FieldsDefined.Add(f.Name);
+ }
+ }
+ }
+
+ #endregion
+ }
+}
--
cgit v1.1