summaryrefslogtreecommitdiffstats
path: root/Source/cmake.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmake.cxx')
-rw-r--r--Source/cmake.cxx404
1 files changed, 6 insertions, 398 deletions
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index d2961c0..186d4e6 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -10,7 +10,6 @@
See the License for more information.
============================================================================*/
#include "cmake.h"
-#include "cmDocumentVariables.h"
#include "cmCacheManager.h"
#include "cmMakefile.h"
#include "cmLocalGenerator.h"
@@ -20,7 +19,7 @@
#include "cmFileTimeComparison.h"
#include "cmSourceFile.h"
#include "cmTest.h"
-#include "cmDocumentationFormatterText.h"
+#include "cmDocumentationFormatter.h"
#if defined(CMAKE_BUILD_WITH_CMAKE)
# include "cmGraphVizWriter.h"
@@ -100,30 +99,6 @@
static bool cmakeCheckStampFile(const char* stampName);
static bool cmakeCheckStampList(const char* stampName);
-void cmNeedBackwardsCompatibility(const std::string& variable,
- int access_type, void*, const char*, const cmMakefile*)
-{
-#ifdef CMAKE_BUILD_WITH_CMAKE
- if (access_type == cmVariableWatch::UNKNOWN_VARIABLE_READ_ACCESS)
- {
- std::string message = "An attempt was made to access a variable: ";
- message += variable;
- message +=
- " that has not been defined. Some variables were always defined "
- "by CMake in versions prior to 1.6. To fix this you might need to set "
- "the cache value of CMAKE_BACKWARDS_COMPATIBILITY to 1.4 or less. If "
- "you are writing a CMakeLists file, (or have already set "
- "CMAKE_BACKWARDS_COMPATIBILITY to 1.4 or less) then you probably need "
- "to include a CMake module to test for the feature this variable "
- "defines.";
- cmSystemTools::Error(message.c_str());
- }
-#else
- (void)variable;
- (void)access_type;
-#endif
-}
-
void cmWarnUnusedCliWarning(const std::string& variable,
int, void* ctx, const char*, const cmMakefile*)
{
@@ -170,12 +145,6 @@ cmake::cmake()
#ifdef CMAKE_BUILD_WITH_CMAKE
this->VariableWatch = new cmVariableWatch;
- this->VariableWatch->AddWatch("CMAKE_WORDS_BIGENDIAN",
- cmNeedBackwardsCompatibility);
- this->VariableWatch->AddWatch("CMAKE_SIZEOF_INT",
- cmNeedBackwardsCompatibility);
- this->VariableWatch->AddWatch("CMAKE_X_LIBS",
- cmNeedBackwardsCompatibility);
#endif
this->AddDefaultGenerators();
@@ -219,12 +188,8 @@ void cmake::InitializeProperties()
this->PropertyDefinitions.clear();
// initialize properties
- cmCacheManager::DefineProperties(this);
- cmSourceFile::DefineProperties(this);
cmTarget::DefineProperties(this);
cmMakefile::DefineProperties(this);
- cmTest::DefineProperties(this);
- cmake::DefineProperties(this);
}
void cmake::CleanupCommandsAndMacros()
@@ -1109,10 +1074,6 @@ int cmake::AddCMakePaths()
("CMAKE_ROOT", cMakeRoot.c_str(),
"Path to CMake installation.", cmCacheManager::INTERNAL);
-#ifdef _WIN32
- std::string comspec = "cmw9xcom.exe";
- cmSystemTools::SetWindows9xComspecSubstitute(comspec.c_str());
-#endif
return 1;
}
@@ -1865,11 +1826,6 @@ int cmake::Generate()
{
return -1;
}
- if (this->GetProperty("REPORT_UNDEFINED_PROPERTIES"))
- {
- this->ReportUndefinedPropertyAccesses
- (this->GetProperty("REPORT_UNDEFINED_PROPERTIES"));
- }
// Save the cache again after a successful Generate so that any internal
// variables created during Generate are saved. (Specifically target GUIDs
// for the Visual Studio and Xcode generators.)
@@ -2000,45 +1956,6 @@ void cmake::UpdateProgress(const char *msg, float prog)
}
}
-void cmake::GetCommandDocumentation(std::vector<cmDocumentationEntry>& v,
- bool withCurrentCommands,
- bool withCompatCommands) const
-{
- for(RegisteredCommandsMap::const_iterator j = this->Commands.begin();
- j != this->Commands.end(); ++j)
- {
- if ((( withCompatCommands == false) && ( (*j).second->IsDiscouraged()))
- || ((withCurrentCommands == false) && (!(*j).second->IsDiscouraged()))
- || (!((*j).second->ShouldAppearInDocumentation()))
- )
- {
- continue;
- }
-
- cmDocumentationEntry e((*j).second->GetName(),
- (*j).second->GetTerseDocumentation(),
- (*j).second->GetFullDocumentation());
- v.push_back(e);
- }
-}
-
-void cmake::GetPolicyDocumentation(std::vector<cmDocumentationEntry>& v)
-{
- this->Policies->GetDocumentation(v);
-}
-
-void cmake::GetPropertiesDocumentation(std::map<std::string,
- cmDocumentationSection *>& v)
-{
- // loop over the properties and put them into the doc structure
- std::map<cmProperty::ScopeType, cmPropertyDefinitionMap>::iterator i;
- i = this->PropertyDefinitions.begin();
- for (;i != this->PropertyDefinitions.end(); ++i)
- {
- i->second.GetPropertiesDocumentation(v);
- }
-}
-
void cmake::GetGeneratorDocumentation(std::vector<cmDocumentationEntry>& v)
{
for(RegisteredGeneratorsVector::const_iterator i =
@@ -2422,216 +2339,13 @@ void cmake::GenerateGraphViz(const char* fileName) const
#endif
}
-void cmake::DefineProperties(cmake *cm)
-{
- cm->DefineProperty
- ("REPORT_UNDEFINED_PROPERTIES", cmProperty::GLOBAL,
- "If set, report any undefined properties to this file.",
- "If this property is set to a filename then when CMake runs "
- "it will report any properties or variables that were accessed "
- "but not defined into the filename specified in this property."
- );
-
- cm->DefineProperty
- ("TARGET_SUPPORTS_SHARED_LIBS", cmProperty::GLOBAL,
- "Does the target platform support shared libraries.",
- "TARGET_SUPPORTS_SHARED_LIBS is a boolean specifying whether the target "
- "platform supports shared libraries. Basically all current general "
- "general purpose OS do so, the exception are usually embedded systems "
- "with no or special OSs.");
-
- cm->DefineProperty
- ("TARGET_ARCHIVES_MAY_BE_SHARED_LIBS", cmProperty::GLOBAL,
- "Set if shared libraries may be named like archives.",
- "On AIX shared libraries may be named \"lib<name>.a\". "
- "This property is set to true on such platforms.");
-
- cm->DefineProperty
- ("FIND_LIBRARY_USE_LIB64_PATHS", cmProperty::GLOBAL,
- "Whether FIND_LIBRARY should automatically search lib64 directories.",
- "FIND_LIBRARY_USE_LIB64_PATHS is a boolean specifying whether the "
- "FIND_LIBRARY command should automatically search the lib64 variant of "
- "directories called lib in the search path when building 64-bit "
- "binaries.");
- cm->DefineProperty
- ("FIND_LIBRARY_USE_OPENBSD_VERSIONING", cmProperty::GLOBAL,
- "Whether FIND_LIBRARY should find OpenBSD-style shared libraries.",
- "This property is a boolean specifying whether the FIND_LIBRARY "
- "command should find shared libraries with OpenBSD-style versioned "
- "extension: \".so.<major>.<minor>\". "
- "The property is set to true on OpenBSD and false on other platforms.");
- cm->DefineProperty
- ("ENABLED_FEATURES", cmProperty::GLOBAL,
- "List of features which are enabled during the CMake run.",
- "List of features which are enabled during the CMake run. By default "
- "it contains the names of all packages which were found. This is "
- "determined using the <NAME>_FOUND variables. Packages which are "
- "searched QUIET are not listed. A project can add its own features to "
- "this list. "
- "This property is used by the macros in FeatureSummary.cmake.");
- cm->DefineProperty
- ("DISABLED_FEATURES", cmProperty::GLOBAL,
- "List of features which are disabled during the CMake run.",
- "List of features which are disabled during the CMake run. By default "
- "it contains the names of all packages which were not found. This is "
- "determined using the <NAME>_FOUND variables. Packages which are "
- "searched QUIET are not listed. A project can add its own features to "
- "this list. "
- "This property is used by the macros in FeatureSummary.cmake.");
- cm->DefineProperty
- ("PACKAGES_FOUND", cmProperty::GLOBAL,
- "List of packages which were found during the CMake run.",
- "List of packages which were found during the CMake run. Whether a "
- "package has been found is determined using the <NAME>_FOUND variables.");
- cm->DefineProperty
- ("PACKAGES_NOT_FOUND", cmProperty::GLOBAL,
- "List of packages which were not found during the CMake run.",
- "List of packages which were not found during the CMake run. Whether a "
- "package has been found is determined using the <NAME>_FOUND variables.");
-
- cm->DefineProperty(
- "__CMAKE_DELETE_CACHE_CHANGE_VARS_", cmProperty::GLOBAL,
- "Internal property",
- "Used to detect compiler changes, Do not set.");
-
- cm->DefineProperty(
- "DEBUG_CONFIGURATIONS", cmProperty::GLOBAL,
- "Specify which configurations are for debugging.",
- "The value must be a semi-colon separated list of configuration names. "
- "Currently this property is used only by the target_link_libraries "
- "command (see its documentation for details). "
- "Additional uses may be defined in the future. "
- "\n"
- "This property must be set at the top level of the project and before "
- "the first target_link_libraries command invocation. "
- "If any entry in the list does not match a valid configuration for "
- "the project the behavior is undefined.");
-
- cm->DefineProperty(
- "GLOBAL_DEPENDS_DEBUG_MODE", cmProperty::GLOBAL,
- "Enable global target dependency graph debug mode.",
- "CMake automatically analyzes the global inter-target dependency graph "
- "at the beginning of native build system generation. "
- "This property causes it to display details of its analysis to stderr.");
-
- cm->DefineProperty(
- "GLOBAL_DEPENDS_NO_CYCLES", cmProperty::GLOBAL,
- "Disallow global target dependency graph cycles.",
- "CMake automatically analyzes the global inter-target dependency graph "
- "at the beginning of native build system generation. "
- "It reports an error if the dependency graph contains a cycle that "
- "does not consist of all STATIC library targets. "
- "This property tells CMake to disallow all cycles completely, even "
- "among static libraries.");
-
- cm->DefineProperty(
- "ALLOW_DUPLICATE_CUSTOM_TARGETS", cmProperty::GLOBAL,
- "Allow duplicate custom targets to be created.",
- "Normally CMake requires that all targets built in a project have "
- "globally unique logical names (see policy CMP0002). "
- "This is necessary to generate meaningful project file names in "
- "Xcode and VS IDE generators. "
- "It also allows the target names to be referenced unambiguously.\n"
- "Makefile generators are capable of supporting duplicate custom target "
- "names. "
- "For projects that care only about Makefile generators and do "
- "not wish to support Xcode or VS IDE generators, one may set this "
- "property to true to allow duplicate custom targets. "
- "The property allows multiple add_custom_target command calls in "
- "different directories to specify the same target name. "
- "However, setting this property will cause non-Makefile generators "
- "to produce an error and refuse to generate the project."
- );
-
- cm->DefineProperty
- ("IN_TRY_COMPILE", cmProperty::GLOBAL,
- "Read-only property that is true during a try-compile configuration.",
- "True when building a project inside a TRY_COMPILE or TRY_RUN command.");
- cm->DefineProperty
- ("ENABLED_LANGUAGES", cmProperty::GLOBAL,
- "Read-only property that contains the list of currently "
- "enabled languages",
- "Set to list of currently enabled languages.");
-
- cm->DefineProperty
- ("RULE_LAUNCH_COMPILE", cmProperty::GLOBAL,
- "Specify a launcher for compile rules.",
- "Makefile generators prefix compiler commands with the given "
- "launcher command line. "
- "This is intended to allow launchers to intercept build problems "
- "with high granularity. "
- "Non-Makefile generators currently ignore this property.");
- cm->DefineProperty
- ("RULE_LAUNCH_LINK", cmProperty::GLOBAL,
- "Specify a launcher for link rules.",
- "Makefile generators prefix link and archive commands with the given "
- "launcher command line. "
- "This is intended to allow launchers to intercept build problems "
- "with high granularity. "
- "Non-Makefile generators currently ignore this property.");
- cm->DefineProperty
- ("RULE_LAUNCH_CUSTOM", cmProperty::GLOBAL,
- "Specify a launcher for custom rules.",
- "Makefile generators prefix custom commands with the given "
- "launcher command line. "
- "This is intended to allow launchers to intercept build problems "
- "with high granularity. "
- "Non-Makefile generators currently ignore this property.");
-
- cm->DefineProperty
- ("RULE_MESSAGES", cmProperty::GLOBAL,
- "Specify whether to report a message for each make rule.",
- "This property specifies whether Makefile generators should add a "
- "progress message describing what each build rule does. "
- "If the property is not set the default is ON. "
- "Set the property to OFF to disable granular messages and report only "
- "as each target completes. "
- "This is intended to allow scripted builds to avoid the build time "
- "cost of detailed reports. "
- "If a CMAKE_RULE_MESSAGES cache entry exists its value initializes "
- "the value of this property. "
- "Non-Makefile generators currently ignore this property.");
-
- cm->DefineProperty
- ("USE_FOLDERS", cmProperty::GLOBAL,
- "Use the FOLDER target property to organize targets into folders.",
- "If not set, CMake treats this property as OFF by default. "
- "CMake generators that are capable of organizing into a "
- "hierarchy of folders use the values of the FOLDER target "
- "property to name those folders. See also the documentation "
- "for the FOLDER target property.");
-
- cm->DefineProperty
- ("AUTOMOC_TARGETS_FOLDER", cmProperty::GLOBAL,
- "Name of FOLDER for *_automoc targets that are added automatically by "
- "CMake for targets for which AUTOMOC is enabled.",
- "If not set, CMake uses the FOLDER property of the parent target as a "
- "default value for this property. See also the documentation for the "
- "FOLDER target property and the AUTOMOC target property.");
-
- cm->DefineProperty
- ("PREDEFINED_TARGETS_FOLDER", cmProperty::GLOBAL,
- "Name of FOLDER for targets that are added automatically by CMake.",
- "If not set, CMake uses \"CMakePredefinedTargets\" as a default "
- "value for this property. Targets such as INSTALL, PACKAGE and "
- "RUN_TESTS will be organized into this FOLDER. See also the "
- "documentation for the FOLDER target property.");
-
- // ================================================================
- // define variables as well
- // ================================================================
- cmDocumentVariables::DefineVariables(cm);
-}
-
-
void cmake::DefineProperty(const char *name, cmProperty::ScopeType scope,
const char *ShortDescription,
const char *FullDescription,
- bool chained, const char *docSection)
+ bool chained)
{
this->PropertyDefinitions[scope].DefineProperty(name,scope,ShortDescription,
FullDescription,
- docSection,
chained);
}
@@ -2646,112 +2360,6 @@ cmPropertyDefinition *cmake
return 0;
}
-void cmake::RecordPropertyAccess(const char *name,
- cmProperty::ScopeType scope)
-{
- this->AccessedProperties.insert
- (std::pair<cmStdString,cmProperty::ScopeType>(name,scope));
-}
-
-void cmake::ReportUndefinedPropertyAccesses(const char *filename)
-{
- if(!this->GlobalGenerator)
- { return; }
- FILE *progFile = fopen(filename,"w");
- if(!progFile)
- { return; }
-
- // what are the enabled languages?
- std::vector<std::string> enLangs;
- this->GlobalGenerator->GetEnabledLanguages(enLangs);
-
- // Common configuration names.
- // TODO: Compute current configuration(s).
- std::vector<std::string> enConfigs;
- enConfigs.push_back("");
- enConfigs.push_back("DEBUG");
- enConfigs.push_back("RELEASE");
- enConfigs.push_back("MINSIZEREL");
- enConfigs.push_back("RELWITHDEBINFO");
-
- // take all the defined properties and add definitions for all the enabled
- // languages
- std::set<std::pair<cmStdString,cmProperty::ScopeType> > aliasedProperties;
- std::map<cmProperty::ScopeType, cmPropertyDefinitionMap>::iterator i;
- i = this->PropertyDefinitions.begin();
- for (;i != this->PropertyDefinitions.end(); ++i)
- {
- cmPropertyDefinitionMap::iterator j;
- for (j = i->second.begin(); j != i->second.end(); ++j)
- {
- // TODO: What if both <LANG> and <CONFIG> appear?
- if (j->first.find("<CONFIG>") != std::string::npos)
- {
- std::vector<std::string>::const_iterator k;
- for (k = enConfigs.begin(); k != enConfigs.end(); ++k)
- {
- std::string tmp = j->first;
- cmSystemTools::ReplaceString(tmp, "<CONFIG>", k->c_str());
- // add alias
- aliasedProperties.insert
- (std::pair<cmStdString,cmProperty::ScopeType>(tmp,i->first));
- }
- }
- if (j->first.find("<LANG>") != std::string::npos)
- {
- std::vector<std::string>::const_iterator k;
- for (k = enLangs.begin(); k != enLangs.end(); ++k)
- {
- std::string tmp = j->first;
- cmSystemTools::ReplaceString(tmp, "<LANG>", k->c_str());
- // add alias
- aliasedProperties.insert
- (std::pair<cmStdString,cmProperty::ScopeType>(tmp,i->first));
- }
- }
- }
- }
-
- std::set<std::pair<cmStdString,cmProperty::ScopeType> >::const_iterator ap;
- ap = this->AccessedProperties.begin();
- for (;ap != this->AccessedProperties.end(); ++ap)
- {
- if (!this->IsPropertyDefined(ap->first.c_str(),ap->second) &&
- aliasedProperties.find(std::pair<cmStdString,cmProperty::ScopeType>
- (ap->first,ap->second)) ==
- aliasedProperties.end())
- {
- const char *scopeStr = "";
- switch (ap->second)
- {
- case cmProperty::TARGET:
- scopeStr = "TARGET";
- break;
- case cmProperty::SOURCE_FILE:
- scopeStr = "SOURCE_FILE";
- break;
- case cmProperty::DIRECTORY:
- scopeStr = "DIRECTORY";
- break;
- case cmProperty::TEST:
- scopeStr = "TEST";
- break;
- case cmProperty::VARIABLE:
- scopeStr = "VARIABLE";
- break;
- case cmProperty::CACHED_VARIABLE:
- scopeStr = "CACHED_VARIABLE";
- break;
- default:
- scopeStr = "unknown";
- break;
- }
- fprintf(progFile, "%s with scope %s\n", ap->first.c_str(), scopeStr);
- }
- }
- fclose(progFile);
-}
-
bool cmake::IsPropertyDefined(const char *name, cmProperty::ScopeType scope)
{
return this->PropertyDefinitions[scope].IsPropertyDefined(name);
@@ -3164,7 +2772,7 @@ void cmake::IssueMessage(cmake::MessageType t, std::string const& text,
// Add the message text.
{
msg << ":\n";
- cmDocumentationFormatterText formatter;
+ cmDocumentationFormatter formatter;
formatter.SetIndent(" ");
formatter.PrintFormatted(msg, text.c_str());
}
@@ -3233,8 +2841,7 @@ int cmake::Build(const std::string& dir,
const std::string& target,
const std::string& config,
const std::vector<std::string>& nativeOptions,
- bool clean,
- cmSystemTools::OutputOption outputflag)
+ bool clean)
{
if(!cmSystemTools::FileIsDirectory(dir.c_str()))
{
@@ -3276,7 +2883,8 @@ int cmake::Build(const std::string& dir,
projName.c_str(), target.c_str(),
&output,
makeProgram.c_str(),
- config.c_str(), clean, false, 0, outputflag,
+ config.c_str(), clean, false, 0,
+ cmSystemTools::OUTPUT_PASSTHROUGH,
0, nativeOptions);
}