Merge topic 'install-export-staging-dir'

c7a319ab install(EXPORT): Fix support for mid-length install destinations on Windows
This commit is contained in:
Brad King 2016-08-10 11:15:50 -04:00 committed by CMake Topic Stage
commit f4cec30b53
2 changed files with 26 additions and 2 deletions

View File

@ -74,9 +74,12 @@ void cmInstallExportGenerator::ComputeTempDir()
#else
std::string::size_type const max_total_len = 1000;
#endif
if (this->TempDir.size() < max_total_len) {
// Will generate files of the form "<temp-dir>/<base>-<config>.<ext>".
std::string::size_type const len = this->TempDir.size() + 1 +
this->FileName.size() + 1 + this->GetMaxConfigLength();
if (len < max_total_len) {
// Keep the total path length below the limit.
std::string::size_type max_len = max_total_len - this->TempDir.size();
std::string::size_type const max_len = max_total_len - len;
if (this->Destination.size() > max_len) {
useMD5 = true;
}
@ -102,6 +105,26 @@ void cmInstallExportGenerator::ComputeTempDir()
}
}
size_t cmInstallExportGenerator::GetMaxConfigLength() const
{
// Always use at least 8 for "noconfig".
size_t len = 8;
if (this->ConfigurationTypes->empty()) {
if (this->ConfigurationName.size() > 8) {
len = this->ConfigurationName.size();
}
} else {
for (std::vector<std::string>::const_iterator ci =
this->ConfigurationTypes->begin();
ci != this->ConfigurationTypes->end(); ++ci) {
if (ci->size() > len) {
len = ci->size();
}
}
}
return len;
}
void cmInstallExportGenerator::GenerateScript(std::ostream& os)
{
// Skip empty sets.

View File

@ -53,6 +53,7 @@ protected:
void GenerateImportFile(cmExportSet const* exportSet);
void GenerateImportFile(const char* config, cmExportSet const* exportSet);
void ComputeTempDir();
size_t GetMaxConfigLength() const;
cmExportSet* ExportSet;
std::string FilePermissions;