Exemple #1
0
 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.");
             }
         }
     }
 }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }