RedPanda-CPP/platform/windows/installer-scripts/utils.nsh

113 lines
2.5 KiB
Plaintext

Var /GLOBAL osArch
Var /GLOBAL sectionDepFlag
Var /GLOBAL sectionDepTemp
!macro DetectOsArch
${If} ${IsNativeIA32}
StrCpy $osArch "x86"
${ElseIf} ${IsNativeAMD64}
StrCpy $osArch "x64"
${ElseIf} ${IsNativeARM64}
StrCpy $osArch "arm64"
${Else}
StrCpy $osArch "unknown"
${EndIf}
!macroend
!macro CheckOsArch
; special check for OpenConsole.exe:
; - 32-bit cannot be installed on 64-bit OS
; - x64 can be install on arm64 OS, following general rule
!ifdef HAVE_OPENCONSOLE
!if "${ARCH}" == "x86"
${If} $osArch != "x86"
MessageBox MB_OK|MB_ICONSTOP "$(ErrorArchMismatch)"
Abort
${EndIf}
!endif
!endif
; x64 cannot be installed on arm64 prior to Windows 11
!if "${ARCH}" == "x64"
${If} $osArch == "arm64"
${AndIfNot} ${AtLeastBuild} 22000
${OrIf} $osArch == "x86"
MessageBox MB_OK|MB_ICONSTOP "$(ErrorArchMismatch)"
Abort
${EndIf}
!endif
!if "${ARCH}" == "arm64"
${If} $osArch != "arm64"
MessageBox MB_OK|MB_ICONSTOP "$(ErrorArchMismatch)"
Abort
${EndIf}
!endif
; warning if not matching
${If} $osArch != "${ARCH}"
MessageBox MB_OK|MB_ICONEXCLAMATION "$(WarningArchMismatch)"
${EndIf}
!macroend
!macro CheckOsBuild
${IfNot} ${AtLeastBuild} ${REQUIRED_WINDOWS_BUILD}
MessageBox MB_OK|MB_ICONSTOP "$(ErrorWindowsBuildRequired)"
Abort
${EndIf}
!macroend
!macro CheckV2Installer
SetRegView 32
Call UninstallV2
SetRegView 64
Call UninstallV2
!if "${ARCH}" == "x86"
SetRegView 32
!else
SetRegView 64
!endif
!macroend
!macro CheckPreviousInstaller
SetRegView 32
Call UninstallExisting
SetRegView 64
Call UninstallExisting
!if "${ARCH}" == "x86"
SetRegView 32
!else
SetRegView 64
!endif
!macroend
!macro DisableSection section
SectionGetFlags ${section} $sectionDepFlag
; unset SF_SELECTED
IntOp $sectionDepTemp ${SF_SELECTED} ~
IntOp $sectionDepFlag $sectionDepFlag & $sectionDepTemp
; set SF_RO
IntOp $sectionDepFlag $sectionDepFlag | ${SF_RO}
SectionSetFlags ${section} $sectionDepFlag
!macroend
!macro SectionAction_CheckMingw64
!ifdef HAVE_MINGW64
${If} $osArch == "arm64"
${AndIfNot} ${AtLeastBuild} 22000
${OrIf} $osArch == "x86"
!insertmacro DisableSection ${SectionMingw64}
${EndIf}
!endif
!macroend
!macro SectionAction_CheckCompress
; compact os is available since windows 10
${IfNot} ${AtLeastBuild} 10240
!insertmacro DisableSection ${SectionCompress}
${EndIf}
!macroend