diff --git a/src/Generator.Tests/AST/TestAST.cs b/src/Generator.Tests/AST/TestAST.cs index ddc9b518..993e7b66 100644 --- a/src/Generator.Tests/AST/TestAST.cs +++ b/src/Generator.Tests/AST/TestAST.cs @@ -316,7 +316,7 @@ namespace CppSharp.Generator.Tests.AST public void TestAmbiguity() { var bindingContext = new BindingContext(new TextDiagnosticPrinter(), new DriverOptions(), - new ParserOptions2()) + new ParserOptions2()); new CleanUnitPass { Context = bindingContext }.VisitLibrary(AstContext); new CheckAmbiguousFunctions { Context = bindingContext }.VisitLibrary(AstContext); Assert.IsTrue(AstContext.FindClass("HasAmbiguousFunctions").Single().FindMethod("ambiguous").IsAmbiguous); diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs index 98aadc25..386a2762 100644 --- a/src/Generator/Driver.cs +++ b/src/Generator/Driver.cs @@ -66,18 +66,10 @@ namespace CppSharp ParserOptions.addIncludeDirs(incDir); } - public void SetupIncludes() - { - if (Platform.IsMacOS) - ParserOptions.SetupXcode(); - else if (Platform.IsWindows && !ParserOptions.NoBuiltinIncludes) - ParserOptions.SetupMSVC(); - } - public void Setup() { ValidateOptions(); - SetupIncludes(); + ParserOptions.SetupIncludes(); Context = new BindingContext(Diagnostics, Options, ParserOptions); Generator = CreateGeneratorFromKind(Options.GeneratorKind); } diff --git a/src/Parser/ParserOptions.cs b/src/Parser/ParserOptions.cs index 0ad35423..83e04ae7 100644 --- a/src/Parser/ParserOptions.cs +++ b/src/Parser/ParserOptions.cs @@ -12,5 +12,48 @@ namespace CppSharp.Parser public bool IsItaniumLikeAbi { get { return Abi != CppAbi.Microsoft; } } public bool IsMicrosoftAbi { get { return Abi == CppAbi.Microsoft; } } + + /// Sets up the parser options to work with the given Visual Studio toolchain. + public void SetupMSVC(VisualStudioVersion vsVersion = VisualStudioVersion.Latest) + { + MicrosoftMode = true; + NoBuiltinIncludes = true; + NoStandardIncludes = true; + Abi = CppSharp.Parser.AST.CppAbi.Microsoft; + ToolSetToUse = MSVCToolchain.GetCLVersion(vsVersion) * 10000000; + + addArguments("-fms-extensions"); + addArguments("-fms-compatibility"); + addArguments("-fdelayed-template-parsing"); + + var includes = MSVCToolchain.GetSystemIncludes(vsVersion); + foreach (var include in includes) + addSystemIncludeDirs(include); + } + + 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++"); + } + + public void SetupIncludes() + { + if (Platform.IsMacOS) + SetupXcode(); + else if (Platform.IsWindows && !NoBuiltinIncludes) + SetupMSVC(); + } } } diff --git a/src/Parser/ToolchainExtensions.cs b/src/Parser/ToolchainExtensions.cs deleted file mode 100644 index 3948120a..00000000 --- a/src/Parser/ToolchainExtensions.cs +++ /dev/null @@ -1,43 +0,0 @@ -using CppSharp.Parser; - -namespace CppSharp -{ - public static partial class OptionsExtensions - { - /// Sets up the parser options to work with the given Visual Studio toolchain. - public static void SetupMSVC(this ParserOptions options, - VisualStudioVersion vsVersion = VisualStudioVersion.Latest) - { - options.MicrosoftMode = true; - options.NoBuiltinIncludes = true; - options.NoStandardIncludes = true; - options.Abi = CppSharp.Parser.AST.CppAbi.Microsoft; - options.ToolSetToUse = MSVCToolchain.GetCLVersion(vsVersion) * 10000000; - - options.addArguments("-fms-extensions"); - options.addArguments("-fms-compatibility"); - options.addArguments("-fdelayed-template-parsing"); - - var includes = MSVCToolchain.GetSystemIncludes(vsVersion); - foreach (var include in includes) - options.addSystemIncludeDirs(include); - } - - public static void SetupXcode(this ParserOptions options) - { - var builtinsPath = XcodeToolchain.GetXcodeBuiltinIncludesFolder(); - options.addSystemIncludeDirs(builtinsPath); - - var cppIncPath = XcodeToolchain.GetXcodeCppIncludesFolder(); - options.addSystemIncludeDirs(cppIncPath); - - var includePath = XcodeToolchain.GetXcodeIncludesFolder(); - options.addSystemIncludeDirs(includePath); - - options.NoBuiltinIncludes = true; - options.NoStandardIncludes = true; - - options.addArguments("-stdlib=libc++"); - } - } -} \ No newline at end of file