; Jamulus NSIS installer script
!include LogicLib.nsh
!include x64.nsh

!define APP_NAME          "Jamulus"
!define APP_EXE           "Jamulus.exe"
!define AUTORUN_NAME      "Jamulus server"
!define UNINSTALL_EXE     "Uninstall.exe"
!define INSTALLER_NAME    "Jamulusinstaller.exe"
!define BINARY_PATH       "..\release\"
!define VS_REDIST_EXE     "vc_redist.x86.exe"
!define UNINST_KEY        "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}"
!define AUTORUN_KEY       "Software\Microsoft\Windows\CurrentVersion\Run"


SetCompressor lzma
Name          "${APP_NAME}"
Caption       "${APP_NAME}"
OutFile       "${INSTALLER_NAME}"
InstallDir    "$PROGRAMFILES\${APP_NAME}"

LicenseText   "License"
LicenseData   "..\COPYING"

Page license
Page directory
Page instfiles


Section

  ; check if software is currently running
  !addplugindir ..\windows
  FindProcDLL::FindProc "${APP_EXE}"
  IntCmp $R0 1 0 notRunning
    MessageBox MB_OK|MB_ICONEXCLAMATION "${APP_NAME} is running. Please close it and run the setup again." /SD IDOK
    Abort
  notRunning:

  ; add reg keys so that software appears in Windows "Add/Remove Software"
  WriteRegStr HKLM "${UNINST_KEY}" "DisplayName" "${APP_NAME} (remove only)"
  WriteRegStr HKLM "${UNINST_KEY}" "UninstallString" '"$INSTDIR\${UNINSTALL_EXE}"'

  SetOutPath       $INSTDIR

  ; main application
  ${If} ${RunningX64}
  File             "${BINARY_PATH}${APP_EXE}"
  ${Else}
  File             "${BINARY_PATH}x86\${APP_EXE}"
  ${EndIf}

  ; QT dlls
  ${If} ${RunningX64}
  File             "$%QTDIR64%\bin\Qt5Core.dll"
  File             "$%QTDIR64%\bin\Qt5Gui.dll"
  File             "$%QTDIR64%\bin\Qt5Widgets.dll"
  File             "$%QTDIR64%\bin\Qt5Network.dll"
  File             "$%QTDIR64%\bin\Qt5Xml.dll"
  File             "$%QTDIR64%\bin\D3DCompiler_47.dll"
  File             "$%QTDIR64%\bin\libEGL.dll"
  File             "$%QTDIR64%\bin\libGLESv2.dll"
  ${Else}
  File             "$%QTDIR32%\bin\Qt5Core.dll"
  File             "$%QTDIR32%\bin\Qt5Gui.dll"
  File             "$%QTDIR32%\bin\Qt5Widgets.dll"
  File             "$%QTDIR32%\bin\Qt5Network.dll"
  File             "$%QTDIR32%\bin\Qt5Xml.dll"
  File             "$%QTDIR32%\bin\D3DCompiler_47.dll"
  File             "$%QTDIR32%\bin\libEGL.dll"
  File             "$%QTDIR32%\bin\libGLESv2.dll"
  ${EndIf}

  ; other files
  File             "..\COPYING"

  ; temporarily create Microsoft Visual Studio redistributable
  ${If} ${RunningX64}
  File             "$%VS_REDIST64_EXE%"
  ExecWait         '"$INSTDIR\$%VS_REDIST64_EXE%" /q /norestart'
  ${Else}
  File             "$%VS_REDIST32_EXE%"
  ExecWait         '"$INSTDIR\$%VS_REDIST32_EXE%" /q /norestart'
  ${EndIf}

  ; uninstaller
  WriteUninstaller $INSTDIR\${UNINSTALL_EXE}

  ; shortcuts
  CreateShortCut   "$DESKTOP\${APP_NAME}.lnk" "$OUTDIR\${APP_EXE}"

  CreateDirectory  "$SMPROGRAMS\${APP_NAME}"
  CreateShortCut   "$SMPROGRAMS\${APP_NAME}\${APP_NAME}.lnk" "$INSTDIR\${APP_EXE}"
  CreateShortCut   "$SMPROGRAMS\${APP_NAME}\${APP_NAME} Server.lnk" "$INSTDIR\${APP_EXE}" "-s"
  CreateShortCut   "$SMPROGRAMS\${APP_NAME}\${UNINSTALL_EXE}.lnk" "$INSTDIR\${UNINSTALL_EXE}"

  ; cleanup: remove temporary Microsoft Visual Studio redistributable executable
  ${If} ${RunningX64}
  Delete           $INSTDIR\$%VS_REDIST64_EXE%
  ${Else}
  Delete           $INSTDIR\$%VS_REDIST32_EXE%
  ${EndIf}

  ; additional platform dlls
  SetOutPath       $INSTDIR\platforms
  ${If} ${RunningX64}
  File             "$%QTDIR64%\plugins\platforms\qwindows.dll"
  File             "$%QTDIR64%\plugins\platforms\qminimal.dll"  
  ${Else}
  File             "$%QTDIR32%\plugins\platforms\qwindows.dll"
  File             "$%QTDIR32%\plugins\platforms\qminimal.dll"  
  ${EndIf}

SectionEnd


Section "Uninstall"

DeleteRegKey HKLM "${UNINST_KEY}"

; the software may have written an auto run entry in the registry, remove it
DeleteRegValue HKCU "${AUTORUN_KEY}" "${AUTORUN_NAME}"

Delete "$DESKTOP\${APP_NAME}.lnk"
Delete "$SMPROGRAMS\${APP_NAME}\${APP_NAME}.lnk"
Delete "$SMPROGRAMS\${APP_NAME}\${APP_NAME} server.lnk"
Delete "$SMPROGRAMS\${APP_NAME}\${UNINSTALL_EXE}.lnk"
RMDIR  "$SMPROGRAMS\${APP_NAME}"

Delete $INSTDIR\${UNINSTALL_EXE}
Delete $INSTDIR\${APP_EXE}
Delete $INSTDIR\Qt5Core.dll
Delete $INSTDIR\Qt5Gui.dll
Delete $INSTDIR\Qt5Widgets.dll
Delete $INSTDIR\Qt5Network.dll
Delete $INSTDIR\Qt5Xml.dll
Delete $INSTDIR\D3DCompiler_47.dll
Delete $INSTDIR\libEGL.dll
Delete $INSTDIR\libGLESv2.dll
Delete $INSTDIR\COPYING
Delete $INSTDIR\platforms\qwindows.dll
Delete $INSTDIR\platforms\qminimal.dll
RMDir  $INSTDIR\platforms
RMDir  $INSTDIR

SectionEnd