diff options
Diffstat (limited to 'Source/cmSetPropertyCommand.h')
-rw-r--r-- | Source/cmSetPropertyCommand.h | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/Source/cmSetPropertyCommand.h b/Source/cmSetPropertyCommand.h new file mode 100644 index 000000000..830299d46 --- /dev/null +++ b/Source/cmSetPropertyCommand.h @@ -0,0 +1,116 @@ +/*============================================================================ + CMake - Cross Platform Makefile Generator + Copyright 2000-2009 Kitware, Inc., Insight Software Consortium + + Distributed under the OSI-approved BSD License (the "License"); + see accompanying file Copyright.txt for details. + + 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. +============================================================================*/ +#ifndef cmSetsPropertiesCommand_h +#define cmSetsPropertiesCommand_h + +#include "cmCommand.h" + +class cmSetPropertyCommand : public cmCommand +{ +public: + cmSetPropertyCommand(); + + virtual cmCommand* Clone() + { + return new cmSetPropertyCommand; + } + + /** + * This is called when the command is first encountered in + * the input file. + */ + virtual bool InitialPass(std::vector<std::string> const& args, + cmExecutionStatus &status); + + /** + * The name of the command as specified in CMakeList.txt. + */ + virtual const char* GetName() const { return "set_property";} + + /** + * Succinct documentation. + */ + virtual const char* GetTerseDocumentation() const + { + return "Set a named property in a given scope."; + } + + /** + * Longer documentation. + */ + virtual const char* GetFullDocumentation() const + { + return + " set_property(<GLOBAL |\n" + " DIRECTORY [dir] |\n" + " TARGET [target1 [target2 ...]] |\n" + " SOURCE [src1 [src2 ...]] |\n" + " TEST [test1 [test2 ...]] |\n" + " CACHE [entry1 [entry2 ...]]>\n" + " [APPEND] [APPEND_STRING]\n" + " PROPERTY <name> [value1 [value2 ...]])\n" + "Set one property on zero or more objects of a scope. " + "The first argument determines the scope in which the property " + "is set. It must be one of the following:\n" + "GLOBAL scope is unique and does not accept a name.\n" + "DIRECTORY scope defaults to the current directory but another " + "directory (already processed by CMake) may be named by full or " + "relative path.\n" + "TARGET scope may name zero or more existing targets.\n" + "SOURCE scope may name zero or more source files. " + "Note that source file properties are visible only to targets " + "added in the same directory (CMakeLists.txt).\n" + "TEST scope may name zero or more existing tests.\n" + "CACHE scope must name zero or more cache existing entries.\n" + "The required PROPERTY option is immediately followed by the name " + "of the property to set. Remaining arguments are used to " + "compose the property value in the form of a semicolon-separated " + "list. " + "If the APPEND option is given the list is appended to any " + "existing property value." + "If the APPEND_STRING option is given the string is append to any " + "existing property value as string, i.e. it results in a longer " + "string and not a list of strings." + ; + } + + /** + * This determines if the command is invoked when in script mode. + */ + virtual bool IsScriptable() const { return true; } + + cmTypeMacro(cmSetPropertyCommand, cmCommand); + +private: + std::set<cmStdString> Names; + std::string PropertyName; + std::string PropertyValue; + bool Remove; + bool AppendMode; + bool AppendAsString; + + // Implementation of each property type. + bool HandleGlobalMode(); + bool HandleDirectoryMode(); + bool HandleTargetMode(); + bool HandleTarget(cmTarget* target); + bool HandleSourceMode(); + bool HandleSource(cmSourceFile* sf); + bool HandleTestMode(); + bool HandleTest(cmTest* test); + bool HandleCacheMode(); + bool HandleCacheEntry(cmCacheManager::CacheIterator&); +}; + + + +#endif |