fix(cpn): bundle MSVC++ redist with win64 installer (#6603)

Co-authored-by: Peter Feerick <peter.feerick@gmail.com>
This commit is contained in:
Neil Horne
2025-10-17 11:02:29 +10:00
committed by GitHub
co-authored by Peter Feerick
parent e6ac5f088a
commit 44fcd35591
5 changed files with 5734 additions and 5 deletions
+27
View File
@@ -0,0 +1,27 @@
if(WIN32)
include(InstallRequiredSystemLibraries)
# Determine architecture
# if(CMAKE_CL_64)
set(MSVC_ARCH x64)
# else()
# set(MSVC_ARCH x86)
# endif()
# Attempt to find the vcredist executable
find_program(MSVC_REDIST_EXE
NAMES vc_redist.${MSVC_ARCH}.exe
PATHS
"${MSVC_REDIST_DIR}" # If set by InstallRequiredSystemLibraries
"$ENV{VCINSTALLDIR}Redist/MSVC/v143/" # For VS 2022
"C:/Program Files (x86)/Microsoft Visual Studio/*/VC/Redist/MSVC/*/"
"C:/Program Files/Microsoft Visual Studio/*/*/VC/Redist/MSVC/*/"
NO_DEFAULT_PATH
)
if(MSVC_REDIST_EXE)
message(STATUS "Found VC Redistributable: ${MSVC_REDIST_EXE}")
else()
message(WARNING "VC Redistributable not found.")
endif()
endif()
+8
View File
@@ -407,6 +407,13 @@ elseif(WIN32)
DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR})
endif()
include(FindMSVCRedist)
if(MSVC_REDIST_EXE)
install(FILES ${MSVC_REDIST_EXE}
DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR})
endif()
elseif(APPLE)
# Qt + Cmake + Mac is poorly documented. A lot of this is guesswork
# and trial and error. Do not hesitate to fix it for the better
@@ -514,6 +521,7 @@ if(WIN32)
cmake_path(NATIVE_PATH CMAKE_INSTALL_PREFIX NORMALIZE NSIS_DISTRO) # all files in here will be included in installer
cmake_path(NATIVE_PATH COMPANION_TARGETS_DIR NORMALIZE NSIS_TARGETS_DIR) # all files in here will be included in installer
cmake_path(GET MSVC_REDIST_EXE FILENAME NSIS_MSVC_REDIST_EXE)
set(NSI_FILE "${PROJECT_BINARY_DIR}/companion/companion.nsi")
configure_file("${COMPANION_TARGETS_DIR}/companion.nsi.in" "${NSI_FILE}" @ONLY)
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+84 -5
View File
@@ -7,8 +7,10 @@
!include "MUI2.nsh"
!include "nsDialogs.nsh"
!include "LogicLib.nsh"
!include "@NSIS_TARGETS_DIR@\FileAssociation.nsh"
!include "@NSIS_TARGETS_DIR@\FileFunc.nsh"
!include "@NSIS_TARGETS_DIR@\WordFunc.nsh"
;--------------------------------
;General
@@ -23,6 +25,7 @@
InstallDirRegKey HKCU "Software\@PROJECT_NAME@\Companion @VERSION_FAMILY@" ""
;Compressor options
;SetCompress off
SetCompressor /FINAL /SOLID lzma
SetCompressorDictSize 64
@@ -102,7 +105,75 @@
;--------------------------------
;Installer Sections
Section "@PROJECT_NAME@ Companion @VERSION_FAMILY@" SecDummy
; Visual C++ Redistributable (x64) is a required dependency
;
!macro GetInstalledVCVersionCall _RESULT
Call GetInstalledVCVersion
Pop ${_RESULT}
!macroend
!macro GetInstalledVCVersion
!ifndef GetInstalledVCVersion
!define GetInstalledVCVersion `!insertmacro GetInstalledVCVersionCall`
Function GetInstalledVCVersion
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64" "Version"
StrCpy $R1 "$R0" 1 # get first character
${If} $R1 == "v"
StrCpy $R1 "$R0" "" 1 # strip off v prefix
${EndIf}
Push $R1
FunctionEnd
!endif
!macroend
!define VCREDISTNAME "Microsoft Visual C++ 2015-2022 Redistributable"
!define VCREDISTFILE "@NSIS_DISTRO@\bin\@NSIS_MSVC_REDIST_EXE@"
!define VCREDISTEXE "@NSIS_MSVC_REDIST_EXE@"
Var VCRedistExeVers
Var VCInstVers
!insertmacro GetFileVersion
!insertmacro VersionCompare
!insertmacro GetInstalledVCVersion
Section "${VCREDISTNAME}" SecMSVC
Push $0
Push $1
SetOutPath "$TEMP"
File "${VCREDISTFILE}"
${GetFileVersion} "$TEMP\${VCREDISTEXE}" $VCRedistExeVers
${GetInstalledVCVersion} $VCInstVers
${VersionCompare} "$VCInstVers" "$VCRedistExeVers" $R0
DetailPrint "VC++ Installed: $VCInstVers Redist: $VCRedistExeVers Result: $R0"
${If} $R0 == "2"
DetailPrint "Installing ${VCREDISTNAME}..."
ExecWait "$TEMP\${VCREDISTEXE} /install /passive /norestart"
;IfErrors InstallError ContinueInstall ; vc_redist exit code is unreliable
${GetInstalledVCVersion} $VCInstVers
${VersionCompare} "$VCInstVers" "$VCRedistExeVers" $R0
${If} $R0 == "0"
Goto ContinueInstall
${EndIf}
MessageBox MB_ICONSTOP "\
There was an unexpected error installing$\r$\n\
${VCREDISTNAME}.$\r$\n\
The installation of @PROJECT_NAME@ cannot continue."
Abort
${EndIf}
ContinueInstall:
Delete "$TEMP\${VCREDISTEXE}"
SetOutPath "$INSTDIR" ; Restore original output path
Pop $1
Pop $0
SectionEnd
Section "@PROJECT_NAME@ Companion @VERSION_FAMILY@" SecCpn
SetOutPath "$INSTDIR"
@@ -147,8 +218,11 @@ SectionEnd
;Descriptions
;Language strings
LangString DESC_SecDummy ${LANG_ENGLISH} "Models and settings editor for @PROJECT_NAME@"
LangString DESC_SecDummy ${LANG_FRENCH} "Editeur de r�glages et mod�les pour @PROJECT_NAME@"
LangString DESC_SecCpn ${LANG_ENGLISH} "Models and settings editor for @PROJECT_NAME@"
LangString DESC_SecCpn ${LANG_FRENCH} "Editeur de r glages et mod les pour @PROJECT_NAME@"
LangString DESC_SecMSVC ${LANG_ENGLISH} "Install or update runtime library support files necessary for Companion"
LangString DESC_SecMSVC ${LANG_FRENCH} "Fichiers de support de bibliothèque d'exécution nécessaires pour Companion"
LangString SML_SubTitle ${LANG_ENGLISH} "Choose a location for the Start Menu shortcuts"
LangString SML_SubTitle ${LANG_FRENCH} "Choisissez un emplacement pour les raccourcis de l'application"
LangString SML_MainLabel ${LANG_ENGLISH} "Create start menu shortcuts for:"
@@ -160,12 +234,17 @@ SectionEnd
;Assign language strings to sections
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} $(DESC_SecDummy)
!insertmacro MUI_DESCRIPTION_TEXT ${SecCpn} $(DESC_SecCpn)
!insertmacro MUI_DESCRIPTION_TEXT ${SecMSVC} $(DESC_SecMSVC)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
;--------------------------------
;Uninstaller Section
Section "un.${VCREDISTNAME}"
SectionEnd
Section "un.@PROJECT_NAME@ Companion @VERSION_FAMILY@"
SectionIn RO ; Not deselectable