|
|
@@ -102,7 +102,7 @@ void cmExtraEclipseCDT4Generator::CreateSourceProjectFile() const
|
|
|
fout <<
|
|
|
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
|
|
"<projectDescription>\n"
|
|
|
- "\t<name>" << name << "</name>\n"
|
|
|
+ "\t<name>" << this->EscapeForXML(name) << "</name>\n"
|
|
|
"\t<comment></comment>\n"
|
|
|
"\t<projects>\n"
|
|
|
"\t</projects>\n"
|
|
|
@@ -376,11 +376,10 @@ void cmExtraEclipseCDT4Generator::CreateProjectFile()
|
|
|
"\t</natures>\n"
|
|
|
;
|
|
|
|
|
|
- // TODO: refactor this
|
|
|
+ fout << "\t<linkedResources>\n";
|
|
|
// create linked resources
|
|
|
if (this->IsOutOfSourceBuild)
|
|
|
{
|
|
|
- fout << "\t<linkedResources>\n";
|
|
|
// create a linked resource to CMAKE_SOURCE_DIR
|
|
|
// (this is not done anymore for each project because of
|
|
|
// http://public.kitware.com/Bug/view.php?id=9978 and because I found it
|
|
|
@@ -399,18 +398,48 @@ void cmExtraEclipseCDT4Generator::CreateProjectFile()
|
|
|
this->SrcLinkedResources.push_back(sourceLinkedResourceName);
|
|
|
}
|
|
|
|
|
|
- // 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"));
|
|
|
+ }
|
|
|
+
|
|
|
+ // for each sub project create a linked resource to the source dir
|
|
|
+ // - only if it is an out-of-source build
|
|
|
+ this->AppendLinkedResource(fout, "[Subprojects]",
|
|
|
+ "virtual:/virtual");
|
|
|
|
|
|
- fout << "\t</linkedResources>\n";
|
|
|
+ for (std::map<cmStdString, std::vector<cmLocalGenerator*> >::const_iterator
|
|
|
+ it = this->GlobalGenerator->GetProjectMap().begin();
|
|
|
+ it != this->GlobalGenerator->GetProjectMap().end();
|
|
|
+ ++it)
|
|
|
+ {
|
|
|
+ std::string linkSourceDirectory = this->GetEclipsePath(
|
|
|
+ it->second[0]->GetMakefile()->GetStartDirectory());
|
|
|
+ // a linked resource must not point to a parent directory of .project or
|
|
|
+ // .project itself
|
|
|
+ if ((this->HomeOutputDirectory != linkSourceDirectory) &&
|
|
|
+ !cmSystemTools::IsSubDirectory(this->HomeOutputDirectory.c_str(),
|
|
|
+ linkSourceDirectory.c_str()))
|
|
|
+ {
|
|
|
+ std::string linkName = "[Subprojects]/";
|
|
|
+ linkName += it->first;
|
|
|
+ this->AppendLinkedResource(fout, linkName,
|
|
|
+ this->GetEclipsePath(linkSourceDirectory));
|
|
|
+ this->SrcLinkedResources.push_back(it->first);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+ // 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";
|
|
|
}
|
|
|
|
|
|
@@ -551,14 +580,15 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
|
|
|
it != this->SrcLinkedResources.end();
|
|
|
++it)
|
|
|
{
|
|
|
- fout << "<pathentry kind=\"src\" path=\"" << *it << "\"/>\n";
|
|
|
+ fout << "<pathentry kind=\"src\" path=\"" << this->EscapeForXML(*it)
|
|
|
+ << "\"/>\n";
|
|
|
|
|
|
// exlude source directory from output search path
|
|
|
// - only if not named the same as an output directory
|
|
|
if (!cmSystemTools::FileIsDirectory(
|
|
|
std::string(this->HomeOutputDirectory + "/" + *it).c_str()))
|
|
|
{
|
|
|
- excludeFromOut += *it + "/|";
|
|
|
+ excludeFromOut += this->EscapeForXML(*it) + "/|";
|
|
|
}
|
|
|
}
|
|
|
excludeFromOut += "**/CMakeFiles/";
|
|
|
@@ -573,7 +603,8 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
|
|
|
it != this->OutLinkedResources.end();
|
|
|
++it)
|
|
|
{
|
|
|
- fout << "<pathentry kind=\"out\" path=\"" << *it << "\"/>\n";
|
|
|
+ fout << "<pathentry kind=\"out\" path=\"" << this->EscapeForXML(*it)
|
|
|
+ << "\"/>\n";
|
|
|
}
|
|
|
|
|
|
// add pre-processor definitions to allow eclipse to gray out sections
|
|
|
@@ -1055,11 +1086,13 @@ void cmExtraEclipseCDT4Generator
|
|
|
{
|
|
|
fout <<
|
|
|
"\t\t<link>\n"
|
|
|
- "\t\t\t<name>" << name << "</name>\n"
|
|
|
+ "\t\t\t<name>"
|
|
|
+ << cmExtraEclipseCDT4Generator::EscapeForXML(name)
|
|
|
+ << "</name>\n"
|
|
|
"\t\t\t<type>2</type>\n"
|
|
|
- "\t\t\t<location>"
|
|
|
- << path
|
|
|
- << "</location>\n"
|
|
|
+ "\t\t\t<locationURI>"
|
|
|
+ << cmExtraEclipseCDT4Generator::EscapeForXML(path)
|
|
|
+ << "</locationURI>\n"
|
|
|
"\t\t</link>\n"
|
|
|
;
|
|
|
}
|