0
0
mirror of https://github.com/vim/vim.git synced 2025-10-16 07:24:23 -04:00

nsis: Load correct readme at the end, refactor gvim.nsi slightly

closes: #18440

Signed-off-by: RestorerZ <restorer@mail2k.ru>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
RestorerZ
2025-09-29 19:51:24 +00:00
committed by Christian Brabandt
parent bd6d5c8f0d
commit 5348829784

View File

@@ -1,9 +1,10 @@
# -*- coding: utf-8 -*-
# NSIS file to create a self-installing exe for Vim. # NSIS file to create a self-installing exe for Vim.
# It requires NSIS version 3.0 or later. # It requires NSIS version 3.0 or later.
# Last Change: 2025-09-04 # Last Change: 2025-09-06
# #
Unicode true Unicode true ; !include defaults to UTF-8 after Unicode True since 3.0 Alpha 2
# WARNING: if you make changes to this script, look out for $0 to be valid, # WARNING: if you make changes to this script, look out for $0 to be valid,
# because uninstall deletes most files in $0. # because uninstall deletes most files in $0.
@@ -72,7 +73,7 @@ Unicode true
!define INCLUDE_LIBGCC 1 !define INCLUDE_LIBGCC 1
!endif !endif
!include gvim_version.nsh # for version number !include .\gvim_version.nsh ; for version numbers
# Definition of Patch for Vim. # Definition of Patch for Vim.
!ifndef PATCHLEVEL !ifndef PATCHLEVEL
@@ -91,36 +92,42 @@ SetCompressorDictSize 64
SetDatablockOptimize on SetDatablockOptimize on
!if ${HAVE_UPX} !if ${HAVE_UPX}
!packhdr temp.dat "upx --best --compress-icons=1 temp.dat" !packhdr temp.dat "upx.exe --best --compress-icons=1 temp.dat"
!endif !endif
RequestExecutionLevel highest RequestExecutionLevel highest
ManifestDPIAware true ManifestDPIAware true
# https://github.com/NSIS-Dev/nsis/blob/691211035c2aaaebe8fbca48ee02d4de93594a52/Docs/src/attributes.but#L292
ManifestDPIAwareness "PerMonitorV2,System"
ManifestSupportedOS \
{35138b9a-5d96-4fbd-8e2d-a2440225f93a} /* WinNT 6.1 */ \
{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} /* WinNT 6.2 */ \
{1f676c76-80e1-4239-95bb-83d0f6d0da78} /* WinNT 6.3 */ \
{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a} /* WinNT 10/11 */
!define PRODUCT "Vim ${VER_MAJOR}.${VER_MINOR}" !define PRODUCT "Vim ${VER_MAJOR}.${VER_MINOR}"
!define UNINST_REG_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall" !define UNINST_REG_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall"
!define UNINST_REG_KEY_VIM "${UNINST_REG_KEY}\${PRODUCT}" !define UNINST_REG_KEY_VIM "${UNINST_REG_KEY}\${PRODUCT}"
!if ${WIN64} !if ${WIN64}
!define BIT 64
# This adds '\Vim' to the user choice automagically. The actual value is
# obtained below with CheckOldVim.
!define DEFAULT_INSTDIR "$PROGRAMFILES64\Vim"
!if ${ARM64} !if ${ARM64}
Name "${PRODUCT} (ARM64)" Name "${PRODUCT} (ARM64)"
!else !else
Name "${PRODUCT} (x64)" Name "${PRODUCT} (x64)"
!endif !endif
!else !else
!define BIT 32
!define DEFAULT_INSTDIR "$PROGRAMFILES\Vim"
Name "${PRODUCT}" Name "${PRODUCT}"
!endif !endif
OutFile gvim${VER_MAJOR}${VER_MINOR}.exe OutFile gvim${VER_MAJOR}${VER_MINOR}.exe
# 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} InstallDir ${DEFAULT_INSTDIR}
BrandingText "Vim - the text editor"
# Types of installs we can perform: # Types of installs we can perform:
InstType $(str_type_typical) InstType $(str_type_typical)
@@ -132,33 +139,30 @@ SilentInstall normal
########################################################## ##########################################################
# Version resources # Version resources
VIProductVersion "${VER_MAJOR}.${VER_MINOR}.${PATCHLEVEL}.0" VIFileVersion ${VER_MAJOR}.${VER_MINOR}.${PATCHLEVEL}.0
VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "Vim" VIProductVersion ${VER_MAJOR}.${VER_MINOR}.${PATCHLEVEL}.0
VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "The Vim Project" VIAddVersionKey /LANG=0 "ProductName" "Vim"
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalTrademarks" "Vim" VIAddVersionKey /LANG=0 "CompanyName" "The Vim Project"
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "Copyright (C) 1996" VIAddVersionKey /LANG=0 "LegalTrademarks" "Vim"
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" \ VIAddVersionKey /LANG=0 "LegalCopyright" "Copyright (C) 1996"
VIAddVersionKey /LANG=0 "FileDescription" \
"Vi Improved - A Text Editor" "Vi Improved - A Text Editor"
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" \ VIAddVersionKey /LANG=0 "ProductVersion" \
"${VER_MAJOR}.${VER_MINOR}.${PATCHLEVEL}.0"
VIAddVersionKey /LANG=0 "FileVersion" \
"${VER_MAJOR}.${VER_MINOR}.${PATCHLEVEL}.0" "${VER_MAJOR}.${VER_MINOR}.${PATCHLEVEL}.0"
########################################################## ##########################################################
# including headers # including headers
!include "Library.nsh" # for DLL install !include "Library.nsh" ; for DLL install
!include "LogicLib.nsh" !include "LogicLib.nsh"
!include "MUI2.nsh" !include "MUI2.nsh" ; new user interface
!include "nsDialogs.nsh" !include "nsDialogs.nsh"
!include "Sections.nsh" !include "Sections.nsh" ; for section control
!include "x64.nsh" !include "x64.nsh"
!include .\auxiliary.nsh # helper file !include .\auxiliary.nsh ; helper file
!if ${WIN64}
!define BIT 64
!else
!define BIT 32
!endif
########################################################## ##########################################################
# MUI2 settings # MUI2 settings
@@ -194,16 +198,11 @@ VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" \
!define MUI_FINISHPAGE_SHOWREADME_TEXT $(str_show_readme) !define MUI_FINISHPAGE_SHOWREADME_TEXT $(str_show_readme)
!define MUI_FINISHPAGE_SHOWREADME_FUNCTION LaunchApplication !define MUI_FINISHPAGE_SHOWREADME_FUNCTION LaunchApplication
# General custom functions for MUI2: # Installer pages:
#!define MUI_CUSTOMFUNCTION_ABORT VimOnUserAbort
#!define MUI_CUSTOMFUNCTION_UNABORT un.VimOnUserAbort
# Installer pages
!insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE $(page_lic_file) !insertmacro MUI_PAGE_LICENSE $(page_lic_file)
!insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_COMPONENTS
Page custom SetCustom ValidateCustom Page custom SetCustom ValidateCustom
#!define MUI_PAGE_CUSTOMFUNCTION_LEAVE VimFinalCheck
!insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_NOREBOOTSUPPORT !define MUI_FINISHPAGE_NOREBOOTSUPPORT
@@ -211,7 +210,6 @@ Page custom SetCustom ValidateCustom
# Uninstaller pages: # Uninstaller pages:
!insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_CONFIRM
#!define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.VimCheckRunning
!insertmacro MUI_UNPAGE_COMPONENTS !insertmacro MUI_UNPAGE_COMPONENTS
!insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_INSTFILES
!define MUI_FINISHPAGE_NOREBOOTSUPPORT !define MUI_FINISHPAGE_NOREBOOTSUPPORT
@@ -225,13 +223,13 @@ Page custom SetCustom ValidateCustom
# Include support for other languages: # Include support for other languages:
!if ${HAVE_MULTI_LANG} !if ${HAVE_MULTI_LANG}
!include "lang\portuguesebr.nsi"
!include "lang\danish.nsi" !include "lang\danish.nsi"
!include "lang\dutch.nsi" !include "lang\dutch.nsi"
!include "lang\german.nsi" !include "lang\german.nsi"
!include "lang\greek.nsi" !include "lang\greek.nsi"
!include "lang\italian.nsi" !include "lang\italian.nsi"
!include "lang\japanese.nsi" !include "lang\japanese.nsi"
!include "lang\portuguesebr.nsi"
!include "lang\russian.nsi" !include "lang\russian.nsi"
!include "lang\serbian.nsi" !include "lang\serbian.nsi"
!include "lang\simpchinese.nsi" !include "lang\simpchinese.nsi"
@@ -269,11 +267,11 @@ Function CheckOldVim
${EndIf} ${EndIf}
ClearErrors ClearErrors
StrCpy $0 "" # Installed directory StrCpy $0 "" ; Installed directory
StrCpy $R0 0 # Sub-key index StrCpy $R0 0 ; Sub-key index
StrCpy $R1 "" # Sub-key StrCpy $R1 "" ; Sub-key
${Do} ${Do}
# Eumerate the sub-key: # Enumerate the sub-key:
EnumRegKey $R1 HKLM ${UNINST_REG_KEY} $R0 EnumRegKey $R1 HKLM ${UNINST_REG_KEY} $R0
# Stop if no more sub-key: # Stop if no more sub-key:
@@ -308,7 +306,7 @@ Function CheckOldVim
Push $R2 Push $R2
call GetParent call GetParent
call GetParent call GetParent
Pop $0 # Vim directory Pop $0 ; Vim directory
${ExitDo} ${ExitDo}
${Loop} ${Loop}
@@ -320,12 +318,17 @@ Function CheckOldVim
Pop $R2 Pop $R2
Pop $R1 Pop $R1
Pop $R0 Pop $R0
Exch $0 # put $0 on top of stack, restore $0 to original value Exch $0 ; put $0 on top of stack, restore $0 to original value
FunctionEnd FunctionEnd
Function LaunchApplication Function LaunchApplication
SetOutPath $0 SetOutPath $0
ShellExecAsUser::ShellExecAsUser "" "$0\gvim.exe" '-R "$0\$(vim_readme_file)"' !if ${HAVE_NLS}
ShellExecAsUser::ShellExecAsUser "" "$0\gvim.exe" \
'-R "$0\$(vim_readme_file)"'
!else
ShellExecAsUser::ShellExecAsUser "" "$0\gvim.exe" '-R "$0\README.txt"'
!endif
FunctionEnd FunctionEnd
########################################################## ##########################################################
@@ -350,11 +353,11 @@ Section "$(str_section_old_ver)" id_section_old_ver
# It seems that the old version is still remaining. # It seems that the old version is still remaining.
# TODO: Should we show a warning and run the uninstaller again? # TODO: Should we show a warning and run the uninstaller again?
${ExitDo} # Just ignore for now. ${ExitDo} ; Just ignore for now.
${EndIf} ${EndIf}
${Loop} ${Loop}
Delete $TEMP\install.exe Delete $TEMP\install.exe
Delete $TEMP\vimini.ini # install.exe creates this, but we don't need it. 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. # We may have been put to the background when uninstall did something.
BringToFront BringToFront
@@ -580,15 +583,21 @@ SectionGroupEnd
$INSTDIR\vim${VER_MAJOR}${VER_MINOR}\README.$lng_usr.txt $INSTDIR\vim${VER_MAJOR}${VER_MINOR}\README.$lng_usr.txt
Delete $INSTDIR\README.*.txt Delete $INSTDIR\README.*.txt
!endif !endif
StrCpy $R7 0
!if /FileExists "..\lang\LICENSE.??.txt" !if /FileExists "..\lang\LICENSE.??.txt"
File ..\lang\LICENSE.??.txt File ..\lang\LICENSE.??.txt
!if /FileExists "..\lang\LICENSE.??_??.txt" IntOp $R7 $R7 + 1
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 !endif
!if /FileExists "..\lang\LICENSE.??_??.txt"
File ..\lang\LICENSE.??_??.txt
IntOp $R7 $R7 + 1
!endif
IntCmp $R7 0 notcpy notcpy cpy
cpy:
CopyFiles /SILENT /FILESONLY $INSTDIR\LICENSE.$lng_usr.txt \
$INSTDIR\vim${VER_MAJOR}${VER_MINOR}\LICENSE.$lng_usr.txt
Delete $INSTDIR\LICENSE.*.txt
notcpy:
SetOutPath $0\lang SetOutPath $0\lang
File /r /x Makefile ${VIMRT}\lang\*.* File /r /x Makefile ${VIMRT}\lang\*.*
@@ -597,9 +606,9 @@ SectionGroupEnd
"${GETTEXT}\gettext${BIT}\libintl-8.dll" "$0\libintl-8.dll" "$0" "${GETTEXT}\gettext${BIT}\libintl-8.dll" "$0\libintl-8.dll" "$0"
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
"${GETTEXT}\gettext${BIT}\libiconv-2.dll" "$0\libiconv-2.dll" "$0" "${GETTEXT}\gettext${BIT}\libiconv-2.dll" "$0\libiconv-2.dll" "$0"
# Install libgcc_s_sjlj-1.dll only if it is needed.
!if ${INCLUDE_LIBGCC} !if ${INCLUDE_LIBGCC}
!if /FileExists "${GETTEXT}\gettext${BIT}\libgcc_s_sjlj-1.dll" !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 \ !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
"${GETTEXT}\gettext${BIT}\libgcc_s_sjlj-1.dll" \ "${GETTEXT}\gettext${BIT}\libgcc_s_sjlj-1.dll" \
"$0\libgcc_s_sjlj-1.dll" "$0" "$0\libgcc_s_sjlj-1.dll" "$0"
@@ -630,9 +639,9 @@ SectionGroupEnd
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \ !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
"${GETTEXT}\gettext32\libiconv-2.dll" \ "${GETTEXT}\gettext32\libiconv-2.dll" \
"$0\GvimExt32\libiconv-2.dll" "$0\GvimExt32" "$0\GvimExt32\libiconv-2.dll" "$0\GvimExt32"
# Install libgcc_s_sjlj-1.dll only if it is needed.
!if ${INCLUDE_LIBGCC} !if ${INCLUDE_LIBGCC}
!if /FileExists "${GETTEXT}\gettext32\libgcc_s_sjlj-1.dll" !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 \ !insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED \
"${GETTEXT}\gettext32\libgcc_s_sjlj-1.dll" \ "${GETTEXT}\gettext32\libgcc_s_sjlj-1.dll" \
"$0\GvimExt32\libgcc_s_sjlj-1.dll" "$0\GvimExt32" "$0\GvimExt32\libgcc_s_sjlj-1.dll" "$0\GvimExt32"
@@ -832,7 +841,7 @@ Function SetCustom
StrCpy $4 1 StrCpy $4 1
${ElseIf} $vim_compat_stat == "vi" ${ElseIf} $vim_compat_stat == "vi"
StrCpy $4 0 StrCpy $4 0
${Else} # default ${Else} ; default
StrCpy $4 3 StrCpy $4 3
${EndIf} ${EndIf}
${NSD_CB_SetSelectionIndex} $vim_nsd_compat $4 ${NSD_CB_SetSelectionIndex} $vim_nsd_compat $4
@@ -850,7 +859,7 @@ Function SetCustom
${If} $vim_keymap_stat == "windows" ${If} $vim_keymap_stat == "windows"
StrCpy $4 1 StrCpy $4 1
${Else} # default ${Else} ; default
StrCpy $4 0 StrCpy $4 0
${EndIf} ${EndIf}
${NSD_CB_SetSelectionIndex} $vim_nsd_keymap $4 ${NSD_CB_SetSelectionIndex} $vim_nsd_keymap $4
@@ -871,7 +880,7 @@ Function SetCustom
StrCpy $4 2 StrCpy $4 2
${ElseIf} $vim_mouse_stat == "windows" ${ElseIf} $vim_mouse_stat == "windows"
StrCpy $4 1 StrCpy $4 1
${Else} # default ${Else} ; default
StrCpy $4 0 StrCpy $4 0
${EndIf} ${EndIf}
${NSD_CB_SetSelectionIndex} $vim_nsd_mouse $4 ${NSD_CB_SetSelectionIndex} $vim_nsd_mouse $4