From 1110e455c20598983bbf435bd9356c1a952e305a Mon Sep 17 00:00:00 2001 From: Alex Neundorf Date: Sat, 19 Nov 2011 11:01:03 +0100 Subject: Eclipse: create links to subprojects also in the source-project (#12579) Alex --- Source/cmExtraEclipseCDT4Generator.cxx | 20 +++++++++++++++----- Source/cmExtraEclipseCDT4Generator.h | 5 +++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/Source/cmExtraEclipseCDT4Generator.cxx b/Source/cmExtraEclipseCDT4Generator.cxx index 248a30a..2e4e68f 100644 --- a/Source/cmExtraEclipseCDT4Generator.cxx +++ b/Source/cmExtraEclipseCDT4Generator.cxx @@ -113,7 +113,7 @@ void cmExtraEclipseCDT4Generator::Generate() this->CreateCProjectFile(); } -void cmExtraEclipseCDT4Generator::CreateSourceProjectFile() const +void cmExtraEclipseCDT4Generator::CreateSourceProjectFile() { assert(this->HomeDirectory != this->HomeOutputDirectory); @@ -141,6 +141,16 @@ void cmExtraEclipseCDT4Generator::CreateSourceProjectFile() const "\t\n" "\t\n" "\t\n" + "\t\n"; + + if (this->SupportsVirtualFolders) + { + this->CreateLinksToSubprojects(fout, this->HomeDirectory); + this->SrcLinkedResources.clear(); + } + + fout << + "\t\n" "\n" ; } @@ -434,7 +444,7 @@ void cmExtraEclipseCDT4Generator::CreateProjectFile() if (this->SupportsVirtualFolders) { - this->CreateLinksToSubprojects(fout); + this->CreateLinksToSubprojects(fout, this->HomeOutputDirectory); this->CreateLinksForTargets(fout); } @@ -541,7 +551,7 @@ void cmExtraEclipseCDT4Generator::CreateLinksForTargets( //---------------------------------------------------------------------------- void cmExtraEclipseCDT4Generator::CreateLinksToSubprojects( - cmGeneratedFileStream& fout) + cmGeneratedFileStream& fout, const std::string& baseDir) { // for each sub project create a linked resource to the source dir // - only if it is an out-of-source build @@ -557,8 +567,8 @@ void cmExtraEclipseCDT4Generator::CreateLinksToSubprojects( 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(), + if ((baseDir != linkSourceDirectory) && + !cmSystemTools::IsSubDirectory(baseDir.c_str(), linkSourceDirectory.c_str())) { std::string linkName = "[Subprojects]/"; diff --git a/Source/cmExtraEclipseCDT4Generator.h b/Source/cmExtraEclipseCDT4Generator.h index 61302e7..ebd8c08 100644 --- a/Source/cmExtraEclipseCDT4Generator.h +++ b/Source/cmExtraEclipseCDT4Generator.h @@ -46,7 +46,7 @@ public: private: // create .project file in the source tree - void CreateSourceProjectFile() const; + void CreateSourceProjectFile(); // create .project file void CreateProjectFile(); @@ -104,7 +104,8 @@ private: static void AddEnvVar(cmGeneratedFileStream& fout, const char* envVar, cmMakefile* mf); - void CreateLinksToSubprojects(cmGeneratedFileStream& fout); + void CreateLinksToSubprojects(cmGeneratedFileStream& fout, + const std::string& baseDir); void CreateLinksForTargets(cmGeneratedFileStream& fout); std::vector SrcLinkedResources; -- cgit v0.12 From 982b766f29086b851fb4aee891e5e6d4bae95eb9 Mon Sep 17 00:00:00 2001 From: Alex Neundorf Date: Sat, 19 Nov 2011 11:18:51 +0100 Subject: Eclipse: use new variable CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT Previously ECLIPSE_CDT4_GENERATE_SOURCE_PROJECT was used, but the new name CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT is more in line with the general naming conventions in cmake, and, more importantly IMO, in cmake-gui it now appears right next to the other eclipse-related variables, which all start with CMAKE_ECLIPSE_. A warning is printed if the old variable is TRUE and the new one isn't, so users should notice that they have to enable the new one. Alex --- Modules/CMakeFindEclipseCDT4.cmake | 4 ++-- Source/cmExtraEclipseCDT4Generator.cxx | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Modules/CMakeFindEclipseCDT4.cmake b/Modules/CMakeFindEclipseCDT4.cmake index f7a6e29..dd06128 100644 --- a/Modules/CMakeFindEclipseCDT4.cmake +++ b/Modules/CMakeFindEclipseCDT4.cmake @@ -70,8 +70,8 @@ ENDIF() SET(CMAKE_ECLIPSE_MAKE_ARGUMENTS "${_CMAKE_ECLIPSE_INITIAL_MAKE_ARGS}" CACHE STRING "Additional command line arguments when Eclipse invokes make. Enter e.g. -j to get parallel builds") # This variable is used by the Eclipse generator in out-of-source builds only. -SET(ECLIPSE_CDT4_GENERATE_SOURCE_PROJECT FALSE CACHE BOOL "If enabled, CMake will generate a source project for Eclipse in CMAKE_SOURCE_DIR") -MARK_AS_ADVANCED(ECLIPSE_CDT4_GENERATE_SOURCE_PROJECT) +SET(CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT FALSE CACHE BOOL "If enabled, CMake will generate a source project for Eclipse in CMAKE_SOURCE_DIR") +MARK_AS_ADVANCED(CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT) # Determine builtin macros and include dirs: INCLUDE(${CMAKE_CURRENT_LIST_DIR}/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake) diff --git a/Source/cmExtraEclipseCDT4Generator.cxx b/Source/cmExtraEclipseCDT4Generator.cxx index 2e4e68f..07549e9 100644 --- a/Source/cmExtraEclipseCDT4Generator.cxx +++ b/Source/cmExtraEclipseCDT4Generator.cxx @@ -85,7 +85,16 @@ void cmExtraEclipseCDT4Generator::Generate() this->IsOutOfSourceBuild = (this->HomeDirectory!=this->HomeOutputDirectory); this->GenerateSourceProject = (this->IsOutOfSourceBuild && - mf->IsOn("ECLIPSE_CDT4_GENERATE_SOURCE_PROJECT")); + mf->IsOn("CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT")); + + if ((this->GenerateSourceProject == false) + && (mf->IsOn("ECLIPSE_CDT4_GENERATE_SOURCE_PROJECT"))) + { + mf->IssueMessage(cmake::WARNING, + "ECLIPSE_CDT4_GENERATE_SOURCE_PROJECT is set to TRUE, " + "but this variable is not supported anymore since CMake 2.8.7.\n" + "Enable CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT instead."); + } if (cmSystemTools::IsSubDirectory(this->HomeOutputDirectory.c_str(), this->HomeDirectory.c_str())) -- cgit v0.12