/// <summary> /// Creates configuration target /// </summary> private void createConfigurationTarget(ProjectConfigurationInfo_CSharp configurationInfo) { m_file.WriteLine("CSAssembly( '" + configurationInfo.TargetName + "' )"); m_file.WriteLine("{"); m_file.WriteLine(" Using( .cs" + configurationInfo.Platform + "BaseConfig )"); string postfix = ".exe"; if (m_projectInfo.ProjectType == ProjectInfo.ProjectTypeEnum.CSHARP_LIBRARY) { postfix = ".dll"; } m_file.WriteLine(" .CompilerOutput = '" + configurationInfo.OutputFolderAbsolute + m_projectInfo.Name + postfix + "'"); m_file.WriteLine(" .CompilerOptions + ." + getFlagsVariableName(configurationInfo)); m_file.WriteLine(" + '\"%1\"'"); m_file.WriteLine(" .CompilerInputFiles = .InputFiles"); m_file.WriteLine(" .CompilerReferences = ." + getReferencesVariableName(configurationInfo)); List <string> requiredTargets = new List <string>(); foreach (ProjectInfo requiredProject in m_projectInfo.getRequiredProjects()) { requiredTargets.Add("'" + requiredProject.Name + "'"); } if (requiredTargets.Count != 0) { m_file.WriteLine(" .PreBuildDependencies = { " + Utils.join(", ", requiredTargets) + " }"); } m_file.WriteLine("}"); m_file.WriteLine(""); }
/// <summary> /// Parses on configuration. /// </summary> private void parseConfiguration(EnvDTE.Configuration dteConfiguration) { // We create a new configuration-info object and fill it in... ProjectConfigurationInfo_CSharp configurationInfo = new ProjectConfigurationInfo_CSharp(); configurationInfo.ParentProjectInfo = m_projectInfo; configurationInfo.Name = Utils.call(() => dteConfiguration.ConfigurationName); configurationInfo.Platform = Utils.call(() => dteConfiguration.PlatformName); // We parse the configuration's properties, and set configuration // seetings from them... EnvDTE.Properties dteProperties = Utils.call(() => (dteConfiguration.Properties)); Dictionary <string, object> properties = getProperties(dteProperties); // Whether to optimize... configurationInfo.Optimize = getBoolProperty(properties, "Optimize"); // The output path and intermediate path... configurationInfo.OutputFolder = getStringProperty(properties, "OutputPath"); configurationInfo.IntermediateFolder = getStringProperty(properties, "IntermediatePath"); // Whether to treat warnings as errors... configurationInfo.ThreatWarningsAsErrors = getBoolProperty(properties, "TreatWarningsAsErrors"); // Defined constants (DEBUG, TRACE etc)... string definedConstants = getStringProperty(properties, "DefineConstants"); foreach (string definedConstant in Utils.split(definedConstants, ';')) { configurationInfo.addDefinedConstant(definedConstant); } // Whether to add debug symbols to the output... configurationInfo.Debug = getBoolProperty(properties, "DebugSymbols"); // Comma separated list of warnings to ignore... string warningsToIgnore = getStringProperty(properties, "NoWarn"); foreach (string warningToIgnore in Utils.split(warningsToIgnore, ',')) { configurationInfo.addWarningToIgnore(warningToIgnore); } // DebugInfo, e.g. "full"... configurationInfo.DebugInfo = getStringProperty(properties, "DebugInfo"); // File alignment... configurationInfo.FileAlignment = getIntProperty(properties, "FileAlignment"); // Warning level... configurationInfo.WarningLevel = getIntProperty(properties, "WarningLevel"); // We add the configuration-info to the project-info... m_projectInfo.addConfigurationInfo(configurationInfo); }
/// <summary> /// Return the flags variable name for the configuration passed in. /// For example "Debug_x64_Compile_Flags". /// </summary> private string getFlagsVariableName(ProjectConfigurationInfo_CSharp configuration) { return(configuration.Name + "_" + configuration.Platform + "_Compile_Flags"); }
/// <summary> /// Returns the reference variable name for the configuration passed in. /// For example "Debug_x64_References". /// </summary> private string getReferencesVariableName(ProjectConfigurationInfo_CSharp configuration) { return(configuration.Name + "_" + configuration.Platform + "_References"); }
/// <summary> /// Creates compiler flags for the configuration passed in. /// </summary> private void createConfigurationFlagsVariable(ProjectConfigurationInfo_CSharp configurationInfo) { string variableName = getFlagsVariableName(configurationInfo); string flags = ""; // Target if (m_projectInfo.ProjectType == ProjectInfo.ProjectTypeEnum.CSHARP_EXECUTABLE) { flags += " /target:exe"; } else if (m_projectInfo.ProjectType == ProjectInfo.ProjectTypeEnum.CSHARP_LIBRARY) { flags += " /target:library"; } else if (m_projectInfo.ProjectType == ProjectInfo.ProjectTypeEnum.CSHARP_WINFORMS_EXECUTABLE) { flags += " /target:winexe"; } // Platform flags += " /platform:" + configurationInfo.Platform; // Optimize... if (configurationInfo.Optimize == true) { flags += " /optimize+ "; } else { flags += " /optimize- "; } // Treat warnings as errors... if (configurationInfo.ThreatWarningsAsErrors == true) { flags += " /warnaserror+ "; } // Defined constants... foreach (string definedConstant in configurationInfo.getDefinedConstants()) { flags += (" /define:" + definedConstant + " "); } // Debug build... if (configurationInfo.Debug == true) { flags += " /debug+ "; } // Type of debug info... if (configurationInfo.DebugInfo != "") { flags += (" /debug:" + configurationInfo.DebugInfo + " "); } // Warnings to ignore... List <string> warningsToIgnore = configurationInfo.getWarningsToIgnore(); if (warningsToIgnore.Count > 0) { flags += " /nowarn:"; foreach (string warningToIgnore in warningsToIgnore) { flags += (warningToIgnore + ","); } flags = flags.TrimEnd(',') + " "; } // File alignment... flags += (" /filealign:" + configurationInfo.FileAlignment + " "); // Warning level... flags += (" /warn:" + configurationInfo.WarningLevel + " "); m_file.WriteLine("." + variableName + " = '" + flags + "'"); m_file.WriteLine(""); }
/// <summary> /// Returns the variable name for this data for this configuration. /// </summary> private string getReferencesVariableName(ProjectConfigurationInfo_CSharp configurationInfo) { return(configurationInfo.Name + "_REFERENCES"); }
/// <summary> /// Returns the variable name for this data for this configuration. /// </summary> private string getFlagsVariableName(ProjectConfigurationInfo_CSharp configurationInfo) { return(configurationInfo.Name + "_FLAGS"); }
/// <summary> /// Creates compiler flags for the configuration passed in. /// </summary> private void createConfigurationFlagsVariable(ProjectConfigurationInfo_CSharp configurationInfo) { string variableName = getFlagsVariableName(configurationInfo); string flags = ""; // Optimize... if (configurationInfo.Optimize == true) { flags += "-optimize+ "; } else { flags += "-optimize- "; } // Treat warnings as errors... if (configurationInfo.ThreatWarningsAsErrors == true) { flags += "-warnaserror+ "; } // Defined constants... foreach (string definedConstant in configurationInfo.getDefinedConstants()) { flags += ("-define:" + definedConstant + " "); } // Debug build... if (configurationInfo.Debug == true) { flags += "-debug+ "; } // Type of debug info... if (configurationInfo.DebugInfo != "") { flags += ("-debug:" + configurationInfo.DebugInfo + " "); } // Warnings to ignore... List <string> warningsToIgnore = configurationInfo.getWarningsToIgnore(); if (warningsToIgnore.Count > 0) { flags += "-nowarn:"; foreach (string warningToIgnore in warningsToIgnore) { flags += (warningToIgnore + ","); } flags = flags.TrimEnd(',') + " "; } // File alignment... flags += ("-filealign:" + configurationInfo.FileAlignment + " "); // Warning level... flags += ("-warn:" + configurationInfo.WarningLevel + " "); // We add the mono .net packages (if we are not in a cygwin build)... if (MakeItSoConfig.Instance.IsCygwinBuild == false) { flags += "-pkg:dotnet "; } // We add the flags to the makefile... m_file.WriteLine(variableName + " = " + flags); }
/// <summary> /// Returns the variable name for this data for this configuration. /// </summary> private string getOutputFolderVariableName(ProjectConfigurationInfo_CSharp configurationInfo) { return(configurationInfo.Name + "_OUTPUT_FOLDER"); }
/// <summary> /// Returns the output folder for the configuration passed in. /// </summary> private string getOutputFolder(ProjectConfigurationInfo_CSharp configurationInfo) { string prefix = MakeItSoConfig.Instance.getProjectConfig(m_projectInfo.Name).CSharpFolderPrefix; return(Utils.addPrefixToFolderPath(configurationInfo.OutputFolder, prefix)); }