-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathcpp_dependency_graph
executable file
·98 lines (80 loc) · 4.32 KB
/
cpp_dependency_graph
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/usr/bin/env ruby
# frozen_string_literal: true
#--
# Copyright (c) 2018 Shreyas Balakrishna
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#++
require 'docopt'
require 'cpp_dependency_graph'
# require 'ruby-prof'
include CppDependencyGraph
# RubyProf.start
doc = <<DOCOPT
Cpp Dependency Graph
Usage:
cpp_dependency_graph visualise_component --root_dir <argument> --component <component> [--output_file <file>] [--output_format <format>]
cpp_dependency_graph visualise_project --root_dir <argument> [--output_file <file>] [--output_format <format>]
cpp_dependency_graph visualise_component_includes --root_dir <argument> --component <component> [--output_file <file>] [--output_format <format>]
cpp_dependency_graph visualise_header_includes --root_dir <argument> --header <header> [--output_file <file>] [--output_format <format>]
cpp_dependency_graph visualise_project_includes --root_dir <argument> [--output_file <file>] [--output_format <format>]
cpp_dependency_graph visualise_components --root_dir <argument> [--output_file <file>] [--output_format <format>]
cpp_dependency_graph visualise_cyclic_deps --root_dir <argument> [--component <component>] [--output_file <file>] [--output_format <format>]
cpp_dependency_graph list_components --root_dir <argument>
cpp_dependency_graph -h | --help | -v | --version
Options:
-h --help show this help message and exit
-v --version show version and exit
-r --root_dir dir top level root directory of C/C++ project
-o --output_file file name of output file to be generated [default: deps.html]
-f --output_format format format of output file (svg, html, graphml, json) [default: html]
--component component component generate visualisation for (case sensitive!)
--header file header file to generate visualisation for (case sensitive!)
DOCOPT
begin
args = Docopt.docopt(doc)
if args['--version']
puts VERSION
Kernel.exit(0)
end
project_dir = args['--root_dir'].tr('\\', '/')
unless File.directory?(project_dir)
puts('Not a valid project source directory')
Kernel.exit(1)
end
if args['visualise_component']
generate_component_graph(project_dir, args['--component'], args['--output_format'], args['--output_file'])
elsif args['visualise_project']
generate_project_graph(project_dir, args['--output_format'], args['--output_file'])
elsif args['visualise_component_includes']
generate_component_include_graph(project_dir, args['--component'], args['--output_format'], args['--output_file'])
elsif args['visualise_header_includes']
generate_file_include_graph(project_dir, args['--header'], args['--output_format'], args['--output_file'])
elsif args['visualise_project_includes']
generate_project_include_graph(project_dir, args['--output_format'], args['--output_file'])
elsif args['visualise_components']
generate_enclosure_diagram(project_dir, args['--output_file'])
elsif args['visualise_cyclic_deps']
generate_cyclic_dependencies(project_dir, args['--output_format'], args['--output_file'])
elsif args['list_components']
list_components(project_dir)
end
rescue Docopt::Exit => e
puts e.message
end
# result = RubyProf.stop
# printer = RubyProf::CallTreePrinter.new(result)
# printer.print(path: '.', profile: 'cpp_dependency_graph')