Beispiel #1
0
        /// <summary>
        /// Compares this object with another for equality
        /// </summary>
        /// <param name="other">The object with which to compare this one.</param>
        /// <returns>True if the objects contain the same data, false otherwise.</returns>
        private bool InternalEquals(ConfigurationMetadata other)
        {
            if (Object.ReferenceEquals(this, other))
            {
                return(true);
            }

            return(ProjectFullPath.Equals(other.ProjectFullPath, StringComparison.OrdinalIgnoreCase) &&
                   ToolsVersion.Equals(other.ToolsVersion, StringComparison.OrdinalIgnoreCase) &&
                   GlobalProperties.Equals(other.GlobalProperties));
        }
Beispiel #2
0
        private bool InternalEquals(ConfigurationMetadata other)
        {
            if (ReferenceEquals(this, other))
            {
                return(true);
            }

            return(ProjectFullPath.Equals(other.ProjectFullPath, StringComparison.OrdinalIgnoreCase) &&
                   ToolsVersion.Equals(other.ToolsVersion, StringComparison.OrdinalIgnoreCase) &&
                   GlobalProperties.Equals(other.GlobalProperties) &&
                   PreviousPlatform.Equals(other.PreviousPlatform, StringComparison.OrdinalIgnoreCase) &&
                   PreviousPlatformLookupTable.Equals(other.PreviousPlatformLookupTable, StringComparison.OrdinalIgnoreCase));
        }
Beispiel #3
0
        public override string Generate(ProjectBase Project, bool WithBeutyConfigurationName)
        {
            CPPProject project = (CPPProject)Project;

            XmlElement projectElement = CreateProjectElement();

            {
                if (ToolsVersion >= ToolsVersions.v14_1)
                {
                    XmlElement winSDKVersion = CreateElement("WindowsTargetPlatformVersion", CreateElement("PropertyGroup", projectElement));
                    winSDKVersion.InnerText = InstalledWindowsKitVersion;
                }

                projectElement.SetAttribute("ToolsVersion", ToolsVersion.ToString().Substring(1).Replace('_', '.'));

                XmlElement itemGroup = CreateElement("ItemGroup", projectElement);
                {
                    for (int i = 0; i < project.Profiles.Length; ++i)
                    {
                        XmlElement projectConfiguration = CreateElement("ProjectConfiguration", itemGroup);
                        {
                            CPPProject.Profile profile = (CPPProject.Profile)project.Profiles[i];

                            projectConfiguration.SetAttribute("Include", GetConfigurationAndPlatform(profile, WithBeutyConfigurationName));

                            XmlElement configuration = CreateElement("Configuration", projectConfiguration);
                            configuration.InnerText = GetConfiguration(profile, WithBeutyConfigurationName);

                            XmlElement platform = CreateElement("Platform", projectConfiguration);
                            platform.InnerText = GetPlatformType(profile);
                        }
                    }
                }

                XmlElement includeFiles = CreateElement("ItemGroup", projectElement);
                AddStringListToEllementAsAttribute(includeFiles, "ClInclude", "Include", project.IncludeFiles);

                XmlElement compileFiles = CreateElement("ItemGroup", projectElement);
                AddStringListToEllementAsAttribute(includeFiles, "ClCompile", "Include", project.CompileFiles);

                XmlElement noneFiles = CreateElement("ItemGroup", projectElement);
                AddStringListToEllementAsAttribute(noneFiles, "None", "Include", project.ExtraFiles);

                XmlElement import = CreateElement("Import", projectElement);
                import.SetAttribute("Project", "$(VCTargetsPath)\\Microsoft.Cpp.Default.props");

                for (int i = 0; i < project.Profiles.Length; ++i)
                {
                    CPPProject.Profile profile = (CPPProject.Profile)project.Profiles[i];

                    XmlElement popertyGroup = CreateElement("PropertyGroup", projectElement);
                    {
                        popertyGroup.SetAttribute("Condition", "'$(Configuration)|$(Platform)'=='" + GetConfigurationAndPlatform(profile, WithBeutyConfigurationName) + "'");

                        XmlElement configurationType = CreateElement("ConfigurationType", popertyGroup);
                        configurationType.InnerText = GetOutputType(profile);

                        XmlElement platformToolset = CreateElement("PlatformToolset", popertyGroup);
                        platformToolset.InnerText = ToolsVersion.ToString().Replace("_", "");
                    }

                    popertyGroup = CreateElement("PropertyGroup", projectElement);
                    {
                        popertyGroup.SetAttribute("Condition", "'$(Configuration)|$(Platform)'=='" + GetConfigurationAndPlatform(profile, WithBeutyConfigurationName) + "'");

                        if (profile.OutputType == ProjectBase.ProfileBase.OutputTypes.Makefile)
                        {
                            XmlElement nmakeBuildCommandLine = CreateElement("NMakeBuildCommandLine", popertyGroup);
                            nmakeBuildCommandLine.InnerText = profile.NMakeBuildCommandLine;

                            XmlElement nmakeRebuildCommandLine = CreateElement("NMakeReBuildCommandLine", popertyGroup);
                            nmakeRebuildCommandLine.InnerText = profile.NMakeReBuildCommandLine;

                            XmlElement nmakeCleanCommandLine = CreateElement("NMakeCleanCommandLine", popertyGroup);
                            nmakeCleanCommandLine.InnerText = profile.NMakeCleanCommandLine;

                            XmlElement nmakeIncludeSearchPath = CreateElement("NMakeIncludeSearchPath", popertyGroup);
                            nmakeIncludeSearchPath.InnerText = GetFlattenStringList(profile.IncludeDirectories);

                            XmlElement nmakeOutput = CreateElement("NMakeOutput", popertyGroup);
                            nmakeOutput.InnerText = profile.OutputPath;

                            XmlElement nmakePreprocessorDefinitions = CreateElement("NMakePreprocessorDefinitions", popertyGroup);
                            nmakePreprocessorDefinitions.InnerText = GetFlattenStringList(profile.PreprocessorDefinitions);
                        }
                        else
                        {
                            XmlElement outDir = CreateElement("OutDir", popertyGroup);
                            outDir.InnerText = profile.OutputPath;

                            XmlElement targetName = CreateElement("TargetName", popertyGroup);
                            targetName.InnerText = profile.AssemblyName;
                        }

                        XmlElement intDir = CreateElement("IntDir", popertyGroup);
                        intDir.InnerText = profile.IntermediatePath;
                    }
                }

                import = CreateElement("Import", projectElement);
                import.SetAttribute("Project", "$(VCTargetsPath)\\Microsoft.Cpp.props");

                for (int i = 0; i < project.Profiles.Length; ++i)
                {
                    CPPProject.Profile profile = (CPPProject.Profile)project.Profiles[i];

                    if (profile.OutputType == ProjectBase.ProfileBase.OutputTypes.Makefile)
                    {
                        continue;
                    }

                    XmlElement itemDefinitionGroup = CreateElement("ItemDefinitionGroup", projectElement);
                    {
                        itemDefinitionGroup.SetAttribute("Condition", "'$(Configuration)|$(Platform)'=='" + GetConfigurationAndPlatform(profile, WithBeutyConfigurationName) + "'");

                        XmlElement clCompile = CreateElement("ClCompile", itemDefinitionGroup);
                        {
                            XmlElement runtimeLibrary = CreateElement("RuntimeLibrary", clCompile);
                            runtimeLibrary.InnerText = profile.RuntimeLibrary.ToString();

                            XmlElement additionalIncludeDirectories = CreateElement("AdditionalIncludeDirectories", clCompile);
                            if (Array.IndexOf(profile.IncludeDirectories, "%(AdditionalIncludeDirectories)") == -1)
                            {
                                profile.AddIncludeDirectories("%(AdditionalIncludeDirectories)");
                            }
                            additionalIncludeDirectories.InnerText  = GetFlattenStringList(profile.IncludeDirectories);
                            additionalIncludeDirectories.InnerText += GetFlattenStringList(profile.IncludeLibraryDirectories);

                            XmlElement preprocessorDefinitions = CreateElement("PreprocessorDefinitions", clCompile);
                            if (Array.IndexOf(profile.PreprocessorDefinitions, "%(PreprocessorDefinitions)") == -1)
                            {
                                profile.AddPreprocessorDefinition("%(PreprocessorDefinitions)");
                            }
                            preprocessorDefinitions.InnerText = GetFlattenStringList(profile.PreprocessorDefinitions);

                            XmlElement optimization = CreateElement("Optimization", clCompile);
                            optimization.InnerText = profile.Optimization.ToString();

                            XmlElement minimalRebuild = CreateElement("MinimalRebuild", clCompile);
                            minimalRebuild.InnerText = profile.MinimalRebuild.ToString();
                        }

                        XmlElement importTargets = CreateElement("Import", projectElement);
                        importTargets.SetAttribute("Project", "$(VCTargetsPath)/Microsoft.Cpp.props");

                        XmlElement link = CreateElement("Link", itemDefinitionGroup);
                        {
                            XmlElement generateDebugInformation = CreateElement("GenerateDebugInformation", link);
                            generateDebugInformation.InnerText = profile.GenerateDebugInformation.ToString();

                            XmlElement additionalLibraryDirectories = CreateElement("AdditionalLibraryDirectories", link);
                            if (Array.IndexOf(profile.IncludeLibraryDirectories, "%(AdditionalLibraryDirectories)") == -1)
                            {
                                profile.AddIncludeLibraryDirectories("%(AdditionalLibraryDirectories)");
                            }
                            additionalLibraryDirectories.InnerText = GetFlattenStringList(profile.AdditionalLibraryDirectories);

                            XmlElement additionalLibraries = CreateElement("AdditionalDependencies", link);
                            if (Array.IndexOf(profile.IncludeLibraries, "%(AdditionalDependencies)") == -1)
                            {
                                profile.AddIncludeLibraries("%(AdditionalDependencies)");
                            }
                            additionalLibraries.InnerText = GetFlattenStringList(profile.IncludeLibraries);
                        }
                    }
                }

                import = CreateElement("Import", projectElement);
                import.SetAttribute("Project", "$(VCTargetsPath)/Microsoft.Cpp.targets");
            }

            return(projectElement.OwnerDocument.OuterXml);
        }