; YAP install-script (based on a similar scrip from SWI-Prolog)

!define TEMP1 $R0 ; Temp variable
!define EXT    $3 ; Filename extension for Prolog sources
!define CWD    $4 ; Working directory for startmenu shortcut
!define GRP    $5 ; Startmenu group
!define SHCTX  $6 ; Shell context (current/all)
!define ARCH   $7 ; Architecture (x86, ia64 or amd64)

RequestExecutionLevel admin
MiscButtonText "<back" "next>" "abort" "finished"

SetCompressor /FINAL bzip2
  
; Preload files that are needed by the installer itself
ReserveFile "${NSISDIR}\Plugins\x86-unicode\UserInfo.dll"
ReserveFile "${NSISDIR}\Plugins\x86-unicode\InstallOptions.dll"
ReserveFile "${OPTIONS}"

!ifdef WIN64
InstallDir "$PROGRAMFILES64\${TARGET}"
!else
InstallDir "$PROGRAMFILES\${TARGET}"
!endif
InstallDirRegKey HKLM ${REGKEY} "home"

ComponentText "This will install YAP on your computer."
DirText "This program will install YAP on your computer.\
         Choose a directory"

Icon        ${ROOTDIR}\share\Yap\icons\yap.ico
LicenseData ${ROOTDIR}\share\doc\Yap\Artistic
LicenseText "YAP is governed by the Artistic License and LGPL;\
	it includes code under the GPL and LGPL."

InstType "Typical (all except debug symbols)"	# 1
InstType "Minimal (no graphics)"		# 2
InstType "Full"					# 3

Page license
Page directory
Page custom SetCustom "" ": Installation options"
Page instfiles

Section "Base system (required)"

  SectionIn RO			# do not allow to delete this
  
!ifdef WIN64
  SetRegView 64
!endif

  Delete $INSTDIR\bin\*.pdb

  SetOutPath $INSTDIR\bin
  File ${ROOTDIR}\bin\yap.exe
  File ${ROOTDIR}\bin\yap.dll
  File ${ROOTDIR}\bin\yap-win.exe
  File ${ROOTDIR}\bin\*.dll

; first, copy library DLLs
  SetOutPath $INSTDIR\lib\Yap
; SYSTEM STUFF
  File ${ROOTDIR}\lib\Yap\*.dll

  SetOutPath $INSTDIR\lib\Yap
; SYSTEM STUFF
  File ${ROOTDIR}\lib\Yap\startup.yss
  
  SetOutPath $INSTDIR\share\Yap
; SYSTEM STUFF
  File /r ${ROOTDIR}\share\Yap\*

  SetOutPath $INSTDIR\share\PrologCommons
; SYSTEM STUFF
  File /r ${ROOTDIR}\share\PrologCommons

  SetOutPath $INSTDIR\share\doc\Yap
  File /r ${ROOTDIR}\share\doc\Yap\html\*
;  File ${ROOTDIR}\share\doc\Yap\refman.pdf
;  File ${ROOTDIR}\share\doc\Yap\yap.info
  File ${ROOTDIR}\share\doc\Yap\Artistic
  File ${ROOTDIR}\share\doc\Yap\README.TXT
  File ${ROOTDIR}\share\doc\Yap\COPYING

  ; Write uninstaller
!ifdef WIN64
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\YAP64" "DisplayName" "YAP64 (remove only)"
!else
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\YAP" "DisplayName" "YAP (remove only)"
!endif
  WriteUninstaller "uninstall.exe"
SectionEnd


Section "Start Menu shortcuts"
  SectionIn 1 2 3
  SetOutPath ${CWD}
!ifdef WIN64
  StrCpy ${GRP} "YAP64"
!else
  StrCpy ${GRP} "YAP"
!endif
  CreateDirectory "$SMPROGRAMS\${GRP}"
  CreateShortCut "$SMPROGRAMS\${GRP}\YAP-WIN.lnk" \
		 "$INSTDIR\bin\yap-win.exe" \
		 "" \
		 "$INSTDIR\bin\yap-win.exe" \
		 0
  CreateShortCut "$SMPROGRAMS\${GRP}\YAP.lnk" \
		 "$INSTDIR\bin\yap.exe" \
		 "" \
		 "$INSTDIR\bin\yap.exe" \
		 0
  CreateShortCut "$SMPROGRAMS\${GRP}\Readme.lnk" \
  		  "$INSTDIR\share\doc\Yap\README.TXT" "" \
		  "$INSTDIR\share\doc\Yap\README.TXT" 0 \
		  "SW_SHOWNORMAL" "" "View readme"
  CreateShortCut "$SMPROGRAMS\${GRP}\Manual Html.lnk" \
  		  "$INSTDIR\share\doc\Yap\html\index.html" "" \
		  "$INSTDIR\share\doc\Yap\html\index.html" 0 \
		  "SW_SHOWNORMAL" "" "View readme"
;  CreateShortCut "$SMPROGRAMS\${GRP}\Manual PDF.lnk" \
;  		  "$INSTDIR\share\doc\Yap\refman.pdf" "" \
;		  "$INSTDIR\share\doc\Yap\refman.pdf" 0 \
;		  "SW_SHOWNORMAL" "" "View readme"
  CreateShortCut "$SMPROGRAMS\${GRP}\Uninstall.lnk" \
		 "$INSTDIR\uninstall.exe" \
		 "" \
		 "$INSTDIR\uninstall.exe" \
		 0

  WriteRegStr HKLM ${REGKEY} fileExtension   ${EXT}
  WriteRegStr HKLM ${REGKEY} group   ${GRP}
  WriteRegStr HKLM ${REGKEY} cwd     ${CWD}
  WriteRegStr HKLM ${REGKEY} context ${SHCTX}
SectionEnd

################################################################
# The uninstaller
################################################################

!ifdef WIN64
  UninstallText "This will uninstall YAP64. Hit Uninstall to continue."
!else
  UninstallText "This will uninstall YAP. Hit Uninstall to continue."
!endif

Section "Uninstall"
!ifdef WIN64
  SetRegView 64
!endif

  ReadRegStr ${EXT}   HKLM ${REGKEY} fileExtension
  StrCmp ${EXT} "" 0 UExt
    StrCpy ${EXT} "pl"
  UExt:

  ReadRegStr ${GRP}   HKLM ${REGKEY} group
  StrCmp ${GRP} "" 0 UHasGroup
!ifdef WIN64
    StrCpy ${GRP} "YAP64"
!else
    StrCpy ${GRP} "YAP"
!endif
  UHasGroup:

  ReadRegStr ${SHCTX} HKLM ${REGKEY} context
  StrCmp ${SHCTX} "" 0 UHasContext
    StrCpy ${SHCTX} "all"
  UHasContext:

  StrCmp ${SHCTX} "all" 0 +2
    SetShellVarContext all

  MessageBox MB_YESNO "Delete the following components?\r$\n \
                       Install dir: $INSTDIR$\r$\n \
		       Extension: ${EXT}$\r$\n \
		       Program Group ${GRP}" \
		      IDNO Done

  StrCmp "${EXT}" "" NoExt
    ReadRegStr $1 HKCR .${EXT} ""
    StrCmp $1 "PrologFile" 0 NoOwn ; only do this if we own it
      ReadRegStr $1 HKCR .${EXT} "backup_val"
      StrCmp $1 "" 0 RestoreBackup ; if backup == "" then delete the whole key
	DeleteRegKey HKCR .${EXT}
      Goto NoOwn
      RestoreBackup:
	WriteRegStr HKCR .${EXT} "" $1
	DeleteRegValue HKCR .${EXT} "backup_val"
    NoOwn:
  NoExt:

  StrCmp "${GRP}" "" NoGrp
    MessageBox MB_OK "Deleting $SMPROGRAMS\${GRP}"
    RMDir /r "$SMPROGRAMS\${GRP}"
  NoGrp:

  IfFileExists "$INSTDIR\bin\yap.exe" 0 NoDir
    RMDir /r "$INSTDIR"
    goto Done

  NoDir:
    MessageBox MB_OK "Folder $INSTDIR doesn't seem to contain Prolog"

  Done:
!ifdef WIN64
    DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\YAP64"
!else
    DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\YAP"
!endif

    DeleteRegKey HKLM ${REGKEY}
SectionEnd

################################################################
# FUNCTIONS
################################################################

Function .onInit

  ;Extract InstallOptions files
  ;$PLUGINSDIR will automatically be removed when the installer closes
  
  InitPluginsDir
  File /oname=$PLUGINSDIR\options.ini "${OPTIONS}"

FunctionEnd

################################################################
# Handle customisation;  Settings are maintained in
#
# 	HKLM ${REGKEY}
#
# Using the following mapping:
#
#	${EXT} fileExtension
################################################################

Function SetCustom
!ifdef WIN64
  SetRegView 64
!endif
# Basic system info
  Call UserInfo

# Filename extension
  ReadRegStr ${EXT} HKLM ${REGKEY} fileExtension
  StrCmp ${EXT} "" 0 HasExt
    StrCpy ${EXT} "pl"
  HasExt:
  WriteINIStr $PLUGINSDIR\options.ini "Field 4" "State" ${EXT}  

  StrCpy ${CWD} $INSTDIR

# Startmenu program group
  ReadRegStr ${GRP} HKLM ${REGKEY} group
  StrCmp ${GRP} "" 0 HasGroup
!ifdef WIN64
    StrCpy ${GRP} "YAP64"
!else
    StrCpy ${GRP} "YAP"
!endif
  HasGroup:
  WriteINIStr $PLUGINSDIR\options.ini "Field 6" "State" ${GRP}  

# Start the dialog
  Push ${TEMP1}
  InstallOptions::dialog "$PLUGINSDIR\options.ini"
  Pop ${TEMP1}
  Pop ${TEMP1}

# Get the results
  ReadINIStr ${EXT} $PLUGINSDIR\options.ini "Field 4" "State"
  ReadINIStr ${GRP} $PLUGINSDIR\options.ini "Field 6" "State"
  ReadINIStr ${GRP} $PLUGINSDIR\options.ini "Field 5" "State"

FunctionEnd

Function UserInfo
  ClearErrors
  UserInfo::GetName
  IfErrors Win9x
  Pop $0
  UserInfo::GetAccountType
  Pop $1

  StrCmp $1 "Admin" 0 +4
    SetShellVarContext all
    StrCpy ${SHCTX} "all"
    Goto done
  StrCmp $1 "Power" 0 +3
    StrCpy ${SHCTX} "all"
    Goto done
  StrCmp $1 "User" 0 +3
    StrCpy ${SHCTX} "current"
    Goto done
  StrCmp $1 "Guest" 0 +3
    StrCpy ${SHCTX} "current"
    Goto done
  StrCpy ${SHCTX} "current"		# Unkown accounttype
    Goto done

  Win9x:
    StrCpy ${SHCTX}  "current"
    Goto end

  done:
    StrCmp ${SHCTX} "all" 0 +2
      SetShellVarContext all

  end:
FunctionEnd

Function .onInstSuccess
  MessageBox MB_YESNO "Installation complete. View readme?" IDNO NoReadme
  ExecShell "open" "$INSTDIR\share\doc\Yap\README.TXT"
  NoReadme:
FunctionEnd

Function .onInstFailed
  MessageBox MB_OK "Installation failed.$\r$\n\
		    If you cannot resolve the issue or it is a bug in the$\r$\n\
		    installer, please contact yap-users@sf.net"
FunctionEnd

outfile "${OUT_DIR}\yap${ABI}-${VERSION}-installer.exe"