| # The Vulkan runtime installer NSIS script |
| |
| !include LogicLib.nsh |
| |
| # Input file locations |
| !define RES "." |
| |
| # Input parameters |
| !ifndef MAJOR |
| !define MAJOR "1" |
| !define MINOR "1" |
| !define PATCH "73" |
| !define BUILD "0.dev" |
| !endif |
| !define VERSION "${MAJOR}.${MINOR}.${PATCH}.${BUILD}" |
| !ifndef PUBLISHER |
| !define PUBLISHER "YourCompany, Inc." |
| !endif |
| !ifndef COPYRIGHT |
| !define COPYRIGHT "" |
| !endif |
| |
| # Installer information |
| Icon ${RES}\V.ico |
| OutFile "VulkanRT-${VERSION}-Installer.exe" |
| InstallDir "$PROGRAMFILES\VulkanRT" |
| |
| RequestExecutionLevel admin |
| AddBrandingImage left 150 |
| Caption "Vulkan Runtime ${VERSION} Setup" |
| Name "Vulkan Runtime ${VERSION}" |
| LicenseData "${RES}\VulkanRT-License.txt" |
| Page custom brandimage "" ": Brand Image" |
| Page license |
| Page instfiles |
| |
| VIProductVersion "${VERSION}" |
| VIAddVersionKey "ProductName" "Vulkan Runtime" |
| VIAddVersionKey "FileVersion" "${VERSION}" |
| VIAddVersionKey "ProductVersion" "${VERSION}" |
| VIAddVersionKey "LegalCopyright" "${COPYRIGHT}" |
| VIAddVersionKey "FileDescription" "Vulkan Runtime Installer" |
| |
| Function brandimage |
| SetOutPath "$TEMP" |
| SetFileAttributes V.bmp temporary |
| File "${RES}\V.bmp" |
| SetBrandingImage "$TEMP/V.bmp" |
| Functionend |
| |
| # Utilties to check if a file is older than this installer or not |
| Function NeedsReplacing |
| Pop $0 |
| |
| # Extract the version of the existing file |
| GetDllVersion "$0" $R0 $R1 |
| IntOp $R2 $R0 >> 16 |
| IntOp $R2 $R2 & 0xffff |
| IntOp $R3 $R0 & 0xffff |
| IntOp $R4 $R1 >> 16 |
| IntOp $R4 $R4 & 0xffff |
| IntOp $R5 $R1 & 0xffff |
| |
| # Check major versions |
| ${IF} ${MAJOR} > $R2 |
| Push True |
| ${ELSEIF} ${MAJOR} < $R2 |
| Push False |
| |
| # Check minor versions |
| ${ELSEIF} ${MINOR} > $R3 |
| Push True |
| ${ELSEIF} ${MINOR} < $R3 |
| Push False |
| |
| # Check patch versions |
| ${ELSEIF} ${PATCH} > $R4 |
| Push True |
| ${ELSEIF} ${PATCH} < $R4 |
| Push False |
| |
| # Check build versions |
| ${ELSEIF} ${BUILD} > $R5 |
| Push True |
| ${ELSEIF} ${BUILD} < $R5 |
| Push False |
| |
| # If they match exactly, then we update |
| ${ELSE} |
| Push True |
| ${ENDIF} |
| FunctionEnd |
| |
| !macro InstallIfNewer SrcPath OutName |
| Push "$OUTDIR\${OutName}" |
| Call NeedsReplacing |
| Pop $0 |
| |
| ${IF} $0 == True |
| DetailPrint "File $OUTDIR\${OutName} (version $R2.$R3.$R4.$R5) will be upgraded to ${VERSION}" |
| File /oname=${OutName} "${SrcPath}" |
| ${ELSE} |
| DetailPrint "File $OUTDIR\${OutName} (version $R2.$R3.$R4.$R5) will not be replaced with ${VERSION}" |
| ${ENDIF} |
| !macroend |
| |
| # Utilities to check if this is a 64-bit OS or not |
| !define IsWow64 `"" IsWow64 ""` |
| !macro _IsWow64 _a _b _t _f |
| !insertmacro _LOGICLIB_TEMP |
| System::Call kernel32::GetCurrentProcess()p.s |
| System::Call kernel32::IsWow64Process(ps,*i0s) |
| Pop $_LOGICLIB_TEMP |
| !insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}` |
| !macroend |
| |
| !define RunningX64 `"" RunningX64 ""` |
| !macro _RunningX64 _a _b _t _f |
| !if ${NSIS_PTR_SIZE} > 4 |
| !insertmacro LogicLib_JumpToBranch `${_t}` `${_f}` |
| !else |
| !insertmacro _IsWow64 `${_a}` `${_b}` `${_t}` `${_f}` |
| !endif |
| !macroend |
| |
| # Installer |
| Section |
| Delete "$INSTDIR\install.log" |
| Delete "$INSTDIR\VULKANRT_LICENSE.rtf" |
| LogSet on |
| |
| # Disable filesystem redirection |
| System::Call kernel32::Wow64EnableWow64FsRedirection(i0) |
| |
| ${IF} ${RunningX64} |
| SetOutPath $WINDIR\System32 |
| !insertmacro InstallIfNewer "${LOADER64}" "vulkan-1.dll" |
| !insertmacro InstallIfNewer "${LOADER64}" "vulkan-1-999-0-0-0.dll" |
| !insertmacro InstallIfNewer "${VULKANINFO64}" "vulkaninfo.exe" |
| !insertmacro InstallIfNewer "${VULKANINFO64}" "vulkaninfo-1-999-0-0-0.exe" |
| SetOutPath $WINDIR\SysWOW64 |
| ${ELSE} |
| SetOutPath $WINDIR\System32 |
| ${ENDIF} |
| |
| # Install 32-bit contents |
| !insertmacro InstallIfNewer "${LOADER32}" "vulkan-1.dll" |
| !insertmacro InstallIfNewer "${LOADER32}" "vulkan-1-999-0-0-0.dll" |
| !insertmacro InstallIfNewer "${VULKANINFO32}" "vulkaninfo.exe" |
| !insertmacro InstallIfNewer "${VULKANINFO32}" "vulkaninfo-1-999-0-0-0.exe" |
| |
| # Dump licenses into a the installation directory |
| SetOutPath "$INSTDIR" |
| AccessControl::DisableFileInheritance $INSTDIR |
| AccessControl::SetFileOwner $INSTDIR "Administrators" |
| AccessControl::ClearOnFile $INSTDIR "Administrators" "FullAccess" |
| AccessControl::SetOnFile $INSTDIR "SYSTEM" "FullAccess" |
| AccessControl::GrantOnFile $INSTDIR "Everyone" "ListDirectory" |
| AccessControl::GrantOnFile $INSTDIR "Everyone" "GenericExecute" |
| AccessControl::GrantOnFile $INSTDIR "Everyone" "GenericRead" |
| AccessControl::GrantOnFile $INSTDIR "Everyone" "ReadAttributes" |
| File "${RES}\VulkanRT-License.txt" |
| |
| LogSet off |
| SectionEnd |