Browse Source

Merge topic 'cpack-wix-arch'

cae7e5e38d CPack/WIX: Add CPACK_WIX_ARCHITECTURE to support Windows for ARM installers

Acked-by: Kitware Robot <[email protected]>
Merge-request: !7236
Brad King 3 years ago
parent
commit
7d78dcbebb

+ 9 - 0
Help/cpack_gen/wix.rst

@@ -328,3 +328,12 @@ Windows using WiX.
  If this variable is set then the inclusion of WixUIExtensions is skipped,
  i.e. the ``-ext "WixUIExtension"`` command line is not included during
  the execution of the WiX light tool.
+
+.. variable:: CPACK_WIX_ARCHITECTURE
+
+ .. versionadded:: 3.24
+
+ This variable can be optionally set to specify the target architecture
+ of the installer. May for example be set to ``x64`` or ``arm64``.
+
+ When unspecified, CPack will default to ``x64`` or ``x86``.

+ 6 - 0
Help/release/dev/cpack-wix-arch.rst

@@ -0,0 +1,6 @@
+cpack-wix-arch
+--------------
+
+* The :cpack_gen:`CPack WIX Generator` gained a new variable,
+  :variable:`CPACK_WIX_ARCHITECTURE`, to specify the installer architecture
+  in order to support computers running Windows for ARM.

+ 12 - 1
Source/CPack/WiX/cmCPackWIXGenerator.cxx

@@ -89,10 +89,21 @@ bool cmCPackWIXGenerator::RunCandleCommand(std::string const& sourceFile,
     return false;
   }
 
+  std::string arch;
+  if (cmValue archOpt = GetOption("CPACK_WIX_ARCHITECTURE")) {
+    arch = *archOpt;
+  } else {
+    arch = GetArchitecture();
+    cmCPackLogger(
+      cmCPackLog::LOG_VERBOSE,
+      "CPACK_WIX_ARCHITECTURE was not set. Invoking WiX with architecture "
+        << arch << " . " << std::endl);
+  }
+
   std::ostringstream command;
   command << QuotePath(executable);
   command << " -nologo";
-  command << " -arch " << GetArchitecture();
+  command << " -arch " << arch;
   command << " -out " << QuotePath(objectFile);
 
   for (std::string const& ext : CandleExtensions) {