/*
This file is part of hugin.
hugin is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
hugin is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with hugin. If not, see .
*/
/**
* @file Rule.h
* @brief
* Created on: May 25, 2010
* @author Florian Achleitner
*/
#ifndef RULE_H_
#define RULE_H_
#include "MakefileItem.h"
#include "Variable.h"
#include "VariableRef.h"
#include
namespace makefile
{
/**
* Represents a makefile rule, including Prerequisite and Command.
*
*/
class MAKEIMPEX Rule : public PrimaryMakefileItem
{
std::vector targets;
std::vector prerequisites;
std::vector commands;
public:
Rule()
{}
virtual ~Rule()
{}
virtual string toString();
/**
* Adds a target string.
* @param t
*/
void addTarget(const string& t)
{
targets.push_back(t);
}
/**
* Adds a Variable as a Target. A VariableRef is taken from the Variable and added.
* @param t
*/
void addTarget(Variable& t)
{
addTarget(t.getRef().toString());
}
void addTarget(Variable* t)
{
addTarget(t->getRef().toString());
}
/**
* Adds a string as a prerequisite.
* @param p
*/
void addPrereq(string p)
{
prerequisites.push_back(p);
}
/**
* Adds a Variable as a prerequisite. A VariableRef is taken from the Variable and added.
* @param p
*/
void addPrereq(Variable& p)
{
addPrereq(p.getRef().toString());
}
void addPrereq(Variable* p)
{
addPrereq(p->getRef().toString());
}
/** Adds an other rule as a prerequisite for this rule */
void addPrereq(Rule& r)
{
for(std::vector::iterator i = r.targets.begin(); i != r.targets.end(); i++)
{
addPrereq(*i);
}
};
void addPrereq(Rule* r)
{
addPrereq(*r);
};
/**
* Adds a string as a command to the Rule.
* @param c
*/
void addCommand(string c,bool doEcho=true,bool ignoreErrors=false)
{
string command;
if(!doEcho)
{
command="@";
};
if(ignoreErrors)
{
command.append("-");
};
command.append(c);
commands.push_back(command);
}
};
}
#endif /* RULE_H_ */