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