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);
|
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue