| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- /*============================================================================
- 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 cmGetPropertyCommand_h
- #define cmGetPropertyCommand_h
- #include "cmCommand.h"
- class cmGetPropertyCommand : public cmCommand
- {
- public:
- cmGetPropertyCommand();
- virtual cmCommand* Clone()
- {
- return new cmGetPropertyCommand;
- }
- /**
- * This is called when the command is first encountered in
- * the input file.
- */
- virtual bool InitialPass(std::vector<std::string> const& args,
- cmExecutionStatus &status);
- /**
- * This determines if the command is invoked when in script mode.
- */
- virtual bool IsScriptable() { return true; }
- /**
- * The name of the command as specified in CMakeList.txt.
- */
- virtual const char* GetName() { return "get_property";}
- /**
- * Succinct documentation.
- */
- virtual const char* GetTerseDocumentation()
- {
- return "Get a property.";
- }
-
- /**
- * Longer documentation.
- */
- virtual const char* GetFullDocumentation()
- {
- return
- " get_property(<variable>\n"
- " <GLOBAL |\n"
- " DIRECTORY [dir] |\n"
- " TARGET <target> |\n"
- " SOURCE <source> |\n"
- " TEST <test> |\n"
- " CACHE <entry> |\n"
- " VARIABLE>\n"
- " PROPERTY <name>\n"
- " [SET | DEFINED | BRIEF_DOCS | FULL_DOCS])\n"
- "Get one property from one object in a scope. "
- "The first argument specifies the variable in which to store the "
- "result. "
- "The second argument determines the scope from which to get the "
- "property. 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 must name one existing target.\n"
- "SOURCE scope must name one source file.\n"
- "TEST scope must name one existing test.\n"
- "CACHE scope must name one cache entry.\n"
- "VARIABLE scope is unique and does not accept a name.\n"
- "The required PROPERTY option is immediately followed by the name "
- "of the property to get. "
- "If the property is not set an empty value is returned. "
- "If the SET option is given the variable is set to a boolean "
- "value indicating whether the property has been set. "
- "If the DEFINED option is given the variable is set to a boolean "
- "value indicating whether the property has been defined "
- "such as with define_property. "
- "If BRIEF_DOCS or FULL_DOCS is given then the variable is set to "
- "a string containing documentation for the requested property. "
- "If documentation is requested for a property that has not been "
- "defined NOTFOUND is returned.";
- }
-
- cmTypeMacro(cmGetPropertyCommand, cmCommand);
- private:
- enum OutType { OutValue, OutDefined, OutBriefDoc, OutFullDoc, OutSet };
- std::string Variable;
- std::string Name;
- std::string PropertyName;
- OutType InfoType;
- // Implementation of result storage.
- bool StoreResult(const char* value);
- // Implementation of each property type.
- bool HandleGlobalMode();
- bool HandleDirectoryMode();
- bool HandleTargetMode();
- bool HandleSourceMode();
- bool HandleTestMode();
- bool HandleVariableMode();
- bool HandleCacheMode();
- };
- #endif
|