Support MSVS 2017 VC CRT MSM file locations (MSI package)

This commit is contained in:
Mike Gelfand 2019-06-18 07:32:09 +03:00
parent 3d9fd25269
commit a82c26642c
3 changed files with 44 additions and 2 deletions

View 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")

View 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">

View 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}")