summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Neundorf <neundorf@kde.org>2009-01-11 17:18:44 (GMT)
committerAlexander Neundorf <neundorf@kde.org>2009-01-11 17:18:44 (GMT)
commit0d48ea69842d16fad63cc8ac0bfc42bbb7eb11ef (patch)
treeecf28151567e7ee732cb125f66da0958084ddd35
parent3db17e22c95fd1a61574ea591f38fb42db450f59 (diff)
downloadCMake-0d48ea69842d16fad63cc8ac0bfc42bbb7eb11ef.zip
CMake-0d48ea69842d16fad63cc8ac0bfc42bbb7eb11ef.tar.gz
CMake-0d48ea69842d16fad63cc8ac0bfc42bbb7eb11ef.tar.bz2
ENH: patch from Miguel,
As it is today the generator creates linked resources to LIBRARY_OUTPUT_PATH and EXECUTABLE_OUTPUT_PATH if they are not a subdirectory of the binary dir, so that the IDE can detect the Binaries (this was addressed previously as a result of a bug report). Reduces code redundancy by encapsulating common behaviour for LIBRARY_OUTPUT_PATH and EXECUTABLE_OUTPUT_PATH in AppendLinkedResource. Addresses the two new variable names for these locations, CMAKE_LIBRARY_OUTPUT_DIRECTORY and CMAKE_RUNTIME_OUTPUT_DIRECTORY respectively. Finally, it is addressing a bug in the current code for relative paths in these variables. If it is a relative path to the binary dir, the IsSubdirectory call returns false and so it creates the linked resource. The created linked resource produces an error in the Eclipse IDE because the IDE expects it to be a full path. The patch now addresses this by concatenating the binary dir if it is a relative path.
-rw-r--r--Source/cmExtraEclipseCDT4Generator.cxx88
-rw-r--r--Source/cmExtraEclipseCDT4Generator.h4
2 files changed, 58 insertions, 34 deletions
diff --git a/Source/cmExtraEclipseCDT4Generator.cxx b/Source/cmExtraEclipseCDT4Generator.cxx
index 7ecf3c1..bdf4edc 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</linkedResources>\n";
}
@@ -936,3 +908,51 @@ 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;
+ }
+ 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 955d0aa..0898b76 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<std::string> SrcLinkedResources;
std::vector<std::string> OutLinkedResources;
std::string HomeDirectory;