From 4574b898de7c8dee6213426911b2a32c2ab58705 Mon Sep 17 00:00:00 2001 From: marcos henrich Date: Sun, 6 Apr 2014 15:56:29 +0100 Subject: [PATCH] Added to binder option NoGenIncludeDirs that contains a list of non generated include dirs. --- src/Generator/Driver.cs | 9 +++++++++ src/Generator/Options.cs | 4 +++- src/Generator/Passes/CleanUnitPass.cs | 17 +++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs index 5f095696..b51ed739 100644 --- a/src/Generator/Driver.cs +++ b/src/Generator/Driver.cs @@ -70,6 +70,9 @@ namespace CppSharp for (var i = 0; i < options.LibraryDirs.Count; i++) options.LibraryDirs[i] = Path.GetFullPath(options.LibraryDirs[i]); #endif + if (options.NoGenIncludeDirs != null) + for (var i = 0; i < options.NoGenIncludeDirs.Count; i++) + options.NoGenIncludeDirs[i] = Path.GetFullPath(options.NoGenIncludeDirs[i]); if (string.IsNullOrWhiteSpace(options.OutputNamespace)) options.OutputNamespace = options.LibraryName; @@ -78,6 +81,12 @@ namespace CppSharp public void Setup() { ValidateOptions(Options); + + if (Options.NoGenIncludeDirs != null) + foreach (var incDir in Options.NoGenIncludeDirs) + if (!Options.IncludeDirs.Contains(incDir)) + Options.IncludeDirs.Add(incDir); + TypeDatabase.SetupTypeMaps(); Generator = CreateGeneratorFromKind(Options.GeneratorKind); } diff --git a/src/Generator/Options.cs b/src/Generator/Options.cs index 0c6e8ddc..94823777 100644 --- a/src/Generator/Options.cs +++ b/src/Generator/Options.cs @@ -4,7 +4,6 @@ using System.IO; using System.Text; using CppSharp.AST; using CppSharp.Generators; - #if !OLD_PARSER using CppSharp.Parser; using CppAbi = CppSharp.Parser.AST.CppAbi; @@ -97,6 +96,9 @@ namespace CppSharp public bool GenerateInternalImports; public bool GenerateClassMarshals; + //List of include directories that are used but not generated + public List NoGenIncludeDirs; + /// /// Enable this option to enable generation of finalizers. /// Works in both CLI and C# backends. diff --git a/src/Generator/Passes/CleanUnitPass.cs b/src/Generator/Passes/CleanUnitPass.cs index c51fcf30..63e4e43f 100644 --- a/src/Generator/Passes/CleanUnitPass.cs +++ b/src/Generator/Passes/CleanUnitPass.cs @@ -13,6 +13,9 @@ namespace CppSharp.Passes public override bool VisitTranslationUnit(TranslationUnit unit) { + if (IsTranslationGenerated(unit)) + unit.IsGenerated = false; + // Try to get an include path that works from the original include // directories paths. @@ -49,5 +52,19 @@ namespace CppSharp.Passes return includePath.Replace('\\', '/'); } + + bool IsTranslationGenerated(TranslationUnit translationUnit) + { + if (DriverOptions.NoGenIncludeDirs == null) + return false; + + foreach (var path in DriverOptions.NoGenIncludeDirs) + { + if (translationUnit.FilePath.StartsWith(path)) + return true; + } + + return false; + } } } \ No newline at end of file