Browse Source

Add support for windows resources with mingw/msys.

Bill Hoffman 15 years ago
parent
commit
b2f308c8f9

+ 6 - 0
Modules/CMakeDetermineRCCompiler.cmake

@@ -54,6 +54,12 @@ ENDIF(NOT CMAKE_RC_COMPILER)
 
 MARK_AS_ADVANCED(CMAKE_RC_COMPILER)  
 
+GET_FILENAME_COMPONENT(_CMAKE_RC_COMPILER_NAME_WE ${CMAKE_RC_COMPILER} NAME_WE)
+IF(_CMAKE_RC_COMPILER_NAME_WE STREQUAL "windres")
+  SET(CMAKE_RC_OUTPUT_EXTENSION .obj)
+ELSE()
+  SET(CMAKE_RC_OUTPUT_EXTENSION .res)
+ENDIF()
 
 # configure variables set in this file for fast reload later on
 CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeRCCompiler.cmake.in 

+ 1 - 1
Modules/CMakeRCCompiler.cmake.in

@@ -2,5 +2,5 @@ SET(CMAKE_RC_COMPILER "@CMAKE_RC_COMPILER@")
 SET(CMAKE_RC_COMPILER_ARG1 "@CMAKE_RC_COMPILER_ARG1@")
 SET(CMAKE_RC_COMPILER_LOADED 1)
 SET(CMAKE_RC_SOURCE_FILE_EXTENSIONS rc)
-SET(CMAKE_RC_OUTPUT_EXTENSION .res)
+SET(CMAKE_RC_OUTPUT_EXTENSION @CMAKE_RC_OUTPUT_EXTENSION@)
 SET(CMAKE_RC_COMPILER_ENV_VAR "RC")

+ 2 - 0
Modules/Platform/Windows-GNU.cmake

@@ -56,6 +56,8 @@ if("${_help}" MATCHES "GNU ld .* 2\\.1[1-6]")
   set(__WINDOWS_GNU_LD_RESPONSE 0)
 endif()
 
+enable_language(RC)
+
 macro(__windows_compiler_gnu lang)
 
   if(MSYS OR MINGW)

+ 1 - 0
Modules/Platform/Windows-windres.cmake

@@ -0,0 +1 @@
+SET(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> -O coff <FLAGS> <DEFINES> <SOURCE> <OBJECT>")

+ 7 - 0
Source/cmGlobalMSYSMakefileGenerator.cxx

@@ -69,9 +69,16 @@ void cmGlobalMSYSMakefileGenerator
     {
     gxx = tgxx;
     }
+  std::string trc = cmSystemTools::FindProgram("windres", locations);
+  std::string rc = "windres.exe";
+  if(trc.size())
+    {
+    rc = trc;
+    }
   mf->AddDefinition("MSYS", "1");
   mf->AddDefinition("CMAKE_GENERATOR_CC", gcc.c_str());
   mf->AddDefinition("CMAKE_GENERATOR_CXX", gxx.c_str());
+  mf->AddDefinition("CMAKE_GENERATOR_RC", rc.c_str());
   this->cmGlobalUnixMakefileGenerator3::EnableLanguage(l, mf, optional);
 
   if(!mf->IsSet("CMAKE_AR") &&

+ 7 - 0
Source/cmGlobalMinGWMakefileGenerator.cxx

@@ -44,8 +44,15 @@ void cmGlobalMinGWMakefileGenerator
     {
     gxx = tgxx;
     }
+  std::string trc = cmSystemTools::FindProgram("windres", locations);
+  std::string rc = "windres.exe";
+  if(trc.size())
+    {
+    rc = trc;
+    }
   mf->AddDefinition("CMAKE_GENERATOR_CC", gcc.c_str());
   mf->AddDefinition("CMAKE_GENERATOR_CXX", gxx.c_str());
+  mf->AddDefinition("CMAKE_GENERATOR_RC", rc.c_str());
   this->cmGlobalUnixMakefileGenerator3::EnableLanguage(l, mf, optional);
 }