浏览代码

Merge topic 'llvm-rc'

e53a968ed5 MSVC: Use -D instead of /D in RC_FLAGS
1a281a1acd RC: Pass output file in a way that llvm-rc 7 and below understand
fa339ced67 CMakeVersion.rc: Avoid preprocessor definitions to support llvm-rc

Acked-by: Kitware Robot <[email protected]>
Merge-request: !3007
Brad King 6 年之前
父节点
当前提交
6873e98486
共有 5 个文件被更改,包括 13 次插入19 次删除
  1. 1 1
      Modules/CMakeRCInformation.cmake
  2. 4 2
      Modules/Platform/Windows-MSVC.cmake
  3. 5 14
      Source/CMakeVersion.rc.in
  4. 1 1
      Source/cmcldeps.cxx
  5. 2 1
      Source/cmcmd.cxx

+ 1 - 1
Modules/CMakeRCInformation.cmake

@@ -32,7 +32,7 @@ set(CMAKE_INCLUDE_FLAG_RC "-I")
 # compile a Resource file into an object file
 if(NOT CMAKE_RC_COMPILE_OBJECT)
   set(CMAKE_RC_COMPILE_OBJECT
-    "<CMAKE_RC_COMPILER> <DEFINES> <INCLUDES> <FLAGS> /fo<OBJECT> <SOURCE>")
+    "<CMAKE_RC_COMPILER> <DEFINES> <INCLUDES> <FLAGS> /fo <OBJECT> <SOURCE>")
 endif()
 
 # set this variable so we can avoid loading this more than once.

+ 4 - 2
Modules/Platform/Windows-MSVC.cmake

@@ -374,10 +374,12 @@ macro(__windows_compiler_msvc_enable_rc flags)
     set(CMAKE_RC_COMPILER_INIT rc)
   endif()
   if(NOT CMAKE_RC_FLAGS_INIT)
-    string(APPEND CMAKE_RC_FLAGS_INIT " ${flags}")
+    # llvm-rc fails when flags are specified with /D and no space after
+    string(REPLACE " /D" " -D" fixed_flags " ${flags}")
+    string(APPEND CMAKE_RC_FLAGS_INIT " ${fixed_flags}")
   endif()
   if(NOT CMAKE_RC_FLAGS_DEBUG_INIT)
-    string(APPEND CMAKE_RC_FLAGS_DEBUG_INIT " /D_DEBUG")
+    string(APPEND CMAKE_RC_FLAGS_DEBUG_INIT " -D_DEBUG")
   endif()
 
   enable_language(RC)

+ 5 - 14
Source/CMakeVersion.rc.in

@@ -1,25 +1,16 @@
 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
    file Copyright.txt or https://cmake.org/licensing for details.  */
 
-#define VER_FILEVERSION             @CMake_RCVERSION@
-#define VER_FILEVERSION_STR         "@CMake_RCVERSION_STR@\0"
-
-#define VER_PRODUCTVERSION          @CMake_RCVERSION@
-#define VER_PRODUCTVERSION_STR      "@CMake_RCVERSION_STR@\0"
-
-/* Version-information resource identifier.  */
-#define VS_VERSION_INFO 1
-
-VS_VERSION_INFO VERSIONINFO
-FILEVERSION    	VER_FILEVERSION
-PRODUCTVERSION 	VER_PRODUCTVERSION
+1               VERSIONINFO
+FILEVERSION     @CMake_RCVERSION@
+PRODUCTVERSION  @CMake_RCVERSION@
 BEGIN
     BLOCK "StringFileInfo"
     BEGIN
         BLOCK "040904E4"
         BEGIN
-            VALUE "FileVersion",      VER_FILEVERSION_STR
-            VALUE "ProductVersion",   VER_PRODUCTVERSION_STR
+            VALUE "FileVersion",      "@CMake_RCVERSION_STR@\0"
+            VALUE "ProductVersion",   "@CMake_RCVERSION_STR@\0"
         END
     END
 

+ 1 - 1
Source/cmcldeps.cxx

@@ -276,7 +276,7 @@ int main()
 
     std::string clrest = rest;
     // rc: /fo x.dir\x.rc.res  ->  cl: /out:x.dir\x.rc.res.dep.obj
-    clrest = replace(clrest, "/fo", "/out:");
+    clrest = replace(clrest, "/fo ", "/out:");
     clrest = replace(clrest, objfile, objfile + ".dep.obj ");
 
     cl = "\"" + cl + "\" /P /DRC_INVOKED /TC ";

+ 2 - 1
Source/cmcmd.cxx

@@ -1831,7 +1831,8 @@ int cmVSLink::LinkIncremental()
   // Compile the resource file.
   std::vector<std::string> rcCommand;
   rcCommand.push_back(this->RcPath.empty() ? "rc" : this->RcPath);
-  rcCommand.push_back("/fo" + this->ManifestFileRes);
+  rcCommand.emplace_back("/fo");
+  rcCommand.push_back(this->ManifestFileRes);
   rcCommand.push_back(this->ManifestFileRC);
   if (!RunCommand("RC Pass 1", rcCommand, this->Verbose, FORMAT_DECIMAL)) {
     return -1;