2009-09-28 19:43:28 +04:00
|
|
|
/*============================================================================
|
|
|
|
CMake - Cross Platform Makefile Generator
|
|
|
|
Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
|
2007-07-27 18:55:24 +04:00
|
|
|
|
2009-09-28 19:43:28 +04:00
|
|
|
Distributed under the OSI-approved BSD License (the "License");
|
|
|
|
see accompanying file Copyright.txt for details.
|
2007-07-27 18:55:24 +04:00
|
|
|
|
2009-09-28 19:43:28 +04:00
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
|
|
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
See the License for more information.
|
|
|
|
============================================================================*/
|
2005-01-25 01:35:54 +03:00
|
|
|
#ifndef cmXCodeObject_h
|
|
|
|
#define cmXCodeObject_h
|
|
|
|
|
2005-01-22 00:25:36 +03:00
|
|
|
#include "cmStandardIncludes.h"
|
2016-04-29 16:40:20 +03:00
|
|
|
|
2015-10-19 22:23:29 +03:00
|
|
|
class cmGeneratorTarget;
|
2005-01-22 00:25:36 +03:00
|
|
|
|
|
|
|
class cmXCodeObject
|
|
|
|
{
|
|
|
|
public:
|
2016-05-16 17:34:04 +03:00
|
|
|
enum Type
|
|
|
|
{
|
|
|
|
OBJECT_LIST,
|
|
|
|
STRING,
|
|
|
|
ATTRIBUTE_GROUP,
|
|
|
|
OBJECT_REF,
|
|
|
|
OBJECT
|
|
|
|
};
|
|
|
|
enum PBXType
|
|
|
|
{
|
|
|
|
PBXGroup,
|
|
|
|
PBXBuildStyle,
|
|
|
|
PBXProject,
|
|
|
|
PBXHeadersBuildPhase,
|
|
|
|
PBXSourcesBuildPhase,
|
|
|
|
PBXFrameworksBuildPhase,
|
|
|
|
PBXNativeTarget,
|
|
|
|
PBXFileReference,
|
|
|
|
PBXBuildFile,
|
|
|
|
PBXContainerItemProxy,
|
|
|
|
PBXTargetDependency,
|
|
|
|
PBXShellScriptBuildPhase,
|
|
|
|
PBXResourcesBuildPhase,
|
|
|
|
PBXApplicationReference,
|
|
|
|
PBXExecutableFileReference,
|
|
|
|
PBXLibraryReference,
|
|
|
|
PBXToolTarget,
|
|
|
|
PBXLibraryTarget,
|
|
|
|
PBXAggregateTarget,
|
|
|
|
XCBuildConfiguration,
|
|
|
|
XCConfigurationList,
|
|
|
|
PBXCopyFilesBuildPhase,
|
|
|
|
None
|
|
|
|
};
|
|
|
|
class StringVec : public std::vector<std::string>
|
|
|
|
{
|
2005-01-22 00:25:36 +03:00
|
|
|
};
|
|
|
|
static const char* PBXTypeNames[];
|
2005-09-05 17:17:59 +04:00
|
|
|
virtual ~cmXCodeObject();
|
2005-01-22 00:25:36 +03:00
|
|
|
cmXCodeObject(PBXType ptype, Type type);
|
2016-06-04 02:38:52 +03:00
|
|
|
Type GetType() const { return this->TypeValue; }
|
|
|
|
PBXType GetIsA() const { return this->IsA; }
|
2005-09-03 00:29:32 +04:00
|
|
|
|
2016-06-12 22:39:16 +03:00
|
|
|
bool IsEmpty() const;
|
|
|
|
|
2014-02-04 06:16:12 +04:00
|
|
|
void SetString(const std::string& s);
|
2016-06-04 02:38:52 +03:00
|
|
|
const std::string& GetString() const { return this->String; }
|
2012-08-13 21:42:58 +04:00
|
|
|
|
2014-02-22 04:05:55 +04:00
|
|
|
void AddAttribute(const std::string& name, cmXCodeObject* value)
|
2016-05-16 17:34:04 +03:00
|
|
|
{
|
|
|
|
this->ObjectAttributes[name] = value;
|
|
|
|
}
|
2012-08-13 21:42:58 +04:00
|
|
|
|
2016-06-12 22:39:16 +03:00
|
|
|
void AddAttributeIfNotEmpty(const std::string& name, cmXCodeObject* value)
|
|
|
|
{
|
|
|
|
if (value && !value->IsEmpty()) {
|
|
|
|
AddAttribute(name, value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-05-16 17:34:04 +03:00
|
|
|
void SetObject(cmXCodeObject* value) { this->Object = value; }
|
|
|
|
cmXCodeObject* GetObject() { return this->Object; }
|
|
|
|
void AddObject(cmXCodeObject* value) { this->List.push_back(value); }
|
2016-06-04 02:38:52 +03:00
|
|
|
bool HasObject(cmXCodeObject* o) const
|
2006-05-12 22:36:39 +04:00
|
|
|
{
|
2016-05-16 17:34:04 +03:00
|
|
|
return !(std::find(this->List.begin(), this->List.end(), o) ==
|
|
|
|
this->List.end());
|
2006-05-12 22:36:39 +04:00
|
|
|
}
|
2005-02-18 01:54:14 +03:00
|
|
|
void AddUniqueObject(cmXCodeObject* value)
|
2006-05-12 22:36:39 +04:00
|
|
|
{
|
2016-05-16 17:34:04 +03:00
|
|
|
if (std::find(this->List.begin(), this->List.end(), value) ==
|
|
|
|
this->List.end()) {
|
2006-05-12 22:36:39 +04:00
|
|
|
this->List.push_back(value);
|
2016-05-16 17:34:04 +03:00
|
|
|
}
|
2006-05-12 22:36:39 +04:00
|
|
|
}
|
2005-01-25 01:35:54 +03:00
|
|
|
static void Indent(int level, std::ostream& out);
|
2005-01-22 00:25:36 +03:00
|
|
|
void Print(std::ostream& out);
|
2016-02-19 22:00:19 +03:00
|
|
|
void PrintAttribute(std::ostream& out, const int level,
|
|
|
|
const std::string separator, const int factor,
|
|
|
|
const std::string& name, const cmXCodeObject* object,
|
|
|
|
const cmXCodeObject* parent);
|
2015-10-22 01:49:54 +03:00
|
|
|
virtual void PrintComment(std::ostream&) {}
|
2005-09-03 00:29:32 +04:00
|
|
|
|
2016-05-16 17:34:04 +03:00
|
|
|
static void PrintList(std::vector<cmXCodeObject*> const&, std::ostream& out);
|
2016-06-04 02:38:52 +03:00
|
|
|
const std::string& GetId() const { return this->Id; }
|
2016-05-16 17:34:04 +03:00
|
|
|
void SetId(const std::string& id) { this->Id = id; }
|
2016-06-04 02:38:52 +03:00
|
|
|
cmGeneratorTarget* GetTarget() const { return this->Target; }
|
2016-05-16 17:34:04 +03:00
|
|
|
void SetTarget(cmGeneratorTarget* t) { this->Target = t; }
|
2016-06-04 02:38:52 +03:00
|
|
|
const std::string& GetComment() const { return this->Comment; }
|
|
|
|
bool HasComment() const { return (!this->Comment.empty()); }
|
|
|
|
cmXCodeObject* GetObject(const char* name) const
|
2016-05-16 17:34:04 +03:00
|
|
|
{
|
2016-06-04 02:38:52 +03:00
|
|
|
std::map<std::string, cmXCodeObject*>::const_iterator i =
|
|
|
|
this->ObjectAttributes.find(name);
|
|
|
|
if (i != this->ObjectAttributes.end()) {
|
|
|
|
return i->second;
|
2005-02-04 01:42:55 +03:00
|
|
|
}
|
2016-05-16 17:34:04 +03:00
|
|
|
return 0;
|
|
|
|
}
|
2015-10-22 01:50:12 +03:00
|
|
|
// search the attribute list for an object of the specified type
|
2016-06-04 02:38:52 +03:00
|
|
|
cmXCodeObject* GetObject(cmXCodeObject::PBXType t) const
|
2016-05-16 17:34:04 +03:00
|
|
|
{
|
2016-06-04 02:38:52 +03:00
|
|
|
for (std::vector<cmXCodeObject*>::const_iterator i = this->List.begin();
|
2016-05-16 17:34:04 +03:00
|
|
|
i != this->List.end(); ++i) {
|
|
|
|
cmXCodeObject* o = *i;
|
|
|
|
if (o->IsA == t) {
|
|
|
|
return o;
|
|
|
|
}
|
2005-02-05 01:58:58 +03:00
|
|
|
}
|
2016-05-16 17:34:04 +03:00
|
|
|
return 0;
|
|
|
|
}
|
2012-08-13 21:42:58 +04:00
|
|
|
|
2016-05-16 17:34:04 +03:00
|
|
|
void CopyAttributes(cmXCodeObject*);
|
2012-08-13 21:42:58 +04:00
|
|
|
|
2016-05-16 17:34:04 +03:00
|
|
|
void AddDependLibrary(const std::string& configName, const std::string& l)
|
|
|
|
{
|
|
|
|
this->DependLibraries[configName].push_back(l);
|
|
|
|
}
|
2016-06-04 02:38:52 +03:00
|
|
|
std::map<std::string, StringVec> const& GetDependLibraries() const
|
2016-05-16 17:34:04 +03:00
|
|
|
{
|
|
|
|
return this->DependLibraries;
|
|
|
|
}
|
|
|
|
void AddDependTarget(const std::string& configName, const std::string& tName)
|
|
|
|
{
|
|
|
|
this->DependTargets[configName].push_back(tName);
|
|
|
|
}
|
2016-06-04 02:38:52 +03:00
|
|
|
std::map<std::string, StringVec> const& GetDependTargets() const
|
2016-05-16 17:34:04 +03:00
|
|
|
{
|
2011-06-07 01:34:43 +04:00
|
|
|
return this->DependTargets;
|
2016-05-16 17:34:04 +03:00
|
|
|
}
|
2016-06-04 02:38:52 +03:00
|
|
|
std::vector<cmXCodeObject*> const& GetObjectList() const
|
|
|
|
{
|
|
|
|
return this->List;
|
|
|
|
}
|
2016-05-16 17:34:04 +03:00
|
|
|
void SetComment(const std::string& c) { this->Comment = c; }
|
|
|
|
static void PrintString(std::ostream& os, std::string String);
|
|
|
|
|
2005-09-03 00:29:32 +04:00
|
|
|
protected:
|
2008-09-02 18:27:15 +04:00
|
|
|
void PrintString(std::ostream& os) const;
|
|
|
|
|
2015-10-19 22:23:29 +03:00
|
|
|
cmGeneratorTarget* Target;
|
2006-03-15 19:38:47 +03:00
|
|
|
Type TypeValue;
|
2014-02-10 09:21:34 +04:00
|
|
|
std::string Id;
|
2006-03-15 19:02:08 +03:00
|
|
|
PBXType IsA;
|
|
|
|
int Version;
|
2014-02-10 09:21:34 +04:00
|
|
|
std::string Comment;
|
|
|
|
std::string String;
|
2006-03-15 19:02:08 +03:00
|
|
|
cmXCodeObject* Object;
|
|
|
|
std::vector<cmXCodeObject*> List;
|
2014-02-10 09:21:34 +04:00
|
|
|
std::map<std::string, StringVec> DependLibraries;
|
|
|
|
std::map<std::string, StringVec> DependTargets;
|
|
|
|
std::map<std::string, cmXCodeObject*> ObjectAttributes;
|
2005-01-22 00:25:36 +03:00
|
|
|
};
|
2005-01-25 01:35:54 +03:00
|
|
|
#endif
|