| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- /*=========================================================================
- Program: CMake - Cross-Platform Makefile Generator
- Module: $RCSfile$
- Language: C++
- Date: $Date$
- Version: $Revision$
- Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
- See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notices 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() { return "set_property";}
- /**
- * Succinct documentation.
- */
- virtual const char* GetTerseDocumentation()
- {
- return "Set a named property in a given scope.";
- }
- /**
- * Longer documentation.
- */
- virtual const char* GetFullDocumentation()
- {
- 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]\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.\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."
- ;
- }
- /**
- * This determines if the command is invoked when in script mode.
- */
- virtual bool IsScriptable() { return true; }
- cmTypeMacro(cmSetPropertyCommand, cmCommand);
- private:
- std::set<cmStdString> Names;
- std::string PropertyName;
- std::string PropertyValue;
- bool Remove;
- bool AppendMode;
- // 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
|