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:
parent
c4306dc805
commit
5271ba56be
|
@ -462,18 +462,6 @@ void cmExtraEclipseCDT4Generator::CreateProjectFile()
|
|||
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 << "</projectDescription>\n";
|
||||
|
@ -761,18 +749,6 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
|
|||
excludeFromOut += "**/CMakeFiles/";
|
||||
fout << "<pathentry excluding=\"" << excludeFromOut
|
||||
<< "\" 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
|
||||
emmited.clear();
|
||||
|
@ -1317,65 +1293,3 @@ void cmExtraEclipseCDT4Generator
|
|||
"\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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -93,10 +93,6 @@ private:
|
|||
const std::string& path,
|
||||
LinkType linkType);
|
||||
|
||||
bool AppendOutLinkedResource(cmGeneratedFileStream& fout,
|
||||
const std::string& defname,
|
||||
const std::string& altdefname);
|
||||
|
||||
static void AppendIncludeDirectories(cmGeneratedFileStream& fout,
|
||||
const std::vector<std::string>& includeDirs,
|
||||
std::set<std::string>& emittedDirs);
|
||||
|
@ -109,7 +105,6 @@ private:
|
|||
void CreateLinksForTargets(cmGeneratedFileStream& fout);
|
||||
|
||||
std::vector<std::string> SrcLinkedResources;
|
||||
std::vector<std::string> OutLinkedResources;
|
||||
std::string HomeDirectory;
|
||||
std::string HomeOutputDirectory;
|
||||
bool IsOutOfSourceBuild;
|
||||
|
|
Loading…
Reference in New Issue