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 |