[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