; winbacula.nsi
;
; Written by Michel Meyers (michel@tcnnet.dyndns.org)
;
; Updated by Kern Sibbald for native Win32 Bacula
;    added a number of elements from Christopher Hull's installer
;
; Command line options:
;
; /cygwin     -  do cygwin install into c:\cygwin\bacula
; /service    - 
; /start

!define PRODUCT "Bacula"
!define VERSION "@VERSION@"

;                           
; Include the Modern UI
;
!include "MUI.nsh"
!include "params.nsh"
!include "util.nsh"

;
; Basics
;
  Name "Bacula Client"
  OutFile "winbacula-${VERSION}.exe"
  SetCompressor lzma
  InstallDir "c:\bacula"

;
; Pull in pages
;
 !insertmacro MUI_PAGE_WELCOME
;  !insertmacro MUI_PAGE_LICENSE "License.txt"
 !insertmacro MUI_PAGE_COMPONENTS
 !insertmacro MUI_PAGE_DIRECTORY
 !insertmacro MUI_PAGE_INSTFILES
 !insertmacro MUI_PAGE_FINISH

 !insertmacro MUI_UNPAGE_WELCOME
 !insertmacro MUI_UNPAGE_CONFIRM
 !insertmacro MUI_UNPAGE_INSTFILES
 !insertmacro MUI_UNPAGE_FINISH


 !define      MUI_ABORTWARNING

 !insertmacro MUI_LANGUAGE "English"



DirText "Setup will install the Bacula Client ${VERSION} to the directory specified below. To install in a different folder, click Browse and select another folder.$\n$\nNote to CYGWIN users: please choose your CYGWIN root directory."


Section "Bacula File Service" SecService
  ;
  ; /cygwin on command line forces install dir to c:\cygwin\bacula (useful for silent install)
  ;
  Push "/cygwin"
  Call ParameterGiven
  Pop $6
  StrCmp $6 0 NoCygwin
  StrCpy $INSTDIR "c:\cygwin\bacula"
 NoCygwin:
; IfFileExists "c:\cygwin" Cygwin ReallyNoCygwin
;Cygwin:
; StrCpy $INSTDIR "c:\cygwin\bacula"
;ReallyNoCygwin:

  ; Check for existing installation
  StrCpy $7 0
  IfFileExists "$INSTDIR\bin\bacula-fd.conf" Upgrade NoUpgrade
 Upgrade:
    StrCpy $7 1
    ; Shutdown any baculas that could be running
    ExecWait '"$INSTDIR\bin\bacula-fd.exe" /kill'
    ; give it some time to shutdown
    Sleep 1000
 NoUpgrade:

  ; Set output path to the installation directory.
  SetOutPath "$INSTDIR\bin"
  CreateDirectory "$INSTDIR"
  CreateDirectory "$INSTDIR\bin"
  CreateDirectory "$INSTDIR\working"
  CreateDirectory "c:\tmp"
  ; Put files there
  File baculafd\Release\bacula-fd.exe
  File ..\..\..\depkgs-win32\pthreads\pthreadVCE.dll
  File License.txt
  IfFileExists "$INSTDIR\bin\bacula-fd.conf" newconf 
  File baculafd\bacula-fd.conf
  goto do_service
 newconf:
  File /oname=bacula-fd.conf.new baculafd\bacula-fd.conf
       
  ; If /service was given jump to the service install part
 do_service:
  Push "/service"
  Call ParameterGiven
  Pop $5
  StrCmp $5 1 Service
  
  ; If silent install and not /service don't ask questions and goto NoService...
  IfSilent NoService

  ; If already installed as service skip it too
  ReadRegDWORD $9 HKLM "Software\Bacula" "InstalledService"
  StrCmp $9 "1" NoService  

  ; Install as service?
  MessageBox MB_YESNO|MB_ICONQUESTION "Do you want to install the Bacula Client as a service (automatically starts with your PC)?" IDNO NoService
 Service:
    ExecWait '"$INSTDIR\bin\bacula-fd.exe" /install'
    StrCpy $9 "1"
    WriteRegDWORD HKLM "Software\Bacula" "InstalledService" "1"
 NoService:

  ; Write the uninstall keys for Windows
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "DisplayName" "Bacula Client"
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "UninstallString" '"$INSTDIR\uninstall.exe"'
  WriteUninstaller "$INSTDIR\Uninstall.exe"

  ; Create bacula-fd.conf and have the user edit it (skipped if silent)
  IfSilent NoReminder
  StrCmp $7 "1" NoReminder  ; skip if it is an upgrade
  MessageBox MB_OK "Please edit $INSTDIR\bin\bacula-fd.conf according to your requirements/installation! Also remember to put a shortcut into your start menu if you didn't install the client as a service."
  Exec 'write "$INSTDIR\bin\bacula-fd.conf"'  ; spawn wordpad with the file to be edited
 NoReminder:

  ; Start the client? (default skipped if silent, use /start to force starting)
  Push "/start"
  Call ParameterGiven
  Pop $8
  StrCmp $8 "1" Start
  IfSilent NoStart
  Call IsNt
  Pop $R0
  StrCmp $R0 "false" do_win98
  MessageBox MB_YESNO|MB_ICONQUESTION  "Would you like to start the Bacula Client now?" IDNO NoStart
  Exec 'net start bacula'
  goto NoStart 
 do_win98:
  File Start.bat
  File Stop.bat
  MessageBox MB_YESNO|MB_ICONQUESTION  "Would you like to start the Bacula Client now?" IDNO NoStart
 Start:
  Exec '"$INSTDIR\bin\bacula-fd.exe" -c "$INSTDIR\bin\bacula-fd.conf"'
 NoStart:
SectionEnd

Section "Install Console" SecConsole
  SetOutPath "$INSTDIR\bin"
  File console\Release\bconsole.exe
  IfFileExists "$INSTDIR\bin\bconsole.conf" newconf 
  File console\bconsole.conf
  goto do_next
 newconf:
  File /oname=bconsole.conf.new console\bconsole.conf
       
  ; If /service was given jump to the service install part
 do_next:
SectionEnd

Section "Install wx-Console" SecWxConsole
  SetOutPath "$INSTDIR\bin"
  File wx-console\Release\wx-console.exe
  IfFileExists "$INSTDIR\bin\wx-console.conf" newconf 
  File wx-console\wx-console.conf
  goto do_next
 newconf:
  File /oname=wx-console.conf.new wx-console\wx-console.conf
       
  ; If /service was given jump to the service install part
 do_next:
SectionEnd


Section "Install Documentation" SecDoc
  SetOutPath "$INSTDIR\doc"
  CreateDirectory "$INSTDIR\doc"
  File ..\..\doc\html-manual\*.html
  File ..\..\doc\html-manual\*.gif
  File ..\..\doc\html-manual\*.jpg
SectionEnd

;
; Extra Page descriptions
;

  LangString DESC_SecService ${LANG_ENGLISH} "Install Bacula client on this system."
  LangString DESC_SecConsole ${LANG_ENGLISH} "Install Console program on this system."
  LangString DESC_SecWxConsole ${LANG_ENGLISH} "Install graphical console program on this system."
  LangString DESC_SecDoc ${LANG_ENGLISH} "Install Documentation on this system."

  !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
    !insertmacro MUI_DESCRIPTION_TEXT ${SecService} $(DESC_SecService)
    !insertmacro MUI_DESCRIPTION_TEXT ${SecConsole} $(DESC_SecConsole)
    !insertmacro MUI_DESCRIPTION_TEXT ${SecWxConsole} $(DESC_SecWxConsole)
    !insertmacro MUI_DESCRIPTION_TEXT ${SecDoc} $(DESC_SecDoc)
  !insertmacro MUI_FUNCTION_DESCRIPTION_END



; Uninstall section

UninstallText "This will uninstall the Bacula Client. Hit next to continue."

Section "Uninstall"

  ; Shutdown any baculum that could be running
  ExecWait '"$INSTDIR\bin\bacula-fd.exe" /kill'

  ReadRegDWORD $9 HKLM "Software\Bacula" "InstalledService"
  StrCmp $9 "" NoService
  ; Remove bacula service
  ExecWait '"$INSTDIR\bin\bacula-fd.exe" /remove'
  NoService:
  
  ; remove registry keys
  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula"
  DeleteRegKey HKLM "Software\Bacula"

  ; remove files and uninstaller (preserving config for now)
  CopyFiles /SILENT "$INSTDIR\bin\bacula-fd.conf" "$INSTDIR\bacula-fd.conf"
  Delete /REBOOTOK "$INSTDIR\bin\*.*"
  Delete /REBOOTOK "$INSTDIR\doc\*.*"
  CopyFiles /SILENT "$INSTDIR\bacula-fd.conf" "$INSTDIR\bin\bacula-fd.conf"
  CopyFiles /SILENT "$INSTDIR\bconsole.conf" "$INSTDIR\bin\bconsole.conf"
  Delete /REBOOTOK "$INSTDIR\bacula-fd.conf"
  Delete /REBOOTOK "$INSTDIR\Uninstall.exe"

  ; Check for existing installation
  MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to delete the current configuration file ($INSTDIR\bin\bacula-fd.conf)?" IDNO LeaveConfig
  Delete /REBOOTOK "$INSTDIR\bin\bacula-fd.conf"
  ; remove directories used
  RMDir "$INSTDIR\bin"
  RMDir "$INSTDIR\doc"
  RMDir "$INSTDIR\working"
  RMDir "$INSTDIR"
  RMDir "C:\tmp"
  LeaveConfig:
  
SectionEnd

; eof
