private void CollectSymbols(string outputDir, string library) { using (var parserOptions = new ParserOptions()) { parserOptions.AddLibraryDirs(outputDir); var output = GetOutputFile(library); parserOptions.LibraryFile = output; using (var parserResult = Parser.ClangParser.ParseLibrary(parserOptions)) { if (parserResult.Kind == ParserResultKind.Success) { var nativeLibrary = ClangParser.ConvertLibrary(parserResult.Library); lock (@lock) { Context.Symbols.Libraries.Add(nativeLibrary); Context.Symbols.IndexSymbols(); } } else { Diagnostics.Error($"Parsing of {Path.Combine(outputDir, output)} failed."); } } } }
private void CollectSymbols(string outputDir, string symbols, string errorMessage) { using (var parserOptions = new ParserOptions()) { parserOptions.AddLibraryDirs(outputDir); var output = Path.GetFileName($@"{(Platform.IsWindows ? string.Empty : "lib")}{symbols}.{ (Platform.IsMacOS ? "dylib" : Platform.IsWindows ? "dll" : "so")}"); if (!File.Exists(Path.Combine(outputDir, output))) { Diagnostics.Error(errorMessage); return; } parserOptions.LibraryFile = output; using (var parserResult = Parser.ClangParser.ParseLibrary(parserOptions)) { if (parserResult.Kind == ParserResultKind.Success) { var nativeLibrary = ClangParser.ConvertLibrary(parserResult.Library); lock (@lock) { Context.Symbols.Libraries.Add(nativeLibrary); Context.Symbols.IndexSymbols(); } } else { Diagnostics.Error($"Parsing of {Path.Combine(outputDir, output)} failed."); } } } }
public override bool VisitASTContext(ASTContext context) { string error; const string qtVersionVariable = "QT_VERSION"; var qtVersion = ProcessHelper.Run(this.qmake, string.Format("-query {0}", qtVersionVariable), out error); var qtVersionFile = Path.Combine(this.Context.Options.OutputDir, qtVersionVariable); var qtVersionFileInfo = new FileInfo(qtVersionFile); var text = string.Empty; if (!qtVersionFileInfo.Exists || (text = File.ReadAllText(qtVersionFile)) != qtVersion) { File.WriteAllText(qtVersionFile, qtVersion); qtVersionFileInfo = new FileInfo(qtVersionFile); } var dir = Platform.IsMacOS ? this.Context.Options.OutputDir : Path.Combine(this.Context.Options.OutputDir, "release"); foreach (var module in this.Context.Options.Modules) { var inlines = Path.GetFileName(string.Format("{0}{1}.{2}", Platform.IsWindows ? string.Empty : "lib", module.InlinesLibraryName, Platform.IsMacOS ? "dylib" : "dll")); var libFile = Path.Combine(dir, inlines); var inlinesFileInfo = new FileInfo(libFile); if (!inlinesFileInfo.Exists || qtVersionFileInfo.LastWriteTimeUtc > inlinesFileInfo.LastWriteTimeUtc) { if (!this.CompileInlines(module)) { continue; } } var parserOptions = new ParserOptions(); parserOptions.AddLibraryDirs(dir); parserOptions.LibraryFile = inlines; using (var parserResult = CppSharp.Parser.ClangParser.ParseLibrary(parserOptions)) { if (parserResult.Kind == ParserResultKind.Success) { var nativeLibrary = CppSharp.ClangParser.ConvertLibrary(parserResult.Library); this.Context.Symbols.Libraries.Add(nativeLibrary); this.Context.Symbols.IndexSymbols(); parserResult.Library.Dispose(); } } } return(true); }
private static IList <string> GetSymbols(string library) { var parserOptions = new ParserOptions(); parserOptions.AddLibraryDirs(GeneratorTest.GetTestsDirectory("Native")); var driverOptions = new DriverOptions(); var module = driverOptions.AddModule("Test"); module.Libraries.Add(library); var driver = new Driver(driverOptions) { ParserOptions = parserOptions }; driver.Setup(); Assert.IsTrue(driver.ParseLibraries()); var symbols = driver.Context.Symbols.Libraries[0].Symbols; return(symbols); }
private static IList <string> GetDependencies(string library) { var parserOptions = new ParserOptions(); parserOptions.AddLibraryDirs(GeneratorTest.GetTestsDirectory("Native")); var driverOptions = new DriverOptions(); driverOptions.Libraries.Add(library); var driver = new Driver(driverOptions) { ParserOptions = parserOptions }; foreach (var module in driver.Options.Modules) { module.LibraryName = "Test"; } driver.Setup(); Assert.IsTrue(driver.ParseLibraries()); var dependencies = driver.Context.Symbols.Libraries[0].Dependencies; return(dependencies); }