Eclipse: fix #13358: don't create bad linked resources

directory where the project file is located (${CMAKE_BINARY_DIR}), which can
happen e.g. for EXECUTABLE_OUTPUT_PATH and related variables.

Now, it seems this code never worked.
If EXECUTABLE_OUTPUT_PATH was set to point into a subdir of CMAKE_BINARY_DIR,
the code did nothing.
If it pointed directly at CMAKE_BINARY_DIR or some other location, it created
a linked resource. I tested this with Eclipse Europa (3.3) and Juno (4.2), and in this
case both versions of Eclipse complained that this is a bad location for a linked resource.

Alex
This commit is contained in:
Alex Neundorf 2012-07-28 18:00:19 +02:00
parent c4306dc805
commit 5271ba56be
2 changed files with 0 additions and 91 deletions

View File

@ -462,18 +462,6 @@ void cmExtraEclipseCDT4Generator::CreateProjectFile()
this->CreateLinksForTargets(fout); this->CreateLinksForTargets(fout);
} }
// I'm not sure this makes too much sense. There can be different
// output directories in different subdirs, so we would need more of them.
// for EXECUTABLE_OUTPUT_PATH when not in binary dir
this->AppendOutLinkedResource(fout,
mf->GetSafeDefinition("CMAKE_RUNTIME_OUTPUT_DIRECTORY"),
mf->GetSafeDefinition("EXECUTABLE_OUTPUT_PATH"));
// for LIBRARY_OUTPUT_PATH when not in binary dir
this->AppendOutLinkedResource(fout,
mf->GetSafeDefinition("CMAKE_LIBRARY_OUTPUT_DIRECTORY"),
mf->GetSafeDefinition("LIBRARY_OUTPUT_PATH"));
fout << "\t</linkedResources>\n"; fout << "\t</linkedResources>\n";
fout << "</projectDescription>\n"; fout << "</projectDescription>\n";
@ -761,18 +749,6 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
excludeFromOut += "**/CMakeFiles/"; excludeFromOut += "**/CMakeFiles/";
fout << "<pathentry excluding=\"" << excludeFromOut fout << "<pathentry excluding=\"" << excludeFromOut
<< "\" kind=\"out\" path=\"\"/>\n"; << "\" kind=\"out\" path=\"\"/>\n";
// add output entry for EXECUTABLE_OUTPUT_PATH and LIBRARY_OUTPUT_PATH
// - if it is a subdir of homeOutputDirectory, there is no need to add it
// - if it is not then create a linked resource and add the linked name
// but check it doesn't conflict with other linked resources names
for (std::vector<std::string>::const_iterator
it = this->OutLinkedResources.begin();
it != this->OutLinkedResources.end();
++it)
{
fout << "<pathentry kind=\"out\" path=\"" << this->EscapeForXML(*it)
<< "\"/>\n";
}
// add pre-processor definitions to allow eclipse to gray out sections // add pre-processor definitions to allow eclipse to gray out sections
emmited.clear(); emmited.clear();
@ -1317,65 +1293,3 @@ void cmExtraEclipseCDT4Generator
"\t\t</link>\n" "\t\t</link>\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;
}
// in this case it's not necessary:
if (cmSystemTools::IsSubDirectory(outputPath.c_str(),
this->HomeOutputDirectory.c_str()))
{
return false;
}
// in these two cases Eclipse would complain:
if (cmSystemTools::IsSubDirectory(this->HomeOutputDirectory.c_str(),
outputPath.c_str()))
{
return false;
}
if (cmSystemTools::GetRealPath(outputPath.c_str())
== cmSystemTools::GetRealPath(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), LinkToFolder);
this->OutLinkedResources.push_back(name);
return true;
}
}

View File

@ -93,10 +93,6 @@ private:
const std::string& path, const std::string& path,
LinkType linkType); LinkType linkType);
bool AppendOutLinkedResource(cmGeneratedFileStream& fout,
const std::string& defname,
const std::string& altdefname);
static void AppendIncludeDirectories(cmGeneratedFileStream& fout, static void AppendIncludeDirectories(cmGeneratedFileStream& fout,
const std::vector<std::string>& includeDirs, const std::vector<std::string>& includeDirs,
std::set<std::string>& emittedDirs); std::set<std::string>& emittedDirs);
@ -109,7 +105,6 @@ private:
void CreateLinksForTargets(cmGeneratedFileStream& fout); void CreateLinksForTargets(cmGeneratedFileStream& fout);
std::vector<std::string> SrcLinkedResources; std::vector<std::string> SrcLinkedResources;
std::vector<std::string> OutLinkedResources;
std::string HomeDirectory; std::string HomeDirectory;
std::string HomeOutputDirectory; std::string HomeOutputDirectory;
bool IsOutOfSourceBuild; bool IsOutOfSourceBuild;