Makefile::AST - AST for (GNU) makefiles
The structure of this (GNU) makefile AST is designed based on GNU make's data base listing output produced by --print-data-base
.
This AST library provides the following classes:
The primary class for ASTs.
Provides interface for node adding and querying,
such as add_implicit_rule
,
apply_implicit_rules
,
add_explicit_rule
,
apply_explicit_rules
,
add_var
,
add_auto_var
,
get_var
,
as well as lots of other utility functions,
like method eval_var_value
for computing the ultimate values of makefile variables,
method enter_pad
and leave_pad
for local variable's scoping pad.
This is the base class for the rule nodes in the AST.
It has properties like normal_prereqs
,
order_prereqs
,
commands
,
and colon
.
This class represents the de-sugared form of simple rules and implicite rules after application.
It inherits from Makefile::AST::Rule::Base,
and adds new properties target
and other_targets
.
This class represents the implicit rule nodes in the AST.
It inherits from Makefile::AST::Rule::Base,
and adds new properties targets
,
match_anything
,
and is_terminal
.
This class encapsulates the file pattern matching (file names containing %
) and stem substitution algorithms.
It represents the makefile variable nodes in the AST,
including name
,
value
,
flavor
,
and origin
.
Used to encapsulate information regarding makefile rule commands (e.g.
command body,
command modifiers @
,
-
,
+
,
and etc.) as a whole.
Adding support for other flavors' makes into this AST library should make a huge amount of sense. The most interesting candiate is Microsoft's NMAKE.
For the very latest version of this script, check out the source from
http://github.com/agentzh/makefile-parser-pm.
There is anonymous access to all.
Zhang "agentzh" Yichun <agentzh@gmail.com>
Copyright (c) 2007-2008 by Zhang "agentzh" Yichun (agentzh).
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
Makefile::AST::Evaluator, Makefile::Parser::GmakeDB, makesimple, pgmake-db, Makefile::DOM.