|
Makefile::GraphViz - Plot the Detailed Structure of Makefiles Using GraphViz |
Makefile::GraphViz - Plot the Detailed Structure of Makefiles Using GraphViz
use Makefile::GraphViz;
$parser = Makefile::GraphViz->new;
$parser->parse('Makefile');
# plot the tree rooted at the install target in Makefile:
$gv = $parser->plot('install'); # A GraphViz object returned.
$gv->as_png('install.png');
# plot the tree rooted at the default target in Makefile:
$gv = $parser->plot;
$gv->as_png('default.png');
# plot the forest consists of all the targets in Makefile:
$gv = $parser->plot_all;
$gv->as_png('default.png');
# you can also invoke all the methods inherited from the Makefile::Parser class: @targets = $parser->targets;
This module uses the Makefile::Parser manpage to render user's Makefiles via the amazing the GraphViz manpage module. Before I decided to write this thing, there had been already a CPAN module named the GraphViz::Makefile manpage which did the same thing. However, the pictures generated by the GraphViz::Makefile manpage is oversimplified in my opinion, So a much complex one is still needed.
IMPORTANT! This stuff is highly experimental and is currently at ALPHA stage, so production use is strongly discouraged. Anyway, I have the plan to improve this stuff unfailingly.
This class is a subclass inherited from the Makefile::Parser manpage. So all the methods (and hence all the functionalities) provided by the Makefile::Parser manpage are accessable here. Additionally this class also provides some more methods on its own right.
The argument can both be the target's name and a Makefile::Target object. If the given target can't be found in Makefile, the target will be plotted separately.
This method also accepts several options.
$gv = $parser->plot(undef, normal_nodes => ['mytar']);
$gv = $parser->plot(
'cmintester',
exclude => [qw(
all hex2bin.exe exe2hex.pl bin2asm.pl
asm2ast.pl ast2hex.pl cod2ast.pl
)],
end_with => [qw(pat_cover.ast pat_cover)],
normal_nodes => ['pat_cover.ast'],
vir_nodes => ['pat_cover'],
trim_mode => 0,
);
$gv = $parser->plot(
'install',
edge_style => {
style => 'dotted',
color => 'seagreen',
},
);
Here is an example:
$gv = $parser->plot(
'cmintester',
end_with => [qw(pat_cover.ast pat_cover)],
);
$parser->plot(
'clean',
exclude=>[qw(foo.exe foo.pl)]
)->as_png('clean.png');
$gv = GraphViz->new(width => 30, height => 20,
pagewidth => 8.5, pageheight => 11);
$parser->plot('install', gv => $gv);
print $gv->as_text;
$parser->plot(
'install',
init_args => {
width => 30, height => 20,
pagewidth => 8.5, pageheight => 11,
},
)->as_png('a.png');
$gv = $parser->plot(
'install',
normal_node_style => {
shape => 'circle',
style => 'filled',
fillcolor => 'red',
},
);
$gv = $parser->plot(
'install',
virtual_node_style => {
shape => 'box',
style => 'filled',
fillcolor => 'blue',
},
);
By default, virtual nodes are yellow rectangles with no border.
None by default.
Browse http://search.cpan.org/src/AGENT/Makefile-GraphViz-0.03/samples.html for some sample output graphs.
Internal functions should not be used directly.
I use the Devel::Cover manpage to test the code coverage of my tests, below is the the Devel::Cover manpage report on this module test suite.
---------------------------- ------ ------ ------ ------ ------ ------ ------
File stmt bran cond sub pod time total
---------------------------- ------ ------ ------ ------ ------ ------ ------
.../lib/Makefile/GraphViz.pm 100.0 90.9 69.0 100.0 100.0 100.0 90.9
Total 100.0 90.9 69.0 100.0 100.0 100.0 90.9
---------------------------- ------ ------ ------ ------ ------ ------ ------
Please report bugs or send wish-list to http://rt.cpan.org/NoAuth/Bugs.html.
gvmake, the GraphViz manpage, the Makefile::Parser manpage.
Agent Zhang, <agent2002@126.com>
Copyright (C) 2005 Agent Zhang.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
|
Makefile::GraphViz - Plot the Detailed Structure of Makefiles Using GraphViz |