2 // Main.cs: Main program file of command line utility.
5 // Radek Doulik (rodo@xamarin.com)
7 // Copyright 2015 Xamarin Inc (http://www.xamarin.com).
11 using LinkerAnalyzer.Core;
13 namespace LinkerAnalyzer
15 static class MainClass
17 static void Main (string[] args)
19 bool showUsage = true;
20 bool showAllDeps = false;
21 bool showTypeDeps = false;
22 string typeName = null;
23 bool showRawDeps = false;
24 string rawName = null;
25 bool showRoots = false;
26 bool showSpaceUsage = false;
27 bool showStat = false;
28 bool showTypes = false;
29 bool reduceToTree = false;
32 var optionsParser = new OptionSet () {
33 { "a|alldeps", "show all dependencies", v => { showAllDeps = v != null; } },
34 { "h|help", "show this message and exit.", v => showUsage = v != null },
35 { "r|rawdeps=", "show raw vertex dependencies. Raw vertex VALUE is in the raw format written by linker to the dependency XML file. VALUE can be regular expression", v => { showRawDeps = v != null; rawName = v; } },
36 { "roots", "show root dependencies.", v => showRoots = v != null },
37 { "stat", "show statistic of loaded dependencies.", v => showStat = v != null },
38 { "tree", "reduce the dependency graph to the tree.", v => reduceToTree = v != null },
39 { "types", "show all types dependencies.", v => showTypes = v != null },
40 { "t|typedeps=", "show type dependencies. The VALUE can be regular expression", v => { showTypeDeps = v != null; typeName = v; } },
41 //{ "u|spaceusage", "show space analysis.", v => showSpaceUsage = v != null },
42 { "v|verbose", "be more verbose. Enables stat and roots options.", v => verbose = v != null },
45 if (args.Length > 0) {
47 optionsParser.Parse (args);
51 Console.WriteLine ("Usage:\n\n\tlinkeranalyzer [Options] <linker-dependency-file.xml.gz>\n\nOptions:\n");
52 optionsParser.WriteOptionDescriptions (Console.Out);
57 string dependencyFile = args [args.Length - 1];
59 ConsoleDependencyGraph deps = new ConsoleDependencyGraph () { Tree = reduceToTree };
60 deps.Load (dependencyFile);
63 // SpaceAnalyzer sa = new SpaceAnalyzer (System.IO.Path.GetDirectoryName (dependencyFile));
64 // sa.LoadAssemblies (verbose);
73 deps.ShowStat (verbose);
77 deps.ShowRawDependencies (rawName);
79 deps.ShowTypeDependencies (typeName);
81 deps.ShowAllDependencies ();
83 deps.ShowTypesDependencies ();