94 parser = argparse.ArgumentParser(description=__doc__)
95
96 parser.add_argument('path', metavar='DIRECTORY', nargs='?', default='./',
97 help='root of source tree [%(default)s]')
98
99 parser.add_argument('-o', '--output', metavar='FILE', type=str,
100 help='output file for DOT graph')
101
102 parser.add_argument('-p', '--packages', metavar='FILE', type=str,
103 help='path to packages.txt file [from release]')
104
105 parser.add_argument('-a', '--all', action='store_true',
106 help='include non-athena dependencies')
107
108 parser.add_argument('-v', '--verbose', action='store_true',
109 help='print parse errors')
110
111 args = parser.parse_args()
112
113 packages = None
114 if not args.all:
115 package_file = args.packages or os.path.join(os.environ['AtlasArea'],'InstallArea',
116 os.environ['BINARY_TAG'],'packages.txt')
117
118 try:
119 with open(package_file) as f:
120 packages =
set(line.rstrip().
split(
'/')[-1]
for line
in f
if not line.startswith(
'#'))
121 except FileNotFoundError:
122 parser.error(f"Cannot read '{package_file}'. Specify via '-p/--packages' or run with '-a/--all'")
123
124
125 filterFnc = None if args.all else lambda p : p in packages
126
127
128 g = make_graph(walk_tree(args.path, args.verbose, filterFnc), filterFnc)
129
130 if args.output:
131 g.write(args.output)
132 else:
134
std::vector< std::string > split(const std::string &s, const std::string &t=":")