From beb584e7a1d73901d1b0494e5c60d25df6d6ef68 Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Thu, 20 Jan 2005 12:28:57 -0500 Subject: [PATCH] ENH: add some comments on how this could be moved to global generator --- Source/cmGlobalGenerator.cxx | 41 ++++++++++++++++++++++++++++- Source/cmLocalKdevelopGenerator.cxx | 36 +++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 6b02c9600..753221de7 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -137,6 +137,15 @@ void cmGlobalGenerator::EnableLanguage(std::vectorconst& languages, dst2 += "/CMake"; dst2 += lang; dst2 += "Compiler.cmake"; + cmSystemTools::CopyFileIfDifferent(src2.c_str(), dst2.c_str()); + src2 = m_ConfiguredFilesPath; + src2 += "/CMake"; + src2 += lang; + src2 += "Platform.cmake"; + dst2 = rootBin; + dst2 += "/CMake"; + dst2 += lang; + dst2 += "Platform.cmake"; cmSystemTools::CopyFileIfDifferent(src2.c_str(), dst2.c_str()); } rootBin = m_ConfiguredFilesPath; @@ -145,6 +154,16 @@ void cmGlobalGenerator::EnableLanguage(std::vectorconst& languages, // **** Step 1, find and make sure CMAKE_MAKE_PROGRAM is defined this->FindMakeProgram(mf); + // try and load the CMakeSystem.cmake if it is there + std::string fpath = rootBin; + if(!mf->GetDefinition("CMAKE_SYSTEM_LOADED")) + { + fpath += "/CMakeSystem.cmake"; + if(cmSystemTools::FileExists(fpath.c_str())) + { + mf->ReadListFile(0,fpath.c_str()); + } + } // **** Step 2, Load the CMakeDetermineSystem.cmake file and find out // what platform we are running on if (!isLocal && !mf->GetDefinition("CMAKE_SYSTEM_NAME")) @@ -166,7 +185,7 @@ void cmGlobalGenerator::EnableLanguage(std::vectorconst& languages, } // **** Step 3, load the CMakeSystem.cmake from the binary directory // this file is configured by the CMakeDetermineSystem.cmake file - std::string fpath = rootBin; + fpath = rootBin; if(!mf->GetDefinition("CMAKE_SYSTEM_LOADED")) { fpath += "/CMakeSystem.cmake"; @@ -188,6 +207,26 @@ void cmGlobalGenerator::EnableLanguage(std::vectorconst& languages, "broken CMakeLists.txt file or a problematic release of " "CMake"); } + // try and load the configured file first + std::string loadedLang = "CMAKE_"; + loadedLang += lang; + loadedLang += "_COMPILER_LOADED"; + if(!mf->GetDefinition(loadedLang.c_str())) + { + fpath = rootBin; + fpath += "/CMake"; + fpath += lang; + fpath += "Compiler.cmake"; + if(cmSystemTools::FileExists(fpath.c_str())) + { + if(!mf->ReadListFile(0,fpath.c_str())) + { + cmSystemTools::Error("Could not find cmake module file:", fpath.c_str()); + } + this->SetLanguageEnabled(lang, mf); + } + } + needTestLanguage = true; // must test a language after finding it // read determine LANG compiler std::string determineCompiler = "CMakeDetermine"; diff --git a/Source/cmLocalKdevelopGenerator.cxx b/Source/cmLocalKdevelopGenerator.cxx index 2ca9c2211..906f88b67 100644 --- a/Source/cmLocalKdevelopGenerator.cxx +++ b/Source/cmLocalKdevelopGenerator.cxx @@ -26,6 +26,42 @@ #include "cmake.h" #include + + +// Ideas for moving this stuff into the global generator +// Right now in your local generator you read and write a file to build +// up a list of all files in the project. +// Basically, there does not need to be a local kdevlop generator at all, +// it can just use the unix makefile one. Then in the global generators +// Generate method you do something like this: +// unsigned int i; +// for(i = 0; i < m_LocalGenerators.size(); ++i) +// { +// // Get list of targets and sources from local generator i +// // add them to a file map like you do now in the local generator +// } +// // now write out the Project.filelist file and Project.kdevlop files +// It should most likely do the same thing as the visual studio generators and +// write out all the sub-projects as well. And also honor the exclude from above +// option. + +// I guess at the end of the day it should do something like this: +// TopProject.kdevelop +// TopProject.kdevelop.filelist +// SubProject/SubProject.kdevelop +// SubProject/SubProject.kdevelop.filelist +// if SubProject was in a SUBDIR(EXCLUDE_FROM_ALL SubProject) +// then its files should not be in TopProject.filelist. +// If you look at these functions you can see how the visual studio +// cmGlobalVisualStudio7Generator::Generate() // generate the project +// void cmGlobalVisualStudio7Generator::CollectSubprojects() // create a map of project names to local +// // generators +// void cmGlobalVisualStudio7Generator::OutputSLNFile(cmLocalGenerator* root, +// std::vector& generators) +// // output a project for each project and sub project + + + cmLocalKdevelopGenerator::cmLocalKdevelopGenerator() :cmLocalUnixMakefileGenerator() {