summaryrefslogtreecommitdiffstats
path: root/Source/cmSourceFile.cxx
diff options
context:
space:
mode:
authorKen Martin <ken.martin@kitware.com>2006-12-07 14:45:32 (GMT)
committerKen Martin <ken.martin@kitware.com>2006-12-07 14:45:32 (GMT)
commit27379d7b081be852c2b290a98db548cffffbff04 (patch)
treefcc9e19282bdfb71bf4bf9b1f8fcea1401c2fbd5 /Source/cmSourceFile.cxx
parent833548f53a2ed799bb0df23fd7d973c30b423d1b (diff)
downloadCMake-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.cxx135
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.");
+}
+