# SPDX-License-Identifier: LGPL-3.0-or-later # # Copyright (C) 2021 Perry Werneck # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . # !include "MUI2.nsh" !include "x64.nsh" !include "FileFunc.nsh" !include "LogicLib.nsh" !include "winmessages.nsh" Name "@PRODUCT_NAME@" Caption "@PRODUCT_NAME@ - @PACKAGE_DESCRIPTION@" !ifdef WITHGTK outfile "@PRODUCT_NAME@-@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@.@PACKAGE_MAJOR_RELEASE@.@PACKAGE_MINOR_RELEASE@-gtk-@GTK_MODVERSION@-@host_cpu@.exe" !else outfile "@PRODUCT_NAME@-@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@.@PACKAGE_MAJOR_RELEASE@.@PACKAGE_MINOR_RELEASE@-requires-gtk-@GTK_MODVERSION@-@host_cpu@.exe" !endif XPStyle on installDir "$@PROGRAMFILES@\@PRODUCT_NAME@" #define the installer icon !define MUI_ICON "@PRODUCT_NAME@.ico" !define MUI_UNICON "@PRODUCT_NAME@.ico" icon "@PRODUCT_NAME@.ico" # Get installation folder from registry if available InstallDirRegKey HKLM "Software\@PRODUCT_NAME@" "InstallLocation" RequestExecutionLevel admin # Properties VIProductVersion "@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@.@PACKAGE_MAJOR_RELEASE@.@PACKAGE_MINOR_RELEASE@" VIFileVersion "@WIN32_VERSION@" # Reference: https://nsis.sourceforge.io/Reference/VIAddVersionKey VIAddVersionKey "ProductVersion" "@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@.@PACKAGE_MAJOR_RELEASE@.@PACKAGE_MINOR_RELEASE@" VIAddVersionKey "FileVersion" "@WIN32_VERSION@" VIAddVersionKey "ProductName" "@PRODUCT_NAME@" VIAddVersionKey "FileDescription" "@PACKAGE_DESCRIPTION@" VIAddVersionKey "LegalCopyright" "(C) 2017 Banco do Brasil S/A. All Rights Reserved" # VIAddVersionKey "PrivateBuild" "" # Interface !define MUI_ABORTWARNING # !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "LICENSE" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES # !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES # !insertmacro MUI_UNPAGE_FINISH # Languages !insertmacro MUI_LANGUAGE "English" # Section scripts !include Sections.nsh # default section SubSection "@PRODUCT_NAME@" SecMain Section "Core" SecCore SetRegView @WINARCH@ ${DisableX64FSRedirection} # define the output path for this file setOutPath $INSTDIR SetShellVarContext all createShortCut "$SMPROGRAMS\@PRODUCT_NAME@.lnk" "$INSTDIR\@PRODUCT_NAME@.exe" createShortCut "$DESKTOP\@PRODUCT_NAME@.lnk" "$INSTDIR\@PRODUCT_NAME@.exe" # Binary files file "/oname=$INSTDIR\@PRODUCT_NAME@.exe" "bin\@PRODUCT_NAME@.exe" file "/oname=$INSTDIR\@PRODUCT_NAME@.ico" "bin\@PRODUCT_NAME@.ico" file "/oname=$INSTDIR\lib@LIBRARY_NAME@.dll" "bin\lib@LIBRARY_NAME@.dll" file "/oname=$INSTDIR\libv3270.dll" "bin\libv3270.dll" # Register file association # icons & logos CreateDirectory "$INSTDIR\icons" file "/oname=$INSTDIR\icons\gtk-connect-symbolic.svg" "share\@PRODUCT_NAME@\icons\gtk-connect-symbolic.svg" file "/oname=$INSTDIR\icons\gtk-disconnect-symbolic.svg" "share\@PRODUCT_NAME@\icons\gtk-disconnect-symbolic.svg" file "/oname=$INSTDIR\icons\connect-symbolic.svg" "share\@PRODUCT_NAME@\icons\connect-symbolic.svg" file "/oname=$INSTDIR\icons\disconnect-symbolic.svg" "share\@PRODUCT_NAME@\icons\disconnect-symbolic.svg" file "/oname=$INSTDIR\icons\@PRODUCT_NAME@.svg" "share\@PRODUCT_NAME@\@PRODUCT_NAME@.svg" file "/oname=$INSTDIR\@PRODUCT_NAME@-logo.svg" "share\@PRODUCT_NAME@\@PRODUCT_NAME@-logo.svg" file "/oname=$INSTDIR\@PRODUCT_NAME@.svg" "share\@PRODUCT_NAME@\@PRODUCT_NAME@.svg" file "/oname=$INSTDIR\@PRODUCT_NAME@.png" "share\@PRODUCT_NAME@\@PRODUCT_NAME@.png" # Schema CreateDirectory "$INSTDIR\schemas" file "/oname=$INSTDIR\schemas\@PRODUCT_NAME@-application.gschema.xml" "share\glib-2.0\schemas\@PRODUCT_NAME@-application.gschema.xml" file "/oname=$INSTDIR\schemas\@PRODUCT_NAME@-window.gschema.xml" "share\glib-2.0\schemas\@PRODUCT_NAME@-window.gschema.xml" file "/oname=$INSTDIR\gschemas.compiled" "runtime/share/glib-2.0/schemas/gschemas.compiled" # Configuration files file "/oname=$INSTDIR\colors.conf" "share\@PRODUCT_NAME@\colors.conf" # Documentation files file "/oname=$INSTDIR\AUTHORS" "AUTHORS" file "/oname=$INSTDIR\LICENSE" "LICENSE" # Misc folders CreateDirectory "$INSTDIR\certs" CreateDirectory "$INSTDIR\plugins" CreateDirectory "$INSTDIR\keypad" # UI definition files CreateDirectory "$INSTDIR\ui" file "/oname=$INSTDIR\@PRODUCT_NAME@.ui.xml" "share\@PRODUCT_NAME@\@PRODUCT_NAME@.ui.xml" # Charset definition files CreateDirectory "$INSTDIR\remap" file "/oname=$INSTDIR\remap\bracket.xml" "share\@PRODUCT_NAME@\remap\bracket.xml" # Locale files CreateDirectory "$INSTDIR\locale\pt_BR\LC_MESSAGES" file "/oname=$INSTDIR\locale\pt_BR\LC_MESSAGES\@PACKAGE_NAME@.mo" "share\locale\pt_BR\LC_MESSAGES\@PACKAGE_NAME@.mo" file "/oname=$INSTDIR\locale\pt_BR\LC_MESSAGES\lib@LIBRARY_NAME@-@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@.mo" "share\locale\pt_BR\LC_MESSAGES\lib@LIBRARY_NAME@-@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@.mo" file "/oname=$INSTDIR\locale\pt_BR\LC_MESSAGES\libv3270-@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@.mo" "share\locale\pt_BR\LC_MESSAGES\libv3270-@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@.mo" # define uninstaller name SetRegView 32 writeUninstaller $INSTDIR\uninstall.exe WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@PRODUCT_NAME@" \ "DisplayName" "@PRODUCT_NAME@ - @PACKAGE_DESCRIPTION@" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@PRODUCT_NAME@" \ "DisplayIcon" "$INSTDIR\@PRODUCT_NAME@.ico" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@PRODUCT_NAME@" \ "DisplayVersion" "@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@.@PACKAGE_MAJOR_RELEASE@.@PACKAGE_MINOR_RELEASE@" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@PRODUCT_NAME@" \ "UninstallString" "$INSTDIR\uninstall.exe" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@PRODUCT_NAME@" \ "InstallLocation" "$INSTDIR" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@PRODUCT_NAME@" \ "NoModify" "1" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@PRODUCT_NAME@" \ "NoRepair" "1" # Default settings SetRegView @WINARCH@ # Setup log file # https://docs.microsoft.com/en-us/windows/win32/eventlog/event-sources WriteRegStr HKLM "SYSTEM\CurrentControlSet\Services\EventLog\@PRODUCT_NAME@" \ "PackageVersion" "@PACKAGE_VERSION@" # Required for IPC Library. WriteRegStr HKLM "Software\@PRODUCT_NAME@" "InstallLocation" "$INSTDIR" # Customized options WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "autoconnect" 0x00000001 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "blankfill" 0x00000000 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "bold" 0x00000000 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "keepselected" 0x00000001 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "marginedpaste" 0x00000001 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "rectselect" 0x00000000 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "monocase" 0x00000000 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "cursorblink" 0x00000001 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "showtiming" 0x00000001 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "cursorpos" 0x00000001 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "linewrap" 0x00000000 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "crosshair" 0x00000000 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "fullscreen" 0x00000000 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "autoreconnect" 0x00000001 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "insert" 0x00000000 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "smartpaste" 0x00000001 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "beep" 0x00000001 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "fieldattr" 0x00000000 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "altscreen" 0x00000001 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "keepalive" 0x00000000 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "dstrace" 0x00000000 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "screentrace" 0x00000000 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "eventtrace" 0x00000000 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "nettrace" 0x00000000 WriteRegDWORD HKLM "Software\@PRODUCT_NAME@\toggles" "ssltrace" 0x00000000 WriteRegStr HKLM "Software\@PRODUCT_NAME@" "font-family" "Lucida Console" WriteRegStr HKLM "Software\@PRODUCT_NAME@" "colors" "rgb(24,24,24);rgb(79,156,254);rgb(237,74,70);rgb(235,110,183);rgb(131,199,70);rgb(86,216,201);rgb(239,197,65);rgb(222,222,222);rgb(59,59,59);rgb(54,142,171);rgb(250,145,83);rgb(165,128,226);rgb(112,180,51);rgb(65,199,185);rgb(219,179,45);rgb(119,119,119);rgb(131,199,70);rgb(237,74,70);rgb(65,199,185);rgb(250,145,83);rgb(37,37,37);rgb(222,222,222);rgb(222,222,222);rgb(24,24,24);rgb(222,222,222);rgb(79,156,254);rgb(131,199,70);rgb(239,197,65);rgb(239,197,65)" sectionEnd !ifdef WITHCERTS Section "SSL Certificates" SSLCerts setOutPath $INSTDIR\certs file /r "sslcerts\*.*" sectionEnd !endif SubSection "Plugins" SecPLugin Section "Remote control" IPCPlugin setOutPath $INSTDIR ${DisableX64FSRedirection} CreateDirectory "$INSTDIR\plugins" file "/oname=$INSTDIR\plugins\ipcserver.dll" "lib\@PRODUCT_NAME@-plugins\ipcserver.dll" CreateDirectory "$INSTDIR\locale\pt_BR\LC_MESSAGES" file "/oname=$INSTDIR\locale\pt_BR\LC_MESSAGES\libipc3270-@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@.mo" "share\locale\pt_BR\LC_MESSAGES\libipc3270-@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@.mo" ${@NSISREDIR@} file "/oname=$SYSDIR\libipc3270.dll" "bin\libipc3270.dll" sectionEnd SubSectionEnd !ifdef WITHEXTRAS SubSection "Extra modules" Languages !ifdef WITHLIBHLLAPI Section "HLLAPI" HLLAPIBinding ${@NSISREDIR@} # Install HLLAPI connector file "/oname=$SYSDIR\hllapi.dll" "bin\libhllapi.dll" # Install with "lib" prefix for compatibility. file "/oname=$SYSDIR\libhllapi.dll" "bin\libhllapi.dll" CreateDirectory "$INSTDIR\locale\pt_BR\LC_MESSAGES" file "/oname=$INSTDIR\locale\pt_BR\LC_MESSAGES\libhllapi-@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@.mo" "share\locale\pt_BR\LC_MESSAGES\libhllapi-@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@.mo" SectionEnd !endif Section "KEYPADS" Keypads file "/oname=$INSTDIR\keypad\00-right.xml" "share\@PRODUCT_NAME@\keypad\00-right.xml" file "/oname=$INSTDIR\keypad\10-bottom.xml" "share\@PRODUCT_NAME@\keypad\10-bottom.xml" SectionEnd !ifdef WITHMONO-TN3270 Section /o ".NET" DOTNET CreateDirectory "$INSTDIR\dotnet" ${DisableX64FSRedirection} file "/oname=$INSTDIR\dotnet\tn3270.dll" "mono/lib/tn3270-5.2/tn3270.dll" file "/oname=$INSTDIR\dotnet\tn3270.xml" "mono/gapi-2.0/tn3270/tn3270.xml" ${@NSISREDIR@} file "/oname=$SYSDIR\mono-tn3270.dll" "mono-tn3270.dll" SectionEnd !endif SubSectionEnd !endif !ifdef WITHSDK Section /o "Software Development Kit" SDK setOutPath $INSTDIR\sdk\include file /r "include\*.*" CreateDirectory "$INSTDIR\sdk" CreateDirectory "$INSTDIR\sdk\def" CreateDirectory "$INSTDIR\sdk\lib" file "/oname=$INSTDIR\sdk\lib\lib3270.dll.a" "lib\lib@LIBRARY_NAME@.dll.a" file "/oname=$INSTDIR\sdk\lib\lib3270.delayed.a" "lib\lib@LIBRARY_NAME@.delayed.a" file "/oname=$INSTDIR\sdk\lib\lib3270.static.a" "lib\lib@LIBRARY_NAME@.static.a" file "/oname=$INSTDIR\sdk\lib\libv3270.dll.a" "lib\libv3270.dll.a" file "/oname=$INSTDIR\sdk\lib\libipc3270.dll.a" "lib\libipc3270.dll.a" file "/oname=$INSTDIR\sdk\lib\libipc3270.static.a" "lib\libipc3270.static.a" file "/oname=$INSTDIR\sdk\lib\libhllapi.dll.a" "lib\libhllapi.dll.a" file "/oname=$INSTDIR\sdk\lib3270.mak" "share\@PRODUCT_NAME@\def\lib3270.mak" file "/oname=$INSTDIR\sdk\def\lib@LIBRARY_NAME@.def" "share\@PRODUCT_NAME@\def\lib@LIBRARY_NAME@.def" file "/oname=$INSTDIR\sdk\def\libv3270.def" "share\@PRODUCT_NAME@\def\libv3270.def" file "/oname=$INSTDIR\sdk\def\libipc3270.def" "share\@PRODUCT_NAME@\def\libipc3270.def" file "/oname=$INSTDIR\sdk\def\libhllapi.def" "share\@PRODUCT_NAME@\def\libhllapi.def" SetRegView @WINARCH@ WriteRegExpandStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PW3270_SDK_PATH" "$INSTDIR\sdk" SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 SectionEnd !endif SubSectionEnd !ifdef WITHGTK Section "GTK+ Runtime" SecGTK setOutPath $INSTDIR file /r "runtime\*.*" SectionEnd !endif Section "Uninstall" # Always delete uninstaller first delete $INSTDIR\uninstaller.exe # Remove association # Set SMPROGRAMS and DESKTOP path SetShellVarContext all # now delete installed files delete $INSTDIR\@PRODUCT_NAME@.exe delete $SMPROGRAMS\@PRODUCT_NAME@.lnk delete $DESKTOP\@PRODUCT_NAME@.lnk RMDir /r "$INSTDIR\locale" RMDir /r "$INSTDIR\share" RMDir /r "$INSTDIR\etc" RMDir /r "$INSTDIR\plugins" RMDir /r "$INSTDIR\sdk" RMDir /r "$INSTDIR\gtk2-runtime" # Delete all files delete "$INSTDIR\*.dll" # Remove registry SetRegView 32 DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@PRODUCT_NAME@" DeleteRegKey HKLM "Software\@PRODUCT_NAME@" SetRegView @WINARCH@ DeleteRegKey HKLM "Software\@PRODUCT_NAME@" DeleteRegValue HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PW3270_SDK_PATH" DeleteRegKey HKLM "SYSTEM\CurrentControlSet\Services\EventLog\@PRODUCT_NAME@" SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 DeleteRegKey HKLM "Software\GSettings\apps\@PACKAGE_NAME@\@PRODUCT_NAME@" # Delete System libraries ${@NSISREDIR@} delete $SYSDIR\libipc3270.dll !ifdef WITHLIBHLLAPI delete $SYSDIR\libhllapi.dll delete $SYSDIR\hllapi.dll !endif !ifdef WITHMONO-TN3270 delete $SYSDIR\mono-tn3270.dll !endif RMDir /r "$INSTDIR" SectionEnd Function .onInit #---[ Check if already installed ]-------------------------------------------------------------------- ${If} ${FileExists} "$INSTDIR\@PRODUCT_NAME@.exe" MessageBox MB_OK|MB_ICONEXCLAMATION "@PRODUCT_NAME@ is already installed. Please uninstall it first" /SD IDOK Abort ${EndIf} #---[ Check SDK Command line option ]----------------------------------------------------------------- !ifdef WITHSDK Push $0 ${GetParameters} $R0 ClearErrors ${GetOptions} $R0 /SDK= $0 ${if} $0 == "YES" SectionGetFlags ${SDK} $0 IntOp $0 $0 | ${SF_SELECTED} SectionSetFlags ${SDK} $0 ${else} SectionGetFlags ${SDK} $0 IntOp $0 $0 & ${SECTION_OFF} SectionSetFlags ${SDK} $0 ${EndIf} Pop $0 !endif #---[ Check DOTNET Command line option ]-------------------------------------------------------------- !ifdef WITHMONO-TN3270 Push $0 ${GetParameters} $R0 ClearErrors ${GetOptions} $R0 /DOTNET= $0 # Default = NO ${if} $0 == "YES" SectionGetFlags ${DOTNET} $0 IntOp $0 $0 | ${SF_SELECTED} SectionSetFlags ${DOTNET} $0 SectionGetFlags ${IPCPlugin} $0 IntOp $0 $0 | ${SF_SELECTED} SectionSetFlags ${IPCPlugin} $0 ${else} SectionGetFlags ${DOTNET} $0 IntOp $0 $0 & ${SECTION_OFF} SectionSetFlags ${DOTNET} $0 ${EndIf} Pop $0 !endif #---[ Check HLLAPI Command line option ]------------------------------------------------------------- !ifdef WITHLIBHLLAPI Push $0 ${GetParameters} $R0 ClearErrors ${GetOptions} $R0 /HLLAPI= $0 # Default = YES ${if} $0 == "NO" SectionGetFlags ${HLLAPIBinding} $0 IntOp $0 $0 & ${SECTION_OFF} SectionSetFlags ${HLLAPIBinding} $0 ${else} SectionGetFlags ${HLLAPIBinding} $0 IntOp $0 $0 | ${SF_SELECTED} SectionSetFlags ${HLLAPIBinding} $0 SectionGetFlags ${IPCPlugin} $0 IntOp $0 $0 | ${SF_SELECTED} SectionSetFlags ${IPCPlugin} $0 ${EndIf} Pop $0 !endif #---[ Check for GTK runtime ]------------------------------------------------------------------------ !ifdef WITHGTK SetRegView @WINARCH@ ReadRegStr $4 HKLM "Software\gtkwin\@GTK_MODVERSION@" "path" ${if} $4 == "" SectionGetFlags ${SecGTK} $0 IntOp $0 $0 | ${SF_SELECTED} SectionSetFlags ${SecGTK} $0 ${Else} ${if} ${FileExists} `$4\*.*` SectionGetFlags ${SecGTK} $0 IntOp $0 $0 & ${SECTION_OFF} SectionSetFlags ${SecGTK} $0 ${Else} SectionGetFlags ${SecGTK} $0 IntOp $0 $0 | ${SF_SELECTED} SectionSetFlags ${SecGTK} $0 ${EndIf} ${EndIf} !endif FunctionEnd Function .onInstSuccess # Update GTK Image loaders FunctionEnd