1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
|
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//
// copyright : (C) 2008 by Eran Ifrah
// file name : build_settings_config.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 BUILD_CONFIG_SETTINGS_H
#define BUILD_CONFIG_SETTINGS_H
#include "JSON.h"
#include "build_system.h"
#include "builder.h"
#include "cl_config.h"
#include "codelite_exports.h"
#include "compiler.h"
#include "singleton.h"
#include "wx/filename.h"
#include "wx/string.h"
#include "wx/xml/xml.h"
#include <macros.h>
#include <map>
#include <vector>
#include <wxStringHash.h>
// Cookie class for the editor to provide reentrance operations
// on various methods (such as iteration)
class WXDLLIMPEXP_SDK BuildSettingsConfigCookie
{
public:
wxXmlNode* child;
wxXmlNode* parent;
public:
BuildSettingsConfigCookie()
: child(NULL)
, parent(NULL)
{
}
~BuildSettingsConfigCookie() {}
};
/**
* @class BuildSettingsConfig the build system configuration
* this class represents the content of the build_settings.xml configuration
* file
*/
class WXDLLIMPEXP_SDK BuildSettingsConfig
{
wxXmlDocument* m_doc;
wxFileName m_fileName;
wxString m_version;
std::unordered_map<wxString, CompilerPtr> m_compilers;
bool m_inTransaction = false;
protected:
wxXmlNode* GetCompilerNode(const wxString& name) const;
void DoUpdateCompilers();
bool SaveXmlFile();
public:
BuildSettingsConfig();
virtual ~BuildSettingsConfig();
/**
* @brief begin batch saving
* All calls to 'Save' will be ignored until Flush is called
*/
void BeginBatch();
/**
* @brief flush all changes to the disk
*/
void Flush();
/**
* @brief return a map for the available compilers and their global include paths
*/
std::unordered_map<wxString, wxArrayString> GetCompilersGlobalPaths() const;
/**
* Load the configuration file
* @param version XML version which to be loaded, any version different from this one, will cause
* codelite to override the user version
*/
bool Load(const wxString& version, const wxString& xmlFilePath = "");
/**
* @brief delete all compilers
*/
void DeleteAllCompilers(bool notify = true);
/**
* @brief return list of all compiler names
*/
wxArrayString GetAllCompilersNames() const;
/**
* @brief return vector with all compilers defined
* @param family the compiler family. Leave empty to get list of
* all compilers regardless their family
*/
CompilerPtrVec_t GetAllCompilers(const wxString& family = "") const;
/**
* @brief replace the current compilers list with a new one
*/
void SetCompilers(const std::vector<CompilerPtr>& compilers);
/**
* Set or update a given compiler using its name as the index
*/
void SetCompiler(CompilerPtr cmp);
/**
* @brief return the default compiler for a given family
*/
CompilerPtr GetDefaultCompiler(const wxString& compilerFamilty) const;
/**
* Find and return compiler by name
*/
CompilerPtr GetCompiler(const wxString& name) const;
/**
* Returns the first compiler found.
* For this enumeration function you must pass in a 'cookie' parameter which is opaque for the application but is
* necessary for the library to make these functions reentrant
* (i.e. allow more than one enumeration on one and the same object simultaneously).
*/
CompilerPtr GetFirstCompiler(BuildSettingsConfigCookie& cookie);
/**
* Returns the next compiler.
* For this enumeration function you must pass in a 'cookie' parameter which is opaque for the application but is
* necessary for the library to make these functions reentrant
* (i.e. allow more than one enumeration on one and the same object simultaneously).
*/
CompilerPtr GetNextCompiler(BuildSettingsConfigCookie& cookie);
/**
* check whether a compiler with a given name already exist
*/
bool IsCompilerExist(const wxString& name) const;
/**
* delete compiler
*/
void DeleteCompiler(const wxString& name);
/**
* Add build system
*/
void SetBuildSystem(BuilderConfigPtr bs);
/**
* get build system from configuration by name
*/
BuilderConfigPtr GetBuilderConfig(const wxString& name);
/**
* @brief save builder configurtation to the XML file
* @param builder
*/
void SaveBuilderConfig(BuilderPtr builder);
/*
* get name of current selected build system from configuration
*/
wxString GetSelectedBuildSystem();
/**
* @brief discard the current settings and reload the default build
* settings
*/
void RestoreDefaults();
};
class WXDLLIMPEXP_SDK BuildSettingsConfigST
{
public:
static BuildSettingsConfig* Get();
static void Free();
};
#endif // BUILD_CONFIG_SETTINGS_H
|