diff --git a/Source/cmLocalUnixMakefileGenerator.cxx b/Source/cmLocalUnixMakefileGenerator.cxx index a6aaaf9c9..b34fab7ef 100644 --- a/Source/cmLocalUnixMakefileGenerator.cxx +++ b/Source/cmLocalUnixMakefileGenerator.cxx @@ -2692,8 +2692,21 @@ void cmLocalUnixMakefileGenerator::OutputMakeRules(std::ostream& fout) "", cmd.c_str()); } - this->OutputMakeRule(fout, "installation", "install", "", - "$(CMAKE_COMMAND) -P cmake_install.cmake"); + if(m_Makefile->GetDefinition("CMake_BINARY_DIR")) + { + // We are building CMake itself. We cannot use the original + // executable to install over itself. + std::string rule = m_Makefile->GetDefinition("EXECUTABLE_OUTPUT_PATH"); + rule += "/cmake"; + rule = cmSystemTools::ConvertToOutputPath(rule.c_str()); + rule += " -P cmake_install.cmake"; + this->OutputMakeRule(fout, "installation", "install", "", rule.c_str()); + } + else + { + this->OutputMakeRule(fout, "installation", "install", "", + "$(CMAKE_COMMAND) -P cmake_install.cmake"); + } }