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 method eval_var_value for computing the ultimate values of makefile variables, method enter_pad and leave_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, and colon.

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 and other_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, and is_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, and origin.

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.