[Cmake-commits] [cmake-commits] king committed cmGlobalGenerator.cxx 1.236 1.237 cmGlobalGenerator.h 1.112 1.113
cmake-commits at cmake.org
cmake-commits at cmake.org
Wed Jul 16 11:04:00 EDT 2008
Update of /cvsroot/CMake/CMake/Source
In directory public:/mounts/ram/cvs-serv10691/Source
Modified Files:
cmGlobalGenerator.cxx cmGlobalGenerator.h
Log Message:
BUG: Fix try_compile during EnableLanguage
- The source-file signature of try_compile looks up the language
of the source file using the extension-to-language map so that
it knows what language to enable in the generated project.
- This map needs to be filled before loading a file specified by
CMAKE_USER_MAKE_RULES_OVERRIDE
CMAKE_USER_MAKE_RULES_OVERRIDE_<LANG>
so that the user file may call the try_compile() source-file
signature.
- It must still be re-filled after loading CMake<LANG>Information.cmake
in case the compiler- or platform-specific files added anything.
- See bug #7340.
Index: cmGlobalGenerator.h
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmGlobalGenerator.h,v
retrieving revision 1.112
retrieving revision 1.113
diff -C 2 -d -r1.112 -r1.113
*** cmGlobalGenerator.h 8 Jul 2008 15:52:25 -0000 1.112
--- cmGlobalGenerator.h 16 Jul 2008 15:03:58 -0000 1.113
***************
*** 265,268 ****
--- 265,269 ----
void SetLanguageEnabledFlag(const char* l, cmMakefile* mf);
void SetLanguageEnabledMaps(const char* l, cmMakefile* mf);
+ void FillExtensionToLanguageMap(const char* l, cmMakefile* mf);
virtual bool CheckALLOW_DUPLICATE_CUSTOM_TARGETS();
Index: cmGlobalGenerator.cxx
===================================================================
RCS file: /cvsroot/CMake/CMake/Source/cmGlobalGenerator.cxx,v
retrieving revision 1.236
retrieving revision 1.237
diff -C 2 -d -r1.236 -r1.237
*** cmGlobalGenerator.cxx 5 Jul 2008 13:29:33 -0000 1.236
--- cmGlobalGenerator.cxx 16 Jul 2008 15:03:58 -0000 1.237
***************
*** 560,563 ****
--- 560,568 ----
internal maps, this is done in SetLanguageEnabledMaps() which is called
after the system- and compiler specific files have been loaded.
+
+ This split was done originally so that compiler-specific configuration
+ files could change the object file extension
+ (CMAKE_<LANG>_OUTPUT_EXTENSION) before the CMake variables were copied
+ to the C++ maps.
*/
void cmGlobalGenerator::SetLanguageEnabled(const char* l, cmMakefile* mf)
***************
*** 567,573 ****
}
! void cmGlobalGenerator::SetLanguageEnabledFlag(const char* l, cmMakefile*)
{
this->LanguageEnabled[l] = true;
}
--- 572,585 ----
}
! void cmGlobalGenerator::SetLanguageEnabledFlag(const char* l, cmMakefile* mf)
{
this->LanguageEnabled[l] = true;
+
+ // Fill the language-to-extension map with the current variable
+ // settings to make sure it is available for the try_compile()
+ // command source file signature. In SetLanguageEnabledMaps this
+ // will be done again to account for any compiler- or
+ // platform-specific entries.
+ this->FillExtensionToLanguageMap(l, mf);
}
***************
*** 628,651 ****
}
! std::string extensionsVar = std::string("CMAKE_") +
! std::string(l) + std::string("_SOURCE_FILE_EXTENSIONS");
std::string ignoreExtensionsVar = std::string("CMAKE_") +
std::string(l) + std::string("_IGNORE_EXTENSIONS");
std::string ignoreExts = mf->GetSafeDefinition(ignoreExtensionsVar.c_str());
- std::string exts = mf->GetSafeDefinition(extensionsVar.c_str());
std::vector<std::string> extensionList;
! cmSystemTools::ExpandListArgument(exts, extensionList);
for(std::vector<std::string>::iterator i = extensionList.begin();
i != extensionList.end(); ++i)
{
! this->ExtensionToLanguage[*i] = l;
}
! cmSystemTools::ExpandListArgument(ignoreExts, extensionList);
for(std::vector<std::string>::iterator i = extensionList.begin();
i != extensionList.end(); ++i)
{
! this->IgnoreExtensions[*i] = true;
}
-
}
--- 640,674 ----
}
! // The map was originally filled by SetLanguageEnabledFlag, but
! // since then the compiler- and platform-specific files have been
! // loaded which might have added more entries.
! this->FillExtensionToLanguageMap(l, mf);
!
std::string ignoreExtensionsVar = std::string("CMAKE_") +
std::string(l) + std::string("_IGNORE_EXTENSIONS");
std::string ignoreExts = mf->GetSafeDefinition(ignoreExtensionsVar.c_str());
std::vector<std::string> extensionList;
! cmSystemTools::ExpandListArgument(ignoreExts, extensionList);
for(std::vector<std::string>::iterator i = extensionList.begin();
i != extensionList.end(); ++i)
{
! this->IgnoreExtensions[*i] = true;
}
!
! }
!
! void cmGlobalGenerator::FillExtensionToLanguageMap(const char* l,
! cmMakefile* mf)
! {
! std::string extensionsVar = std::string("CMAKE_") +
! std::string(l) + std::string("_SOURCE_FILE_EXTENSIONS");
! std::string exts = mf->GetSafeDefinition(extensionsVar.c_str());
! std::vector<std::string> extensionList;
! cmSystemTools::ExpandListArgument(exts, extensionList);
for(std::vector<std::string>::iterator i = extensionList.begin();
i != extensionList.end(); ++i)
{
! this->ExtensionToLanguage[*i] = l;
}
}
More information about the Cmake-commits
mailing list