diff --git a/src/Core/Toolchains/MSVCToolchain.cs b/src/Core/Toolchains/MSVCToolchain.cs
index dfcb525e..5c92f839 100644
--- a/src/Core/Toolchains/MSVCToolchain.cs
+++ b/src/Core/Toolchains/MSVCToolchain.cs
@@ -1,12 +1,8 @@
using System;
using System.Collections.Generic;
using System.Globalization;
-using System.IO;
-using System.Linq;
using System.Text.RegularExpressions;
using Microsoft.Win32;
-using Microsoft.VisualStudio.Setup.Configuration;
-using System.Runtime.InteropServices;
namespace CppSharp
{
@@ -50,35 +46,6 @@ namespace CppSharp
public static class MSVCToolchain
{
- /// Dumps the detected SDK versions.
- public static void DumpSdks()
- {
- List vsSdks = GetVisualStudioSdks();
- DumpSdks("Visual Studio", vsSdks);
-
- List windowsSdks = GetWindowsSdks();
- DumpSdks("Windows", windowsSdks);
-
- List windowsKitsSdks = GetWindowsKitsSdks();
- DumpSdks("Windows Kits", windowsKitsSdks);
-
- List netFrameworkSdks = GetNetFrameworkSdks();
- DumpSdks(".NET Framework", netFrameworkSdks);
-
- List msbuildSdks = GetMSBuildSdks();
- DumpSdks("MSBuild", msbuildSdks);
- }
-
- /// Dumps include directories for selected toolchain.
- /// The version of Visual Studio to dump the SDK-s of.
- public static void DumpSdkIncludes(VisualStudioVersion vsVersion =
- VisualStudioVersion.Latest)
- {
- Console.WriteLine("\nInclude search path (VS: {0}):", vsVersion);
- foreach (var include in MSVCToolchain.GetSystemIncludes(vsVersion))
- Console.WriteLine($"\t{include}");
- }
-
public static Version GetCLVersion(VisualStudioVersion vsVersion)
{
Version clVersion;
@@ -104,247 +71,6 @@ namespace CppSharp
return clVersion;
}
- public static ToolchainVersion GetVSToolchain(VisualStudioVersion vsVersion)
- {
- if (VSSdks.Value.Count == 0)
- throw new Exception("Could not find a valid Visual Studio toolchain");
-
- return (vsVersion == VisualStudioVersion.Latest)
- ? VSSdks.Value.Last()
- : VSSdks.Value.Find(version =>
- (int) version.Version == GetVisualStudioVersion(vsVersion));
- }
-
- public static ToolchainVersion GetWindowsKitsToolchain(VisualStudioVersion vsVersion,
- out int windowsSdkMajorVer)
- {
- var vsSdk = GetVSToolchain(vsVersion);
-
- var vsDir = vsSdk.Directory;
- vsDir = vsDir.Substring(0, vsDir.LastIndexOf(@"\Common7\IDE",
- StringComparison.Ordinal));
-
- // Check VCVarsQueryRegistry.bat to see which Windows SDK version
- // is supposed to be used with this VS version.
- var vcVarsPath = Path.Combine(vsDir, @"Common7\Tools\VCVarsQueryRegistry.bat");
-
- windowsSdkMajorVer = 0;
- string kitsRootKey = string.Empty;
-
- var vcVarsFile = File.ReadAllText(vcVarsPath);
- var match = Regex.Match(vcVarsFile, @"Windows\\v([1-9][0-9]*)\.?([0-9]*)");
- if (match.Success)
- windowsSdkMajorVer = int.Parse(match.Groups[1].Value);
-
- match = Regex.Match(vcVarsFile, "KitsRoot([1-9][0-9]*)");
- if (match.Success)
- kitsRootKey = match.Groups[0].Value;
-
- List windowsKitsSdks = GetWindowsKitsSdks();
-
- var windowsKitSdk = (!string.IsNullOrWhiteSpace(kitsRootKey))
- ? windowsKitsSdks.Find(version => version.Value == kitsRootKey)
- : windowsKitsSdks.Last();
- // If for some reason we cannot find the SDK version reported by VS
- // in the system, then fallback to the latest version found.
- if (windowsKitSdk.Value == null)
- windowsKitSdk = windowsKitsSdks.Last();
- return windowsKitSdk;
- }
-
- public static VisualStudioVersion FindVSVersion(VisualStudioVersion vsVersion)
- {
- if (vsVersion != VisualStudioVersion.Latest)
- {
- var vsSdk = GetVSToolchain(vsVersion);
- if (vsSdk.IsValid)
- return vsVersion;
- }
-
- // we don't know what "latest" is on a given machine
- // so start from the latest specified version and loop until a match is found
- for (var i = VisualStudioVersion.Latest - 1; i >= VisualStudioVersion.VS2012; i--)
- {
- vsVersion = FindVSVersion(i);
- if (vsVersion != VisualStudioVersion.Latest)
- return vsVersion;
- }
-
- return VisualStudioVersion.Latest;
- }
-
- /// Gets the system include folders for the given Visual Studio version.
- /// The version of Visual Studio to get
- /// system includes from.
- public static List GetSystemIncludes(VisualStudioVersion vsVersion)
- {
- var vsSdk = GetVSToolchain(vsVersion);
- var vsDir = vsSdk.Directory;
- if (Path.GetFileName(vsDir) == "IDE")
- {
- string secondToLastDirPath = Path.GetDirectoryName(vsDir);
- if (Path.GetFileName(secondToLastDirPath) == "Common7")
- vsDir = Path.GetDirectoryName(secondToLastDirPath);
- }
- return GetSystemIncludes(vsVersion, vsDir);
- }
-
- private static void DumpSdks(string sku, IEnumerable sdks)
- {
- Console.WriteLine("\n{0} SDKs:", sku);
- foreach (var sdk in sdks)
- Console.WriteLine("\t({0}) {1}", sdk.Version, sdk.Directory);
- }
-
- private static int GetVisualStudioVersion(VisualStudioVersion version)
- {
- switch (version)
- {
- case VisualStudioVersion.VS2012:
- return 11;
- case VisualStudioVersion.VS2013:
- return 12;
- case VisualStudioVersion.VS2015:
- return 14;
- case VisualStudioVersion.VS2017:
- case VisualStudioVersion.Latest:
- return 15;
- default:
- throw new Exception("Unknown Visual Studio version");
- }
- }
-
- private static List GetSystemIncludes(VisualStudioVersion vsVersion, string vsDir)
- {
- if (vsVersion == VisualStudioVersion.VS2017)
- return GetSystemIncludesVS2017(vsDir);
-
- int windowsSdkMajorVer;
- var windowsKitSdk = GetWindowsKitsToolchain(vsVersion, out windowsSdkMajorVer);
-
- List windowsSdks = GetWindowsSdks();
-
- var includes = new List { Path.Combine(vsDir, @"VC\include") };
- // Older Visual Studio versions provide their own Windows SDK.
- if (windowsSdks.Count == 0)
- {
- includes.Add(Path.Combine(vsDir, @"\VC\PlatformSDK\Include"));
- }
- else
- {
- includes.AddRange(GetIncludeDirsFromWindowsSdks(windowsSdkMajorVer, windowsSdks));
- }
-
- includes.AddRange(
- CollectUniversalCRuntimeIncludeDirs(vsDir, windowsKitSdk, windowsSdkMajorVer));
-
- return includes;
- }
-
- private static IEnumerable GetIncludeDirsFromWindowsSdks(
- int windowsSdkMajorVer, List windowsSdks)
- {
- var majorWindowsSdk = windowsSdks.Find(
- version => (int) Math.Floor(version.Version) == windowsSdkMajorVer);
- var windowsSdkDirs = majorWindowsSdk.Directory != null ?
- new[] { majorWindowsSdk.Directory } :
- windowsSdks.Select(w => w.Directory).Reverse();
- foreach (var windowsSdkDir in windowsSdkDirs)
- {
- if (windowsSdkMajorVer >= 8)
- {
- var windowsSdkIncludeDir = Path.Combine(windowsSdkDir, "include");
- IEnumerable searchDirs = new[] { windowsSdkIncludeDir };
- if (Directory.Exists(windowsSdkIncludeDir))
- searchDirs = searchDirs.Union(Directory.EnumerateDirectories(windowsSdkIncludeDir));
- foreach (var dir in searchDirs)
- {
- var shared = Path.Combine(dir, "shared");
- var um = Path.Combine(dir, "um");
- var winrt = Path.Combine(dir, "winrt");
- if (Directory.Exists(shared) && Directory.Exists(um) &&
- Directory.Exists(winrt))
- return new[] { shared, um, winrt };
- }
- }
- else
- {
- var include = Path.Combine(windowsSdkDir, "include");
- if (Directory.Exists(include))
- return new[] { include };
- }
- }
- return new string[0];
- }
-
- private static IEnumerable CollectUniversalCRuntimeIncludeDirs(
- string vsDir, ToolchainVersion windowsKitSdk, int windowsSdkMajorVer)
- {
- var includes = new List();
-
- // Check vsvars32.bat to see location of the new Universal C runtime library.
- string ucrtPaths = string.Empty;
- var vsVarsPath = Path.Combine(vsDir, @"Common7\Tools\vsvars32.bat");
- if (File.Exists(vsVarsPath))
- {
- var vsVarsFile = File.ReadAllText(vsVarsPath);
- var match = Regex.Match(vsVarsFile, "INCLUDE=%UniversalCRTSdkDir%(.+)%INCLUDE%");
- if (match.Success)
- ucrtPaths = match.Groups[1].Value;
- }
-
- if (string.IsNullOrWhiteSpace(ucrtPaths)) return includes;
-
- // like the rest of GetSystemIncludes, this is a hack
- // which copies the logic in the vcvarsqueryregistry.bat
- // the correct way would be to execute the script and collect the values
- // there's a reference implementation in the 'get_MSVC_UCRTVersion_from_VS_batch_script' branch
- // however, it cannot be used because it needs invoking an external process to run the .bat
- // which is killed prematurely by VS when the pre-build events of wrapper projects are run
- const string ucrtVersionEnvVar = "%UCRTVersion%";
- foreach (var splitPath in ucrtPaths.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
- {
- var path = splitPath.TrimStart('\\');
- var index = path.IndexOf(ucrtVersionEnvVar, StringComparison.Ordinal);
- if (index >= 0)
- {
- var include = path.Substring(0, index);
- var parentIncludeDir = Path.Combine(windowsKitSdk.Directory, include);
- var dirPrefix = windowsSdkMajorVer + ".";
- var includeDir =
- (from dir in Directory.EnumerateDirectories(parentIncludeDir).OrderByDescending(d => d)
- where Path.GetFileName(dir).StartsWith(dirPrefix, StringComparison.Ordinal)
- select Path.Combine(windowsKitSdk.Directory, include, dir)).FirstOrDefault();
- if (!string.IsNullOrEmpty(includeDir))
- includes.Add(Path.Combine(includeDir, Path.GetFileName(path)));
- }
- else
- includes.Add(Path.Combine(windowsKitSdk.Directory, path));
- }
-
- return includes;
- }
-
- ///
- /// Gets .NET framework installation directories.
- ///
- /// Success of the operation
- public static List GetNetFrameworkSdks()
- {
- List versions = GetToolchainsFromSystemRegistry(
- "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\.NETFramework",
- "InstallRoot", RegistryView.Registry32);
-
- if (versions.Count == 0 && Environment.Is64BitProcess)
- versions.AddRange(GetToolchainsFromSystemRegistry(
- "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\.NETFramework",
- "InstallRoot", RegistryView.Registry64));
-
- versions.Sort((v1, v2) => (int)(v1.Version - v2.Version));
-
- return versions;
- }
-
///
/// Gets MSBuild installation directories.
///
@@ -366,130 +92,6 @@ namespace CppSharp
return versions;
}
- ///
- /// Gets Windows SDK installation directories.
- ///
- /// Success of the operation
- public static List GetWindowsSdks()
- {
- List versions = GetToolchainsFromSystemRegistry(
- "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows",
- "InstallationFolder", RegistryView.Registry32);
-
- if (versions.Count == 0 && Environment.Is64BitProcess)
- versions.AddRange(GetToolchainsFromSystemRegistry(
- "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows",
- "InstallationFolder", RegistryView.Registry64));
-
- versions.Sort((v1, v2) => (int)(v1.Version - v2.Version));
-
- return versions;
- }
-
- ///
- /// Gets Windows Kits SDK installation directories.
- ///
- /// Success of the operation
- public static List GetWindowsKitsSdks()
- {
- List versions = GetToolchainsFromSystemRegistryValues(
- "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots",
- "KitsRoot", RegistryView.Registry32);
-
- if (versions.Count == 0 && Environment.Is64BitProcess)
- versions.AddRange(GetToolchainsFromSystemRegistryValues(
- "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots",
- "KitsRoot", RegistryView.Registry64));
-
- versions.Sort((v1, v2) => (int)(v1.Version - v2.Version));
-
- return versions;
- }
-
- ///
- /// Gets Visual Studio installation directories.
- ///
- /// Collection holding information about available Visual Studio instances
- /// Success of the operation
- public static List GetVisualStudioSdks()
- {
- var versions = GetToolchainsFromSystemRegistry(
- "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio",
- "InstallDir", RegistryView.Registry32);
-
- if (versions.Count == 0 && Environment.Is64BitProcess)
- versions.AddRange(GetToolchainsFromSystemRegistry(
- "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio",
- "InstallDir", RegistryView.Registry64));
-
- versions.AddRange(GetToolchainsFromSystemRegistry(
- "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress",
- "InstallDir", RegistryView.Registry32));
-
- if (versions.Count == 0 && Environment.Is64BitProcess)
- versions.AddRange(GetToolchainsFromSystemRegistry(
- "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress",
- "InstallDir", RegistryView.Registry64));
-
- //Check for VS 2017
- GetVs2017Instances(versions);
-
- versions.Sort((v1, v2) => (int)(v1.Version - v2.Version));
- return versions;
- }
-
- ///
- /// Read registry strings looking for matching values.
- ///
- /// The path to the key in the registry.
- /// The value to match in the located key, if any.
- /// The type of registry, 32 or 64, to target.
- ///
- public static List GetToolchainsFromSystemRegistryValues(
- string keyPath, string matchValue, RegistryView view)
- {
- string subKey;
- var hive = GetRegistryHive(keyPath, out subKey);
- using (var rootKey = RegistryKey.OpenBaseKey(hive, view))
- using (var key = rootKey.OpenSubKey(subKey, writable: false))
- {
- var entries = new List();
- if (key == null)
- return entries;
-
- foreach (var valueName in key.GetValueNames())
- {
- if (!valueName.Contains(matchValue))
- continue;
-
- var value = key.GetValue(valueName) as string;
- if (value == null)
- continue;
-
- float version = 0;
-
- // Get the number version from the key value.
- var match = Regex.Match(value, @".*([1-9][0-9]*\.?[0-9]*)");
- if (match.Success)
- {
- float.TryParse(match.Groups[1].Value, NumberStyles.Number,
- CultureInfo.InvariantCulture, out version);
- }
-
- var entry = new ToolchainVersion
- {
- Directory = value,
- Version = version,
- Value = valueName
- };
-
- entries.Add(entry);
- }
-
- return entries;
- }
- }
-
///
/// Read registry string.
/// This also supports a means to look for high-versioned keys by use
@@ -591,166 +193,5 @@ namespace CppSharp
return hive;
}
-
- private static Lazy> VSSdks =
- new Lazy>(GetVisualStudioSdks, true);
-
- #region VS2017
-
- ///
- /// Returns all system includes of the installed VS 2017 instance.
- ///
- /// Path to the visual studio installation (for identifying the correct instance)
- /// The system includes
- private static List GetSystemIncludesVS2017(string vsDir)
- {
- List includes = new List();
- //They includes are in a different folder
- const int REGDB_E_CLASSNOTREG = unchecked((int)0x80040154);
- try
- {
- var query = new SetupConfiguration();
- var query2 = (ISetupConfiguration2) query;
- var e = query2.EnumAllInstances();
-
- int fetched;
- var instances = new ISetupInstance[1];
- var regexWinSDK10Version = new Regex(@"Windows10SDK\.(\d+)\.?");
- do
- {
- e.Next(1, instances, out fetched);
- if (fetched > 0)
- {
- var instance = (ISetupInstance2) instances[0];
- if (instance.GetInstallationPath() != vsDir) continue;
- var packages = instance.GetPackages();
- var vc_tools = from package in packages
- where package.GetId().Contains("Microsoft.VisualStudio.Component.VC.Tools")
- orderby package.GetId()
- select package;
- if (vc_tools.Any())
- { // Tools found, get path
- var path = instance.GetInstallationPath();
- var versionFilePath = path + @"\VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt";
- var version = System.IO.File.ReadLines(versionFilePath).ElementAt(0).Trim();
- includes.Add(path + @"\VC\Tools\MSVC\" + version + @"\include");
- includes.Add(path + @"\VC\Tools\MSVC\" + version + @"\atlmfc\include");
- }
- var sdks = from package in packages
- where package.GetId().Contains("Windows10SDK") ||
- package.GetId().Contains("Windows81SDK") ||
- package.GetId().Contains("Win10SDK_10")
- select package;
- var win10sdks = from sdk in sdks
- where regexWinSDK10Version.Match(sdk.GetId()).Success
- orderby sdk.GetId()
- select sdk;
-
- var win8sdks = from sdk in sdks
- where sdk.GetId().Contains("Windows81SDK")
- select sdk;
- if (win10sdks.Any())
- {
- var sdk = win10sdks.Last();
- var matchVersion = regexWinSDK10Version.Match(sdk.GetId());
- string path;
- if (matchVersion.Success)
- {
- Environment.SpecialFolder specialFolder = Environment.Is64BitOperatingSystem ?
- Environment.SpecialFolder.ProgramFilesX86 : Environment.SpecialFolder.ProgramFiles;
- var programFiles = Environment.GetFolderPath(specialFolder);
- path = Path.Combine(programFiles, "Windows Kits", "10", "include",
- $"10.0.{matchVersion.Groups[1].Value}.0");
- }
- else
- {
- throw new Exception("Windows10SDK should not have been detected, something is terribly wrong");
- }
- var shared = Path.Combine(path, "shared");
- var um = Path.Combine(path, "um");
- var winrt = Path.Combine(path, "winrt");
- var ucrt = Path.Combine(path, "ucrt");
- Console.WriteLine(path);
- if (Directory.Exists(shared) &&
- Directory.Exists(um) &&
- Directory.Exists(winrt) &&
- Directory.Exists(ucrt))
- {
- includes.Add(shared);
- includes.Add(um);
- includes.Add(winrt);
- includes.Add(ucrt);
- }
- }
- else if (win8sdks.Any())
- {
- includes.Add(@"C:\Program Files (x86)\Windows Kits\8.1\include\shared");
- includes.Add(@"C:\Program Files (x86)\Windows Kits\8.1\include\um");
- includes.Add(@"C:\Program Files (x86)\Windows Kits\8.1\include\winrt");
- }
-
- return includes; //We've collected all information.
- }
-
- }
- while (fetched > 0);
- }
- // a COM exception means the VS 2017 COM API (therefore VS itself) is not installed, ignore
- catch (COMException ex) when (ex.HResult == REGDB_E_CLASSNOTREG)
- {
- }
- catch (Exception ex)
- {
- Console.Error.WriteLine($"Error 0x{ex.HResult:x8}: {ex.Message}");
- }
- return includes;
- }
-
- ///
- /// Tries to get all vs 2017 instances.
- ///
- /// Collection holding available visual studio instances
- /// Success of the operation
- private static bool GetVs2017Instances(ICollection versions)
- {
- const int REGDB_E_CLASSNOTREG = unchecked((int) 0x80040154);
- try
- {
- var query = new SetupConfiguration();
- var query2 = (ISetupConfiguration2) query;
- var e = query2.EnumAllInstances();
- int fetched;
- var instances = new ISetupInstance[1];
- do
- {
- e.Next(1, instances, out fetched);
- if (fetched > 0)
- {
- var instance = (ISetupInstance2) instances[0];
- var toolchain = new ToolchainVersion
- {
- Directory = instance.GetInstallationPath() + @"\Common7\IDE",
- Version = float.Parse(instance.GetInstallationVersion().Remove(2)),
- Value = null // Not used currently
- };
- versions.Add(toolchain);
- }
- }
- while (fetched > 0);
- }
- // a COM exception means the VS 2017 COM API (therefore VS itself) is not installed, ignore
- catch (COMException ex) when (ex.HResult == REGDB_E_CLASSNOTREG)
- {
- return false;
- }
- catch (Exception ex)
- {
- Console.Error.WriteLine($"Error 0x{ex.HResult:x8}: {ex.Message}");
- return false;
- }
- return true;
- }
-
- #endregion
}
}
diff --git a/src/Core/Toolchains/ManagedToolchain.cs b/src/Core/Toolchains/ManagedToolchain.cs
index 7038f6bc..66c3c62b 100644
--- a/src/Core/Toolchains/ManagedToolchain.cs
+++ b/src/Core/Toolchains/ManagedToolchain.cs
@@ -59,11 +59,5 @@ namespace CppSharp
return FindMonoPath();
}
-
- public static string FindCSharpCompilerPath()
- {
- return Path.Combine(FindCSharpCompilerDir(), "bin",
- Platform.IsWindows ? "csc.exe" : "mcs");
- }
}
}
diff --git a/src/Core/Toolchains/XcodeToolchain.cs b/src/Core/Toolchains/XcodeToolchain.cs
deleted file mode 100644
index ae64ed61..00000000
--- a/src/Core/Toolchains/XcodeToolchain.cs
+++ /dev/null
@@ -1,106 +0,0 @@
-using System;
-using System.IO;
-using System.Diagnostics;
-using System.Linq;
-
-namespace CppSharp
-{
- public static class XcodeToolchain
- {
- public static string GetXcodePath()
- {
- return GetXcodePathFromXcodeSelect() ?? GetXcodePathFromFileSystem();
- }
-
- public static string GetXcodeToolchainPath()
- {
- var toolchainPath = GetXcodePath();
-
- var toolchains = Directory.EnumerateDirectories(Path.Combine(toolchainPath,
- "Contents/Developer/Toolchains")).ToList();
- toolchains.Sort();
-
- toolchainPath = toolchains.LastOrDefault();
- if (toolchainPath == null)
- throw new Exception("Could not find a valid Xcode toolchain");
-
- return toolchainPath;
- }
-
- public static string GetXcodeCppIncludesFolder()
- {
- var toolchainPath = GetXcodeToolchainPath();
-
- var includePath = Path.Combine(toolchainPath, "usr/include/c++/v1");
-
- if (includePath == null)
- throw new Exception("Could not find a valid C++ include folder");
-
- return includePath;
- }
-
- public static string GetXcodeBuiltinIncludesFolder()
- {
- var toolchainPath = GetXcodeToolchainPath();
-
- var includePaths = Directory.EnumerateDirectories(Path.Combine(toolchainPath,
- "usr/lib/clang")).ToList();
- var includePath = includePaths.LastOrDefault();
-
- if (includePath == null)
- throw new Exception("Could not find a valid Clang include folder");
-
- return Path.Combine(includePath, "include");
- }
-
- public static string GetXcodeIncludesFolder()
- {
- var toolchainPath = GetXcodePath();
-
- var sdkPaths = Directory.EnumerateDirectories(Path.Combine(toolchainPath,
- "Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs")).ToList();
- var sdkPath = sdkPaths.LastOrDefault();
-
- if (sdkPath == null)
- throw new Exception("Could not find a valid Mac SDK");
-
- return Path.Combine(sdkPath, "usr/include");
- }
-
- private static string GetXcodePathFromXcodeSelect()
- {
- try
- {
- var xcodeSelect = Process.Start(new ProcessStartInfo("xcode-select", "--print-path") {
- RedirectStandardOutput = true,
- UseShellExecute = false
- });
-
- var result = xcodeSelect.StandardOutput.ReadToEnd();
-
- if(!string.IsNullOrEmpty(result))
- {
- var extraStuffIndex = result.LastIndexOf("/Contents/Developer");
- if(extraStuffIndex >= 0)
- return result.Remove(extraStuffIndex);
- }
- } catch {
- // TODO: Log exception?
- }
- return null;
- }
-
- private static string GetXcodePathFromFileSystem()
- {
- var toolchains = Directory.EnumerateDirectories("/Applications", "Xcode*")
- .ToList();
- toolchains.Sort();
-
- var toolchainPath = toolchains.LastOrDefault();
- if (toolchainPath == null)
- throw new Exception("Could not find a valid Xcode SDK");
-
- return toolchainPath;
- }
- }
-}
\ No newline at end of file
diff --git a/src/CppParser/ParserGen/ParserGen.cs b/src/CppParser/ParserGen/ParserGen.cs
index 6ced171e..3a6bcd7e 100644
--- a/src/CppParser/ParserGen/ParserGen.cs
+++ b/src/CppParser/ParserGen/ParserGen.cs
@@ -98,7 +98,7 @@ namespace CppSharp
var headersPath = Platform.IsLinux ? string.Empty :
Path.Combine(GetSourceDirectory("build"), "headers", "x86_64-linux-gnu");
- options.SetupLinux(headersPath);
+ options.SetupLinux();
options.AddDefines("_GLIBCXX_USE_CXX11_ABI=" + (IsGnuCpp11Abi ? "1" : "0"));
}
diff --git a/src/Parser/ParserOptions.cs b/src/Parser/ParserOptions.cs
index 8bb55ab2..537e183e 100644
--- a/src/Parser/ParserOptions.cs
+++ b/src/Parser/ParserOptions.cs
@@ -75,7 +75,6 @@ namespace CppSharp.Parser
Verbose = options.Verbose;
LanguageVersion = options.LanguageVersion;
UnityBuild = options.UnityBuild;
- ForceClangToolchainLookup = options.ForceClangToolchainLookup;
}
public bool IsItaniumLikeAbi => Abi != CppAbi.Microsoft;
@@ -84,14 +83,6 @@ namespace CppSharp.Parser
public bool EnableRTTI { get; set; }
public LanguageVersion? LanguageVersion { get; set; }
- ///
- /// This option forces the driver code to use Clang's toolchain code
- /// to lookup the location of system headers and library locations.
- /// At the moment, it only makes a difference for MSVC targets.
- /// If its true, then we opt to use Clang's MSVC lookup logic.
- ///
- public bool ForceClangToolchainLookup = false;
-
public ParserOptions BuildForSourceFile(
IEnumerable modules, string file = null)
{
@@ -202,16 +193,6 @@ namespace CppSharp.Parser
var clVersion = MSVCToolchain.GetCLVersion(vsVersion);
ToolSetToUse = clVersion.Major * 10000000 + clVersion.Minor * 100000;
- if (!ForceClangToolchainLookup)
- {
- NoStandardIncludes = true;
- NoBuiltinIncludes = true;
-
- vsVersion = MSVCToolchain.FindVSVersion(vsVersion);
- foreach (var include in MSVCToolchain.GetSystemIncludes(vsVersion))
- AddSystemIncludeDirs(include);
- }
-
// do not remove the CppSharp prefix becase the Mono C# compiler breaks
if (!LanguageVersion.HasValue)
LanguageVersion = CppSharp.Parser.LanguageVersion.CPP14_GNU;
@@ -223,94 +204,18 @@ namespace CppSharp.Parser
public void SetupXcode()
{
- var builtinsPath = XcodeToolchain.GetXcodeBuiltinIncludesFolder();
- AddSystemIncludeDirs(builtinsPath);
-
- var cppIncPath = XcodeToolchain.GetXcodeCppIncludesFolder();
- AddSystemIncludeDirs(cppIncPath);
-
- var includePath = XcodeToolchain.GetXcodeIncludesFolder();
- AddSystemIncludeDirs(includePath);
-
NoBuiltinIncludes = true;
NoStandardIncludes = true;
AddArguments("-stdlib=libc++");
}
- private void GetUnixCompilerInfo(string headersPath, out string compiler,
- out string longVersion, out string shortVersion)
- {
- if (!Platform.IsLinux)
- {
- compiler = "gcc";
- // Search for the available GCC versions on the provided headers.
- var versions = Directory.EnumerateDirectories(Path.Combine(headersPath,
- "usr", "include", "c++"));
-
- if (versions.Count() == 0)
- throw new Exception("No valid GCC version found on system include paths");
-
- string gccVersionPath = versions.First();
- longVersion = shortVersion = gccVersionPath.Substring(
- gccVersionPath.LastIndexOf(Path.DirectorySeparatorChar) + 1);
- return;
- }
- var info = new ProcessStartInfo(Environment.GetEnvironmentVariable("CXX") ?? "gcc", "-v");
- info.RedirectStandardError = true;
- info.CreateNoWindow = true;
- info.UseShellExecute = false;
- var process = Process.Start(info);
- if (process == null)
- throw new SystemException("GCC compiler was not found.");
- process.WaitForExit();
-
- var output = process.StandardError.ReadToEnd();
- var match = Regex.Match(output, "(gcc|clang) version (([0-9]+\\.[0-9]+)\\.[0-9]+)");
- if (!match.Success)
- throw new SystemException("GCC compiler was not found.");
-
- compiler = match.Groups[1].ToString();
- longVersion = match.Groups[2].ToString();
- shortVersion = match.Groups[3].ToString();
- }
-
- public void SetupLinux(string headersPath = "")
+ public void SetupLinux()
{
MicrosoftMode = false;
NoBuiltinIncludes = true;
NoStandardIncludes = true;
Abi = CppAbi.Itanium;
-
- string compiler, longVersion, shortVersion;
- GetUnixCompilerInfo(headersPath, out compiler, out longVersion, out shortVersion);
- string[] versions = {longVersion, shortVersion};
- string[] tripples = {"x86_64-linux-gnu", "x86_64-pc-linux-gnu"};
- if (compiler == "gcc")
- {
- foreach (var version in versions)
- {
- AddSystemIncludeDirs($"{headersPath}/usr/include/c++/{version}");
- AddSystemIncludeDirs($"{headersPath}/usr/include/c++/{version}/backward");
- foreach (var tripple in tripples)
- {
- AddSystemIncludeDirs($"{headersPath}/usr/include/{tripple}/c++/{version}");
- AddSystemIncludeDirs($"{headersPath}/usr/include/c++/{version}/{tripple}");
- }
- }
- }
- foreach (var tripple in tripples)
- {
- foreach (var version in versions)
- {
- AddSystemIncludeDirs($"{headersPath}/usr/lib/{compiler}/{tripple}/{version}/include");
- AddSystemIncludeDirs($"{headersPath}/usr/lib/{compiler}/{tripple}/{version}/include/c++");
- AddSystemIncludeDirs($"{headersPath}/usr/lib/{compiler}/{tripple}/{version}/include/c++/{tripple}");
- }
- AddSystemIncludeDirs($"{headersPath}/usr/include/{tripple}");
- }
- AddSystemIncludeDirs($"{headersPath}/usr/include");
- AddSystemIncludeDirs($"{headersPath}/usr/include/linux");
}
public void Setup()