X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=msvc%2Fscripts%2Fgenproj.cs;h=e220a95a5064211fa66452f243715c49347846c1;hb=567628709703447f30ebee1e50043d94c2b89779;hp=e4276cf6b176ba08a52c2f3da7f6aa6b47fda972;hpb=d40a434c6052a4a521f674108d3def9c8b829e5a;p=mono.git diff --git a/msvc/scripts/genproj.cs b/msvc/scripts/genproj.cs index e4276cf6b17..e220a95a506 100644 --- a/msvc/scripts/genproj.cs +++ b/msvc/scripts/genproj.cs @@ -1,3 +1,16 @@ +// +// Consumes the order.xml file that contains a list of all the assemblies to build +// and produces a solution and the csproj files for it +// +// Currently this hardcodes a set of assemblies to build, the net-4.x series, but +// it can be extended to handle the command line tools. +// +// KNOWN ISSUES: +// * This fails to find matches for "System" and "System.xml" when processing the +// RabbitMQ executable, likely, because we do not process executables yet +// +// * Has not been tested in a while with the command line tools +// using System; using System.IO; using System.Collections.Generic; @@ -57,11 +70,15 @@ class SlnGenerator { public void Write (string filename) { + var fullPath = Path.GetDirectoryName (filename) + "/"; + using (var sln = new StreamWriter (filename)) { sln.WriteLine (); sln.WriteLine (header); foreach (var proj in libraries) { - sln.WriteLine (project_start, proj.library, proj.csProjFilename, proj.projectGuid); + var unixProjFile = proj.csProjFilename.Replace ("\\", "/"); + var fullProjPath = Path.GetFullPath (unixProjFile); + sln.WriteLine (project_start, proj.library, MsbuildGenerator.GetRelativePath (fullPath, fullProjPath), proj.projectGuid); sln.WriteLine (project_end); } sln.WriteLine ("Global"); @@ -190,6 +207,7 @@ class MsbuildGenerator { StringBuilder defines = new StringBuilder (); bool Optimize = true; bool want_debugging_support = false; + string main = null; Dictionary embedded_resources = new Dictionary (); List warning_as_error = new List (); List ignore_warning = new List (); @@ -198,7 +216,7 @@ class MsbuildGenerator { List references = new List (); List libs = new List (); List reference_aliases = new List (); - bool showWarnings = false; + bool showWarnings = true; // Currently unused #pragma warning disable 0219, 0414 @@ -210,7 +228,7 @@ class MsbuildGenerator { string win32IconFile; string StrongNameKeyFile; bool copyLocal = true; - Target Target = Target.Exe; + Target Target = Target.Library; string TargetExt = ".exe"; string OutputFile; string StrongNameKeyContainer; @@ -373,6 +391,9 @@ class MsbuildGenerator { return true; } case "/main": + main = value; + return true; + case "/m": case "/addmodule": case "/win32res": @@ -540,6 +561,9 @@ class MsbuildGenerator { CodePage = value; return true; + case "/publicsign": + return true; + case "/-getresourcestrings": return true; } @@ -640,9 +664,11 @@ class MsbuildGenerator { boot = xproject.Element ("boot").Value; flags = xproject.Element ("flags").Value; output_name = xproject.Element ("output").Value; + if (output_name.EndsWith (".exe")) + Target = Target.Exe; built_sources = xproject.Element ("built_sources").Value; response = xproject.Element ("response").Value; - //if (library.EndsWith("-build")) fx_version = "2.0"; // otherwise problem if .NET4.5 is installed, seems. (https://github.com/nikhilk/scriptsharp/issues/156) + profile = xproject.Element ("profile").Value; if (string.IsNullOrEmpty (response)) { // Address the issue where entries are missing the fx_version @@ -806,7 +832,8 @@ class MsbuildGenerator { // var refdistinct = references.Distinct (); foreach (string r in refdistinct) { - var match = GetMatchingCsproj (Path.GetFileName (r), projects); + + var match = GetMatchingCsproj (r, projects); if (match != null) { AddProjectReference (refs, Csproj, match, r, null); } else { @@ -878,6 +905,7 @@ class MsbuildGenerator { " ", StrongNameKeyFile, StrongNameDelaySign ? " true" + NewLine : ""); } Csproj.output = template. + Replace ("@OUTPUTTYPE@", Target == Target.Library ? "Library" : "Exe"). Replace ("@SIGNATURE@", strongNameSection). Replace ("@PROJECTGUID@", Csproj.projectGuid). Replace ("@DEFINES@", defines.ToString ()). @@ -894,6 +922,7 @@ class MsbuildGenerator { Replace ("@DEBUGTYPE@", want_debugging_support ? "full" : "pdbonly"). Replace ("@REFERENCES@", refs.ToString ()). Replace ("@PREBUILD@", prebuild). + Replace ("@STARTUPOBJECT@", main == null ? "" : $"{main}"). Replace ("@POSTBUILD@", postbuild). //Replace ("@ADDITIONALLIBPATHS@", String.Format ("{0}", string.Join (",", libs.ToArray ()))). Replace ("@ADDITIONALLIBPATHS@", String.Empty). @@ -939,20 +968,18 @@ class MsbuildGenerator { if (!dllReferenceName.EndsWith (".dll")) dllReferenceName += ".dll"; - if (explicitPath){ - var probe = Path.GetFullPath (Path.Combine (base_dir, dllReferenceName)); - foreach (var project in projects){ - if (probe == project.Value.AbsoluteLibraryOutput) - return project.Value; - } - } + var probe = Path.GetFullPath (Path.Combine (base_dir, dllReferenceName)); + foreach (var project in projects){ + if (probe == project.Value.AbsoluteLibraryOutput) + return project.Value; + } // not explicit, search for the library in the lib path order specified foreach (var libDir in libs) { var abs = Path.GetFullPath (Path.Combine (base_dir, libDir)); foreach (var project in projects){ - var probe = Path.Combine (abs, dllReferenceName); + probe = Path.Combine (abs, dllReferenceName); if (probe == project.Value.AbsoluteLibraryOutput) return project.Value; @@ -960,7 +987,7 @@ class MsbuildGenerator { } Console.WriteLine ("Did not find referenced {0} with libs={1}", dllReferenceName, String.Join (", ", libs)); foreach (var p in projects) { - Console.WriteLine (" => {0}", p.Value.AbsoluteLibraryOutput); + // Console.WriteLine ("{0}", p.Value.AbsoluteLibraryOutput); } return null; } @@ -982,7 +1009,7 @@ public class Driver { continue; // These are currently broken, skip until they're fixed. - if (dir.StartsWith ("mcs") || dir.Contains ("Microsoft.Web.Infrastructure")) + if (dir.StartsWith ("mcs") || dir.Contains ("apigen")) continue; // @@ -1071,14 +1098,16 @@ public class Driver { FillSolution (four_five_sln_gen, MsbuildGenerator.profile_4_x, projects.Values, additionalFilter); - var sb = new StringBuilder (); - sb.AppendLine ("WARNING: Skipped some project references, apparent duplicates in order.xml:"); - foreach (var item in duplicates) { - sb.AppendLine (item); + if (duplicates.Count () > 0) { + var sb = new StringBuilder (); + sb.AppendLine ("WARNING: Skipped some project references, apparent duplicates in order.xml:"); + foreach (var item in duplicates) { + sb.AppendLine (item); + } + Console.WriteLine (sb.ToString ()); } - Console.WriteLine (sb.ToString ()); - WriteSolution (four_five_sln_gen, MakeSolutionName (MsbuildGenerator.profile_4_x)); + WriteSolution (four_five_sln_gen, Path.Combine ("..", "..", MakeSolutionName (MsbuildGenerator.profile_4_x))); if (makefileDeps){ const string classDirPrefix = "./../../";