diff options
author | Ken Martin <ken.martin@kitware.com> | 2006-12-07 14:45:32 (GMT) |
---|---|---|
committer | Ken Martin <ken.martin@kitware.com> | 2006-12-07 14:45:32 (GMT) |
commit | 27379d7b081be852c2b290a98db548cffffbff04 (patch) | |
tree | fcc9e19282bdfb71bf4bf9b1f8fcea1401c2fbd5 /Source/cmSourceFile.cxx | |
parent | 833548f53a2ed799bb0df23fd7d973c30b423d1b (diff) | |
download | CMake-27379d7b081be852c2b290a98db548cffffbff04.zip CMake-27379d7b081be852c2b290a98db548cffffbff04.tar.gz CMake-27379d7b081be852c2b290a98db548cffffbff04.tar.bz2 |
ENH: make properties a bit more formal with documentation and chaining
Diffstat (limited to 'Source/cmSourceFile.cxx')
-rw-r--r-- | Source/cmSourceFile.cxx | 135 |
1 files changed, 119 insertions, 16 deletions
diff --git a/Source/cmSourceFile.cxx b/Source/cmSourceFile.cxx index 7f2c663..52148b2 100644 --- a/Source/cmSourceFile.cxx +++ b/Source/cmSourceFile.cxx @@ -17,7 +17,7 @@ #include "cmSourceFile.h" #include "cmSystemTools.h" - +#include "cmake.h" // Set the name of the class and the full path to the file. // The class must be found in dir and end in name.cxx, name.txx, @@ -179,7 +179,8 @@ void cmSourceFile::SetProperty(const char* prop, const char* value) { value = "NOTFOUND"; } - this->Properties[prop] = value; + + this->Properties.SetProperty(prop, value, cmProperty::SOURCE_FILE); } const char *cmSourceFile::GetProperty(const char* prop) const @@ -191,24 +192,14 @@ const char *cmSourceFile::GetProperty(const char* prop) const return this->FullPath.c_str(); } - std::map<cmStdString,cmStdString>::const_iterator i = - this->Properties.find(prop); - if (i != this->Properties.end()) - { - return i->second.c_str(); - } - return 0; + bool chain = false; + return this->Properties.GetPropertyValue(prop,cmProperty::SOURCE_FILE, + chain); } bool cmSourceFile::GetPropertyAsBool(const char* prop) const { - std::map<cmStdString,cmStdString>::const_iterator i = - this->Properties.find(prop); - if (i != this->Properties.end()) - { - return cmSystemTools::IsOn(i->second.c_str()); - } - return false; + return cmSystemTools::IsOn(this->GetProperty(prop)); } void cmSourceFile::SetCustomCommand(cmCustomCommand* cc) @@ -229,3 +220,115 @@ const std::string& cmSourceFile::GetSourceNameWithoutLastExtension() } return this->SourceNameWithoutLastExtension; } + +cmSourceFile::cmSourceFile() +{ + this->CustomCommand = 0; +} + +// define properties +void cmSourceFile::DefineProperties(cmake *cm) +{ + // define properties + cm->DefineProperty + ("ABSTRACT", cmProperty::SOURCE_FILE, + "Is this source file an abstract class.", + "A property ona source file that indicates if the source file " + "represents a class that is abstract. This only makes sense for " + "languages that have a notion of an abstract class and it is " + "only used by somw tools that wrap classes into other languages."); + + cm->DefineProperty + ("COMPILE_FLAGS", cmProperty::SOURCE_FILE, + "Additional flags to be added when compiling this source file.", + "These flags will be added to the list of compile flags when " + "this source file."); + + cm->DefineProperty + ("EXTERNAL_OBJECT", cmProperty::SOURCE_FILE, + "If set to true then this is an object file.", + "If this property is set to true then the source file " + "is really an object file and should not be compiled. " + "It will still be linked into the target though."); + + cm->DefineProperty + ("EXTRA_CONTENT", cmProperty::SOURCE_FILE, + "Is this file part of a target's extra content.", + "If this property is set, the source file will be added to the " + "target's list of extra content. This is used by makefile " + "generators for some sort of Mac budle framework support."); + + cm->DefineProperty + ("GENERATED", cmProperty::SOURCE_FILE, + "Is this source file generated as part of the build process.", + "If a source file is generated by the build process CMake will " + "handle it differently in temrs of dependency checking etc. " + "Otherwise having a non-existent source file could create problems."); + + cm->DefineProperty + ("HEADER_FILE_ONLY", cmProperty::SOURCE_FILE, + "Is this source file only a header file.", + "A property ona source file that indicates if the source file " + "is a header file with no associated implementation. This is " + "set automatically based on the file extension and is used by " + "CMake to determine is certain dependency information should be " + "computed."); + + cm->DefineProperty + ("KEEP_EXTENSION", cmProperty::SOURCE_FILE, + "Make th eoutput file have the same extension as the source file.", + "If this property is set then the file extension of the output " + "file will be the same as that of the source file. Normally " + "the output file extension is computed based on the language " + "of the source file, for example .cxx will go to a .o extension."); + + cm->DefineProperty + ("LANGUAGE", cmProperty::SOURCE_FILE, + "What programming language is the file.", + "A property that can be set to indicate what programming language " + "the source file is. If it is not set the language is determined " + "based on the file extension. Typical values are CXX C etc."); + + cm->DefineProperty + ("LOCATION", cmProperty::SOURCE_FILE, + "The full path to a source file.", + "A read only property on a SOURCE FILE that contains the full path " + "to the source file."); + + cm->DefineProperty + ("MACOSX_PACKAGE_LOCATION", cmProperty::SOURCE_FILE, + "Location for MACOSX bundles and frameworks.", + "MACOSX_PACKAGE_LOCATION is the property of a file within a mac osx " + "bundle or framework that specifies where this file should be " + "copied. This makes sense for things like icons and other " + "resources."); + + cm->DefineProperty + ("MACOSX_CONTENT", cmProperty::SOURCE_FILE, + "If true then this is part of a MACOSX bundle or framework.", + "MACOSX_CONTENT is a flag that if true this file will be copied " + "to the bundle or framework."); + + cm->DefineProperty + ("OBJECT_DEPENDS", cmProperty::SOURCE_FILE, + "Additional dependencies.", + "Additional dependencies that should be checked as part of " + "building this source file."); + + cm->DefineProperty + ("SYMBOLIC", cmProperty::SOURCE_FILE, + "Is this just a name for a rule.", + "If SYMBOLIC (boolean) is set to true the build system will be " + "informed that the source file is not actually created on disk but " + "instead used as a symbolic name for a build rule."); + + cm->DefineProperty + ("WRAP_EXCLUDE", cmProperty::SOURCE_FILE, + "Exclude this source file from any code wrapping techniques.", + "Some packages can wrap source files into alternate languages " + "to provide additional functionality. For example, C++ code " + "can be wrapped into Java or Python etc using SWIG etc. " + "If WRAP_EXCLUDE is set to true (1 etc) that indicates then " + "this source file should not be wrapped."); +} + |