| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
- file LICENSE.rst or https://cmake.org/licensing for details. */
- #pragma once
- #include "cmConfigure.h" // IWYU pragma: keep
- #include <algorithm>
- #include <cstddef>
- #include <iosfwd>
- #include <map>
- #include <string>
- #include <utility>
- #include <vector>
- #include <cm/string_view>
- #include <cmext/algorithm>
- class cmGeneratorTarget;
- class cmXCodeObject
- {
- public:
- 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>
- {
- };
- static char const* PBXTypeNames[];
- virtual ~cmXCodeObject();
- cmXCodeObject(PBXType ptype, Type type, std::string id);
- Type GetType() const { return this->TypeValue; }
- PBXType GetIsA() const { return this->IsA; }
- bool IsEmpty() const;
- void SetString(cm::string_view s);
- std::string const& GetString() const { return this->String; }
- void AddAttribute(std::string const& name, cmXCodeObject* value)
- {
- this->ObjectAttributes[name] = value;
- }
- void AddAttributeIfNotEmpty(std::string const& name, cmXCodeObject* value)
- {
- if (value && !value->IsEmpty()) {
- AddAttribute(name, value);
- }
- }
- void SetObject(cmXCodeObject* value) { this->Object = value; }
- cmXCodeObject* GetObject() { return this->Object; }
- void AddObject(cmXCodeObject* value) { this->List.push_back(value); }
- size_t GetObjectCount() { return this->List.size(); }
- void InsertObject(size_t position, cmXCodeObject* value)
- {
- if (position < GetObjectCount()) {
- this->List.insert(this->List.begin() + position, value);
- }
- }
- void PrependObject(cmXCodeObject* value)
- {
- this->List.insert(this->List.begin(), value);
- }
- bool HasObject(cmXCodeObject* o) const
- {
- return cm::contains(this->List, o);
- }
- void AddUniqueObject(cmXCodeObject* value)
- {
- if (!cm::contains(this->List, value)) {
- this->List.push_back(value);
- }
- }
- static void Indent(int level, std::ostream& out);
- void Print(std::ostream& out);
- void PrintAttribute(std::ostream& out, int level,
- std::string const& separator, int factor,
- std::string const& name, cmXCodeObject const* object,
- cmXCodeObject const* parent);
- virtual void PrintComment(std::ostream&) {}
- static void PrintList(std::vector<cmXCodeObject*> const&, std::ostream& out);
- std::string const& GetId() const { return this->Id; }
- void SetId(std::string const& id) { this->Id = id; }
- cmGeneratorTarget* GetTarget() const { return this->Target; }
- void SetTarget(cmGeneratorTarget* t) { this->Target = t; }
- std::string const& GetComment() const { return this->Comment; }
- bool HasComment() const { return (!this->Comment.empty()); }
- cmXCodeObject* GetAttribute(char const* name) const
- {
- auto const i = this->ObjectAttributes.find(name);
- if (i != this->ObjectAttributes.end()) {
- return i->second;
- }
- return nullptr;
- }
- // search the attribute list for an object of the specified type
- cmXCodeObject* GetObject(cmXCodeObject::PBXType t) const
- {
- for (auto* o : this->List) {
- if (o->IsA == t) {
- return o;
- }
- }
- return nullptr;
- }
- void CopyAttributes(cmXCodeObject*);
- void AddDependLibrary(std::string const& configName, std::string const& l)
- {
- this->DependLibraries[configName].push_back(l);
- }
- std::map<std::string, StringVec> const& GetDependLibraries() const
- {
- return this->DependLibraries;
- }
- void AddDependTarget(std::string const& configName, std::string const& tName)
- {
- this->DependTargets[configName].push_back(tName);
- }
- std::map<std::string, StringVec> const& GetDependTargets() const
- {
- return this->DependTargets;
- }
- std::vector<cmXCodeObject*> const& GetObjectList() const
- {
- return this->List;
- }
- void SetComment(std::string const& c) { this->Comment = c; }
- static void PrintString(std::ostream& os, std::string const& String);
- protected:
- void PrintString(std::ostream& os) const;
- cmGeneratorTarget* Target;
- Type TypeValue;
- std::string Id;
- PBXType IsA;
- int Version;
- std::string Comment;
- std::string String;
- cmXCodeObject* Object;
- std::vector<cmXCodeObject*> List;
- std::map<std::string, StringVec> DependLibraries;
- std::map<std::string, StringVec> DependTargets;
- std::map<std::string, cmXCodeObject*> ObjectAttributes;
- };
|