From 3c385b66c9395a4caa96f610e5a7c3c0116aa701 Mon Sep 17 00:00:00 2001 From: Lluis Sanchez Gual Date: Thu, 26 Mar 2015 15:39:40 +0100 Subject: [PATCH 1/3] Fix loading of Mono toolsets The 4.0 toolset is installed in the Mono framework directory. Other toolsets are installed in the xbuild directory. --- .../Definition/ToolsetReader.cs | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/XMakeBuildEngine/Definition/ToolsetReader.cs b/src/XMakeBuildEngine/Definition/ToolsetReader.cs index 27dab2c02f8..cf2658f0398 100644 --- a/src/XMakeBuildEngine/Definition/ToolsetReader.cs +++ b/src/XMakeBuildEngine/Definition/ToolsetReader.cs @@ -15,6 +15,7 @@ using Microsoft.Build.Execution; using Microsoft.Build.Internal; using Microsoft.Build.Shared; +using Microsoft.Build.Utilities; using error = Microsoft.Build.Shared.ErrorUtilities; using InvalidProjectFileException = Microsoft.Build.Exceptions.InvalidProjectFileException; @@ -175,8 +176,25 @@ ToolsetDefinitionLocations locations if (!string.IsNullOrEmpty(libraryPath)) { - var r = new Regex(libraryPath + Path.DirectorySeparatorChar + @"\d+\.\d+"); - foreach (var d in Directory.GetDirectories(libraryPath).Where(d => r.IsMatch(d))) + // The 4.0 toolset is installed in the framework directory + var v4dir = ToolLocationHelper.GetPathToDotNetFramework (TargetDotNetFrameworkVersion.Version40); + if (v4dir != null) + { + toolsets.Add( + "4.0", + new Toolset( + "4.0", + v4dir, + environmentProperties, + globalProperties, + currentDir, + string.Empty)); + } + + // Other toolsets are installed in the xbuild directory + var xbuildToolsetsDir = Path.Combine(libraryPath, "mono", "xbuild"); + var r = new Regex(xbuildToolsetsDir + Path.DirectorySeparatorChar + @"\d+\.\d+"); + foreach (var d in Directory.GetDirectories(xbuildToolsetsDir).Where(d => r.IsMatch(d))) { var version = Path.GetFileName(d); if (version != null && !toolsets.ContainsKey(version)) @@ -185,7 +203,7 @@ ToolsetDefinitionLocations locations version, new Toolset( version, - d, + Path.Combine(d,"bin"), environmentProperties, globalProperties, currentDir, From d7a6f5d748bc9e267e0d5ed382a5b0eea688379c Mon Sep 17 00:00:00 2001 From: Lluis Sanchez Gual Date: Fri, 27 Mar 2015 10:03:38 +0100 Subject: [PATCH 2/3] ToolsetReader fixes for Mono Remove the Microsoft.Build.Utilities dependency by using FrameworkLocationHelper instead of ToolLocationHelper. Fixed formatting (space before method parameters). --- src/XMakeBuildEngine/Definition/ToolsetReader.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/XMakeBuildEngine/Definition/ToolsetReader.cs b/src/XMakeBuildEngine/Definition/ToolsetReader.cs index cf2658f0398..75f9bbf1267 100644 --- a/src/XMakeBuildEngine/Definition/ToolsetReader.cs +++ b/src/XMakeBuildEngine/Definition/ToolsetReader.cs @@ -15,7 +15,6 @@ using Microsoft.Build.Execution; using Microsoft.Build.Internal; using Microsoft.Build.Shared; -using Microsoft.Build.Utilities; using error = Microsoft.Build.Shared.ErrorUtilities; using InvalidProjectFileException = Microsoft.Build.Exceptions.InvalidProjectFileException; @@ -177,7 +176,7 @@ ToolsetDefinitionLocations locations if (!string.IsNullOrEmpty(libraryPath)) { // The 4.0 toolset is installed in the framework directory - var v4dir = ToolLocationHelper.GetPathToDotNetFramework (TargetDotNetFrameworkVersion.Version40); + var v4dir = FrameworkLocationHelper.GetPathToDotNetFrameworkV40(DotNetFrameworkArchitecture.Current); if (v4dir != null) { toolsets.Add( From c3549f5164d2ae4c65ff5abb61694d3ad61d25cc Mon Sep 17 00:00:00 2001 From: Lluis Sanchez Gual Date: Fri, 27 Mar 2015 19:04:29 +0100 Subject: [PATCH 3/3] Remove unnecessary path handling code in ToolsetReader --- src/XMakeBuildEngine/Definition/ToolsetReader.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/XMakeBuildEngine/Definition/ToolsetReader.cs b/src/XMakeBuildEngine/Definition/ToolsetReader.cs index 75f9bbf1267..c2b1c13dcc0 100644 --- a/src/XMakeBuildEngine/Definition/ToolsetReader.cs +++ b/src/XMakeBuildEngine/Definition/ToolsetReader.cs @@ -168,10 +168,6 @@ ToolsetDefinitionLocations locations var props = new PropertyDictionary(); var libraryPath = NativeMethodsShared.FrameworkBasePath; - if (!string.IsNullOrEmpty(libraryPath)) - { - libraryPath = Path.GetDirectoryName(libraryPath); - } if (!string.IsNullOrEmpty(libraryPath)) { @@ -191,7 +187,7 @@ ToolsetDefinitionLocations locations } // Other toolsets are installed in the xbuild directory - var xbuildToolsetsDir = Path.Combine(libraryPath, "mono", "xbuild"); + var xbuildToolsetsDir = Path.Combine(libraryPath, "xbuild"); var r = new Regex(xbuildToolsetsDir + Path.DirectorySeparatorChar + @"\d+\.\d+"); foreach (var d in Directory.GetDirectories(xbuildToolsetsDir).Where(d => r.IsMatch(d))) {