From 5797b1cd663819022c2cbe8072c5c58f24104f88 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 7 Jan 2009 14:16:40 -0500 Subject: [PATCH] ENH: Clean per-config export files during install When installing the main export file the install tree may be dirty. If out-dated per-config files exist they may break the newly installed main file which when it globs them. This teaches the installation script to detect when it is about to replace the main export file with a different one and cleans out any existing per-config files. --- Source/cmInstallExportGenerator.cxx | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Source/cmInstallExportGenerator.cxx b/Source/cmInstallExportGenerator.cxx index 81971aaac..f4befb39f 100644 --- a/Source/cmInstallExportGenerator.cxx +++ b/Source/cmInstallExportGenerator.cxx @@ -203,6 +203,30 @@ cmInstallExportGenerator::GenerateScriptConfigs(std::ostream& os, void cmInstallExportGenerator::GenerateScriptActions(std::ostream& os, Indent const& indent) { + // Remove old per-configuration export files if the main changes. + std::string installedDir = "$ENV{DESTDIR}"; + installedDir += this->GetInstallDestination(); + installedDir += "/"; + std::string installedFile = installedDir; + installedFile += this->FileName; + os << indent << "IF(EXISTS \"" << installedFile << "\")\n"; + Indent indentN = indent.Next(); + Indent indentNN = indentN.Next(); + Indent indentNNN = indentNN.Next(); + os << indentN << "FILE(DIFFERENT EXPORT_FILE_CHANGED FILES\n" + << indentN << " \"" << installedFile << "\"\n" + << indentN << " \"" << this->MainImportFile << "\")\n"; + os << indentN << "IF(EXPORT_FILE_CHANGED)\n"; + os << indentNN << "FILE(GLOB OLD_CONFIG_FILES \"" << installedDir + << this->EFGen->GetConfigImportFileGlob() << "\")\n"; + os << indentNN << "IF(OLD_CONFIG_FILES)\n"; + os << indentNNN << "MESSAGE(STATUS \"Old export file \\\"" << installedFile + << "\\\" will be replaced. Removing files [${OLD_CONFIG_FILES}].\")\n"; + os << indentNNN << "FILE(REMOVE ${OLD_CONFIG_FILES})\n"; + os << indentNN << "ENDIF(OLD_CONFIG_FILES)\n"; + os << indentN << "ENDIF(EXPORT_FILE_CHANGED)\n"; + os << indent << "ENDIF()\n"; + // Install the main export file. std::vector files; files.push_back(this->MainImportFile);