]> granicus.if.org Git - transmission/commitdiff
Support MSVS 2017 VC CRT MSM file locations (MSI package)
authorMike Gelfand <mikedld@mikedld.com>
Tue, 18 Jun 2019 04:32:09 +0000 (07:32 +0300)
committerMike Gelfand <mikedld@mikedld.com>
Tue, 18 Jun 2019 05:10:30 +0000 (08:10 +0300)
dist/msi/CMakeLists.txt
dist/msi/Transmission.wxs
dist/msi/UtilityFunctions.cmake

index 49aa53bdd1d143741261649896cc586800dea7b9..991b46b7ea6e07277182688cf084dca3e91ad0d0 100644 (file)
@@ -20,6 +20,8 @@ if(NOT TR_QT_DIR)
     set(TR_QT_DIR "$<TARGET_FILE_DIR:Qt5::Core>/..")
 endif()
 
+find_msvc_crt_msm(TR_MSVC_CRT_MSM_FILE)
+
 set(ICONS_DIR "${CMAKE_SOURCE_DIR}/qt/icons/hicolor")
 png2ico(Transmission.ico
     "${ICONS_DIR}/16x16/transmission-qt.png"
@@ -67,6 +69,7 @@ wix_candle(${PROJECT_NAME}_OBJS
         "WebSrcDir=${WEBSRCDIR}"
         "TrQmSrcDir=${TRQMSRCDIR}"
         "QtQmSrcDir=${QTQMSRCDIR}"
+        "MsvcCrtMsmFile=${TR_MSVC_CRT_MSM_FILE}"
     EXTRA_DEPENDS
         "${CMAKE_CURRENT_BINARY_DIR}/TransmissionConfig.wxi")
 
index 6bde695228d35b2a27b2809fa06bf61e39ee711a..33c92b63d9e06ca7f5ad4cc1ce4e8dc6ca1b4635 100644 (file)
@@ -42,7 +42,7 @@
     <Property Id="DiskPrompt" Value="Transmission $(var.TrVersion) Installation [1]" />
 
     <Directory Id="TARGETDIR" Name="SourceDir">
-      <Merge Id="VCRedist" SourceFile="$(env.CommonProgramFiles(x86))\Merge Modules\Microsoft_VC140_CRT_$(sys.BUILDARCH).msm" DiskId="1" Language="0" />
+      <Merge Id="VCRedist" SourceFile="$(var.MsvcCrtMsmFile)" DiskId="1" Language="0" />
       <Directory Id="$(var.PlatformProgramFilesFolder)" Name="PFiles">
         <Directory Id="INSTALLDIR" Name="Transmission">
           <Directory Id="WEBINSTALLDIR" Name="web" />
@@ -53,7 +53,7 @@
     </Directory>
 
     <Feature Id="CompleteInstall" Title="Transmission" Level="1" AllowAdvertise="no" Display="expand" ConfigurableDirectory="INSTALLDIR">
-      <Feature Id="VCRedist" Title="Visual C++ 14.0 Runtime" Level="1" AllowAdvertise="no" Display="hidden">
+      <Feature Id="VCRedist" Title="Visual C++ Runtime" Level="1" AllowAdvertise="no" Display="hidden">
         <MergeRef Id="VCRedist" />
       </Feature>
       <Feature Id="CommonLibs" Level="1" AllowAdvertise="no" Display="hidden">
index f46069be776653195724afa8b829b126da235a19..a8122e3ab986f0cfd2046344c88382e190162816 100644 (file)
@@ -1,5 +1,44 @@
 include(CMakeParseArguments)
 
+function(find_msvc_crt_msm OUTPUT_VAR)
+    if(${OUTPUT_VAR})
+        return()
+    endif()
+
+    message(STATUS "Looking for a CRT MSM:")
+
+    if(NOT MSVC_TOOLSET_VERSION)
+        if(MSVC_VERSION GREATER_EQUAL 1920)
+            set(MSVC_TOOLSET_VERSION 142)
+        elseif(MSVC_VERSION GREATER_EQUAL 1910)
+            set(MSVC_TOOLSET_VERSION 141)
+        elseif(MSVC_VERSION GREATER_EQUAL 1900)
+            set(MSVC_TOOLSET_VERSION 140)
+        endif()
+    endif()
+
+    set(MSM_FILE "Microsoft_VC${MSVC_TOOLSET_VERSION}_CRT_${ARCH}.msm")
+    message(STATUS "  * File name: ${MSM_FILE}")
+
+    set(VC_DIR "${CMAKE_CXX_COMPILER}")
+    while(VC_DIR AND NOT VC_DIR MATCHES "/VC$")
+        get_filename_component(VC_DIR "${VC_DIR}" DIRECTORY)
+    endwhile()
+    message(STATUS "  * VC directory: ${VC_DIR}")
+
+    file(GLOB VC_VER_DIRS "${VC_DIR}/Redist/MSVC/*")
+    message(STATUS "  * Redist directories: ${VC_VER_DIRS}")
+
+    set(CMN_PF_DIR "CommonProgramFiles(x86)")
+    find_file(${OUTPUT_VAR}
+        NAMES "${MSM_FILE}"
+        PATHS ${VC_VER_DIRS} $ENV{${CMN_PF_DIR}}
+        PATH_SUFFIXES "MergeModules" "Merge Modules")
+    message(STATUS "  * Result: ${${OUTPUT_VAR}}")
+
+    set(${OUTPUT_VAR} "${${OUTPUT_VAR}}" PARENT_SCOPE)
+endfunction()
+
 function(png2ico OUTPUT_FILE)
     if(NOT IS_ABSOLUTE "${OUTPUT_FILE}")
         set(OUTPUT_FILE "${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE}")