diff --git a/Source/cmExtraEclipseCDT4Generator.cxx b/Source/cmExtraEclipseCDT4Generator.cxx index 7ecf3c105..bdf4edc59 100644 --- a/Source/cmExtraEclipseCDT4Generator.cxx +++ b/Source/cmExtraEclipseCDT4Generator.cxx @@ -380,42 +380,14 @@ void cmExtraEclipseCDT4Generator::CreateProjectFile() } } // for EXECUTABLE_OUTPUT_PATH when not in binary dir - std::string outputPath = mf->GetSafeDefinition("EXECUTABLE_OUTPUT_PATH"); - if (!outputPath.empty() && !cmSystemTools::IsSubDirectory( - outputPath.c_str(), this->HomeOutputDirectory.c_str())) - { - std::string name = this->GetPathBasename(outputPath); - - // make sure linked resource name is unique - while (this->GlobalGenerator->GetProjectMap().find(name) - != this->GlobalGenerator->GetProjectMap().end()) - { - name += "_"; - } - this->AppendLinkedResource(fout, name, - this->GetEclipsePath(outputPath)); - this->OutLinkedResources.push_back(name); - } + this->AppendOutLinkedResource(fout, + mf->GetSafeDefinition("CMAKE_RUNTIME_OUTPUT_DIRECTORY"), + mf->GetSafeDefinition("EXECUTABLE_OUTPUT_PATH")); // for LIBRARY_OUTPUT_PATH when not in binary dir - if (outputPath != mf->GetSafeDefinition("LIBRARY_OUTPUT_PATH")) - { - outputPath = mf->GetSafeDefinition("LIBRARY_OUTPUT_PATH"); - if (!outputPath.empty() && !cmSystemTools::IsSubDirectory( - outputPath.c_str(), this->HomeOutputDirectory.c_str())) - { - std::string name = this->GetPathBasename(outputPath); + this->AppendOutLinkedResource(fout, + mf->GetSafeDefinition("CMAKE_LIBRARY_OUTPUT_DIRECTORY"), + mf->GetSafeDefinition("LIBRARY_OUTPUT_PATH")); - // make sure linked resource name is unique - while (this->GlobalGenerator->GetProjectMap().find(name) - != this->GlobalGenerator->GetProjectMap().end()) - { - name += "_"; - } - this->AppendLinkedResource(fout, name, - this->GetEclipsePath(outputPath)); - this->OutLinkedResources.push_back(name); - } - } fout << "\t\n"; } @@ -936,3 +908,51 @@ void cmExtraEclipseCDT4Generator "\t\t\n" ; } + +bool cmExtraEclipseCDT4Generator +::AppendOutLinkedResource(cmGeneratedFileStream& fout, + const std::string& defname, + const std::string& altdefname) +{ + if (defname.empty() && altdefname.empty()) + { + return false; + } + + std::string outputPath = (defname.empty() ? altdefname : defname); + + if (!cmSystemTools::FileIsFullPath(outputPath.c_str())) + { + outputPath = this->HomeOutputDirectory + "/" + outputPath; + } + if (cmSystemTools::IsSubDirectory(outputPath.c_str(), + this->HomeOutputDirectory.c_str())) + { + return false; + } + + std::string name = this->GetPathBasename(outputPath); + + // make sure linked resource name is unique + while (this->GlobalGenerator->GetProjectMap().find(name) + != this->GlobalGenerator->GetProjectMap().end()) + { + name += "_"; + } + + if (std::find(this->OutLinkedResources.begin(), + this->OutLinkedResources.end(), + name) + != this->OutLinkedResources.end()) + { + return false; + } + else + { + this->AppendLinkedResource(fout, name, + this->GetEclipsePath(outputPath)); + this->OutLinkedResources.push_back(name); + return true; + } +} + diff --git a/Source/cmExtraEclipseCDT4Generator.h b/Source/cmExtraEclipseCDT4Generator.h index 955d0aae3..0898b7668 100644 --- a/Source/cmExtraEclipseCDT4Generator.h +++ b/Source/cmExtraEclipseCDT4Generator.h @@ -107,6 +107,10 @@ private: const std::string& name, const std::string& path); + bool AppendOutLinkedResource(cmGeneratedFileStream& fout, + const std::string& defname, + const std::string& altdefname); + std::vector SrcLinkedResources; std::vector OutLinkedResources; std::string HomeDirectory;