From c48141744e7b14940dc55ec98da631c4d2356dd7 Mon Sep 17 00:00:00 2001 From: Robert Goulet Date: Thu, 26 Feb 2015 19:18:04 +0000 Subject: [PATCH] install: Write the entire installation manifest at once Avoid a separate open/close for each file installed. Use a single file(WRITE) instead of a loop with file(APPEND). --- Source/cmFileCommand.cxx | 5 ++++- Source/cmLocalGenerator.cxx | 17 ++++++----------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx index 579e7156e..d99465978 100644 --- a/Source/cmFileCommand.cxx +++ b/Source/cmFileCommand.cxx @@ -1907,7 +1907,10 @@ protected: std::string Manifest; void ManifestAppend(std::string const& file) { - this->Manifest += ";"; + if (!this->Manifest.empty()) + { + this->Manifest += ";"; + } this->Manifest += file.substr(this->DestDirLength); } diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 7ca7684c4..d9dcad4f3 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -535,17 +535,12 @@ void cmLocalGenerator::GenerateInstallRules() "${CMAKE_INSTALL_COMPONENT}.txt\")\n" "else()\n" " set(CMAKE_INSTALL_MANIFEST \"install_manifest.txt\")\n" - "endif()\n\n"; - fout - << "file(WRITE \"" - << homedir << "/${CMAKE_INSTALL_MANIFEST}\" " - << "\"\")" << std::endl; - fout - << "foreach(file ${CMAKE_INSTALL_MANIFEST_FILES})" << std::endl - << " file(APPEND \"" - << homedir << "/${CMAKE_INSTALL_MANIFEST}\" " - << "\"${file}\\n\")" << std::endl - << "endforeach()" << std::endl; + "endif()\n" + "\n" + "string(REPLACE \";\" \"\\n\" CMAKE_INSTALL_MANIFEST_CONTENT\n" + " \"${CMAKE_INSTALL_MANIFEST_FILES}\")\n" + "file(WRITE \"" << homedir << "/${CMAKE_INSTALL_MANIFEST}\"\n" + " \"${CMAKE_INSTALL_MANIFEST_CONTENT}\")\n"; } }