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"
|
2005-02-04 01:42:55 +03:00
|
|
|
class cmTarget;
|
2005-01-22 00:25:36 +03:00
|
|
|
|
|
|
|
class cmXCodeObject
|
|
|
|
{
|
|
|
|
public:
|
2005-01-25 23:26:57 +03:00
|
|
|
enum Type { OBJECT_LIST, STRING, ATTRIBUTE_GROUP, OBJECT_REF, OBJECT };
|
2005-01-22 00:25:36 +03:00
|
|
|
enum PBXType { PBXGroup, PBXBuildStyle, PBXProject, PBXHeadersBuildPhase,
|
2005-02-04 01:42:55 +03:00
|
|
|
PBXSourcesBuildPhase, PBXFrameworksBuildPhase,
|
|
|
|
PBXNativeTarget, PBXFileReference, PBXBuildFile,
|
|
|
|
PBXContainerItemProxy, PBXTargetDependency,
|
|
|
|
PBXShellScriptBuildPhase, PBXResourcesBuildPhase,
|
|
|
|
PBXApplicationReference, PBXExecutableFileReference,
|
|
|
|
PBXLibraryReference, PBXToolTarget, PBXLibraryTarget,
|
2005-09-03 00:29:32 +04:00
|
|
|
PBXAggregateTarget,XCBuildConfiguration,XCConfigurationList,
|
2006-03-30 00:02:35 +04:00
|
|
|
PBXCopyFilesBuildPhase,
|
2005-01-22 00:25:36 +03:00
|
|
|
None
|
|
|
|
};
|
2006-01-14 02:18:32 +03:00
|
|
|
class StringVec: public std::vector<cmStdString> {};
|
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);
|
2006-03-15 19:38:47 +03:00
|
|
|
Type GetType() { return this->TypeValue;}
|
2006-03-15 19:02:08 +03:00
|
|
|
PBXType GetIsA() { return this->IsA;}
|
2005-09-03 00:29:32 +04:00
|
|
|
|
2005-11-16 21:13:39 +03:00
|
|
|
void SetString(const char* s);
|
2005-02-09 01:12:38 +03:00
|
|
|
const char* GetString()
|
|
|
|
{
|
2006-03-15 19:02:08 +03:00
|
|
|
return this->String.c_str();
|
2005-02-09 01:12:38 +03:00
|
|
|
}
|
2005-01-25 23:26:57 +03:00
|
|
|
|
2005-01-22 00:25:36 +03:00
|
|
|
void AddAttribute(const char* name, cmXCodeObject* value)
|
|
|
|
{
|
2006-03-15 19:02:08 +03:00
|
|
|
this->ObjectAttributes[name] = value;
|
2005-01-22 00:25:36 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
void SetObject(cmXCodeObject* value)
|
|
|
|
{
|
2006-03-15 19:02:08 +03:00
|
|
|
this->Object = value;
|
2005-01-22 00:25:36 +03:00
|
|
|
}
|
2005-02-08 01:36:34 +03:00
|
|
|
cmXCodeObject* GetObject()
|
|
|
|
{
|
2006-03-15 19:02:08 +03:00
|
|
|
return this->Object;
|
2005-02-08 01:36:34 +03:00
|
|
|
}
|
2005-01-22 00:25:36 +03:00
|
|
|
void AddObject(cmXCodeObject* value)
|
|
|
|
{
|
2006-03-15 19:02:08 +03:00
|
|
|
this->List.push_back(value);
|
2005-01-22 00:25:36 +03:00
|
|
|
}
|
2006-05-12 22:36:39 +04:00
|
|
|
bool HasObject(cmXCodeObject* o)
|
|
|
|
{
|
|
|
|
return !(std::find(this->List.begin(), this->List.end(), o)
|
|
|
|
== this->List.end());
|
|
|
|
}
|
2005-02-18 01:54:14 +03:00
|
|
|
void AddUniqueObject(cmXCodeObject* value)
|
2006-05-12 22:36:39 +04:00
|
|
|
{
|
|
|
|
if(std::find(this->List.begin(), this->List.end(), value)
|
|
|
|
== this->List.end())
|
|
|
|
{
|
|
|
|
this->List.push_back(value);
|
|
|
|
}
|
|
|
|
}
|
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);
|
2005-09-03 00:29:32 +04:00
|
|
|
virtual void PrintComment(std::ostream&) {};
|
|
|
|
|
2006-05-12 22:36:39 +04:00
|
|
|
static void PrintList(std::vector<cmXCodeObject*> const&,
|
|
|
|
std::ostream& out);
|
2005-01-22 00:25:36 +03:00
|
|
|
const char* GetId()
|
|
|
|
{
|
2006-03-15 19:02:08 +03:00
|
|
|
return this->Id.c_str();
|
2005-01-22 00:25:36 +03:00
|
|
|
}
|
2006-03-15 19:38:47 +03:00
|
|
|
cmTarget* GetTarget()
|
2005-02-04 01:42:55 +03:00
|
|
|
{
|
2006-03-15 19:38:47 +03:00
|
|
|
return this->Target;
|
2005-02-04 01:42:55 +03:00
|
|
|
}
|
2006-03-15 19:38:47 +03:00
|
|
|
void SetTarget(cmTarget* t)
|
2005-02-04 01:42:55 +03:00
|
|
|
{
|
2006-03-15 19:38:47 +03:00
|
|
|
this->Target = t;
|
2005-02-04 01:42:55 +03:00
|
|
|
}
|
2006-03-15 19:02:08 +03:00
|
|
|
const char* GetComment() {return this->Comment.c_str();}
|
|
|
|
bool HasComment() { return (this->Comment.size() != 0);}
|
2005-02-04 01:42:55 +03:00
|
|
|
cmXCodeObject* GetObject(const char* name)
|
|
|
|
{
|
2006-03-15 19:02:08 +03:00
|
|
|
if(this->ObjectAttributes.count(name))
|
2005-02-04 01:42:55 +03:00
|
|
|
{
|
2006-03-15 19:02:08 +03:00
|
|
|
return this->ObjectAttributes[name];
|
2005-02-04 01:42:55 +03:00
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
2005-02-05 01:58:58 +03:00
|
|
|
// serach the attribute list for an object of the specified type
|
|
|
|
cmXCodeObject* GetObject(cmXCodeObject::PBXType t)
|
|
|
|
{
|
2006-03-15 19:02:08 +03:00
|
|
|
for(std::vector<cmXCodeObject*>::iterator i = this->List.begin();
|
|
|
|
i != this->List.end(); ++i)
|
2005-02-05 01:58:58 +03:00
|
|
|
{
|
|
|
|
cmXCodeObject* o = *i;
|
2006-03-15 19:38:47 +03:00
|
|
|
if(o->IsA == t)
|
2005-02-05 01:58:58 +03:00
|
|
|
{
|
|
|
|
return o;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
cmXCodeObject* GetPBXTargetDependency()
|
|
|
|
{
|
2006-03-15 19:38:47 +03:00
|
|
|
return this->PBXTargetDependencyValue;
|
2005-02-05 01:58:58 +03:00
|
|
|
}
|
|
|
|
void SetPBXTargetDependency(cmXCodeObject* d)
|
|
|
|
{
|
2006-03-15 19:38:47 +03:00
|
|
|
this->PBXTargetDependencyValue = d;
|
2005-02-05 01:58:58 +03:00
|
|
|
}
|
2005-02-08 01:36:34 +03:00
|
|
|
void CopyAttributes(cmXCodeObject* );
|
2005-02-04 01:42:55 +03:00
|
|
|
|
2006-01-14 02:18:32 +03:00
|
|
|
void AddDependLibrary(const char* configName,
|
|
|
|
const char* l)
|
2005-02-18 01:54:14 +03:00
|
|
|
{
|
2006-01-14 02:18:32 +03:00
|
|
|
if(!configName)
|
|
|
|
{
|
|
|
|
configName = "";
|
|
|
|
}
|
2006-03-15 19:02:08 +03:00
|
|
|
this->DependLibraries[configName].push_back(l);
|
2005-02-18 01:54:14 +03:00
|
|
|
}
|
2006-01-14 02:18:32 +03:00
|
|
|
std::map<cmStdString, StringVec> const& GetDependLibraries()
|
2005-02-18 01:54:14 +03:00
|
|
|
{
|
2006-03-15 19:02:08 +03:00
|
|
|
return this->DependLibraries;
|
2005-02-18 01:54:14 +03:00
|
|
|
}
|
2011-06-07 01:34:43 +04:00
|
|
|
void AddDependTarget(const char* configName,
|
|
|
|
const char* tName)
|
|
|
|
{
|
|
|
|
if(!configName)
|
|
|
|
{
|
|
|
|
configName = "";
|
|
|
|
}
|
|
|
|
this->DependTargets[configName].push_back(tName);
|
|
|
|
}
|
|
|
|
std::map<cmStdString, StringVec> const& GetDependTargets()
|
|
|
|
{
|
|
|
|
return this->DependTargets;
|
|
|
|
}
|
2006-03-15 19:02:08 +03:00
|
|
|
std::vector<cmXCodeObject*> const& GetObjectList() { return this->List;}
|
|
|
|
void SetComment(const char* c) { this->Comment = c;}
|
2011-04-05 17:25:58 +04:00
|
|
|
static void PrintString(std::ostream& os,cmStdString String);
|
2005-09-03 00:29:32 +04:00
|
|
|
protected:
|
2008-09-02 18:27:15 +04:00
|
|
|
void PrintString(std::ostream& os) const;
|
|
|
|
|
2006-03-15 19:38:47 +03:00
|
|
|
cmTarget* Target;
|
|
|
|
Type TypeValue;
|
2006-03-15 19:02:08 +03:00
|
|
|
cmStdString Id;
|
|
|
|
PBXType IsA;
|
|
|
|
int Version;
|
|
|
|
cmStdString Comment;
|
|
|
|
cmStdString String;
|
|
|
|
cmXCodeObject* Object;
|
2006-03-15 19:38:47 +03:00
|
|
|
cmXCodeObject* PBXTargetDependencyValue;
|
2006-03-15 19:02:08 +03:00
|
|
|
std::vector<cmXCodeObject*> List;
|
|
|
|
std::map<cmStdString, StringVec> DependLibraries;
|
2011-06-07 01:34:43 +04:00
|
|
|
std::map<cmStdString, StringVec> DependTargets;
|
2006-03-15 19:02:08 +03:00
|
|
|
std::map<cmStdString, cmXCodeObject*> ObjectAttributes;
|
2005-01-22 00:25:36 +03:00
|
|
|
};
|
2005-01-25 01:35:54 +03:00
|
|
|
#endif
|