cbp2make
Makefile generation tool for Code::Blocks IDE
platforms.h
Go to the documentation of this file.
1 /*
2  cbp2make : Makefile generation tool for the Code::Blocks IDE
3  Copyright (C) 2010-2013 Mirai Computing (mirai.computing@gmail.com)
4 
5  This program is free software: you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation, either version 3 of the License, or
8  (at your option) any later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18 
19 //------------------------------------------------------------------------------
20 #ifndef PLATFORMS_H
21 #define PLATFORMS_H
22 //------------------------------------------------------------------------------
23 #include "stlstrings.h"
24 #include "cbhelper.h"
25 //------------------------------------------------------------------------------
26 
27 static const CString STR_UNIX = "Unix";
28 static const CString STR_WINDOWS = "Windows";
29 static const CString STR_MAC = "Mac";
30 
31 class TiXmlElement;
32 class CPlatformSet;
33 
34 class CPlatform
35 {
36  public:
37  enum OS_Type
38  {
44  };
45  private:
46  bool m_Active;
53  //CString m_Cmd_TestFile;
56  //CString m_Cmd_TestDir;
65  //
68  //CString m_;
69  public:
70  static CString Name(const OS_Type PlatformOS);
71  static OS_Type OS(CString& PlatformName);
72  bool& Active(void) { return m_Active; }
73  OS_Type OS(void) const { return m_OS_Type; }
74  CString Name(void);
75  CString& Cmd_Copy(void) { return m_Cmd_Copy; }
76  CString& Cmd_Move(void) { return m_Cmd_Move; }
77  CString& Cmd_Make(void) { return m_Cmd_Make; }
78  CString& Tool_Make(void) { return m_Tool_Make; }
79  //CString& Cmd_TestFile(void) { return m_Cmd_TestFile; }
82  //CString& Cmd_TestDir(void) { return m_Cmd_TestDir; }
83  CString& Cmd_MakeDir(void) { return m_Cmd_MakeDir; }
90  char Pd(void) const { return m_PathDelimiter; }
91  CString Pd(const CString& Path) const;
92  CString SpecialChars(void) const;
93  CString ProtectPath(const CString& Path, const int QuoteMode = QUOTE_AUTO);
94  CString Copy(const CString& Source, const CString& Destination) const;
95  CString Move(const CString& Source, const CString& Destination) const;
96  CString Make(const CString& Options, const CString& Path) const;
97  CString RemoveFile(const CString& Path) const;
98  CString ForceRemoveFile(const CString& Path) const;
99  CString MakeDir(const CString& Path) const;
100  CString TestMakeDir(const CString& Path) const;
101  CString ForceMakeDir(const CString& Path) const;
102  CString RemoveDir(const CString& Path) const;
103  CString PrintWorkDir(void) const;
104  CString EvalWorkDir(void) const;
105  CString ChangeDir(const CString& Path) const;
106  CString MakefileCmd(const CString& Command) const;
107  //
108  bool IsStaticLibraryExtension(const CString& Ext) const;
109  bool IsDynamicLibraryExtension(const CString& Ext) const;
110  //CString (void) const { return m_; }
111  private:
112  void Read(const TiXmlElement *Root, const CString& Name, CString& Value);
113  void Write(TiXmlElement *Root, const CString& Name, const CString& Value);
114  public:
115  void Assign(const CPlatform& Platform);
116  void Clear(void);
117  void Reset(const CPlatform::OS_Type OS);
118  void Read(const TiXmlElement *PlatformRoot);
119  void Write(TiXmlElement *PlatformRoot);
120  void Show(void);
121  CPlatform& operator =(const CPlatform& Platform);
122  public:
123  CPlatform(void);
124  CPlatform(const CPlatform& Platform);
125  ~CPlatform(void);
126 };
127 
129 {
130  private:
131  std::vector<CPlatform *> m_Platforms;
132  bool m_Locked;
133  public:
134  void Lock(void);
135  void Unlock(void);
136  void Clear(void);
137  size_t GetCount(void) const;
138  CPlatform *Platform(const size_t Index) const;
139  CPlatform *Find(const CPlatform::OS_Type OS);
140  void AddDefault(void);
141  //CPlatform *Add(const CPlatform::OS_Type OS);
142  //void Remove(const CPlatform::OS_Type OS);
143  void Read(const TiXmlElement *ConfigRoot);
144  void Write(TiXmlElement *ConfigRoot);
145  //bool Load(const CString& FileName);
146  //bool Save(const CString& FileName);
147  void Show(void);
148  public:
149  CPlatformSet(void);
150  ~CPlatformSet(void);
151 };
152 
153 #endif
154 //------------------------------------------------------------------------------
CString & Cmd_MakeDir(void)
Directory creation command template.
Definition: platforms.h:83
CString ForceRemoveFile(const CString &Path) const
Generates forced file removing command from template.
Definition: platforms.cpp:173
CStringList m_DynamicLibraryExtensions
Definition: platforms.h:67
Number of OS types.
Definition: platforms.h:43
CString Copy(const CString &Source, const CString &Destination) const
Generates file copying command from template.
Definition: platforms.cpp:153
bool IsDynamicLibraryExtension(const CString &Ext) const
Definition: platforms.cpp:224
CString Make(const CString &Options, const CString &Path) const
Generates command to invoke make tool from template.
Definition: platforms.cpp:163
char m_PathDelimiter
File system path delimiter (separator).
Definition: platforms.h:64
std::vector< CPlatform * > m_Platforms
A collection of known platfroms.
Definition: platforms.h:131
void Reset(const CPlatform::OS_Type OS)
Resets the platform to default settings for specified OS.
Definition: platforms.cpp:229
CString RemoveDir(const CString &Path) const
Generates directory removing command from template.
Definition: platforms.cpp:193
CString MakefileCmd(const CString &Command) const
Converts raw command text to makefile-compatible form.
Definition: platforms.cpp:213
~CPlatform(void)
Definition: platforms.cpp:38
void Write(TiXmlElement *Root, const CString &Name, const CString &Value)
Writes template of command Name to Value from an XML document.
Definition: platforms.cpp:392
CString m_Cmd_Copy
File copying command template.
Definition: platforms.h:49
CString m_Cmd_Make
Make tool invocation template.
Definition: platforms.h:51
Type for MacOS.
Definition: platforms.h:42
Definition: stlstrings.h:98
CString & Cmd_ChangeDir(void)
Current directory changing command template.
Definition: platforms.h:89
CString TestMakeDir(const CString &Path) const
Generates conditional (by existence) directory creation command from template.
Definition: platforms.cpp:183
CStringList m_StaticLibraryExtensions
Definition: platforms.h:66
CString m_Cmd_ForceMakeDir
Forced directory creation (including parent directories) command template.
Definition: platforms.h:59
bool m_Locked
A lock for preventing from accidental changes during makefile generation.
Definition: platforms.h:132
void Read(const TiXmlElement *Root, const CString &Name, CString &Value)
Reads template of command Name to Value from an XML document.
Definition: platforms.cpp:310
CString & Cmd_RemoveFile(void)
File removing (deleting) command template.
Definition: platforms.h:80
Manages a set of platforms.
Definition: platforms.h:128
CString m_Cmd_MakeDir
Directory creation command template.
Definition: platforms.h:57
CString Move(const CString &Source, const CString &Destination) const
Generates file moving command from template.
Definition: platforms.cpp:158
CString ForceMakeDir(const CString &Path) const
Generates forced directory creation command from template.
Definition: platforms.cpp:188
CString Name(void)
Returns the name of this platform.
Definition: platforms.cpp:111
CString m_Cmd_RemoveFile
File removing (deleting) command template.
Definition: platforms.h:54
CString & Cmd_Make(void)
Make tool invocation template.
Definition: platforms.h:77
CString m_Tool_Make
File name of the make tool.
Definition: platforms.h:52
CString & Cmd_Copy(void)
File copying command template.
Definition: platforms.h:75
CString m_Cmd_RemoveDir
Directory removing command template.
Definition: platforms.h:60
CPlatform(void)
Creates platform description.
Definition: platforms.cpp:28
Type for OS Windows.
Definition: platforms.h:41
Definition: stlstrings.h:32
char Pd(void) const
Returns path delimiter (separator) for this platform.
Definition: platforms.h:90
Type for undefined or unknown OS.
Definition: platforms.h:39
CString m_Cmd_ChangeDir
Current directory changing command template.
Definition: platforms.h:63
CString m_Cmd_PrintWorkDir
Template of command to print working directory.
Definition: platforms.h:61
Type for UNIX-like OS.
Definition: platforms.h:40
OS_Type OS(void) const
Type of operating system for this platform.
Definition: platforms.h:73
CString & Tool_Make(void)
File name of the &#39;make&#39; tool.
Definition: platforms.h:78
Auxiliary functions for strings processing.
void Assign(const CPlatform &Platform)
Copies another platform to this platform.
Definition: platforms.cpp:66
CString m_Cmd_TestMakeDir
Directory existence checking and creation command template.
Definition: platforms.h:58
CString EvalWorkDir(void) const
Generates command to evaluate working directory value from template.
Definition: platforms.cpp:203
static const CString STR_UNIX
UNIX platform name for configuration files.
Definition: platforms.h:27
static const CString STR_MAC
Mac platform name for configuration files.
Definition: platforms.h:29
CString ChangeDir(const CString &Path) const
Generates current directory changing command from template.
Definition: platforms.cpp:208
static const CString STR_WINDOWS
Windows platform name for configuration files.
Definition: platforms.h:28
OS_Type m_OS_Type
Type of operating system for this platform.
Definition: platforms.h:47
CString PrintWorkDir(void) const
Generates command to print current working directory from template.
Definition: platforms.cpp:198
CString & Cmd_EvalWorkDir(void)
Template of command that evaluates working directory to assign it to a variable.
Definition: platforms.h:88
CString m_Cmd_Null
Name of the NULL device (/dev/null etc).
Definition: platforms.h:48
static const int QUOTE_AUTO
Definition: cbhelper.h:30
CString ProtectPath(const CString &Path, const int QuoteMode=QUOTE_AUTO)
Definition: platforms.cpp:140
Contains platform-specific settings and generates commands from templates.
Definition: platforms.h:34
OS_Type
Type of Operating System for a platform.
Definition: platforms.h:37
CString & Cmd_TestMakeDir(void)
Directory existence checking and creation command template.
Definition: platforms.h:84
CString m_Cmd_EvalWorkDir
Template of command that evaluates working directory to assign it to a variable.
Definition: platforms.h:62
void Show(void)
Prints the platform settings to the standard output.
Definition: platforms.cpp:422
bool IsStaticLibraryExtension(const CString &Ext) const
Definition: platforms.cpp:219
CString m_Cmd_ForceRemoveFile
Forced file removing command template.
Definition: platforms.h:55
void Clear(void)
Resets the platform to the initial state.
Definition: platforms.cpp:43
CString m_Cmd_Move
File moving command template.
Definition: platforms.h:50
bool & Active(void)
Indicates that this platform is used by a build target.
Definition: platforms.h:72
CString & Cmd_RemoveDir(void)
Directory removing command template.
Definition: platforms.h:86
CString & Cmd_ForceRemoveFile(void)
Forced file removing command template.
Definition: platforms.h:81
CString MakeDir(const CString &Path) const
Generates directory creation command from template.
Definition: platforms.cpp:178
CString & Cmd_PrintWorkDir(void)
Template of command to print working directory.
Definition: platforms.h:87
CString & Cmd_Move(void)
File moving command template.
Definition: platforms.h:76
CString SpecialChars(void) const
Definition: platforms.cpp:128
bool m_Active
Indicates that this platform is used by a build target.
Definition: platforms.h:46
CString RemoveFile(const CString &Path) const
Generates file removing command from template.
Definition: platforms.cpp:168
CString & Cmd_ForceMakeDir(void)
Forced directory creation (including parent directories) command template.
Definition: platforms.h:85
CPlatform & operator=(const CPlatform &Platform)
Copies another platform to this platform.
Definition: platforms.cpp:441