1
0
Fork 0
Univerxel/resource/package/install.nsi.in

350 lines
8.6 KiB
Plaintext

!include "MUI2.nsh"
;--------------------------------
; The name of the installer
Name "Univerxel @CMAKE_PROJECT_VERSION_MAJOR@.@CMAKE_PROJECT_VERSION_MINOR@.@CMAKE_PROJECT_VERSION_PATCH@"
Icon "../resource/package/univerxel.ico"
!define MUI_ICON "../resource/package/univerxel.ico"
; Request application privileges for Windows Vista and higher
RequestExecutionLevel user
; Build Unicode installer
Unicode True
SetCompressor /SOLID LZMA
; The default installation directory
InstallDir $LOCALAPPDATA\Univerxel
; Registry key to check for directory (so if you install again, it will
; overwrite the old one automatically)
InstallDirRegKey HKLM "Software\Univerxel" "Install_Dir"
VIAddVersionKey "CompanyName" "Shu"
VIAddVersionKey "FileDescription" "Univerxel installer"
VIAddVersionKey "ProductName" "Univerxel installer"
VIAddVersionKey "LegalCopyright" "MIT - Shu"
VIAddVersionKey "FileVersion" "@CMAKE_PROJECT_VERSION_MAJOR@.@CMAKE_PROJECT_VERSION_MINOR@.@CMAKE_PROJECT_VERSION_PATCH@"
VIProductVersion "@CMAKE_PROJECT_VERSION_MAJOR@.@CMAKE_PROJECT_VERSION_MINOR@.@CMAKE_PROJECT_VERSION_PATCH@.1"
OutFile "Univerxel-installer.exe"
;--------------------------------
;Variables
Var StartMenuFolder
;--------------------------------
; Pages
!define MUI_ABORTWARNING
!define MUI_COMPONENTSPAGE_NODESC
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "Univerxel"
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\Univerxel"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
!insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
;--------------------------------
Function WordFind2X
!define WordFind2X `!insertmacro WordFind2XCall`
!macro WordFind2XCall _STRING _DELIMITER1 _DELIMITER2 _NUMBER _RESULT
Push `${_STRING}`
Push `${_DELIMITER1}`
Push `${_DELIMITER2}`
Push `${_NUMBER}`
Call WordFind2X
Pop ${_RESULT}
!macroend
Exch $2
Exch
Exch $1
Exch
Exch 2
Exch $0
Exch 2
Exch 3
Exch $R0
Exch 3
Push $3
Push $4
Push $5
Push $6
Push $7
Push $8
Push $9
Push $R1
Push $R2
ClearErrors
StrCpy $R2 ''
StrCpy $3 $2 1
StrCpy $2 $2 '' 1
StrCmp $3 'E' 0 +3
StrCpy $R2 E
goto -4
StrCmp $3 '+' +5
StrCmp $3 '-' +4
StrCmp $3 '#' restart
StrCmp $3 '/' restart
goto error3
StrCpy $4 $2 2 -2
StrCmp $4 '{{' +9
StrCmp $4 '}}' +8
StrCmp $4 '{*' +7
StrCmp $4 '*{' +6
StrCmp $4 '*}' +5
StrCmp $4 '}*' +4
StrCmp $4 '{}' +3
StrCpy $4 ''
goto +2
StrCpy $2 $2 -2
IntOp $2 $2 + 0
StrCmp $2 0 error2
restart:
StrCmp $R0 '' error1
StrCpy $5 -1
StrCpy $6 0
StrCpy $7 ''
StrLen $8 $0
StrLen $9 $1
loop:
IntOp $5 $5 + 1
delim1:
StrCpy $R1 $R0 $8 $5
StrCmp $R1$6 0 error1
StrCmp $R1 '' minus
StrCmp $R1 $0 +2
StrCmp $7 '' loop delim2
StrCmp $0 $1 0 +2
StrCmp $7 '' 0 delim2
IntOp $7 $5 + $8
StrCpy $5 $7
goto delim1
delim2:
StrCpy $R1 $R0 $9 $5
StrCmp $R1 $1 0 loop
IntOp $6 $6 + 1
StrCmp $3$6 '+$2' plus
StrCmp $3 '/' 0 nextword
IntOp $R1 $5 - $7
StrCpy $R1 $R0 $R1 $7
StrCmp $R1 $2 0 +3
StrCpy $R1 $6
goto end
nextword:
IntOp $5 $5 + $9
StrCpy $7 ''
goto delim1
minus:
StrCmp $3 '-' 0 sum
StrCpy $3 +
IntOp $2 $6 - $2
IntOp $2 $2 + 1
IntCmp $2 0 error2 error2 restart
sum:
StrCmp $3 '#' 0 error2
StrCpy $R1 $6
goto end
plus:
StrCmp $4 '' 0 +4
IntOp $R1 $5 - $7
StrCpy $R1 $R0 $R1 $7
goto end
IntOp $5 $5 + $9
IntOp $7 $7 - $8
StrCmp $4 '{*' +2
StrCmp $4 '*{' 0 +3
StrCpy $R1 $R0 $5
goto end
StrCmp $4 '*}' +2
StrCmp $4 '}*' 0 +3
StrCpy $R1 $R0 '' $7
goto end
StrCmp $4 '}}' 0 +3
StrCpy $R1 $R0 '' $5
goto end
StrCmp $4 '{{' 0 +3
StrCpy $R1 $R0 $7
goto end
StrCmp $4 '{}' 0 error3
StrCpy $5 $R0 '' $5
StrCpy $7 $R0 $7
StrCpy $R1 '$7$5'
goto end
error3:
StrCpy $R1 3
goto error
error2:
StrCpy $R1 2
goto error
error1:
StrCpy $R1 1
error:
StrCmp $R2 'E' 0 +3
SetErrors
end:
StrCpy $R0 $R1
Pop $R2
Pop $R1
Pop $9
Pop $8
Pop $7
Pop $6
Pop $5
Pop $4
Pop $3
Pop $2
Pop $1
Pop $0
Exch $R0
FunctionEnd
; The stuff to install
Section "Check updates"
upretry:
inetc::get /canceltext "Skip updates !" "https://framagit.org/api/v4/projects/67835/packages?page=1&per_page=1&sort=desc&order_by=created_at&package_type=generic&package_name=Univerxel" "$TEMP\packages.json" /end
Pop $0
StrCmp $0 "OK" updlok
DetailPrint "Failed to check updates: $0"
MessageBox MB_ABORTRETRYIGNORE|MB_ICONEXCLAMATION "Failed to check updates, click IGNORE to skip updates" IDIGNORE upskip IDRETRY upretry
Abort
updlok:
FileOpen $4 "$TEMP\packages.json" r
FileRead $4 $1
FileClose $4
Delete "$TEMP\packages.json"
${WordFind2X} $1 `"version":"` `"` "E+1" $R0
IfErrors 0 upcmp
upmal:
DetailPrint "Malformed pacakges: $R0"
MessageBox MB_ABORTRETRYIGNORE|MB_ICONEXCLAMATION "Failed to check updates, click IGNORE to skip updates" IDIGNORE upskip IDRETRY upretry
upcmp:
StrCpy $4 $R0
StrCmp $4 "@CMAKE_PROJECT_VERSION_MAJOR@.@CMAKE_PROJECT_VERSION_MINOR@.@CMAKE_PROJECT_VERSION_PATCH@" upskip upfound
upfound:
DetailPrint "Update found: $R0"
${WordFind2X} $1 `"web_path":"` `"` "E+1" $R0
IfErrors upmal 0
StrCpy $3 $R0
MessageBox MB_YESNO|MB_ICONINFORMATION "Version: $4 found, click YES to download new one" IDNO upskip
ExecShell "open" "https://framagit.org/$3" SW_SHOWNORMAL
upskip:
DetailPrint "Updates check done"
SectionEnd
Section "Dependencies"
SectionIn RO
SetOutPath $INSTDIR
File "package\libcrypto-1_1-x64.dll"
File "package\openssl-license.txt"
; Write the installation path into the registry
WriteRegStr HKLM SOFTWARE\Univerxel "Install_Dir" "$INSTDIR"
; Write the uninstall keys for Windows
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Univerxel" "DisplayName" "Univerxel"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Univerxel" "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Univerxel" "NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Univerxel" "NoRepair" 1
WriteUninstaller "$INSTDIR\uninstall.exe"
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
CreateDirectory "$SMPROGRAMS\$StartMenuFolder"
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
Section "All in one"
SetOutPath $INSTDIR
File "Release\univerxel.exe"
File /r content
SetOverwrite off
File /oname=config.toml "..\resource\package\config.full.toml"
SetOverwrite on
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
CreateShortcut "$SMPROGRAMS\$StartMenuFolder\Univerxel (Full).lnk" "$INSTDIR\univerxel.exe"
!insertmacro MUI_STARTMENU_WRITE_END
!define MUI_FINISHPAGE_RUN "$INSTDIR\univerxel.exe"
!define MUI_FINISHPAGE_RUN_NOTCHECKED
SectionEnd
Section /o "Client"
SetOutPath $INSTDIR
File "Release\univerxel-client.exe"
File /r /x *.pem /x *.dict content
SetOverwrite off
File /oname=config.toml "..\resource\package\config.client.toml"
SetOverwrite on
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
CreateShortcut "$SMPROGRAMS\$StartMenuFolder\Univerxel (Client).lnk" "$INSTDIR\univerxel-client.exe"
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
Section /o "Server"
SetOutPath $INSTDIR
File "Release\univerxel-server.exe"
CreateDirectory "$INSTDIR\content"
File /oname=content\cert.pem content\cert.pem
File /oname=content\key.pem content\key.pem
File /oname=content\zstd.dict content\zstd.dict
SetOverwrite off
File /oname=config.toml "..\resource\package\config.server.toml"
SetOverwrite on
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
CreateShortcut "$SMPROGRAMS\$StartMenuFolder\Univerxel (Server).lnk" "$INSTDIR\univerxel-server.exe"
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
;--------------------------------
; Uninstaller
Section "Uninstall"
; Remove registry keys
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Univerxel"
DeleteRegKey HKLM SOFTWARE\Univerxel
; Remove files and uninstaller
Delete "$INSTDIR\libcrypto-1_1-x64.dll"
Delete "$INSTDIR\openssl-license.txt"
Delete "$INSTDIR\univerxel.exe"
Delete "$INSTDIR\univerxel-client.exe"
Delete "$INSTDIR\univerxel-server.exe"
RMDir /r "$INSTDIR\content"
Delete "$INSTDIR\uninstall.exe"
; Remove shortcuts, if any
!insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder
Delete "$SMPROGRAMS\$StartMenuFolder\*.lnk"
; Remove directories
RMDir /r "$SMPROGRAMS\$StartMenuFolder"
RMDir /r "$INSTDIR"
DeleteRegKey /ifempty HKCU "Software\Univerxel"
SectionEnd