1 /*
2 * This file is part of the Code::Blocks IDE and licensed under the GNU Lesser General Public License, version 3
3 * http://www.gnu.org/licenses/lgpl-3.0.html
4 *
5 * $Revision: 11884 $
6 * $Id: projectbuildtarget.cpp 11884 2019-10-26 09:11:35Z fuscated $
7 * $HeadURL: svn://svn.code.sf.net/p/codeblocks/code/branches/release-20.xx/src/sdk/projectbuildtarget.cpp $
8 */
9
10 #include "sdk_precomp.h"
11
12 #ifndef CB_PRECOMP
13 #include "projectbuildtarget.h" // class's header file
14 #include "cbproject.h"
15 #include "manager.h"
16 #include "projectmanager.h"
17 #include "macrosmanager.h"
18 #include "globals.h"
19 #endif
20
21
22
23 // class constructor
ProjectBuildTarget(cbProject * parentProject)24 ProjectBuildTarget::ProjectBuildTarget(cbProject* parentProject)
25 : m_Project(parentProject),
26 m_FileArray(ProjectFile::CompareProjectFiles)
27 {
28 m_BuildWithAll = false;
29 m_CreateStaticLib = true;
30 m_CreateDefFile = true;
31 m_UseConsoleRunner = true;
32 m_FileArray.Clear();
33 }
34
ProjectBuildTarget(const ProjectBuildTarget & bt,cbProject * parentProject)35 ProjectBuildTarget::ProjectBuildTarget(const ProjectBuildTarget &bt, cbProject* parentProject) :
36 CompileTargetBase(bt),
37 m_Project(parentProject),
38 m_ExternalDeps(bt.m_ExternalDeps),
39 m_AdditionalOutputFiles(bt.m_AdditionalOutputFiles),
40 m_FileArray(ProjectFile::CompareProjectFiles),
41 m_BuildWithAll(bt.m_BuildWithAll),
42 m_CreateStaticLib(bt.m_CreateStaticLib),
43 m_CreateDefFile(bt.m_CreateDefFile),
44 m_UseConsoleRunner(bt.m_UseConsoleRunner)
45 {
46 }
47
48 // class destructor
~ProjectBuildTarget()49 ProjectBuildTarget::~ProjectBuildTarget()
50 {
51 }
52
GetParentProject()53 cbProject* ProjectBuildTarget::GetParentProject()
54 {
55 return m_Project;
56 }
57
GetParentProject() const58 const cbProject* ProjectBuildTarget::GetParentProject() const
59 {
60 return m_Project;
61 }
62
GetFullTitle() const63 wxString ProjectBuildTarget::GetFullTitle() const
64 {
65 return m_Project->GetTitle() + _T(" - ") + GetTitle();
66 }
67
GetExternalDeps() const68 const wxString & ProjectBuildTarget::GetExternalDeps() const
69 {
70 return m_ExternalDeps;
71 }
72
SetExternalDeps(const wxString & deps)73 void ProjectBuildTarget::SetExternalDeps(const wxString& deps)
74 {
75 if (m_ExternalDeps != deps)
76 {
77 m_ExternalDeps = deps;
78 SetModified(true);
79 }
80 }
81
GetAdditionalOutputFiles() const82 const wxString & ProjectBuildTarget::GetAdditionalOutputFiles() const
83 {
84 return m_AdditionalOutputFiles;
85 }
86
SetAdditionalOutputFiles(const wxString & files)87 void ProjectBuildTarget::SetAdditionalOutputFiles(const wxString& files)
88 {
89 if (m_AdditionalOutputFiles != files)
90 {
91 m_AdditionalOutputFiles = files;
92 SetModified(true);
93 }
94 }
95
GetIncludeInTargetAll() const96 bool ProjectBuildTarget::GetIncludeInTargetAll() const
97 {
98 return m_BuildWithAll;
99 }
100
SetIncludeInTargetAll(bool buildIt)101 void ProjectBuildTarget::SetIncludeInTargetAll(bool buildIt)
102 {
103 if (m_BuildWithAll != buildIt)
104 {
105 m_BuildWithAll = buildIt;
106 SetModified(true);
107 }
108 }
109
GetCreateDefFile() const110 bool ProjectBuildTarget::GetCreateDefFile() const
111 {
112 return m_CreateDefFile;
113 }
114
SetCreateDefFile(bool createIt)115 void ProjectBuildTarget::SetCreateDefFile(bool createIt)
116 {
117 if (m_CreateDefFile != createIt)
118 {
119 m_CreateDefFile = createIt;
120 SetModified(true);
121 }
122 }
123
GetCreateStaticLib() const124 bool ProjectBuildTarget::GetCreateStaticLib() const
125 {
126 return m_CreateStaticLib;
127 }
128
SetCreateStaticLib(bool createIt)129 void ProjectBuildTarget::SetCreateStaticLib(bool createIt)
130 {
131 if (m_CreateStaticLib != createIt)
132 {
133 m_CreateStaticLib = createIt;
134 SetModified(true);
135 }
136 }
137
GetUseConsoleRunner() const138 bool ProjectBuildTarget::GetUseConsoleRunner() const
139 {
140 if (GetTargetType() == ttConsoleOnly || GetRunHostApplicationInTerminal())
141 return m_UseConsoleRunner;
142
143 return false;
144 }
145
SetUseConsoleRunner(bool useIt)146 void ProjectBuildTarget::SetUseConsoleRunner(bool useIt)
147 {
148 if (GetTargetType() == ttConsoleOnly && useIt != m_UseConsoleRunner)
149 {
150 m_UseConsoleRunner = useIt;
151 SetModified(true);
152 }
153 }
154
SetTargetType(TargetType pt)155 void ProjectBuildTarget::SetTargetType(TargetType pt)
156 {
157 TargetType ttold = GetTargetType();
158 CompileTargetBase::SetTargetType(pt);
159 if (ttold != GetTargetType() && GetTargetType() == ttConsoleOnly)
160 SetUseConsoleRunner(true); // by default, use console runner
161 }
162
GetFile(int index)163 ProjectFile* ProjectBuildTarget::GetFile(int index)
164 {
165 if (m_FileArray.GetCount() == 0)
166 {
167 for (FilesList::iterator it = m_Files.begin(); it != m_Files.end(); ++it)
168 {
169 if (!*it)
170 continue;
171 m_FileArray.Add(*it);
172 }
173 }
174
175 if (index < 0 || static_cast<size_t>(index) >= m_FileArray.GetCount())
176 return NULL;
177
178 return m_FileArray.Item(index);
179 }
180
RemoveFile(ProjectFile * pf)181 bool ProjectBuildTarget::RemoveFile(ProjectFile* pf)
182 {
183 if (!pf)
184 return false;
185 m_Files.erase(pf);
186 if (m_FileArray.GetCount() > 0)
187 m_FileArray.Remove(pf);
188
189 return true;
190 }
191