mirror of
https://github.com/vim/vim
synced 2025-03-14 13:57:52 +01:00
closes: #16692 Co-authored-by: RestorerZ <restorer@mail2k.ru> Signed-off-by: Rafael Fontenelle <rffontenelle@users.noreply.github.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
1226 lines
34 KiB
NSIS
1226 lines
34 KiB
NSIS
# NSIS file to create a self-installing exe for Vim.
|
|
# It requires NSIS version 3.0 or later.
|
|
# Last Change: 2025 Feb 24
|
|
|
|
Unicode true
|
|
|
|
# WARNING: if you make changes to this script, look out for $0 to be valid,
|
|
# because uninstall deletes most files in $0.
|
|
|
|
# Location of gvim_ole.exe, vimw32.exe, GvimExt/*, etc.
|
|
!ifndef VIMSRC
|
|
!define VIMSRC "..\src"
|
|
!endif
|
|
|
|
# Location of runtime files
|
|
!ifndef VIMRT
|
|
!define VIMRT "..\runtime"
|
|
!endif
|
|
|
|
# Location of extra tools: diff.exe, winpty{32|64}.dll, winpty-agent.exe, etc.
|
|
!ifndef VIMTOOLS
|
|
!define VIMTOOLS "..\.."
|
|
!endif
|
|
|
|
# Location of gettext.
|
|
# It must contain two directories: gettext32 and gettext64.
|
|
# See README.txt for detail.
|
|
!ifndef GETTEXT
|
|
!define GETTEXT ${VIMTOOLS}
|
|
!endif
|
|
|
|
# If you have UPX, use the switch /DHAVE_UPX=1 on the command line makensis.exe.
|
|
# This property will be set to 1. Get it at https://upx.github.io/
|
|
!ifndef HAVE_UPX
|
|
!define HAVE_UPX 0
|
|
!endif
|
|
|
|
# If you do not want to add Native Language Support, use the switch /DHAVE_NLS=0
|
|
# in the command line makensis.exe. This property will be set to 0.
|
|
!ifndef HAVE_NLS
|
|
!define HAVE_NLS 1
|
|
!endif
|
|
|
|
# To create an English-only the installer, use the switch /DHAVE_MULTI_LANG=0 on
|
|
# the command line makensis.exe. This property will be set to 0.
|
|
!ifndef HAVE_MULTI_LANG
|
|
!define HAVE_MULTI_LANG 1
|
|
!endif
|
|
|
|
# if you want to create a 64-bit the installer, use the switch /DWIN64=1 on
|
|
# the command line makensis.exe. This property will be set to 1.
|
|
!ifndef WIN64
|
|
!define WIN64 0
|
|
!endif
|
|
|
|
# if you don't want to include libgcc_s_sjlj-1.dll in the package, use the
|
|
# switch /DINCLUDE_LIBGCC=0 on the command line makensis.exe.
|
|
!ifndef INCLUDE_LIBGCC
|
|
!define INCLUDE_LIBGCC 1
|
|
!endif
|
|
|
|
!include gvim_version.nsh # for version number
|
|
|
|
# Definition of Patch for Vim.
|
|
!ifndef PATCHLEVEL
|
|
!define PATCHLEVEL 0
|
|
!endif
|
|
|
|
# ----------- No configurable settings below this line -----------
|
|
|
|
!include "Library.nsh" # for DLL install
|
|
!include "LogicLib.nsh"
|
|
!include "MUI2.nsh"
|
|
!include "nsDialogs.nsh"
|
|
!include "Sections.nsh"
|
|
!include "x64.nsh"
|
|
!include "StrFunc.nsh"
|
|
${StrRep}
|
|
|
|
# See https://nsis.sourceforge.io/LogicLib
|
|
;FileExists is already part of LogicLib, but returns true for directories
|
|
;as well as files
|
|
!macro _FileExists2 _a _b _t _f
|
|
!insertmacro _LOGICLIB_TEMP
|
|
StrCpy $_LOGICLIB_TEMP "0"
|
|
;if path is not blank, continue to next check
|
|
StrCmp `${_b}` `` +4 0
|
|
;if path exists, continue to next check (IfFileExists returns true if this
|
|
;is a directory)
|
|
IfFileExists `${_b}` `0` +3
|
|
;if path is not a directory, continue to confirm exists
|
|
IfFileExists `${_b}\*.*` +2 0
|
|
StrCpy $_LOGICLIB_TEMP "1" ;file exists
|
|
;now we have a definitive value - the file exists or it does not
|
|
StrCmp $_LOGICLIB_TEMP "1" `${_t}` `${_f}`
|
|
!macroend
|
|
!undef FileExists
|
|
!define FileExists `"" FileExists2`
|
|
!macro _DirExists _a _b _t _f
|
|
!insertmacro _LOGICLIB_TEMP
|
|
StrCpy $_LOGICLIB_TEMP "0"
|
|
;if path is not blank, continue to next check
|
|
StrCmp `${_b}` `` +3 0
|
|
;if directory exists, continue to confirm exists
|
|
IfFileExists `${_b}\*.*` 0 +2
|
|
StrCpy $_LOGICLIB_TEMP "1"
|
|
StrCmp $_LOGICLIB_TEMP "1" `${_t}` `${_f}`
|
|
!macroend
|
|
!define DirExists `"" DirExists`
|
|
|
|
!define PRODUCT "Vim ${VER_MAJOR}.${VER_MINOR}"
|
|
!define UNINST_REG_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall"
|
|
!define UNINST_REG_KEY_VIM "${UNINST_REG_KEY}\${PRODUCT}"
|
|
|
|
!if ${WIN64}
|
|
Name "${PRODUCT} (x64)"
|
|
!else
|
|
Name "${PRODUCT}"
|
|
!endif
|
|
OutFile gvim${VER_MAJOR}${VER_MINOR}.exe
|
|
CRCCheck force
|
|
SetCompressor /SOLID lzma
|
|
SetCompressorDictSize 64
|
|
ManifestDPIAware true
|
|
SetDatablockOptimize on
|
|
RequestExecutionLevel highest
|
|
|
|
!if ${HAVE_UPX}
|
|
!packhdr temp.dat "upx --best --compress-icons=1 temp.dat"
|
|
!endif
|
|
|
|
!if ${WIN64}
|
|
!define BIT 64
|
|
!else
|
|
!define BIT 32
|
|
!endif
|
|
|
|
##########################################################
|
|
# MUI2 settings
|
|
|
|
!define MUI_ABORTWARNING
|
|
!define MUI_UNABORTWARNING
|
|
|
|
!define MUI_ICON "icons\vim_16c.ico"
|
|
!define MUI_UNICON "icons\vim_uninst_16c.ico"
|
|
|
|
# Show all languages, despite user's codepage:
|
|
!define MUI_LANGDLL_ALLLANGUAGES
|
|
# Always show dialog choice language
|
|
#!define MUI_LANGDLL_ALWAYSSHOW
|
|
!define MUI_LANGDLL_REGISTRY_ROOT "HKCU"
|
|
!define MUI_LANGDLL_REGISTRY_KEY "Software\Vim"
|
|
!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
|
|
|
|
!define MUI_WELCOMEFINISHPAGE_BITMAP "icons\welcome.bmp"
|
|
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "icons\uninstall.bmp"
|
|
!define MUI_HEADERIMAGE
|
|
!define MUI_HEADERIMAGE_BITMAP "icons\header.bmp"
|
|
!define MUI_HEADERIMAGE_UNBITMAP "icons\un_header.bmp"
|
|
|
|
!define MUI_WELCOMEFINISHPAGE_BITMAP_STRETCH "AspectFitHeight"
|
|
!define MUI_UNWELCOMEFINISHPAGE_BITMAP_STRETCH "AspectFitHeight"
|
|
!define MUI_HEADERIMAGE_BITMAP_STRETCH "AspectFitHeight"
|
|
!define MUI_HEADERIMAGE_UNBITMAP_STRETCH "AspectFitHeight"
|
|
|
|
!define MUI_COMPONENTSPAGE_SMALLDESC
|
|
!define MUI_LICENSEPAGE_CHECKBOX
|
|
!define MUI_FINISHPAGE_SHOWREADME
|
|
!define MUI_FINISHPAGE_SHOWREADME_TEXT $(str_show_readme)
|
|
!define MUI_FINISHPAGE_SHOWREADME_FUNCTION LaunchApplication
|
|
|
|
# This adds '\Vim' to the user choice automagically. The actual value is
|
|
# obtained below with CheckOldVim.
|
|
!if ${WIN64}
|
|
!define DEFAULT_INSTDIR "$PROGRAMFILES64\Vim"
|
|
!else
|
|
!define DEFAULT_INSTDIR "$PROGRAMFILES\Vim"
|
|
!endif
|
|
InstallDir ${DEFAULT_INSTDIR}
|
|
|
|
# Types of installs we can perform:
|
|
InstType $(str_type_typical)
|
|
InstType $(str_type_minimal)
|
|
InstType $(str_type_full)
|
|
|
|
SilentInstall normal
|
|
|
|
# General custom functions for MUI2:
|
|
#!define MUI_CUSTOMFUNCTION_ABORT VimOnUserAbort
|
|
#!define MUI_CUSTOMFUNCTION_UNABORT un.VimOnUserAbort
|
|
|
|
# Installer pages
|
|
!insertmacro MUI_PAGE_WELCOME
|
|
!insertmacro MUI_PAGE_LICENSE $(page_lic_file)
|
|
!insertmacro MUI_PAGE_COMPONENTS
|
|
Page custom SetCustom ValidateCustom
|
|
#!define MUI_PAGE_CUSTOMFUNCTION_LEAVE VimFinalCheck
|
|
!insertmacro MUI_PAGE_DIRECTORY
|
|
!insertmacro MUI_PAGE_INSTFILES
|
|
!define MUI_FINISHPAGE_NOREBOOTSUPPORT
|
|
!insertmacro MUI_PAGE_FINISH
|
|
|
|
# Uninstaller pages:
|
|
!insertmacro MUI_UNPAGE_CONFIRM
|
|
#!define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.VimCheckRunning
|
|
!insertmacro MUI_UNPAGE_COMPONENTS
|
|
!insertmacro MUI_UNPAGE_INSTFILES
|
|
!define MUI_FINISHPAGE_NOREBOOTSUPPORT
|
|
!insertmacro MUI_UNPAGE_FINISH
|
|
|
|
##########################################################
|
|
# Languages Files
|
|
|
|
!insertmacro MUI_RESERVEFILE_LANGDLL
|
|
!include "lang\english.nsi"
|
|
|
|
# Include support for other languages:
|
|
!if ${HAVE_MULTI_LANG}
|
|
!include "lang\portuguesebr.nsi"
|
|
!include "lang\danish.nsi"
|
|
!include "lang\dutch.nsi"
|
|
!include "lang\german.nsi"
|
|
!include "lang\greek.nsi"
|
|
!include "lang\italian.nsi"
|
|
!include "lang\japanese.nsi"
|
|
!include "lang\russian.nsi"
|
|
!include "lang\serbian.nsi"
|
|
!include "lang\simpchinese.nsi"
|
|
!include "lang\tradchinese.nsi"
|
|
!include "lang\turkish.nsi"
|
|
!endif
|
|
|
|
##########################################################
|
|
# Version resources
|
|
|
|
VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "Vim"
|
|
VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "The Vim Project"
|
|
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalTrademarks" "Vim"
|
|
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "Copyright (C) 1996"
|
|
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Vi Improved - A Text Editor"
|
|
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${VER_MAJOR}.${VER_MINOR}.${PATCHLEVEL}.0"
|
|
VIProductVersion "${VER_MAJOR}.${VER_MINOR}.${PATCHLEVEL}.0"
|
|
|
|
# Global variables
|
|
Var vim_dialog
|
|
Var vim_nsd_compat
|
|
Var vim_nsd_keymap
|
|
Var vim_nsd_mouse
|
|
Var vim_compat_stat
|
|
Var vim_keymap_stat
|
|
Var vim_mouse_stat
|
|
!if ${HAVE_NLS}
|
|
Var lng_usr
|
|
!endif
|
|
|
|
|
|
# Reserve files
|
|
ReserveFile ${VIMSRC}\installw32.exe
|
|
|
|
##########################################################
|
|
# Functions
|
|
|
|
# Get parent directory
|
|
# Share this function both on installer and uninstaller
|
|
!macro GetParent un
|
|
Function ${un}GetParent
|
|
Exch $0 ; old $0 is on top of stack
|
|
Push $1
|
|
Push $2
|
|
StrCpy $1 -1
|
|
${Do}
|
|
StrCpy $2 $0 1 $1
|
|
${If} $2 == ""
|
|
${OrIf} $2 == "\"
|
|
${ExitDo}
|
|
${EndIf}
|
|
IntOp $1 $1 - 1
|
|
${Loop}
|
|
StrCpy $0 $0 $1
|
|
Pop $2
|
|
Pop $1
|
|
Exch $0 ; put $0 on top of stack, restore $0 to original value
|
|
FunctionEnd
|
|
!macroend
|
|
|
|
!insertmacro GetParent ""
|
|
!insertmacro GetParent "un."
|
|
|
|
# Get home directory
|
|
!macro GetHomeDir un
|
|
Function ${un}GetHomeDir
|
|
Push $0
|
|
Push $1
|
|
ReadEnvStr $0 "HOME"
|
|
${If} $0 == ""
|
|
ReadEnvStr $0 "HOMEDRIVE"
|
|
ReadEnvStr $1 "HOMEPATH"
|
|
StrCpy $0 "$0$1"
|
|
${If} $0 == ""
|
|
ReadEnvStr $0 "USERPROFILE"
|
|
${EndIf}
|
|
${EndIf}
|
|
Pop $1
|
|
Exch $0 # put $0 on top of stack, restore $0 to original value
|
|
FunctionEnd
|
|
!macroend
|
|
|
|
!insertmacro GetHomeDir ""
|
|
!insertmacro GetHomeDir "un."
|
|
|
|
# Check if Vim is already installed.
|
|
# return: Installed directory. If not found, it will be empty.
|
|
Function CheckOldVim
|
|
Push $0
|
|
Push $R0
|
|
Push $R1
|
|
Push $R2
|
|
|
|
${If} ${RunningX64}
|
|
SetRegView 64
|
|
${EndIf}
|
|
|
|
ClearErrors
|
|
StrCpy $0 "" # Installed directory
|
|
StrCpy $R0 0 # Sub-key index
|
|
StrCpy $R1 "" # Sub-key
|
|
${Do}
|
|
# Eumerate the sub-key:
|
|
EnumRegKey $R1 HKLM ${UNINST_REG_KEY} $R0
|
|
|
|
# Stop if no more sub-key:
|
|
${If} ${Errors}
|
|
${OrIf} $R1 == ""
|
|
${ExitDo}
|
|
${EndIf}
|
|
|
|
# Move to the next sub-key:
|
|
IntOp $R0 $R0 + 1
|
|
|
|
# Check if the key is Vim uninstall key or not:
|
|
StrCpy $R2 $R1 4
|
|
${If} $R2 S!= "Vim "
|
|
${Continue}
|
|
${EndIf}
|
|
|
|
# Verifies required sub-keys:
|
|
ReadRegStr $R2 HKLM "${UNINST_REG_KEY}\$R1" "DisplayName"
|
|
${If} ${Errors}
|
|
${OrIf} $R2 == ""
|
|
${Continue}
|
|
${EndIf}
|
|
|
|
ReadRegStr $R2 HKLM "${UNINST_REG_KEY}\$R1" "UninstallString"
|
|
${If} ${Errors}
|
|
${OrIf} $R2 == ""
|
|
${Continue}
|
|
${EndIf}
|
|
|
|
# Found
|
|
Push $R2
|
|
call GetParent
|
|
call GetParent
|
|
Pop $0 # Vim directory
|
|
${ExitDo}
|
|
|
|
${Loop}
|
|
|
|
${If} ${RunningX64}
|
|
SetRegView lastused
|
|
${EndIf}
|
|
|
|
Pop $R2
|
|
Pop $R1
|
|
Pop $R0
|
|
Exch $0 # put $0 on top of stack, restore $0 to original value
|
|
FunctionEnd
|
|
|
|
Function LaunchApplication
|
|
SetOutPath $0
|
|
ShellExecAsUser::ShellExecAsUser "" "$0\gvim.exe" '-R "$0\$(vim_readme_file)"'
|
|
FunctionEnd
|
|
|
|
##########################################################
|
|
Section "$(str_section_old_ver)" id_section_old_ver
|
|
SectionIn 1 2 3 RO
|
|
|
|
# run the install program to check for already installed versions
|
|
SetOutPath $TEMP
|
|
File /oname=install.exe ${VIMSRC}\installw32.exe
|
|
DetailPrint "$(str_msg_uninstalling)"
|
|
${Do}
|
|
nsExec::Exec "$TEMP\install.exe -uninstall-check"
|
|
Pop $3
|
|
|
|
call CheckOldVim
|
|
Pop $3
|
|
${If} $3 == ""
|
|
${ExitDo}
|
|
${Else}
|
|
# It seems that the old version is still remaining.
|
|
# TODO: Should we show a warning and run the uninstaller again?
|
|
|
|
${ExitDo} # Just ignore for now.
|
|
${EndIf}
|
|
${Loop}
|
|
Delete $TEMP\install.exe
|
|
Delete $TEMP\vimini.ini # install.exe creates this, but we don't need it.
|
|
|
|
# We may have been put to the background when uninstall did something.
|
|
BringToFront
|
|
SectionEnd
|
|
|
|
##########################################################
|
|
Section "$(str_section_exe)" id_section_exe
|
|
SectionIn 1 2 3 RO
|
|
|
|
# we need also this here if the user changes the instdir
|
|
StrCpy $0 "$INSTDIR\vim${VER_MAJOR}${VER_MINOR}"
|
|
|
|
SetOutPath $0
|
|
File /oname=gvim.exe ${VIMSRC}\gvim_ole.exe
|
|
!if /FileExists "${VIMSRC}\vim${BIT}.dll"
|
|
File ${VIMSRC}\vim${BIT}.dll
|
|
!endif
|
|
File /oname=install.exe ${VIMSRC}\installw32.exe
|
|
File /oname=uninstall.exe ${VIMSRC}\uninstallw32.exe
|
|
File ${VIMSRC}\vimrun.exe
|
|
File /oname=tee.exe ${VIMSRC}\teew32.exe
|
|
File /oname=xxd.exe ${VIMSRC}\xxdw32.exe
|
|
File ..\vimtutor.bat
|
|
File ..\README.txt
|
|
File /oname=LICENSE.txt ..\LICENSE
|
|
File ..\uninstall.txt
|
|
File ${VIMRT}\*.vim
|
|
|
|
!if /FileExists "${VIMTOOLS}\diff.exe"
|
|
File ${VIMTOOLS}\diff.exe
|
|
!endif
|
|
!if /FileExists "${VIMTOOLS}\winpty${BIT}.dll"
|
|
File ${VIMTOOLS}\winpty${BIT}.dll
|
|
!endif
|
|
!if /FileExists "${VIMTOOLS}\winpty-agent.exe"
|
|
File ${VIMTOOLS}\winpty-agent.exe
|
|
!endif
|
|
!if /FileExists "${VIMTOOLS}\libsodium.dll"
|
|
File ${VIMTOOLS}\libsodium.dll
|
|
!endif
|
|
|
|
SetOutPath $0\colors
|
|
File /r ${VIMRT}\colors\*.*
|
|
|
|
SetOutPath $0\compiler
|
|
File ${VIMRT}\compiler\*.*
|
|
|
|
SetOutPath $0\doc
|
|
File /x uganda.nsis.txt ${VIMRT}\doc\*.txt
|
|
File ${VIMRT}\doc\tags
|
|
|
|
SetOutPath $0\ftplugin
|
|
File ${VIMRT}\ftplugin\*.*
|
|
|
|
SetOutPath $0\indent
|
|
File ${VIMRT}\indent\README.txt
|
|
File ${VIMRT}\indent\*.vim
|
|
|
|
SetOutPath $0\keymap
|
|
File ${VIMRT}\keymap\README.txt
|
|
File ${VIMRT}\keymap\*.vim
|
|
|
|
SetOutPath $0\macros
|
|
File /r /x *.info ${VIMRT}\macros\*.*
|
|
|
|
SetOutPath $0\pack
|
|
File /r ${VIMRT}\pack\*.*
|
|
|
|
SetOutPath $0\plugin
|
|
File ${VIMRT}\plugin\*.*
|
|
|
|
SetOutPath $0\autoload
|
|
File /r ${VIMRT}\autoload\*.*
|
|
|
|
SetOutPath $0\import\dist
|
|
File ${VIMRT}\import\dist\*.*
|
|
|
|
SetOutPath $0\bitmaps
|
|
File ${VIMSRC}\vim.ico
|
|
|
|
SetOutPath $0\syntax
|
|
File /r /x testdir /x generator /x Makefile ${VIMRT}\syntax\*.*
|
|
|
|
SetOutPath $0\spell
|
|
File ${VIMRT}\spell\*.txt
|
|
File ${VIMRT}\spell\*.vim
|
|
File ${VIMRT}\spell\*.spl
|
|
File ${VIMRT}\spell\*.sug
|
|
|
|
SetOutPath $0\tools
|
|
File ${VIMRT}\tools\*.*
|
|
|
|
SetOutPath $0\tutor
|
|
File /x Makefile /x *.info ${VIMRT}\tutor\*.*
|
|
SectionEnd
|
|
|
|
##########################################################
|
|
Section "$(str_section_console)" id_section_console
|
|
SectionIn 1 3
|
|
|
|
SetOutPath $0
|
|
File /oname=vim.exe ${VIMSRC}\vimw32.exe
|
|
StrCpy $2 "$2 vim view vimdiff"
|
|
SectionEnd
|
|
|
|
##########################################################
|
|
Section "$(str_section_batch)" id_section_batch
|
|
SectionIn 3
|
|
|
|
StrCpy $1 "$1 -create-batfiles $2"
|
|
SectionEnd
|
|
|
|
##########################################################
|
|
SectionGroup $(str_group_icons) id_group_icons
|
|
Section "$(str_section_desktop)" id_section_desktop
|
|
SectionIn 1 3
|
|
|
|
StrCpy $1 "$1 -install-icons"
|
|
SectionEnd
|
|
|
|
Section "$(str_section_start_menu)" id_section_startmenu
|
|
SectionIn 1 3
|
|
|
|
StrCpy $1 "$1 -add-start-menu"
|
|
SectionEnd
|
|
SectionGroupEnd
|
|
|
|
##########################################################
|
|
Section "$(str_section_edit_with)" id_section_editwith
|
|
SectionIn 1 3
|
|
|
|
SetOutPath $0
|
|
|
|
${If} ${RunningX64}
|
|
# Install 64-bit gvimext.dll into the GvimExt64 directory.
|
|
SetOutPath $0\GvimExt64
|
|
ClearErrors
|
|
!define LIBRARY_SHELL_EXTENSION
|
|
!define LIBRARY_X64
|
|
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"${VIMSRC}\GvimExt\gvimext64.dll" \
|
|
"$0\GvimExt64\gvimext.dll" "$0"
|
|
!undef LIBRARY_X64
|
|
!undef LIBRARY_SHELL_EXTENSION
|
|
${EndIf}
|
|
|
|
# Install 32-bit gvimext.dll into the GvimExt32 directory.
|
|
SetOutPath $0\GvimExt32
|
|
ClearErrors
|
|
!define LIBRARY_SHELL_EXTENSION
|
|
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"${VIMSRC}\GvimExt\gvimext.dll" \
|
|
"$0\GvimExt32\gvimext.dll" "$0"
|
|
!undef LIBRARY_SHELL_EXTENSION
|
|
|
|
# We don't have a separate entry for the "Open With..." menu, assume
|
|
# the user wants either both or none.
|
|
StrCpy $1 "$1 -install-popup -install-openwith"
|
|
SectionEnd
|
|
|
|
##########################################################
|
|
Section "$(str_section_vim_rc)" id_section_vimrc
|
|
SectionIn 1 3
|
|
|
|
StrCpy $1 "$1 -create-vimrc"
|
|
|
|
${If} ${RunningX64}
|
|
SetRegView 64
|
|
${EndIf}
|
|
WriteRegStr HKLM "${UNINST_REG_KEY_VIM}" "vim_compat" "$vim_compat_stat"
|
|
WriteRegStr HKLM "${UNINST_REG_KEY_VIM}" "vim_keyremap" "$vim_keymap_stat"
|
|
WriteRegStr HKLM "${UNINST_REG_KEY_VIM}" "vim_mouse" "$vim_mouse_stat"
|
|
${If} ${RunningX64}
|
|
SetRegView lastused
|
|
${EndIf}
|
|
|
|
${If} $vim_compat_stat == "vi"
|
|
StrCpy $1 "$1 -vimrc-compat vi"
|
|
${ElseIf} $vim_compat_stat == "vim"
|
|
StrCpy $1 "$1 -vimrc-compat vim"
|
|
${ElseIf} $vim_compat_stat == "defaults"
|
|
StrCpy $1 "$1 -vimrc-compat defaults"
|
|
${Else}
|
|
StrCpy $1 "$1 -vimrc-compat all"
|
|
${EndIf}
|
|
|
|
${If} $vim_keymap_stat == "default"
|
|
StrCpy $1 "$1 -vimrc-remap no"
|
|
${Else}
|
|
StrCpy $1 "$1 -vimrc-remap win"
|
|
${EndIf}
|
|
|
|
${If} $vim_mouse_stat == "default"
|
|
StrCpy $1 "$1 -vimrc-behave default"
|
|
${ElseIf} $vim_mouse_stat == "windows"
|
|
StrCpy $1 "$1 -vimrc-behave mswin"
|
|
${Else}
|
|
StrCpy $1 "$1 -vimrc-behave unix"
|
|
${EndIf}
|
|
|
|
SectionEnd
|
|
|
|
##########################################################
|
|
SectionGroup $(str_group_plugin) id_group_plugin
|
|
Section "$(str_section_plugin_home)" id_section_pluginhome
|
|
SectionIn 1 3
|
|
|
|
# use ShellExecAsUser below instead
|
|
# StrCpy $1 "$1 -create-directories home"
|
|
SectionEnd
|
|
|
|
Section "$(str_section_plugin_vim)" id_section_pluginvim
|
|
SectionIn 3
|
|
|
|
StrCpy $1 "$1 -create-directories vim"
|
|
SectionEnd
|
|
SectionGroupEnd
|
|
|
|
##########################################################
|
|
!if ${HAVE_NLS}
|
|
Section "$(str_section_nls)" id_section_nls
|
|
SectionIn 1 3
|
|
|
|
SetOutPath $INSTDIR
|
|
!if /FileExists "..\lang\README.*.txt"
|
|
File ..\lang\README.*.txt
|
|
CopyFiles /SILENT /FILESONLY $INSTDIR\README.$lng_usr.txt \
|
|
$INSTDIR\vim${VER_MAJOR}${VER_MINOR}\README.$lng_usr.txt
|
|
Delete $INSTDIR\README.*.txt
|
|
!endif
|
|
!if /FileExists "..\lang\LICENSE.??.txt"
|
|
File ..\lang\LICENSE.??.txt
|
|
!if /FileExists "..\lang\LICENSE.??_??.txt"
|
|
File ..\lang\LICENSE.??_??.txt
|
|
!endif
|
|
CopyFiles /SILENT /FILESONLY $INSTDIR\LICENSE.$lng_usr.txt \
|
|
$INSTDIR\vim${VER_MAJOR}${VER_MINOR}\LICENSE.$lng_usr.txt
|
|
Delete $INSTDIR\LICENSE.*.txt
|
|
!endif
|
|
|
|
SetOutPath $0\lang
|
|
File /r /x Makefile ${VIMRT}\lang\*.*
|
|
SetOutPath $0
|
|
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"${GETTEXT}\gettext${BIT}\libintl-8.dll" \
|
|
"$0\libintl-8.dll" "$0"
|
|
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"${GETTEXT}\gettext${BIT}\libiconv-2.dll" \
|
|
"$0\libiconv-2.dll" "$0"
|
|
!if ${INCLUDE_LIBGCC}
|
|
!if /FileExists "${GETTEXT}\gettext${BIT}\libgcc_s_sjlj-1.dll"
|
|
# Install libgcc_s_sjlj-1.dll only if it is needed.
|
|
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"${GETTEXT}\gettext${BIT}\libgcc_s_sjlj-1.dll" \
|
|
"$0\libgcc_s_sjlj-1.dll" "$0"
|
|
!endif
|
|
!endif
|
|
|
|
${If} ${SectionIsSelected} ${id_section_editwith}
|
|
${If} ${RunningX64}
|
|
# Install DLLs for 64-bit gvimext.dll into the GvimExt64 directory.
|
|
SetOutPath $0\GvimExt64
|
|
ClearErrors
|
|
!define LIBRARY_X64
|
|
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"${GETTEXT}\gettext64\libintl-8.dll" \
|
|
"$0\GvimExt64\libintl-8.dll" "$0\GvimExt64"
|
|
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"${GETTEXT}\gettext64\libiconv-2.dll" \
|
|
"$0\GvimExt64\libiconv-2.dll" "$0\GvimExt64"
|
|
!undef LIBRARY_X64
|
|
${EndIf}
|
|
|
|
# Install DLLs for 32-bit gvimext.dll into the GvimExt32 directory.
|
|
SetOutPath $0\GvimExt32
|
|
ClearErrors
|
|
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"${GETTEXT}\gettext32\libintl-8.dll" \
|
|
"$0\GvimExt32\libintl-8.dll" "$0\GvimExt32"
|
|
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"${GETTEXT}\gettext32\libiconv-2.dll" \
|
|
"$0\GvimExt32\libiconv-2.dll" "$0\GvimExt32"
|
|
!if ${INCLUDE_LIBGCC}
|
|
!if /FileExists "${GETTEXT}\gettext32\libgcc_s_sjlj-1.dll"
|
|
# Install libgcc_s_sjlj-1.dll only if it is needed.
|
|
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"${GETTEXT}\gettext32\libgcc_s_sjlj-1.dll" \
|
|
"$0\GvimExt32\libgcc_s_sjlj-1.dll" "$0\GvimExt32"
|
|
!endif
|
|
!endif
|
|
${EndIf}
|
|
SectionEnd
|
|
!endif
|
|
|
|
##########################################################
|
|
Section -call_install_exe
|
|
SetOutPath $0
|
|
DetailPrint "$(str_msg_registering)"
|
|
nsExec::Exec "$0\install.exe $1"
|
|
Pop $3
|
|
|
|
${If} ${SectionIsSelected} ${id_section_pluginhome}
|
|
ReadEnvStr $3 "COMSPEC"
|
|
Call GetHomeDir
|
|
Pop $4
|
|
ShellExecAsUser::ShellExecAsUser "" "$3" '/c "cd /d "$4" & mkdir vimfiles & cd vimfiles & mkdir colors compiler doc ftdetect ftplugin indent keymap plugin syntax"' SW_HIDE
|
|
${EndIf}
|
|
SectionEnd
|
|
|
|
##########################################################
|
|
!macro SaveSectionSelection section_id reg_value
|
|
${If} ${SectionIsSelected} ${section_id}
|
|
WriteRegDWORD HKLM "${UNINST_REG_KEY_VIM}" ${reg_value} 1
|
|
${Else}
|
|
WriteRegDWORD HKLM "${UNINST_REG_KEY_VIM}" ${reg_value} 0
|
|
${EndIf}
|
|
!macroend
|
|
|
|
Section -post
|
|
|
|
# Get estimated install size
|
|
SectionGetSize ${id_section_exe} $3
|
|
${If} ${SectionIsSelected} ${id_section_console}
|
|
SectionGetSize ${id_section_console} $4
|
|
IntOp $3 $3 + $4
|
|
${EndIf}
|
|
${If} ${SectionIsSelected} ${id_section_editwith}
|
|
SectionGetSize ${id_section_editwith} $4
|
|
IntOp $3 $3 + $4
|
|
${EndIf}
|
|
!if ${HAVE_NLS}
|
|
${If} ${SectionIsSelected} ${id_section_nls}
|
|
SectionGetSize ${id_section_nls} $4
|
|
IntOp $3 $3 + $4
|
|
${EndIf}
|
|
!endif
|
|
|
|
# Register EstimatedSize and AllowSilent.
|
|
# Other information will be set by the install.exe (dosinst.c).
|
|
${If} ${RunningX64}
|
|
SetRegView 64
|
|
${EndIf}
|
|
WriteRegDWORD HKLM "${UNINST_REG_KEY_VIM}" "EstimatedSize" $3
|
|
WriteRegDWORD HKLM "${UNINST_REG_KEY_VIM}" "AllowSilent" 1
|
|
${If} ${RunningX64}
|
|
SetRegView lastused
|
|
${EndIf}
|
|
|
|
# Store the selections to the registry.
|
|
${If} ${RunningX64}
|
|
SetRegView 64
|
|
${EndIf}
|
|
!insertmacro SaveSectionSelection ${id_section_console} "select_console"
|
|
!insertmacro SaveSectionSelection ${id_section_batch} "select_batch"
|
|
!insertmacro SaveSectionSelection ${id_section_desktop} "select_desktop"
|
|
!insertmacro SaveSectionSelection ${id_section_startmenu} "select_startmenu"
|
|
!insertmacro SaveSectionSelection ${id_section_editwith} "select_editwith"
|
|
!insertmacro SaveSectionSelection ${id_section_vimrc} "select_vimrc"
|
|
!insertmacro SaveSectionSelection ${id_section_pluginhome} "select_pluginhome"
|
|
!insertmacro SaveSectionSelection ${id_section_pluginvim} "select_pluginvim"
|
|
!if ${HAVE_NLS}
|
|
!insertmacro SaveSectionSelection ${id_section_nls} "select_nls"
|
|
!endif
|
|
${If} ${RunningX64}
|
|
SetRegView lastused
|
|
${EndIf}
|
|
|
|
BringToFront
|
|
SectionEnd
|
|
|
|
##########################################################
|
|
!macro LoadSectionSelection section_id reg_value
|
|
ClearErrors
|
|
ReadRegDWORD $3 HKLM "${UNINST_REG_KEY_VIM}" ${reg_value}
|
|
${IfNot} ${Errors}
|
|
${If} $3 = 1
|
|
!insertmacro SelectSection ${section_id}
|
|
${Else}
|
|
!insertmacro UnselectSection ${section_id}
|
|
${EndIf}
|
|
${EndIf}
|
|
!macroend
|
|
|
|
!macro LoadDefaultVimrc out_var reg_value default_value
|
|
ClearErrors
|
|
ReadRegStr ${out_var} HKLM "${UNINST_REG_KEY_VIM}" ${reg_value}
|
|
${If} ${Errors}
|
|
${OrIf} ${out_var} == ""
|
|
StrCpy ${out_var} ${default_value}
|
|
${EndIf}
|
|
!macroend
|
|
|
|
Function .onInit
|
|
!if ${HAVE_MULTI_LANG}
|
|
# Select a language (or read from the registry).
|
|
!insertmacro MUI_LANGDLL_DISPLAY
|
|
!endif
|
|
|
|
!if ${HAVE_NLS}
|
|
ClearErrors
|
|
System::Call 'kernel32::GetUserDefaultLocaleName(t.r19, *i${NSIS_MAX_STRLEN})'
|
|
StrCmp $R9 "zh-cn" coincide 0
|
|
StrCmp $R9 "zh-tw" coincide 0
|
|
StrCmp $R9 "pt-br" 0 part
|
|
coincide:
|
|
System::Call 'User32::CharLower(t r19 r19)*i${NSIS_MAX_STRLEN}'
|
|
${StrRep} $lng_usr "$R9" "-" "_"
|
|
Goto done
|
|
part:
|
|
StrCpy $lng_usr $R9 2
|
|
done:
|
|
!endif
|
|
|
|
${If} $INSTDIR == ${DEFAULT_INSTDIR}
|
|
# Check $VIM
|
|
ReadEnvStr $3 "VIM"
|
|
${If} $3 != ""
|
|
StrCpy $INSTDIR $3
|
|
${EndIf}
|
|
${EndIf}
|
|
|
|
call CheckOldVim
|
|
Pop $3
|
|
${If} $3 == ""
|
|
# No old versions of Vim found. Unselect and hide the section.
|
|
!insertmacro UnselectSection ${id_section_old_ver}
|
|
SectionSetInstTypes ${id_section_old_ver} 0
|
|
SectionSetText ${id_section_old_ver} ""
|
|
${Else}
|
|
${If} $INSTDIR == ${DEFAULT_INSTDIR}
|
|
StrCpy $INSTDIR $3
|
|
${EndIf}
|
|
${EndIf}
|
|
|
|
${If} ${RunningX64}
|
|
SetRegView 64
|
|
${EndIf}
|
|
# Load the selections from the registry (if any).
|
|
!insertmacro LoadSectionSelection ${id_section_console} "select_console"
|
|
!insertmacro LoadSectionSelection ${id_section_batch} "select_batch"
|
|
!insertmacro LoadSectionSelection ${id_section_desktop} "select_desktop"
|
|
!insertmacro LoadSectionSelection ${id_section_startmenu} "select_startmenu"
|
|
!insertmacro LoadSectionSelection ${id_section_editwith} "select_editwith"
|
|
!insertmacro LoadSectionSelection ${id_section_vimrc} "select_vimrc"
|
|
!insertmacro LoadSectionSelection ${id_section_pluginhome} "select_pluginhome"
|
|
!insertmacro LoadSectionSelection ${id_section_pluginvim} "select_pluginvim"
|
|
!if ${HAVE_NLS}
|
|
!insertmacro LoadSectionSelection ${id_section_nls} "select_nls"
|
|
!endif
|
|
# Load the default _vimrc settings from the registry (if any).
|
|
!insertmacro LoadDefaultVimrc $vim_compat_stat "vim_compat" "all"
|
|
!insertmacro LoadDefaultVimrc $vim_keymap_stat "vim_keyremap" "default"
|
|
!insertmacro LoadDefaultVimrc $vim_mouse_stat "vim_mouse" "default"
|
|
${If} ${RunningX64}
|
|
SetRegView lastused
|
|
${EndIf}
|
|
|
|
# User variables:
|
|
# $0 - holds the directory the executables are installed to
|
|
# $1 - holds the parameters to be passed to install.exe. Starts with OLE
|
|
# registration (since a non-OLE gvim will not complain, and we want to
|
|
# always register an OLE gvim).
|
|
# $2 - holds the names to create batch files for
|
|
StrCpy $0 "$INSTDIR\vim${VER_MAJOR}${VER_MINOR}"
|
|
StrCpy $1 "-register-OLE"
|
|
StrCpy $2 "gvim evim gview gvimdiff vimtutor"
|
|
FunctionEnd
|
|
|
|
Function .onInstSuccess
|
|
WriteUninstaller vim${VER_MAJOR}${VER_MINOR}\uninstall-gui.exe
|
|
FunctionEnd
|
|
|
|
Function .onInstFailed
|
|
MessageBox MB_OK|MB_ICONEXCLAMATION "$(str_msg_install_fail)" /SD IDOK
|
|
FunctionEnd
|
|
|
|
##########################################################
|
|
Function SetCustom
|
|
# Display the _vimrc setting dialog using nsDialogs.
|
|
|
|
# Check if a _vimrc should be created
|
|
${IfNot} ${SectionIsSelected} ${id_section_vimrc}
|
|
Abort
|
|
${EndIf}
|
|
|
|
!insertmacro MUI_HEADER_TEXT \
|
|
$(str_vimrc_page_title) $(str_vimrc_page_subtitle)
|
|
|
|
nsDialogs::Create 1018
|
|
Pop $vim_dialog
|
|
|
|
${If} $vim_dialog == error
|
|
Abort
|
|
${EndIf}
|
|
|
|
${If} ${RunningX64}
|
|
SetRegView 64
|
|
${EndIf}
|
|
|
|
GetFunctionAddress $3 ValidateCustom
|
|
nsDialogs::OnBack $3
|
|
|
|
|
|
# 1st group - Compatibility
|
|
${NSD_CreateGroupBox} 0u 0u 296u 44u $(str_msg_compat_title)
|
|
Pop $3
|
|
|
|
${NSD_CreateLabel} 16u 14u 269u 10u $(str_msg_compat_desc)
|
|
Pop $3
|
|
${NSD_CreateDropList} 42u 26u 237u 13u ""
|
|
Pop $vim_nsd_compat
|
|
${NSD_CB_AddString} $vim_nsd_compat $(str_msg_compat_vi)
|
|
${NSD_CB_AddString} $vim_nsd_compat $(str_msg_compat_vim)
|
|
${NSD_CB_AddString} $vim_nsd_compat $(str_msg_compat_defaults)
|
|
${NSD_CB_AddString} $vim_nsd_compat $(str_msg_compat_all)
|
|
|
|
${If} $vim_compat_stat == "defaults"
|
|
StrCpy $4 2
|
|
${ElseIf} $vim_compat_stat == "vim"
|
|
StrCpy $4 1
|
|
${ElseIf} $vim_compat_stat == "vi"
|
|
StrCpy $4 0
|
|
${Else} # default
|
|
StrCpy $4 3
|
|
${EndIf}
|
|
${NSD_CB_SetSelectionIndex} $vim_nsd_compat $4
|
|
|
|
|
|
# 2nd group - Key remapping
|
|
${NSD_CreateGroupBox} 0u 48u 296u 44u $(str_msg_keymap_title)
|
|
Pop $3
|
|
|
|
${NSD_CreateLabel} 16u 62u 269u 10u $(str_msg_keymap_desc)
|
|
Pop $3
|
|
${NSD_CreateDropList} 42u 74u 236u 13u ""
|
|
Pop $vim_nsd_keymap
|
|
${NSD_CB_AddString} $vim_nsd_keymap $(str_msg_keymap_default)
|
|
${NSD_CB_AddString} $vim_nsd_keymap $(str_msg_keymap_windows)
|
|
|
|
${If} $vim_keymap_stat == "windows"
|
|
StrCpy $4 1
|
|
${Else} # default
|
|
StrCpy $4 0
|
|
${EndIf}
|
|
${NSD_CB_SetSelectionIndex} $vim_nsd_keymap $4
|
|
|
|
|
|
# 3rd group - Mouse behavior
|
|
${NSD_CreateGroupBox} 0u 95u 296u 44u $(str_msg_mouse_title)
|
|
Pop $3
|
|
|
|
${NSD_CreateLabel} 16u 108u 269u 10u $(str_msg_mouse_desc)
|
|
Pop $3
|
|
${NSD_CreateDropList} 42u 121u 237u 13u ""
|
|
Pop $vim_nsd_mouse
|
|
${NSD_CB_AddString} $vim_nsd_mouse $(str_msg_mouse_default)
|
|
${NSD_CB_AddString} $vim_nsd_mouse $(str_msg_mouse_windows)
|
|
${NSD_CB_AddString} $vim_nsd_mouse $(str_msg_mouse_unix)
|
|
|
|
${If} $vim_mouse_stat == "xterm"
|
|
StrCpy $4 2
|
|
${ElseIf} $vim_mouse_stat == "windows"
|
|
StrCpy $4 1
|
|
${Else} # default
|
|
StrCpy $4 0
|
|
${EndIf}
|
|
${NSD_CB_SetSelectionIndex} $vim_nsd_mouse $4
|
|
|
|
${If} ${RunningX64}
|
|
SetRegView lastused
|
|
${EndIf}
|
|
|
|
nsDialogs::Show
|
|
FunctionEnd
|
|
|
|
Function ValidateCustom
|
|
${NSD_CB_GetSelectionIndex} $vim_nsd_compat $3
|
|
${If} $3 = 0
|
|
StrCpy $vim_compat_stat "vi"
|
|
${ElseIf} $3 = 1
|
|
StrCpy $vim_compat_stat "vim"
|
|
${ElseIf} $3 = 2
|
|
StrCpy $vim_compat_stat "defaults"
|
|
${Else}
|
|
StrCpy $vim_compat_stat "all"
|
|
${EndIf}
|
|
|
|
${NSD_CB_GetSelectionIndex} $vim_nsd_keymap $3
|
|
${If} $3 = 0
|
|
StrCpy $vim_keymap_stat "default"
|
|
${Else}
|
|
StrCpy $vim_keymap_stat "windows"
|
|
${EndIf}
|
|
|
|
${NSD_CB_GetSelectionIndex} $vim_nsd_mouse $3
|
|
${If} $3 = 0
|
|
StrCpy $vim_mouse_stat "default"
|
|
${ElseIf} $3 = 1
|
|
StrCpy $vim_mouse_stat "windows"
|
|
${Else}
|
|
StrCpy $vim_mouse_stat "xterm"
|
|
${EndIf}
|
|
FunctionEnd
|
|
|
|
##########################################################
|
|
# Description for Installer Sections
|
|
|
|
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${id_section_old_ver} $(str_desc_old_ver)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${id_section_exe} $(str_desc_exe)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${id_section_console} $(str_desc_console)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${id_section_batch} $(str_desc_batch)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${id_group_icons} $(str_desc_icons)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${id_section_desktop} $(str_desc_desktop)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${id_section_startmenu} $(str_desc_start_menu)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${id_section_editwith} $(str_desc_edit_with)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${id_section_vimrc} $(str_desc_vim_rc)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${id_group_plugin} $(str_desc_plugin)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${id_section_pluginhome} $(str_desc_plugin_home)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${id_section_pluginvim} $(str_desc_plugin_vim)
|
|
!if ${HAVE_NLS}
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${id_section_nls} $(str_desc_nls)
|
|
!endif
|
|
!insertmacro MUI_FUNCTION_DESCRIPTION_END
|
|
|
|
|
|
##########################################################
|
|
# Uninstaller Functions and Sections
|
|
|
|
Function un.onInit
|
|
!if ${HAVE_MULTI_LANG}
|
|
# Get the language from the registry.
|
|
!insertmacro MUI_UNGETLANGUAGE
|
|
!endif
|
|
FunctionEnd
|
|
|
|
Section "un.$(str_unsection_register)" id_unsection_register
|
|
SectionIn RO
|
|
|
|
# Apparently $INSTDIR is set to the directory where the uninstaller is
|
|
# created. Thus the "vim91" directory is included in it.
|
|
StrCpy $0 "$INSTDIR"
|
|
|
|
# delete the context menu entry and batch files
|
|
DetailPrint "$(str_msg_unregistering)"
|
|
nsExec::Exec "$0\uninstall.exe -nsis"
|
|
Pop $3
|
|
|
|
# We may have been put to the background when uninstall did something.
|
|
BringToFront
|
|
|
|
# Delete the installer language setting.
|
|
DeleteRegKey ${MUI_LANGDLL_REGISTRY_ROOT} ${MUI_LANGDLL_REGISTRY_KEY}
|
|
SectionEnd
|
|
|
|
Section "un.$(str_unsection_exe)" id_unsection_exe
|
|
|
|
StrCpy $0 "$INSTDIR"
|
|
|
|
# Delete gettext and iconv DLLs
|
|
${If} ${FileExists} "$0\libiconv-2.dll"
|
|
!insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"$0\libiconv-2.dll"
|
|
${EndIf}
|
|
${If} ${FileExists} "$0\libintl-8.dll"
|
|
!insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"$0\libintl-8.dll"
|
|
${EndIf}
|
|
${If} ${FileExists} "$0\libgcc_s_sjlj-1.dll"
|
|
!insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"$0\libgcc_s_sjlj-1.dll"
|
|
${EndIf}
|
|
|
|
# Delete other DLLs
|
|
Delete /REBOOTOK $0\*.dll
|
|
|
|
# Delete 64-bit GvimExt
|
|
${If} ${RunningX64}
|
|
!define LIBRARY_X64
|
|
${If} ${FileExists} "$0\GvimExt64\gvimext.dll"
|
|
!insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"$0\GvimExt64\gvimext.dll"
|
|
${EndIf}
|
|
${If} ${FileExists} "$0\GvimExt64\libiconv-2.dll"
|
|
!insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"$0\GvimExt64\libiconv-2.dll"
|
|
${EndIf}
|
|
${If} ${FileExists} "$0\GvimExt64\libintl-8.dll"
|
|
!insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"$0\GvimExt64\libintl-8.dll"
|
|
${EndIf}
|
|
${If} ${FileExists} "$0\GvimExt64\libwinpthread-1.dll"
|
|
!insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"$0\GvimExt64\libwinpthread-1.dll"
|
|
${EndIf}
|
|
!undef LIBRARY_X64
|
|
RMDir /r $0\GvimExt64
|
|
${EndIf}
|
|
|
|
# Delete 32-bit GvimExt
|
|
${If} ${FileExists} "$0\GvimExt32\gvimext.dll"
|
|
!insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"$0\GvimExt32\gvimext.dll"
|
|
${EndIf}
|
|
${If} ${FileExists} "$0\GvimExt32\libiconv-2.dll"
|
|
!insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"$0\GvimExt32\libiconv-2.dll"
|
|
${EndIf}
|
|
${If} ${FileExists} "$0\GvimExt32\libintl-8.dll"
|
|
!insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"$0\GvimExt32\libintl-8.dll"
|
|
${EndIf}
|
|
${If} ${FileExists} "$0\GvimExt32\libgcc_s_sjlj-1.dll"
|
|
!insertmacro UninstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
|
|
"$0\GvimExt32\libgcc_s_sjlj-1.dll"
|
|
${EndIf}
|
|
RMDir /r $0\GvimExt32
|
|
|
|
ClearErrors
|
|
# Remove everything but *.dll files. Avoids that
|
|
# a lot remains when gvimext.dll cannot be deleted.
|
|
RMDir /r $0\autoload
|
|
RMDir /r $0\colors
|
|
RMDir /r $0\compiler
|
|
RMDir /r $0\doc
|
|
RMDir /r $0\ftplugin
|
|
RMDir /r $0\import
|
|
RMDir /r $0\indent
|
|
RMDir /r $0\macros
|
|
RMDir /r $0\pack
|
|
RMDir /r $0\plugin
|
|
RMDir /r $0\spell
|
|
RMDir /r $0\syntax
|
|
RMDir /r $0\tools
|
|
RMDir /r $0\tutor
|
|
RMDir /r $0\lang
|
|
RMDir /r $0\keymap
|
|
RMDir /r $0\bitmaps
|
|
Delete $0\*.exe
|
|
Delete $0\*.bat
|
|
Delete $0\*.vim
|
|
Delete $0\*.txt
|
|
|
|
${If} ${Errors}
|
|
MessageBox MB_OK|MB_ICONEXCLAMATION $(str_msg_rm_exe_fail) /SD IDOK
|
|
${EndIf}
|
|
|
|
# No error message if the "vim91" directory can't be removed, the
|
|
# gvimext.dll may still be there.
|
|
RMDir $0
|
|
SectionEnd
|
|
|
|
# Remove "vimfiles" directory under the specified directory.
|
|
!macro RemoveVimfiles dir
|
|
${If} ${FileExists} ${dir}\_viminfo
|
|
Delete ${dir}\_viminfo
|
|
${EndIf}
|
|
${If} ${DirExists} ${dir}\vimfiles
|
|
RMDir ${dir}\vimfiles\colors
|
|
RMDir ${dir}\vimfiles\compiler
|
|
RMDir ${dir}\vimfiles\doc
|
|
RMDir ${dir}\vimfiles\ftdetect
|
|
RMDir ${dir}\vimfiles\ftplugin
|
|
RMDir ${dir}\vimfiles\indent
|
|
RMDir ${dir}\vimfiles\keymap
|
|
RMDir ${dir}\vimfiles\plugin
|
|
RMDir ${dir}\vimfiles\syntax
|
|
${If} ${FileExists} ${dir}\vimfiles\.netrwhist*
|
|
Delete ${dir}\vimfiles\.netrwhist*
|
|
${EndIf}
|
|
RMDir ${dir}\vimfiles
|
|
${EndIf}
|
|
!macroend
|
|
|
|
SectionGroup "un.$(str_ungroup_plugin)" id_ungroup_plugin
|
|
Section /o "un.$(str_unsection_plugin_home)" id_unsection_plugin_home
|
|
# get the home dir
|
|
Call un.GetHomeDir
|
|
Pop $0
|
|
|
|
${If} $0 != ""
|
|
!insertmacro RemoveVimfiles $0
|
|
${EndIf}
|
|
SectionEnd
|
|
|
|
Section "un.$(str_unsection_plugin_vim)" id_unsection_plugin_vim
|
|
# get the parent dir of the installation
|
|
Push $INSTDIR
|
|
Call un.GetParent
|
|
Pop $0
|
|
|
|
# if a plugin dir was created at installation remove it
|
|
!insertmacro RemoveVimfiles $0
|
|
SectionEnd
|
|
SectionGroupEnd
|
|
|
|
Section "un.$(str_unsection_rootdir)" id_unsection_rootdir
|
|
# get the parent dir of the installation
|
|
Push $INSTDIR
|
|
Call un.GetParent
|
|
Pop $0
|
|
|
|
${IfNot} ${Silent}
|
|
Delete $0\_vimrc
|
|
${Endif}
|
|
RMDir $0
|
|
SectionEnd
|
|
|
|
##########################################################
|
|
# Description for Uninstaller Sections
|
|
|
|
!insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${id_unsection_register} $(str_desc_unregister)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${id_unsection_exe} $(str_desc_rm_exe)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${id_ungroup_plugin} $(str_desc_rm_plugin)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${id_unsection_plugin_home} $(str_desc_rm_plugin_home)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${id_unsection_plugin_vim} $(str_desc_rm_plugin_vim)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${id_unsection_rootdir} $(str_desc_rm_rootdir)
|
|
!insertmacro MUI_UNFUNCTION_DESCRIPTION_END
|