pokemon-showdown-client/desktop/pokemonshowdown.nsi
Guangcong Luo c1f3b038e4
Update desktop client (#1459)
Last time we built the desktop client, in 2015, NW.js was called
node-webkit.

Since then:

- NW.js has added NaCl and some other things, ballooning the installer
  from 30 MB to 120 MB. (The NaCl stuff on Windows seems to be
  deletable, helping keep its installed size slightly smaller.)

  (If anyone wants to make a custom build without NaCl, that'd help me
  a lot)

- NW.js also has a lot more files, and NSIS makes adding/removing files
  annoying enough that I wrote a script to automate it for me.

- Apple has made Gatekeeper requirements a lot stricter, requiring
  setting up entitlements, Hardened Runtime, notarization, and
  stapling, (in addition to just signing in 2015). I documented the
  process because there are zero online guides for it right now.

But on the other hand, this update hopefully fixes the crashes that
the old desktop client has. It also fixes:

- the Chrome bold emoji bug is gone

- MP3 is no longer under patent, allowing us to have only MP3 files for
  everything

- honestly I don't think we use any other Chrome feature added in the
  last four years
2020-02-05 14:50:28 -08:00

395 lines
13 KiB
Plaintext
Executable File

;NSIS Modern User Interface
;Installer builder for Pokemon Showdown
;--------------------------------
;Include Modern UI
!include "MUI2.nsh"
;--------------------------------
;General
# MUI Symbol Definitions
!define MUI_ICON "icons\pokemonshowdown.ico"
!define APPNAME "Pokemon Showdown"
!define COMPANYNAME "Pokemon Showdown"
!define ABOUTURL "http://pokemonshowdown.com/" # "Publisher" link
!define INSTALLSIZE 48000
;Name and file
Name "Pokemon Showdown"
OutFile "setup.exe"
;Default installation folder
InstallDir "$PROGRAMFILES\Pokemon Showdown"
CRCCheck on
XPStyle on
ShowInstDetails show
;Get installation folder from registry if available
InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation"
;Request application privileges for Windows Vista
# RequestExecutionLevel user
RequestExecutionLevel admin
;--------------------------------
;Interface Settings
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "icons\installerbg.bmp" ; optional
!define MUI_ABORTWARNING
;--------------------------------
;Pages
# !insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_NOAUTOCLOSE
!define MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_TEXT "Play Pokemon Showdown"
!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchLink"
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
;--------------------------------
;Languages
!insertmacro MUI_LANGUAGE "English"
;--------------------------------
;Installer Sections
Section "Main" SecMain
setOutPath $INSTDIR
# Files added here should be removed by the uninstaller (see section "uninstall")
file "credits.html"
file "d3dcompiler_47.dll"
file "ffmpeg.dll"
file "icudtl.dat"
file "index.html"
file "libEGL.dll"
file "libGLESv2.dll"
file "natives_blob.bin"
file "node.dll"
file "notification_helper.exe"
file "nw.dll"
file "pokemonshowdown.exe"
file "nw_100_percent.pak"
file "nw_200_percent.pak"
file "nw_elf.dll"
file "package.json"
file "resources.pak"
file "v8_context_snapshot.bin"
CreateDirectory "$INSTDIR\icons"
setOutPath "$INSTDIR\icons"
file "icons\icon_32x32.png"
file "icons\installerbg.bmp"
file "icons\pokemonshowdown.ico"
CreateDirectory "$INSTDIR\locales"
setOutPath "$INSTDIR\locales"
file "locales\am.pak"
file "locales\am.pak.info"
file "locales\ar.pak"
file "locales\ar.pak.info"
file "locales\bg.pak"
file "locales\bg.pak.info"
file "locales\bn.pak"
file "locales\bn.pak.info"
file "locales\ca.pak"
file "locales\ca.pak.info"
file "locales\cs.pak"
file "locales\cs.pak.info"
file "locales\da.pak"
file "locales\da.pak.info"
file "locales\de.pak"
file "locales\de.pak.info"
file "locales\el.pak"
file "locales\el.pak.info"
file "locales\en-GB.pak"
file "locales\en-GB.pak.info"
file "locales\en-US.pak"
file "locales\en-US.pak.info"
file "locales\es-419.pak"
file "locales\es-419.pak.info"
file "locales\es.pak"
file "locales\es.pak.info"
file "locales\et.pak"
file "locales\et.pak.info"
file "locales\fa.pak"
file "locales\fa.pak.info"
file "locales\fi.pak"
file "locales\fi.pak.info"
file "locales\fil.pak"
file "locales\fil.pak.info"
file "locales\fr.pak"
file "locales\fr.pak.info"
file "locales\gu.pak"
file "locales\gu.pak.info"
file "locales\he.pak"
file "locales\he.pak.info"
file "locales\hi.pak"
file "locales\hi.pak.info"
file "locales\hr.pak"
file "locales\hr.pak.info"
file "locales\hu.pak"
file "locales\hu.pak.info"
file "locales\id.pak"
file "locales\id.pak.info"
file "locales\it.pak"
file "locales\it.pak.info"
file "locales\ja.pak"
file "locales\ja.pak.info"
file "locales\kn.pak"
file "locales\kn.pak.info"
file "locales\ko.pak"
file "locales\ko.pak.info"
file "locales\lt.pak"
file "locales\lt.pak.info"
file "locales\lv.pak"
file "locales\lv.pak.info"
file "locales\ml.pak"
file "locales\ml.pak.info"
file "locales\mr.pak"
file "locales\mr.pak.info"
file "locales\ms.pak"
file "locales\ms.pak.info"
file "locales\nb.pak"
file "locales\nb.pak.info"
file "locales\nl.pak"
file "locales\nl.pak.info"
file "locales\pl.pak"
file "locales\pl.pak.info"
file "locales\pt-BR.pak"
file "locales\pt-BR.pak.info"
file "locales\pt-PT.pak"
file "locales\pt-PT.pak.info"
file "locales\ro.pak"
file "locales\ro.pak.info"
file "locales\ru.pak"
file "locales\ru.pak.info"
file "locales\sk.pak"
file "locales\sk.pak.info"
file "locales\sl.pak"
file "locales\sl.pak.info"
file "locales\sr.pak"
file "locales\sr.pak.info"
file "locales\sv.pak"
file "locales\sv.pak.info"
file "locales\sw.pak"
file "locales\sw.pak.info"
file "locales\ta.pak"
file "locales\ta.pak.info"
file "locales\te.pak"
file "locales\te.pak.info"
file "locales\th.pak"
file "locales\th.pak.info"
file "locales\tr.pak"
file "locales\tr.pak.info"
file "locales\uk.pak"
file "locales\uk.pak.info"
file "locales\vi.pak"
file "locales\vi.pak.info"
file "locales\zh-CN.pak"
file "locales\zh-CN.pak.info"
file "locales\zh-TW.pak"
file "locales\zh-TW.pak.info"
CreateDirectory "$INSTDIR\swiftshader"
setOutPath "$INSTDIR\swiftshader"
file "swiftshader\libEGL.dll"
file "swiftshader\libGLESv2.dll"
writeUninstaller "$INSTDIR\uninstall.exe"
createShortCut "$SMPROGRAMS\${APPNAME}.lnk" "$INSTDIR\pokemonshowdown.exe" "" "$INSTDIR\icons\pokemonshowdown.ico"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" "$\"$INSTDIR$\""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$\"$INSTDIR\icons\pokemonshowdown.ico$\""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "Publisher" "$\"${COMPANYNAME}$\""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "URLInfoAbout" "$\"${ABOUTURL}$\""
# There is no option for modifying or repairing the install
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoRepair" 1
# Set the INSTALLSIZE constant (!defined at the top of this script) so Add/Remove Programs can accurately report the size
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "EstimatedSize" ${INSTALLSIZE}
SectionEnd
;--------------------------------
;Descriptions
;Language strings
# LangString DESC_SecMain ${LANG_ENGLISH} "A test section."
;Assign language strings to sections
# !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
# !insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} $(DESC_SecDummy)
# !insertmacro MUI_FUNCTION_DESCRIPTION_END
;--------------------------------
;Uninstaller Section
Section "Uninstall"
# Remove Start Menu launcher
delete "$SMPROGRAMS\${APPNAME}.lnk"
# Remove files
delete "$INSTDIR\swiftshader\libEGL.dll"
delete "$INSTDIR\swiftshader\libGLESv2.dll"
rmDir "$INSTDIR\swiftshader"
delete "$INSTDIR\locales\am.pak"
delete "$INSTDIR\locales\am.pak.info"
delete "$INSTDIR\locales\ar.pak"
delete "$INSTDIR\locales\ar.pak.info"
delete "$INSTDIR\locales\bg.pak"
delete "$INSTDIR\locales\bg.pak.info"
delete "$INSTDIR\locales\bn.pak"
delete "$INSTDIR\locales\bn.pak.info"
delete "$INSTDIR\locales\ca.pak"
delete "$INSTDIR\locales\ca.pak.info"
delete "$INSTDIR\locales\cs.pak"
delete "$INSTDIR\locales\cs.pak.info"
delete "$INSTDIR\locales\da.pak"
delete "$INSTDIR\locales\da.pak.info"
delete "$INSTDIR\locales\de.pak"
delete "$INSTDIR\locales\de.pak.info"
delete "$INSTDIR\locales\el.pak"
delete "$INSTDIR\locales\el.pak.info"
delete "$INSTDIR\locales\en-GB.pak"
delete "$INSTDIR\locales\en-GB.pak.info"
delete "$INSTDIR\locales\en-US.pak"
delete "$INSTDIR\locales\en-US.pak.info"
delete "$INSTDIR\locales\es-419.pak"
delete "$INSTDIR\locales\es-419.pak.info"
delete "$INSTDIR\locales\es.pak"
delete "$INSTDIR\locales\es.pak.info"
delete "$INSTDIR\locales\et.pak"
delete "$INSTDIR\locales\et.pak.info"
delete "$INSTDIR\locales\fa.pak"
delete "$INSTDIR\locales\fa.pak.info"
delete "$INSTDIR\locales\fi.pak"
delete "$INSTDIR\locales\fi.pak.info"
delete "$INSTDIR\locales\fil.pak"
delete "$INSTDIR\locales\fil.pak.info"
delete "$INSTDIR\locales\fr.pak"
delete "$INSTDIR\locales\fr.pak.info"
delete "$INSTDIR\locales\gu.pak"
delete "$INSTDIR\locales\gu.pak.info"
delete "$INSTDIR\locales\he.pak"
delete "$INSTDIR\locales\he.pak.info"
delete "$INSTDIR\locales\hi.pak"
delete "$INSTDIR\locales\hi.pak.info"
delete "$INSTDIR\locales\hr.pak"
delete "$INSTDIR\locales\hr.pak.info"
delete "$INSTDIR\locales\hu.pak"
delete "$INSTDIR\locales\hu.pak.info"
delete "$INSTDIR\locales\id.pak"
delete "$INSTDIR\locales\id.pak.info"
delete "$INSTDIR\locales\it.pak"
delete "$INSTDIR\locales\it.pak.info"
delete "$INSTDIR\locales\ja.pak"
delete "$INSTDIR\locales\ja.pak.info"
delete "$INSTDIR\locales\kn.pak"
delete "$INSTDIR\locales\kn.pak.info"
delete "$INSTDIR\locales\ko.pak"
delete "$INSTDIR\locales\ko.pak.info"
delete "$INSTDIR\locales\lt.pak"
delete "$INSTDIR\locales\lt.pak.info"
delete "$INSTDIR\locales\lv.pak"
delete "$INSTDIR\locales\lv.pak.info"
delete "$INSTDIR\locales\ml.pak"
delete "$INSTDIR\locales\ml.pak.info"
delete "$INSTDIR\locales\mr.pak"
delete "$INSTDIR\locales\mr.pak.info"
delete "$INSTDIR\locales\ms.pak"
delete "$INSTDIR\locales\ms.pak.info"
delete "$INSTDIR\locales\nb.pak"
delete "$INSTDIR\locales\nb.pak.info"
delete "$INSTDIR\locales\nl.pak"
delete "$INSTDIR\locales\nl.pak.info"
delete "$INSTDIR\locales\pl.pak"
delete "$INSTDIR\locales\pl.pak.info"
delete "$INSTDIR\locales\pt-BR.pak"
delete "$INSTDIR\locales\pt-BR.pak.info"
delete "$INSTDIR\locales\pt-PT.pak"
delete "$INSTDIR\locales\pt-PT.pak.info"
delete "$INSTDIR\locales\ro.pak"
delete "$INSTDIR\locales\ro.pak.info"
delete "$INSTDIR\locales\ru.pak"
delete "$INSTDIR\locales\ru.pak.info"
delete "$INSTDIR\locales\sk.pak"
delete "$INSTDIR\locales\sk.pak.info"
delete "$INSTDIR\locales\sl.pak"
delete "$INSTDIR\locales\sl.pak.info"
delete "$INSTDIR\locales\sr.pak"
delete "$INSTDIR\locales\sr.pak.info"
delete "$INSTDIR\locales\sv.pak"
delete "$INSTDIR\locales\sv.pak.info"
delete "$INSTDIR\locales\sw.pak"
delete "$INSTDIR\locales\sw.pak.info"
delete "$INSTDIR\locales\ta.pak"
delete "$INSTDIR\locales\ta.pak.info"
delete "$INSTDIR\locales\te.pak"
delete "$INSTDIR\locales\te.pak.info"
delete "$INSTDIR\locales\th.pak"
delete "$INSTDIR\locales\th.pak.info"
delete "$INSTDIR\locales\tr.pak"
delete "$INSTDIR\locales\tr.pak.info"
delete "$INSTDIR\locales\uk.pak"
delete "$INSTDIR\locales\uk.pak.info"
delete "$INSTDIR\locales\vi.pak"
delete "$INSTDIR\locales\vi.pak.info"
delete "$INSTDIR\locales\zh-CN.pak"
delete "$INSTDIR\locales\zh-CN.pak.info"
delete "$INSTDIR\locales\zh-TW.pak"
delete "$INSTDIR\locales\zh-TW.pak.info"
rmDir "$INSTDIR\locales"
delete "$INSTDIR\icons\icon_32x32.png"
delete "$INSTDIR\icons\installerbg.bmp"
delete "$INSTDIR\icons\pokemonshowdown.ico"
rmDir "$INSTDIR\icons"
delete "$INSTDIR\credits.html"
delete "$INSTDIR\d3dcompiler_47.dll"
delete "$INSTDIR\ffmpeg.dll"
delete "$INSTDIR\icudtl.dat"
delete "$INSTDIR\index.html"
delete "$INSTDIR\libEGL.dll"
delete "$INSTDIR\libGLESv2.dll"
delete "$INSTDIR\natives_blob.bin"
delete "$INSTDIR\node.dll"
delete "$INSTDIR\notification_helper.exe"
delete "$INSTDIR\nw.dll"
delete "$INSTDIR\pokemonshowdown.exe"
delete "$INSTDIR\nw_100_percent.pak"
delete "$INSTDIR\nw_200_percent.pak"
delete "$INSTDIR\nw_elf.dll"
delete "$INSTDIR\package.json"
delete "$INSTDIR\resources.pak"
delete "$INSTDIR\v8_context_snapshot.bin"
# Always delete uninstaller as the last action
delete $INSTDIR\uninstall.exe
# Try to remove the install directory - this will only happen if it is empty
rmDir $INSTDIR
# Remove uninstaller information from the registry
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}"
SectionEnd
Function LaunchLink
ExecShell "" "$INSTDIR\pokemonshowdown.exe"
FunctionEnd