mirror of https://github.com/mono/CppSharp.git
c-sharpdotnetmonobindingsbridgecclangcpluspluscppsharpglueinteropparserparsingpinvokeswigsyntax-treevisitorsxamarinxamarin-bindings
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.4 KiB
111 lines
3.4 KiB
using System; |
|
using System.Collections.Generic; |
|
using System.IO; |
|
using System.Reflection; |
|
using CppSharp.AST; |
|
using CppSharp.Generators; |
|
|
|
namespace CppSharp.Utils |
|
{ |
|
/// <summary> |
|
/// The main base class for a generator-based tests project. |
|
/// </summary> |
|
public abstract class GeneratorTest : ILibrary |
|
{ |
|
readonly string name; |
|
readonly GeneratorKind kind; |
|
|
|
protected GeneratorTest(string name, GeneratorKind kind) |
|
{ |
|
this.name = name; |
|
this.kind = kind; |
|
} |
|
|
|
public override void Setup(Driver driver) |
|
{ |
|
var options = driver.Options; |
|
options.GeneratorKind = kind; |
|
options.OutputDir = Path.Combine(GetOutputDirectory(), "build", "gen", name); |
|
options.Quiet = true; |
|
options.GenerateDebugOutput = true; |
|
var testModule = options.AddModule(name); |
|
testModule.SharedLibraryName = $"{name}.Native"; |
|
|
|
Diagnostics.Message(""); |
|
Diagnostics.Message("Generating bindings for {0} ({1})", |
|
testModule.LibraryName, options.GeneratorKind.ToString()); |
|
|
|
if (Platform.IsMacOS) |
|
driver.ParserOptions.TargetTriple = Environment.Is64BitProcess ? |
|
"x86_64-apple-darwin" : "i686-apple-darwin"; |
|
|
|
var path = Path.GetFullPath(GetTestsDirectory(name)); |
|
testModule.IncludeDirs.Add(path); |
|
|
|
Diagnostics.Message("Looking for tests in: {0}", path); |
|
var files = Directory.EnumerateFiles(path, "*.h"); |
|
foreach (var file in files) |
|
testModule.Headers.Add(Path.GetFileName(file)); |
|
} |
|
|
|
public override void Preprocess(Driver driver, ASTContext ctx) |
|
{ |
|
} |
|
|
|
public override void Postprocess(Driver driver, ASTContext ctx) |
|
{ |
|
} |
|
|
|
public override void SetupPasses(Driver driver) |
|
{ |
|
} |
|
|
|
#region Helpers |
|
public static string GetTestsDirectory(string name) |
|
{ |
|
var directory = new DirectoryInfo( |
|
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)); |
|
|
|
while (directory != null) |
|
{ |
|
var path = Path.Combine(directory.FullName, "tests", name); |
|
|
|
if (Directory.Exists(path)) |
|
return path; |
|
|
|
path = Path.Combine(directory.FullName, "external", "CppSharp", "tests", name); |
|
|
|
if (Directory.Exists(path)) |
|
return path; |
|
|
|
directory = directory.Parent; |
|
} |
|
|
|
throw new Exception(string.Format( |
|
"Tests directory for project '{0}' was not found", name)); |
|
} |
|
|
|
static string GetOutputDirectory() |
|
{ |
|
string exePath = new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath; |
|
var directory = Directory.GetParent(exePath); |
|
|
|
while (directory != null) |
|
{ |
|
var path = Path.Combine(directory.FullName, "build"); |
|
|
|
if (Directory.Exists(path)) |
|
return directory.FullName; |
|
|
|
directory = directory.Parent; |
|
} |
|
|
|
throw new Exception("Could not find tests output directory"); |
|
} |
|
|
|
public void GenerateCode(Driver driver, List<GeneratorOutput> outputs) |
|
{ |
|
} |
|
#endregion |
|
} |
|
}
|
|
|