1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-04-06 14:22:31 -07:00
emacs/admin/nt/dist-build/emacs.nsi
Alberto Santini f58b738042 ; windows installer: set x64 registry keys (tiny change)
* admin/nt/dist-build/emacs.nsi: set x64 registry keys
2025-08-04 21:55:29 -05:00

144 lines
4.9 KiB
NSIS

!include MUI2.nsh
!include LogicLib.nsh
!include x64.nsh
Outfile "emacs-${OUT_VERSION}-installer.exe"
SetCompressor /solid lzma
Var StartMenuFolder
Var UninstallerPath
!define UNINST_KEY \
"Software\Microsoft\Windows\CurrentVersion\Uninstall\emacs-${VERSION_BRANCH}"
!define MUI_WELCOMEPAGE_TITLE "Emacs"
!define MUI_WELCOMEPAGE_TITLE_3LINES
!define MUI_WELCOMEPAGE_TEXT "Welcome to Emacs -- the editor of a lifetime."
!define MUI_WELCOMEFINISHPAGE_BITMAP "emacs-${VERSION_BRANCH}\share\emacs\${EMACS_VERSION}\etc\images\splash.bmp"
!define MUI_ICON "emacs-${VERSION_BRANCH}\share\emacs\${EMACS_VERSION}\etc\images\icons\hicolor\scalable\apps\emacs.ico"
!define MUI_UNICON "emacs-${VERSION_BRANCH}\share\emacs\${EMACS_VERSION}\etc\images\icons\hicolor\scalable\apps\emacs.ico"
!insertmacro MUI_PAGE_WELCOME
# licensing/about click-though page
!define MUI_PAGE_HEADER_TEXT "Emacs is Free Software"
!define MUI_PAGE_HEADER_SUBTEXT "A component of the GNU operating system."
!define MUI_LICENSEPAGE_TEXT_TOP "This program is free software."
!define MUI_LICENSEPAGE_TEXT_BOTTOM "You can redistribute this program and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License (as above), or (at your option) any later version."
!define MUI_LICENSEPAGE_BUTTON "OK"
!insertmacro MUI_PAGE_LICENSE "emacs-${VERSION_BRANCH}\share\emacs\${EMACS_VERSION}\lisp\COPYING"
# user option page: installation path
!insertmacro MUI_PAGE_DIRECTORY
# user option page: start menu shortcut
!insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder
# user option confirm/begin install
!insertmacro MUI_PAGE_INSTFILES
# uninstaller confirmation/options (no options)
!insertmacro MUI_UNPAGE_CONFIRM
# uninstaller begin
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
Name Emacs-${EMACS_VERSION}
function .onInit
StrCpy $INSTDIR "$PROGRAMFILES64\Emacs"
functionend
# main section logic, run after confirming installation
Section
# insisting on installing shortcuts for "all users"
# might ensure uninstall can remove shortcuts we created
# SetShellVarContext all
# extract program files
SetOutPath $INSTDIR
File /r emacs-${VERSION_BRANCH}
# define uninstaller name
StrCpy $UninstallerPath "$INSTDIR\Uninstall-${VERSION_BRANCH}.exe"
# create uninstaller
WriteUninstaller "$UninstallerPath"
# request to set x64 registry keys
SetRegView 64
# add registry key to enable uninstall from control panel
WriteRegStr HKLM "${UNINST_KEY}" "DisplayName" "GNU Emacs ${VERSION_BRANCH}"
WriteRegStr HKLM "${UNINST_KEY}" "DisplayIcon" "$\"$UninstallerPath$\""
WriteRegStr HKLM "${UNINST_KEY}" "DisplayVersion" "${VERSION_BRANCH}"
WriteRegStr HKLM "${UNINST_KEY}" "Publisher" "Free Software Foundation, Inc."
WriteRegStr HKLM "${UNINST_KEY}" "UninstallString" "$\"$UninstallerPath$\""
;Create shortcuts
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
CreateDirectory "$SMPROGRAMS\$StartMenuFolder"
CreateShortcut "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" \
"$UninstallerPath"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Emacs.lnk" \
"$INSTDIR\emacs-${VERSION_BRANCH}\bin\runemacs.exe"
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
# create a section to define what the uninstaller does.
# the section will always be named "Uninstall"
Section "Uninstall"
# remove All Users shortcuts only
# SetShellVarContext all
# retrieve/recalculate uninstaller location
StrCpy $UninstallerPath "$INSTDIR\Uninstall-${VERSION_BRANCH}.exe"
# remove registry key
DeleteRegKey HKLM "${UNINST_KEY}"
# delete uninstaller
Delete "$INSTDIR\Uninstall-${VERSION_BRANCH}.exe"
# retrieve/recalculate startmenu shortcuts location
!insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder
StrCpy $StartMenuFolder "$SMPROGRAMS\$StartMenuFolder"
# remove Start Menu Program shortcuts
Delete "$StartMenuFolder\Emacs.lnk"
Delete "$StartMenuFolder\Uninstall.lnk"
# remove empty startmenu parents up to $SMPROGRAMS
startMenuDeleteLoop:
ClearErrors
RMDir $StartMenuFolder
GetFullPathName $StartMenuFolder "$StartMenuFolder\.."
IfErrors startMenuDeleteLoopDone
StrCmp $StartMenuFolder $SMPROGRAMS startMenuDeleteLoopDone startMenuDeleteLoop
# we're basically using GOTO, above, so we should get here..
startMenuDeleteLoopDone:
# next we remove stuff from program-files/installation path
# start with recursive delete of the Emacs we installed
RMDir /r "$INSTDIR\emacs-${VERSION_BRANCH}"
# now walk parents of installation directory, deleting if empty
instDirDeleteLoop:
ClearErrors
RMDir $INSTDIR
GetFullPathName $INSTDIR "$INSTDIR\.."
IfErrors instDirDeleteLoopDone
StrCmp $INSTDIR $PROGRAMFILES64 instDirDeleteLoopDone instDirDeleteLoop
# final clean-up (after removing from startmenu and progfiles)
instDirDeleteLoopDone:
SectionEnd