File: build_settings_config.h

package info (click to toggle)
codelite 17.0.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 136,244 kB
  • sloc: cpp: 491,547; ansic: 280,393; php: 10,259; sh: 8,930; lisp: 7,664; vhdl: 6,518; python: 6,020; lex: 4,920; yacc: 3,123; perl: 2,385; javascript: 1,715; cs: 1,193; xml: 1,110; makefile: 804; cobol: 741; sql: 709; ruby: 620; f90: 566; ada: 534; asm: 464; fortran: 350; objc: 289; tcl: 258; java: 157; erlang: 61; pascal: 51; ml: 49; awk: 44; haskell: 36
file content (200 lines) | stat: -rw-r--r-- 6,123 bytes parent folder | download | duplicates (2)
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