diff --git a/Modules/CMakeGenericSystem.cmake b/Modules/CMakeGenericSystem.cmake index 2599f2b26..72711148f 100644 --- a/Modules/CMakeGenericSystem.cmake +++ b/Modules/CMakeGenericSystem.cmake @@ -33,6 +33,9 @@ IF(CMAKE_GENERATOR MATCHES "Makefiles") "Enable/Disable color output during build." ) MARK_AS_ADVANCED(CMAKE_COLOR_MAKEFILE) + IF(DEFINED CMAKE_RULE_PROGRESS) + SET_PROPERTY(GLOBAL PROPERTY RULE_PROGRESS ${CMAKE_RULE_PROGRESS}) + ENDIF(DEFINED CMAKE_RULE_PROGRESS) ENDIF(CMAKE_GENERATOR MATCHES "Makefiles") # Set a variable to indicate whether the value of CMAKE_INSTALL_PREFIX diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx index b8b9141b0..b88abed39 100644 --- a/Source/cmMakefileTargetGenerator.cxx +++ b/Source/cmMakefileTargetGenerator.cxx @@ -46,6 +46,12 @@ cmMakefileTargetGenerator::cmMakefileTargetGenerator(cmTarget* target) this->GlobalGenerator = static_cast( this->LocalGenerator->GetGlobalGenerator()); + cmake* cm = this->GlobalGenerator->GetCMakeInstance(); + this->NoRuleProgress = false; + if(const char* ruleProgress = cm->GetProperty("RULE_PROGRESS")) + { + this->NoRuleProgress = cmSystemTools::IsOff(ruleProgress); + } } cmMakefileTargetGenerator * @@ -195,15 +201,18 @@ void cmMakefileTargetGenerator::WriteCommonCodeRules() cmLocalGenerator::HOME_OUTPUT, cmLocalGenerator::MAKEFILE) << "\n\n"; - - // Include the progress variables for the target. - *this->BuildFileStream - << "# Include the progress variables for this target.\n" - << this->LocalGenerator->IncludeDirective << " " - << this->Convert(this->ProgressFileNameFull.c_str(), - cmLocalGenerator::HOME_OUTPUT, - cmLocalGenerator::MAKEFILE) - << "\n\n"; + + if(!this->NoRuleProgress) + { + // Include the progress variables for the target. + *this->BuildFileStream + << "# Include the progress variables for this target.\n" + << this->LocalGenerator->IncludeDirective << " " + << this->Convert(this->ProgressFileNameFull.c_str(), + cmLocalGenerator::HOME_OUTPUT, + cmLocalGenerator::MAKEFILE) + << "\n\n"; + } // make sure the depend file exists if (!cmSystemTools::FileExists(dependFileNameFull.c_str())) @@ -1200,6 +1209,10 @@ void cmMakefileTargetGenerator::AppendProgress(std::vector& commands) { this->NumberOfProgressActions++; + if(this->NoRuleProgress) + { + return; + } std::string progressDir = this->Makefile->GetHomeOutputDirectory(); progressDir += cmake::GetCMakeFilesDirectory(); cmOStringStream progCmd; diff --git a/Source/cmMakefileTargetGenerator.h b/Source/cmMakefileTargetGenerator.h index f743240e9..629d1922a 100644 --- a/Source/cmMakefileTargetGenerator.h +++ b/Source/cmMakefileTargetGenerator.h @@ -170,6 +170,7 @@ protected: std::string ProgressFileName; std::string ProgressFileNameFull; unsigned long NumberOfProgressActions; + bool NoRuleProgress; // the path to the directory the build file is in std::string TargetBuildDirectory; diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 5cabc227a..33265a3d9 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -3454,6 +3454,20 @@ void cmake::DefineProperties(cmake *cm) "with high granularity. " "Non-Makefile generators currently ignore this property."); + cm->DefineProperty + ("RULE_PROGRESS", cmProperty::GLOBAL, + "Specify whether to report progress for each make rule.", + "Makefile generators add commands to report progress. " + "This property specifies whether to report progress on every rule. " + "If the property is not set the default is ON. " + "Set the property to OFF to disable granular progress and report only " + "as each target completes. " + "This is intended to allow scripted builds to avoid the build time " + "cost of detailed progress reports. " + "If a CMAKE_RULE_PROGRESS cache entry exists its value initializes " + "the value of this property. " + "Non-Makefile generators currently ignore this property."); + // ================================================================ // define variables as well // ================================================================ diff --git a/Tests/Complex/CMakeLists.txt b/Tests/Complex/CMakeLists.txt index b2ed25c6b..569ca30b3 100644 --- a/Tests/Complex/CMakeLists.txt +++ b/Tests/Complex/CMakeLists.txt @@ -14,6 +14,9 @@ IF(POLICY CMP0003) ENDIF(NOT "${P3}" STREQUAL "NEW") ENDIF(POLICY CMP0003) +# Test building without per-rule progress in Makefiles. +SET_PROPERTY(GLOBAL PROPERTY RULE_PROGRESS OFF) + # Choose whether to test CMakeLib. SET(COMPLEX_TEST_CMAKELIB 1) IF(CMAKE_TEST_DIFFERENT_GENERATOR) diff --git a/Tests/ComplexOneConfig/CMakeLists.txt b/Tests/ComplexOneConfig/CMakeLists.txt index b2ed25c6b..569ca30b3 100644 --- a/Tests/ComplexOneConfig/CMakeLists.txt +++ b/Tests/ComplexOneConfig/CMakeLists.txt @@ -14,6 +14,9 @@ IF(POLICY CMP0003) ENDIF(NOT "${P3}" STREQUAL "NEW") ENDIF(POLICY CMP0003) +# Test building without per-rule progress in Makefiles. +SET_PROPERTY(GLOBAL PROPERTY RULE_PROGRESS OFF) + # Choose whether to test CMakeLib. SET(COMPLEX_TEST_CMAKELIB 1) IF(CMAKE_TEST_DIFFERENT_GENERATOR) diff --git a/Tests/ComplexRelativePaths/CMakeLists.txt b/Tests/ComplexRelativePaths/CMakeLists.txt index b2ed25c6b..569ca30b3 100644 --- a/Tests/ComplexRelativePaths/CMakeLists.txt +++ b/Tests/ComplexRelativePaths/CMakeLists.txt @@ -14,6 +14,9 @@ IF(POLICY CMP0003) ENDIF(NOT "${P3}" STREQUAL "NEW") ENDIF(POLICY CMP0003) +# Test building without per-rule progress in Makefiles. +SET_PROPERTY(GLOBAL PROPERTY RULE_PROGRESS OFF) + # Choose whether to test CMakeLib. SET(COMPLEX_TEST_CMAKELIB 1) IF(CMAKE_TEST_DIFFERENT_GENERATOR)