NAME
Makefile::AST - AST for (GNU) makefiles
DESCRIPTION
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:
- Makefile::AST
-
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 methodeval_var_value
for computing the ultimate values of makefile variables, methodenter_pad
andleave_pad
for local variable's scoping pad. - Makefile::AST::Rule::Base
-
This is the base class for the rule nodes in the AST. It has properties like
normal_prereqs
,order_prereqs
,commands
, andcolon
. - Makefile::AST::Rule
-
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
andother_targets
. - Makefile::AST::Rule::Implicit
-
This class represents the implicit rule nodes in the AST. It inherits from Makefile::AST::Rule::Base, and adds new properties
targets
,match_anything
, andis_terminal
. - Makefile::AST::StemMatch
-
This class encapsulates the file pattern matching (file names containing
%
) and stem substitution algorithms. - Makefile::AST::Variable
-
It represents the makefile variable nodes in the AST, including
name
,value
,flavor
, andorigin
. - Makefile::AST::Command
-
Used to encapsulate information regarding makefile rule commands (e.g. command body, command modifiers
@
,-
,+
, and etc.) as a whole.
LIMITATIONS AND TODO
Adding support for other flavors' makes into this AST libary should make a huge amount of sense. The most interesting candiate is Microsoft's NMAKE.
CODE REPOSITORY
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.
AUTHOR
Zhang "agentzh" Yichun <agentzh@gmail.com>
COPYRIGHT AND LICENSE
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.
SEE ALSO
Makefile::AST::Evaluator, Makefile::Parser::GmakeDB, makesimple, pgmake-db, Makefile::DOM.