From 1e44ec84bd90ec9078027d1d9d78e83c7d305f2a Mon Sep 17 00:00:00 2001
From: BlueWall
Date: Tue, 31 Aug 2010 17:02:36 -0400
Subject: Build system upgrade:
Upgrading Prebuild.exe to correctly construct build solutions
for crossplatform tools such as xbuild, monodevelop and nant.
NOTE: Module prebuild files will need modification to work,
as the prebuild must correctly define the reference path for
all assemblies shipped in the OpenSimulator ./bin directory.
These include assemblies such as XMLRPC.dll, OpenMetaverse.dll,
Nini.dll, etc. . The entries should follow the form:
See the distributed prebuild.xml for further examples.
Crossplatform tools: xbuild and monodevelop use the
vs2008 OpenSim.sln and the .csproj files in each namespace.
Changes to the Prebuild.exe are against svn 322 and are included
in a patch attached to the mantis. And the dnpb source are
available@ svn co https://dnpb.svn.sourceforge.net/svnroot/dnpb dnpb
The patches are pending application by the dnpb team. After which,
the un-modified upstream Prebuild.exe will work as expected.
---
Prebuild/src/Core/Targets/VSGenericTarget.cs | 887 ---------------------------
1 file changed, 887 deletions(-)
delete mode 100644 Prebuild/src/Core/Targets/VSGenericTarget.cs
(limited to 'Prebuild/src/Core/Targets/VSGenericTarget.cs')
diff --git a/Prebuild/src/Core/Targets/VSGenericTarget.cs b/Prebuild/src/Core/Targets/VSGenericTarget.cs
deleted file mode 100644
index fdcc2b9..0000000
--- a/Prebuild/src/Core/Targets/VSGenericTarget.cs
+++ /dev/null
@@ -1,887 +0,0 @@
-#region BSD License
-/*
-Copyright (c) 2008 Matthew Holmes (matthew@wildfiregames.com), John Anderson (sontek@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
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.Specialized;
-using System.IO;
-using System.Text;
-
-using Prebuild.Core.Attributes;
-using Prebuild.Core.Interfaces;
-using Prebuild.Core.Nodes;
-using Prebuild.Core.Utilities;
-using System.CodeDom.Compiler;
-
-namespace Prebuild.Core.Targets
-{
-
- ///
- ///
- ///
- public abstract class VSGenericTarget : ITarget
- {
- #region Fields
-
- readonly Hashtable tools = new Hashtable();
- Kernel kernel;
- #endregion
-
- #region Properties
- ///
- /// Gets or sets the solution version.
- ///
- /// The solution version.
- public abstract string SolutionVersion { get; }
- ///
- /// Gets or sets the product version.
- ///
- /// The product version.
- public abstract string ProductVersion { get; }
- ///
- /// Gets or sets the schema version.
- ///
- /// The schema version.
- public abstract string SchemaVersion { get; }
- ///
- /// Gets or sets the name of the version.
- ///
- /// The name of the version.
- public abstract string VersionName { get; }
- ///
- /// Gets or sets the version.
- ///
- /// The version.
- public abstract VSVersion Version { get; }
- ///
- /// Gets the name.
- ///
- /// The name.
- public abstract string Name { get; }
-
- protected abstract string GetToolsVersionXml(FrameworkVersion version);
- public abstract string SolutionTag { get; }
-
- #endregion
-
- #region Constructors
-
- ///
- /// Initializes a new instance of the class.
- ///
- protected VSGenericTarget()
- {
- this.tools["C#"] = new ToolInfo("C#", "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}", "csproj", "CSHARP", "$(MSBuildBinPath)\\Microsoft.CSHARP.Targets");
- this.tools["Database"] = new ToolInfo("Database", "{4F174C21-8C12-11D0-8340-0000F80270F8}", "dbp", "UNKNOWN");
- this.tools["Boo"] = new ToolInfo("Boo", "{45CEA7DC-C2ED-48A6-ACE0-E16144C02365}", "booproj", "Boo", "$(BooBinPath)\\Boo.Microsoft.Build.targets");
- this.tools["VisualBasic"] = new ToolInfo("VisualBasic", "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}", "vbproj", "VisualBasic", "$(MSBuildBinPath)\\Microsoft.VisualBasic.Targets");
- this.tools["Folder"] = new ToolInfo("Folder", "{2150E333-8FDC-42A3-9474-1A3956D46DE8}", null, null);
- }
-
- #endregion
-
- #region Private Methods
-
- private string MakeRefPath(ProjectNode project)
- {
- string ret = "";
- foreach (ReferencePathNode node in project.ReferencePaths)
- {
- try
- {
- string fullPath = Helper.ResolvePath(node.Path);
- if (ret.Length < 1)
- {
- ret = fullPath;
- }
- else
- {
- ret += ";" + fullPath;
- }
- }
- catch (ArgumentException)
- {
- this.kernel.Log.Write(LogType.Warning, "Could not resolve reference path: {0}", node.Path);
- }
- }
-
- return ret;
- }
-
- private static ProjectNode FindProjectInSolution(string name, SolutionNode solution)
- {
- SolutionNode node = solution;
-
- while (node.Parent is SolutionNode)
- node = node.Parent as SolutionNode;
-
- return FindProjectInSolutionRecursively(name, node);
- }
-
- private static ProjectNode FindProjectInSolutionRecursively(string name, SolutionNode solution)
- {
- if (solution.ProjectsTable.ContainsKey(name))
- return (ProjectNode)solution.ProjectsTable[name];
-
- foreach (SolutionNode child in solution.Solutions)
- {
- ProjectNode node = FindProjectInSolutionRecursively(name, child);
- if (node != null)
- return node;
- }
-
- return null;
- }
-
- private void WriteProject(SolutionNode solution, ProjectNode project)
- {
- if (!tools.ContainsKey(project.Language))
- {
- throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
- }
-
- ToolInfo toolInfo = (ToolInfo)tools[project.Language];
- string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
- StreamWriter ps = new StreamWriter(projectFile);
-
- kernel.CurrentWorkingDirectory.Push();
- Helper.SetCurrentDir(Path.GetDirectoryName(projectFile));
-
- #region Project File
- using (ps)
- {
- ps.WriteLine("", this.Version == VSVersion.VS10 ? "4.0" : "3.5");
- ps.WriteLine(" ");
- ps.WriteLine(" Local");
- ps.WriteLine(" {0}", this.ProductVersion);
- ps.WriteLine(" {0}", this.SchemaVersion);
- ps.WriteLine(" {{{0}}}", project.Guid.ToString().ToUpper());
-
- // Visual Studio has a hard coded guid for the project type
- if (project.Type == ProjectType.Web)
- ps.WriteLine(" {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}");
- ps.WriteLine(" Debug");
- ps.WriteLine(" AnyCPU");
- ps.WriteLine(" {0}", project.AppIcon);
- ps.WriteLine(" ");
- ps.WriteLine(" ");
- ps.WriteLine(" {0}", project.AssemblyName);
- foreach (ConfigurationNode conf in project.Configurations)
- {
- if (conf.Options.KeyFile != "")
- {
- ps.WriteLine(" {0}", conf.Options.KeyFile);
- ps.WriteLine(" true");
- break;
- }
- }
- ps.WriteLine(" JScript");
- ps.WriteLine(" Grid");
- ps.WriteLine(" IE50");
- ps.WriteLine(" false");
- ps.WriteLine(" {0}", project.FrameworkVersion.ToString().Replace("_", "."));
-
- ps.WriteLine(" {0}", project.Type == ProjectType.Web ? ProjectType.Library.ToString() : project.Type.ToString());
- ps.WriteLine(" {0}", project.DesignerFolder);
- ps.WriteLine(" {0}", project.RootNamespace);
- ps.WriteLine(" {0}", project.StartupObject);
- if (string.IsNullOrEmpty(project.DebugStartParameters))
- {
- ps.WriteLine(" {0}", project.DebugStartParameters);
- }
- ps.WriteLine(" ");
- ps.WriteLine(" ");
-
- ps.WriteLine(" ");
-
- foreach (ConfigurationNode conf in project.Configurations)
- {
- ps.Write(" ", conf.Name);
- ps.WriteLine(" {0}", conf.Options["AllowUnsafe"]);
- ps.WriteLine(" {0}", conf.Options["BaseAddress"]);
- ps.WriteLine(" {0}", conf.Options["CheckUnderflowOverflow"]);
- ps.WriteLine(" ");
- ps.WriteLine(" ");
- ps.WriteLine(" {0}", conf.Options["CompilerDefines"]);
- ps.WriteLine(" {0}", Helper.NormalizePath(conf.Options["XmlDocFile"].ToString()));
- ps.WriteLine(" {0}", conf.Options["DebugInformation"]);
- ps.WriteLine(" {0}", conf.Options["FileAlignment"]);
- ps.WriteLine(" {0}", conf.Options["OptimizeCode"]);
- if (project.Type != ProjectType.Web)
- ps.WriteLine(" {0}",
- Helper.EndPath(Helper.NormalizePath(conf.Options["OutputPath"].ToString())));
- else
- ps.WriteLine(" {0}",
- Helper.EndPath(Helper.NormalizePath("bin\\")));
-
- ps.WriteLine(" {0}", conf.Options["RegisterComInterop"]);
- ps.WriteLine(" {0}", conf.Options["RemoveIntegerChecks"]);
- ps.WriteLine(" {0}", conf.Options["WarningsAsErrors"]);
- ps.WriteLine(" {0}", conf.Options["WarningLevel"]);
- ps.WriteLine(" {0}", conf.Options["NoStdLib"]);
- ps.WriteLine(" {0}", conf.Options["SuppressWarnings"]);
- ps.WriteLine(" ");
- }
-
- //ps.WriteLine(" ");
-
- List projectReferences = new List();
- List otherReferences = new List();
-
- foreach (ReferenceNode refr in project.References)
- {
- ProjectNode projectNode = FindProjectInSolution(refr.Name, solution);
-
- if (projectNode == null)
- otherReferences.Add(refr);
- else
- projectReferences.Add(projectNode);
- }
- // Assembly References
- ps.WriteLine(" ");
-
- foreach (ReferenceNode refr in otherReferences)
- {
- ps.Write(" ");
- ps.Write(" ");
- ps.Write(refr.Name);
- ps.WriteLine("");
- // TODO: Allow reference to *.exe files
- ps.WriteLine(" {0}", refr.LocalCopy);
- ps.WriteLine(" ");
- }
- ps.WriteLine(" ");
-
- //Project References
- ps.WriteLine(" ");
- foreach (ProjectNode projectReference in projectReferences)
- {
- ToolInfo tool = (ToolInfo)tools[projectReference.Language];
- if (tools == null)
- throw new UnknownLanguageException();
-
- string path =
- Helper.MakePathRelativeTo(project.FullPath,
- Helper.MakeFilePath(projectReference.FullPath, projectReference.Name, tool.FileExtension));
- ps.WriteLine(" ", path);
-
- // TODO: Allow reference to visual basic projects
- ps.WriteLine(" {0}", projectReference.Name);
- ps.WriteLine(" {0}", projectReference.Guid.ToString("B").ToUpper());
- ps.WriteLine(" {0}", tool.Guid.ToUpper());
-
- ps.WriteLine(" False" );
-
- ps.WriteLine(" ");
- }
- ps.WriteLine(" ");
-
- // ps.WriteLine(" ");
- ps.WriteLine(" ");
-
- // ps.WriteLine(" ");
- List list = new List();
-
- foreach (string path in project.Files)
- {
- string lower = path.ToLower();
- if (lower.EndsWith(".resx"))
- {
- string codebehind = String.Format("{0}.Designer{1}", path.Substring(0, path.LastIndexOf('.')), toolInfo.LanguageExtension);
- if (!list.Contains(codebehind))
- list.Add(codebehind);
- }
- }
-
- foreach (string file in project.Files)
- {
- // if (file == "Properties\\Bind.Designer.cs")
- // {
- // Console.WriteLine("Wait a minute!");
- // Console.WriteLine(project.Files.GetSubType(file).ToString());
- // }
-
- SubType subType = project.Files.GetSubType(file);
-
- if (subType != SubType.Code && subType != SubType.Settings && subType != SubType.Designer
- && subType != SubType.CodeBehind)
- {
- ps.WriteLine(" ", file.Substring(0, file.LastIndexOf('.')) + ".resx");
- ps.WriteLine(" {0}", Path.GetFileName(file));
- ps.WriteLine(" Designer");
- ps.WriteLine(" ");
- //
- }
-
- if (subType == SubType.Designer)
- {
- ps.WriteLine(" ", file);
- ps.WriteLine(" " + subType + "");
- ps.WriteLine(" ResXFileCodeGenerator");
-
- string autogen_name = file.Substring(0, file.LastIndexOf('.')) + ".Designer.cs";
- string dependent_name = file.Substring(0, file.LastIndexOf('.')) + ".cs";
-
- ps.WriteLine(" {0}", autogen_name);
-
- // Check for a parent .cs file with the same name as this designer file
- if (File.Exists(dependent_name))
- ps.WriteLine(" {0}", Path.GetFileName(dependent_name));
-
- ps.WriteLine(" ");
- if (File.Exists(autogen_name))
- {
- ps.WriteLine(" ", autogen_name);
- ps.WriteLine(" True");
- ps.WriteLine(" True");
-
- // If a parent .cs file exists, link this autogen file to it. Otherwise link
- // to the designer file
- if (File.Exists(dependent_name))
- ps.WriteLine(" {0}", Path.GetFileName(dependent_name));
- else
- ps.WriteLine(" {0}", Path.GetFileName(file));
-
- ps.WriteLine(" ");
- }
- list.Add(autogen_name);
- }
- if (subType == SubType.Settings)
- {
- ps.Write(" <{0} ", project.Files.GetBuildAction(file));
- ps.WriteLine("Include=\"{0}\">", file);
- string fileName = Path.GetFileName(file);
- if (project.Files.GetBuildAction(file) == BuildAction.None)
- {
- ps.WriteLine(" SettingsSingleFileGenerator");
- ps.WriteLine(" {0}", fileName.Substring(0, fileName.LastIndexOf('.')) + ".Designer.cs");
- }
- else
- {
- ps.WriteLine(" Code");
- ps.WriteLine(" True");
- ps.WriteLine(" True");
- string fileNameShort = fileName.Substring(0, fileName.LastIndexOf('.'));
- string fileNameShorter = fileNameShort.Substring(0, fileNameShort.LastIndexOf('.'));
- ps.WriteLine(" {0}", Path.GetFileName(fileNameShorter + ".settings"));
- }
- ps.WriteLine(" {0}>", project.Files.GetBuildAction(file));
- }
- else if (subType != SubType.Designer)
- {
- string path = Helper.NormalizePath(file);
- string path_lower = path.ToLower();
-
- if (!list.Contains(file))
- {
- ps.Write(" <{0} ", project.Files.GetBuildAction(path));
-
- int startPos = 0;
- if (project.Files.GetPreservePath(file))
- {
- while ((@"./\").IndexOf(file.Substring(startPos, 1)) != -1)
- startPos++;
-
- }
- else
- {
- startPos = file.LastIndexOf(Path.GetFileName(path));
- }
-
- ps.WriteLine("Include=\"{0}\">", path);
-
- int last_period_index = file.LastIndexOf('.');
- string short_file_name = file.Substring(0, last_period_index);
- string extension = Path.GetExtension(path);
- string designer_format = string.Format(".designer{0}", extension);
-
- if (path_lower.EndsWith(designer_format))
- {
- int designer_index = path_lower.IndexOf(designer_format);
- string file_name = path.Substring(0, designer_index);
-
- if (File.Exists(file_name))
- ps.WriteLine(" {0}", Path.GetFileName(file_name));
- else if (File.Exists(file_name + ".resx"))
- ps.WriteLine(" {0}", Path.GetFileName(file_name + ".resx"));
- }
- else if (subType == SubType.CodeBehind)
- {
- ps.WriteLine(" {0}", Path.GetFileName(short_file_name));
- }
- if (project.Files.GetIsLink(file))
- {
- string alias = project.Files.GetLinkPath(file);
- alias += file.Substring(startPos);
- alias = Helper.NormalizePath(alias);
- ps.WriteLine(" {0}", alias);
- }
- else if (project.Files.GetBuildAction(file) != BuildAction.None)
- {
- if (project.Files.GetBuildAction(file) != BuildAction.EmbeddedResource)
- {
- ps.WriteLine(" {0}", subType);
- }
- }
-
- if (project.Files.GetCopyToOutput(file) != CopyToOutput.Never)
- {
- ps.WriteLine(" {0}", project.Files.GetCopyToOutput(file));
- }
-
- ps.WriteLine(" {0}>", project.Files.GetBuildAction(file));
- }
- }
- }
-
- ps.WriteLine(" ");
- ps.WriteLine(" ");
- ps.WriteLine(" ");
- ps.WriteLine(" ");
- ps.WriteLine(" ");
- ps.WriteLine(" ");
- ps.WriteLine(" ");
- ps.WriteLine(" ");
- ps.WriteLine("");
- }
- #endregion
-
- #region User File
-
- ps = new StreamWriter(projectFile + ".user");
- using (ps)
- {
- ps.WriteLine("");
- //ps.WriteLine( "" );
- //ps.WriteLine(" <{0}>", toolInfo.XMLTag);
- //ps.WriteLine(" ");
- ps.WriteLine(" ");
- //ps.WriteLine(" ", MakeRefPath(project));
- ps.WriteLine(" Debug");
- ps.WriteLine(" AnyCPU");
- ps.WriteLine(" {0}", MakeRefPath(project));
- ps.WriteLine(" {0}", this.ProductVersion);
- ps.WriteLine(" ProjectFiles");
- ps.WriteLine(" 0");
- ps.WriteLine(" ");
- foreach (ConfigurationNode conf in project.Configurations)
- {
- ps.Write(" ");
- }
- ps.WriteLine("");
- }
- #endregion
-
- kernel.CurrentWorkingDirectory.Pop();
- }
-
- private void WriteSolution(SolutionNode solution, bool writeSolutionToDisk)
- {
- kernel.Log.Write("Creating {0} solution and project files", this.VersionName);
-
- foreach (SolutionNode child in solution.Solutions)
- {
- kernel.Log.Write("...Creating folder: {0}", child.Name);
- WriteSolution(child, false);
- }
-
- foreach (ProjectNode project in solution.Projects)
- {
- kernel.Log.Write("...Creating project: {0}", project.Name);
- WriteProject(solution, project);
- }
-
- foreach (DatabaseProjectNode project in solution.DatabaseProjects)
- {
- kernel.Log.Write("...Creating database project: {0}", project.Name);
- WriteDatabaseProject(solution, project);
- }
-
- if (writeSolutionToDisk) // only write main solution
- {
- kernel.Log.Write("");
- string solutionFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
-
- using (StreamWriter ss = new StreamWriter(solutionFile))
- {
- kernel.CurrentWorkingDirectory.Push();
- Helper.SetCurrentDir(Path.GetDirectoryName(solutionFile));
-
- ss.WriteLine("Microsoft Visual Studio Solution File, Format Version {0}", this.SolutionVersion);
- ss.WriteLine(SolutionTag);
-
- WriteProjectDeclarations(ss, solution, solution);
-
- ss.WriteLine("Global");
-
- ss.WriteLine("\tGlobalSection(SolutionConfigurationPlatforms) = preSolution");
- foreach (ConfigurationNode conf in solution.Configurations)
- {
- ss.WriteLine("\t\t{0}|Any CPU = {0}|Any CPU", conf.Name);
- }
- ss.WriteLine("\tEndGlobalSection");
-
- ss.WriteLine("\tGlobalSection(ProjectConfigurationPlatforms) = postSolution");
- WriteConfigurationLines(solution.Configurations, solution, ss);
- ss.WriteLine("\tEndGlobalSection");
-
- if (solution.Solutions.Count > 0)
- {
- ss.WriteLine("\tGlobalSection(NestedProjects) = preSolution");
- foreach (SolutionNode embeddedSolution in solution.Solutions)
- {
- WriteNestedProjectMap(ss, embeddedSolution);
- }
- ss.WriteLine("\tEndGlobalSection");
- }
-
- ss.WriteLine("EndGlobal");
- }
-
- kernel.CurrentWorkingDirectory.Pop();
- }
- }
-
- private void WriteProjectDeclarations(StreamWriter writer, SolutionNode actualSolution, SolutionNode embeddedSolution)
- {
- foreach (SolutionNode childSolution in embeddedSolution.Solutions)
- {
- WriteEmbeddedSolution(writer, childSolution);
- WriteProjectDeclarations(writer, actualSolution, childSolution);
- }
-
- foreach (ProjectNode project in embeddedSolution.Projects)
- {
- WriteProject(actualSolution, writer, project);
- }
-
- foreach (DatabaseProjectNode dbProject in embeddedSolution.DatabaseProjects)
- {
- WriteProject(actualSolution, writer, dbProject);
- }
-
- if (actualSolution.Guid == embeddedSolution.Guid)
- {
- WriteSolutionFiles(actualSolution, writer);
- }
- }
-
- private static void WriteNestedProjectMap(StreamWriter writer, SolutionNode embeddedSolution)
- {
- foreach (ProjectNode project in embeddedSolution.Projects)
- {
- WriteNestedProject(writer, embeddedSolution, project.Guid);
- }
-
- foreach (DatabaseProjectNode dbProject in embeddedSolution.DatabaseProjects)
- {
- WriteNestedProject(writer, embeddedSolution, dbProject.Guid);
- }
-
- foreach (SolutionNode child in embeddedSolution.Solutions)
- {
- WriteNestedProject(writer, embeddedSolution, child.Guid);
- WriteNestedProjectMap(writer, child);
- }
- }
-
- private static void WriteNestedProject(StreamWriter writer, SolutionNode solution, Guid projectGuid)
- {
- WriteNestedFolder(writer, solution.Guid, projectGuid);
- }
-
- private static void WriteNestedFolder(StreamWriter writer, Guid parentGuid, Guid childGuid)
- {
- writer.WriteLine("\t\t{0} = {1}",
- childGuid.ToString("B").ToUpper(),
- parentGuid.ToString("B").ToUpper());
- }
-
- private static void WriteConfigurationLines(ICollection configurations, SolutionNode solution, StreamWriter ss)
- {
- foreach (ProjectNode project in solution.Projects)
- {
- foreach (ConfigurationNode conf in configurations)
- {
- ss.WriteLine("\t\t{0}.{1}|Any CPU.ActiveCfg = {1}|Any CPU",
- project.Guid.ToString("B").ToUpper(),
- conf.Name);
-
- ss.WriteLine("\t\t{0}.{1}|Any CPU.Build.0 = {1}|Any CPU",
- project.Guid.ToString("B").ToUpper(),
- conf.Name);
- }
- }
-
- foreach (SolutionNode child in solution.Solutions)
- {
- WriteConfigurationLines(configurations, child, ss);
- }
- }
-
- private void WriteSolutionFiles(SolutionNode solution, StreamWriter ss)
- {
- if (solution.Files != null && solution.Files.Count > 0)
- {
- WriteProject(ss, "Folder", solution.Guid, "Solution Files", "Solution Files", solution.Files);
- }
- }
-
- private void WriteEmbeddedSolution(StreamWriter writer, SolutionNode embeddedSolution)
- {
- WriteProject(writer, "Folder", embeddedSolution.Guid, embeddedSolution.Name, embeddedSolution.Name, embeddedSolution.Files);
- }
-
- private void WriteProject(SolutionNode solution, StreamWriter ss, ProjectNode project)
- {
- WriteProject(ss, solution, project.Language, project.Guid, project.Name, project.FullPath);
- }
-
- private void WriteProject(SolutionNode solution, StreamWriter ss, DatabaseProjectNode dbProject)
- {
- if (solution.Files != null && solution.Files.Count > 0)
- WriteProject(ss, solution, "Database", dbProject.Guid, dbProject.Name, dbProject.FullPath);
- }
-
- private static bool ExtensionSpecified(string refName)
- {
- return refName.EndsWith(".dll") || refName.EndsWith(".exe");
- }
-
- private static string GetProjectExtension(ProjectNode project)
- {
- string extension = ".dll";
- if (project.Type == ProjectType.Exe)
- {
- extension = ".exe";
- }
- return extension;
- }
-
- const string ProjectDeclarationBeginFormat = "Project(\"{0}\") = \"{1}\", \"{2}\", \"{3}\"";
- const string ProjectDeclarationEndFormat = "EndProject";
-
- private void WriteProject(StreamWriter ss, SolutionNode solution, string language, Guid guid, string name, string projectFullPath)
- {
- if (!tools.ContainsKey(language))
- throw new UnknownLanguageException("Unknown .NET language: " + language);
-
- ToolInfo toolInfo = (ToolInfo)tools[language];
-
- string path = Helper.MakePathRelativeTo(solution.FullPath, projectFullPath);
-
- path = Helper.MakeFilePath(path, name, toolInfo.FileExtension);
-
- WriteProject(ss, language, guid, name, path);
- }
-
- private void WriteProject(StreamWriter writer, string language, Guid projectGuid, string name, string location)
- {
- WriteProject(writer, language, projectGuid, name, location, null);
- }
-
- private void WriteProject(StreamWriter writer, string language, Guid projectGuid, string name, string location, FilesNode files)
- {
- if (!tools.ContainsKey(language))
- throw new UnknownLanguageException("Unknown .NET language: " + language);
-
- ToolInfo toolInfo = (ToolInfo)tools[language];
-
- writer.WriteLine(ProjectDeclarationBeginFormat,
- toolInfo.Guid,
- name,
- location,
- projectGuid.ToString("B").ToUpper());
-
- if (files != null)
- {
- writer.WriteLine("\tProjectSection(SolutionItems) = preProject");
-
- foreach (string file in files)
- writer.WriteLine("\t\t{0} = {0}", file);
-
- writer.WriteLine("\tEndProjectSection");
- }
-
- writer.WriteLine(ProjectDeclarationEndFormat);
- }
-
- private void WriteDatabaseProject(SolutionNode solution, DatabaseProjectNode project)
- {
- string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "dbp");
- IndentedTextWriter ps = new IndentedTextWriter(new StreamWriter(projectFile), " ");
-
- kernel.CurrentWorkingDirectory.Push();
-
- Helper.SetCurrentDir(Path.GetDirectoryName(projectFile));
-
- using (ps)
- {
- ps.WriteLine("# Microsoft Developer Studio Project File - Database Project");
- ps.WriteLine("Begin DataProject = \"{0}\"", project.Name);
- ps.Indent++;
- ps.WriteLine("MSDTVersion = \"80\"");
- // TODO: Use the project.Files property
- if (ContainsSqlFiles(Path.GetDirectoryName(projectFile)))
- WriteDatabaseFoldersAndFiles(ps, Path.GetDirectoryName(projectFile));
-
- ps.WriteLine("Begin DBRefFolder = \"Database References\"");
- ps.Indent++;
- foreach (DatabaseReferenceNode reference in project.References)
- {
- ps.WriteLine("Begin DBRefNode = \"{0}\"", reference.Name);
- ps.Indent++;
- ps.WriteLine("ConnectStr = \"{0}\"", reference.ConnectionString);
- ps.WriteLine("Provider = \"{0}\"", reference.ProviderId.ToString("B").ToUpper());
- //ps.WriteLine("Colorizer = 5");
- ps.Indent--;
- ps.WriteLine("End");
- }
- ps.Indent--;
- ps.WriteLine("End");
- ps.Indent--;
- ps.WriteLine("End");
-
- ps.Flush();
- }
-
- kernel.CurrentWorkingDirectory.Pop();
- }
-
- private bool ContainsSqlFiles(string folder)
- {
- foreach (string file in Directory.GetFiles(folder, "*.sql"))
- {
- return true; // if the folder contains 1 .sql file, that's good enough
- }
-
- foreach (string child in Directory.GetDirectories(folder))
- {
- if (ContainsSqlFiles(child))
- return true; // if 1 child folder contains a .sql file, still good enough
- }
-
- return false;
- }
-
- private void WriteDatabaseFoldersAndFiles(IndentedTextWriter writer, string folder)
- {
- foreach (string child in Directory.GetDirectories(folder))
- {
- if (ContainsSqlFiles(child))
- {
- writer.WriteLine("Begin Folder = \"{0}\"", Path.GetFileName(child));
- writer.Indent++;
- WriteDatabaseFoldersAndFiles(writer, child);
- writer.Indent--;
- writer.WriteLine("End");
- }
- }
- foreach (string file in Directory.GetFiles(folder, "*.sql"))
- {
- writer.WriteLine("Script = \"{0}\"", Path.GetFileName(file));
- }
- }
-
- private void CleanProject(ProjectNode project)
- {
- kernel.Log.Write("...Cleaning project: {0}", project.Name);
-
- ToolInfo toolInfo = (ToolInfo)tools[project.Language];
- string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
- string userFile = projectFile + ".user";
-
- Helper.DeleteIfExists(projectFile);
- Helper.DeleteIfExists(userFile);
- }
-
- private void CleanSolution(SolutionNode solution)
- {
- kernel.Log.Write("Cleaning {0} solution and project files", this.VersionName, solution.Name);
-
- string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
- string suoFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "suo");
-
- Helper.DeleteIfExists(slnFile);
- Helper.DeleteIfExists(suoFile);
-
- foreach (ProjectNode project in solution.Projects)
- {
- CleanProject(project);
- }
-
- kernel.Log.Write("");
- }
-
- #endregion
-
- #region ITarget Members
-
- ///
- /// Writes the specified kern.
- ///
- /// The kern.
- public virtual void Write(Kernel kern)
- {
- if (kern == null)
- {
- throw new ArgumentNullException("kern");
- }
- kernel = kern;
- foreach (SolutionNode sol in kernel.Solutions)
- {
- WriteSolution(sol, true);
- }
- kernel = null;
- }
-
- ///
- /// Cleans the specified kern.
- ///
- /// The kern.
- public virtual void Clean(Kernel kern)
- {
- if (kern == null)
- {
- throw new ArgumentNullException("kern");
- }
- kernel = kern;
- foreach (SolutionNode sol in kernel.Solutions)
- {
- CleanSolution(sol);
- }
- kernel = null;
- }
-
- #endregion
- }
-}
--
cgit v1.1