diff options
Diffstat (limited to 'Source/cmake.cxx')
-rw-r--r-- | Source/cmake.cxx | 404 |
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); } |