//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//
// copyright : (C) 2008 by Eran Ifrah
// file name : builder.h
//
// -------------------------------------------------------------------------
// A
// _____ _ _ _ _
// / __ \ | | | | (_) |
// | / \/ ___ __| | ___| | _| |_ ___
// | | / _ \ / _ |/ _ \ | | | __/ _ )
// | \__/\ (_) | (_| | __/ |___| | || __/
// \____/\___/ \__,_|\___\_____/_|\__\___|
//
// F i l e
//
// This program 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.
//
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
#ifndef BUILDER_H
#define BUILDER_H
#include "wx/string.h"
#include "smart_ptr.h"
#include "wx/event.h"
/**
* \ingroup SDK
* this class defines the interface of a build system
*
* \version 1.0
* first version
*
* \date 05-19-2007
*
* \author Eran
*/
class Builder {
protected:
wxString m_name;
wxString m_buildTool;
wxString m_buildToolOptions;
wxString m_buildToolJobs;
wxString GetBuildToolFromConfig() const;
wxString GetBuildToolOptionsFromConfig() const;
wxString GetBuildToolJobsFromConfig() const;
public:
Builder(const wxString &name, const wxString &buildTool, const wxString &buildToolOptions) ;
virtual ~Builder();
void SetBuildTool(const wxString &buildTool) { m_buildTool = buildTool; }
void SetBuildToolOptions(const wxString &buildToolOptions) { m_buildToolOptions = buildToolOptions; }
void SetBuildToolJobs(const wxString &buildToolJobs) { m_buildToolJobs = buildToolJobs; }
/**
* Normalize the configuration name, this is done by removing any trailing and leading
* spaces from the string, and replacing any space character with underscore.
*/
static wxString NormalizeConfigName(const wxString &confgName);
/**
* \return the builder name
*/
const wxString &GetName() const { return m_name; }
/**
* \return the build tool assoicated with this builder
*/
wxString GetBuildToolCommand(bool isCommandlineCommand) const;
/**
* return the build tool name
*/
wxString GetBuildToolName() const;
/**
* return the build tool options
*/
wxString GetBuildToolOptions() const;
/**
* return the build tool jobs
*/
wxString GetBuildToolJobs() const;
/**
* Export the build system specific file (e.g. GNU makefile, Ant file etc)
* to allow users to invoke them manualy from the command line
* \param project project to export.
* \param errMsg output
* \return true on success, false otherwise.
*/
virtual bool Export(const wxString &project, const wxString &confToBuild, bool isProjectOnly, bool force, wxString &errMsg) = 0;
/**
* Return the command that should be executed for performing the clean
* task
*/
virtual wxString GetCleanCommand(const wxString &project, const wxString &confToBuild) = 0;
/**
* Return the command that should be executed for performing the build
* task for a given project
*/
virtual wxString GetBuildCommand(const wxString &project, const wxString &confToBuild) = 0;
//-----------------------------------------------------------------
// Project Only API
//-----------------------------------------------------------------
/**
* Return the command that should be executed for performing the clean
* task - for the project only (excluding dependencies)
*/
virtual wxString GetPOCleanCommand(const wxString &project, const wxString &confToBuild) = 0;
/**
* Return the command that should be executed for performing the build
* task for a given project - for the project only (excluding dependencies)
*/
virtual wxString GetPOBuildCommand(const wxString &project, const wxString &confToBuild) = 0;
/**
* \brief create a command to execute for compiling single source file
* \param project
* \param fileName
* \param errMsg [output]
* \return the command
*/
virtual wxString GetSingleFileCmd(const wxString &project, const wxString &confToBuild, const wxString &fileName, wxString &errMsg) = 0;
/**
* \brief create a command to execute for preprocessing single source file
* \param project
* \param fileName
* \param errMsg [output]
* \return the command
*/
virtual wxString GetPreprocessFileCmd(const wxString &project, const wxString &confToBuild, const wxString &fileName, wxString &errMsg) = 0;
};
typedef SmartPtr<Builder> BuilderPtr;
#endif // BUILDER_H