#ifndef COMPILEOPTIONSBASE_H
#define COMPILEOPTIONSBASE_H

#include "settings.h"

/** Build configuration enum */
enum BuildConfiguration
{
	bcFromCompiler = 0, /**< Use compiler's build configuration */
	bcRelease, /**< "Release" build configuration */
	bcDebug /**< "Debug" build configuration */
};

// Forward decls
class CustomVars;

/**
  * This is a base class for all classes needing compilation parameters. It
  * offers functions to get/set the following:\n
  * \li Compiler options
  * \li Linker options
  * \li Compiler include dirs
  * \li Resource compiler include dirs
  * \li Linker include dirs
  * \li Custom commands to be executed before/after build
  * \li The settings modification status
  * \n\n
  * These settings are used by the compiler plugins to construct the necessary
  * compilation commands.
  */
class DLLIMPORT CompileOptionsBase
{
	public:
		CompileOptionsBase();
		CompileOptionsBase(const CompileOptionsBase& other);
		virtual ~CompileOptionsBase();

		virtual void SetBuildConfiguration(const BuildConfiguration& bc);
		virtual const BuildConfiguration& GetBuildConfiguration();
		virtual void SetLinkerOptions(const wxArrayString& linkerOpts);
		virtual const wxArrayString& GetLinkerOptions();
		virtual void SetLinkLibs(const wxArrayString& linkLibs);
		virtual const wxArrayString& GetLinkLibs();
		virtual void SetCompilerOptions(const wxArrayString& compilerOpts);
		virtual const wxArrayString& GetCompilerOptions();
		virtual void SetIncludeDirs(const wxArrayString& includeDirs);
		virtual const wxArrayString& GetIncludeDirs();
		virtual void SetResourceIncludeDirs(const wxArrayString& resIncludeDirs);
		virtual const wxArrayString& GetResourceIncludeDirs();
		virtual void SetLibDirs(const wxArrayString& libDirs);
		virtual const wxArrayString& GetLibDirs();
		virtual void SetCommandsBeforeBuild(const wxArrayString& commands);
		virtual const wxArrayString& GetCommandsBeforeBuild();
		virtual void SetCommandsAfterBuild(const wxArrayString& commands);
		virtual const wxArrayString& GetCommandsAfterBuild();
		virtual bool GetModified();
		virtual void SetModified(bool modified);
        virtual void AddLinkerOption(const wxString& option);
        virtual void AddLinkLib(const wxString& lib);
        virtual void AddCompilerOption(const wxString& option);
        virtual void AddIncludeDir(const wxString& option);
        virtual void AddResourceIncludeDir(const wxString& option);
        virtual void AddLibDir(const wxString& option);
		virtual void AddCommandsBeforeBuild(const wxString& command);
		virtual void AddCommandsAfterBuild(const wxString& command);
		virtual bool GetCpp();
		virtual void SetCpp(bool cpp);
		virtual bool GetAlwaysRunPreBuildSteps();
		virtual bool GetAlwaysRunPostBuildSteps();
		virtual void SetAlwaysRunPreBuildSteps(bool always);
		virtual void SetAlwaysRunPostBuildSteps(bool always);
        virtual void SetCustomVars(const CustomVars& vars); ///< Set the target's custom variables
        virtual CustomVars& GetCustomVars(); ///< Read the target's custom variables
	protected:
		BuildConfiguration m_BuildConfiguration;
		wxArrayString m_LinkerOptions;
		wxArrayString m_LinkLibs;
		wxArrayString m_CompilerOptions;
		wxArrayString m_IncludeDirs;
		wxArrayString m_ResIncludeDirs;
		wxArrayString m_LibDirs;
		wxArrayString m_CmdsBefore;
		wxArrayString m_CmdsAfter;
		bool m_Modified;
		bool m_Cpp;
		bool m_AlwaysRunPreCmds;
		bool m_AlwaysRunPostCmds;
        CustomVars* m_pCustomVars;
	private:
};

#endif // COMPILEOPTIONSBASE_H



syntax highlighted by Code2HTML, v. 0.9.1