Imported Upstream version 2.10~beta3+ds
[debian/jabref.git] / src / windows / nsis / setup.nsi
1 # owner         JabRef Team
2 # license       GPL version 3
3 # author        Uwe Stöhr and others
4
5 ; To compile this script NSIS 2.23 and newer are required
6 ; http://nsis.sourceforge.net/
7
8
9 ; Do a Cyclic Redundancy Check to make sure the installer
10 ; was not corrupted by the download.
11 CRCCheck force
12
13 ; Make the installer as small as possible.
14 SetCompressor lzma
15
16
17 # general definitions
18 ; you only need to change this section for new releases
19 VIProductVersion "2.2.0.0" ; file version for the installer in the scheme "x.x.x.x"
20 #!define VERSION "2.2" #Already set by command line parameter
21 Name "JabRef ${VERSION}"
22 !define REGKEY "SOFTWARE\JabRef"
23 !define COMPANY "JabRef Team"
24 !define URL "http://jabref.sourceforge.net"
25 !define PRODUCT_EXE "JabRef.exe"
26 !define PRODUCT_NAME "JabRef"
27 !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)"
28 !define PRODUCT_LICENSE_FILE "dist\gpl3.txt"
29
30
31
32 # Variables
33 Var StartmenuFolder
34 Var CreateDesktopIcon
35 Var Answer
36 Var UserName
37 Var InstDestination
38
39
40 # Included files
41 #from nullsoft distribution
42 !include "MUI.nsh"
43 #taken from http://nsis.sourceforge.net/FileAssoc
44 !include "fileassoc.nsh"
45 #from nullsoft distribution
46 !include "LogicLib.nsh"
47
48
49 # macros
50 !macro IsUserAdmin Result UName
51
52  ClearErrors
53  UserInfo::GetName
54  IfErrors Win9x
55  Pop $0
56  StrCpy ${UName} $0
57  UserInfo::GetAccountType
58  Pop $1
59  ${if} $1 == "Admin"
60   StrCpy ${Result} "yes"
61  ${else}
62   StrCpy ${Result} "no"
63  ${endif}
64  Goto done
65
66  Win9x:
67   StrCpy ${Result} "yes"
68  done:
69
70 !macroend
71
72
73 # Installer pages
74 ; Remember the installer language
75 !define MUI_LANGDLL_REGISTRY_ROOT "HKCU"
76 !define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
77 !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
78
79 ; let warning appear when installation is canceled
80 !define MUI_ABORTWARNING
81
82 ; Icons for the installer program
83 !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install-full.ico"
84 !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall-full.ico"
85
86 ; Welcome page
87 !define MUI_WELCOMEPAGE_TEXT "$(WelcomePageText)"
88 !insertmacro MUI_PAGE_WELCOME
89
90 ; Show the license.
91 !insertmacro MUI_PAGE_LICENSE "${PRODUCT_LICENSE_FILE}"
92
93 ; Specify the installation directory.
94 !insertmacro MUI_PAGE_DIRECTORY
95
96 ; choose the components to install.
97 !insertmacro MUI_PAGE_COMPONENTS
98
99 ; Specify where to install program shortcuts.
100 !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM"
101 !define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
102 !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
103 !define MUI_STARTMENUPAGE_DEFAULTFOLDER "${PRODUCT_NAME}"
104 !insertmacro MUI_PAGE_STARTMENU ${PRODUCT_NAME} $StartmenuFolder
105
106 ; Watch the components being installed.
107 !insertmacro MUI_PAGE_INSTFILES
108
109 ; Finish page
110 !define MUI_FINISHPAGE_RUN "$INSTDIR\${PRODUCT_EXE}"
111 !define MUI_FINISHPAGE_TEXT "$(FinishPageMessage)"
112 !define MUI_FINISHPAGE_RUN_TEXT "$(FinishPageRun)"
113 !insertmacro MUI_PAGE_FINISH
114
115 ; The uninstaller
116 !insertmacro MUI_UNPAGE_CONFIRM
117 !insertmacro MUI_UNPAGE_INSTFILES
118
119
120 # Installer languages
121 !insertmacro MUI_LANGUAGE "English" # first language is the default language
122 !insertmacro MUI_LANGUAGE "French"
123 !insertmacro MUI_LANGUAGE "German"
124 !insertmacro MUI_LANGUAGE "Italian"
125 !insertmacro MUI_LANGUAGE "Russian"
126 !insertmacro MUI_LANGUAGE "Spanish"
127
128 !include "installer_languages\english.nsh"
129 !include "installer_languages\french.nsh"
130 !include "installer_languages\german.nsh"
131 !include "installer_languages\italian.nsh"
132 !include "installer_languages\russian.nsh"
133 !include "installer_languages\spanish.nsh"
134
135
136 # Installer attributes
137 OutFile JabRefSetup.exe
138 InstallDir "$PROGRAMFILES\JabRef"
139 BrandingText "$(^Name) installer" ; appear at the bottom of the installer windows
140 XPStyle on ; use XP style for installer windows
141 LicenseData "$(JabRefLicenseData)"
142
143 ; creates file informations for the JabRefSetup.exe
144 VIAddVersionKey ProductName "JabRef"
145 VIAddVersionKey ProductVersion "${VERSION}"
146 VIAddVersionKey CompanyName "${COMPANY}"
147 VIAddVersionKey CompanyWebsite "${URL}"
148 VIAddVersionKey FileDescription "JabRef installation program"
149 VIAddVersionKey LegalCopyright "under the GPL version 3"
150 VIAddVersionKey FileVersion ""
151
152
153 # Installer sections
154 Section "!JabRef" SecCore
155  SectionIn RO
156 SectionEnd
157
158 Section "$(SecAssociateBibTitle)" SecAssociateBib
159  !insertmacro APP_ASSOCIATE "bib" "JabRef.BibTeX" "$(FileTypeTitle)" "$INSTDIR\${PRODUCT_EXE},0" "$(OpenIn)" "$INSTDIR\${PRODUCT_EXE} $\"%1$\""
160 SectionEnd
161
162 Section "$(SecDesktopTitle)" SecDesktop
163  StrCpy $CreateDesktopIcon "true"
164 SectionEnd
165
166 ; section descriptions
167 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
168 !insertmacro MUI_DESCRIPTION_TEXT ${SecAssociateBib} "$(SecAssociateBibDescription)"
169 !insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop} "$(SecDesktopDescription)"
170 !insertmacro MUI_FUNCTION_DESCRIPTION_END
171
172 Section "-Installation actions" SecInstallation
173
174   ; copy files
175   SetOutPath "$INSTDIR"
176   SetOverwrite on
177   File /r dist\*.*
178   WriteRegStr SHCTX "${REGKEY}\Components" Main 1
179   ; register JabRef
180   WriteRegStr SHCTX "${REGKEY}" Path $INSTDIR
181   WriteUninstaller $INSTDIR\uninstall.exe
182   ; create shortcuts to startmenu
183   SetOutPath "$INSTDIR"
184   CreateDirectory "$SMPROGRAMS\$StartmenuFolder"
185   CreateShortCut "$SMPROGRAMS\$StartmenuFolder\$(^Name).lnk" "$INSTDIR\${PRODUCT_EXE}" "" "$INSTDIR\JabRef.exe"
186   CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Uninstall $(^Name).lnk" "$INSTDIR\uninstall.exe"
187   ; create desktop icon
188   ${if} $CreateDesktopIcon == "true"
189    SetOutPath "$INSTDIR"
190    CreateShortCut "$DESKTOP\$(^Name).lnk" "$INSTDIR\${PRODUCT_EXE}" "" "$INSTDIR\${PRODUCT_EXE}" ;$(^Name).lnk
191   ${endif}
192   WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "StartMenu" "$SMPROGRAMS\$StartmenuFolder"
193   ${if} $Answer == "yes" ; if user is admin
194    ; register information that appear in Windows' software listing
195    WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
196    WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${VERSION}"
197    WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "Publisher" "${COMPANY}"
198    WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${URL}"
199    WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\${PRODUCT_EXE}"
200    WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninstall.exe"   
201    WriteRegDWORD HKLM "${PRODUCT_UNINST_KEY}" "NoModify" 0x00000001
202    WriteRegDWORD HKLM "${PRODUCT_UNINST_KEY}" "NoRepair" 0x00000001
203   ${endif}
204
205 SectionEnd
206
207
208 # Uninstaller sections
209 Section "un.JabRef" un.SecUnProgramFiles
210
211   SectionIn RO
212   ; delete installation folder
213   RMDir /r $INSTDIR     
214   ; delete start menu entry
215   ReadRegStr $0 SHCTX "${PRODUCT_UNINST_KEY}" "StartMenu"
216   RMDir /r "$0"
217   ; delete desktop icon
218   Delete "$DESKTOP\$(^Name).lnk"
219   ; delete registry entries
220   DeleteRegKey HKCU "${PRODUCT_UNINST_KEY}"
221   DeleteRegKey SHCTX "${PRODUCT_UNINST_KEY}"
222   DeleteRegKey HKCR "Applications\${PRODUCT_EXE}"
223   DeleteRegValue HKCR ".bib" "JabRef.BibTeX_backup"
224   DeleteRegValue HKCU "Software\Classes\.bib" "JabRef.BibTeX_backup"
225   DeleteRegValue SHCTX "Software\Classes\.bib" "JabRef.BibTeX_backup"
226   DeleteRegKey HKCU "${REGKEY}"
227   DeleteRegKey SHCTX "${REGKEY}"
228   ; remove file association with .bib-files
229   !insertmacro APP_UNASSOCIATE "bib" "JabRef.BibTeX"
230   ; close uninstaller automatically
231   SetAutoClose true
232
233 SectionEnd
234
235
236 # Installer functions
237 Function .onInit
238
239  InitPluginsDir
240   ; If the user does *not* have administrator privileges, abort
241   StrCpy $Answer ""
242   StrCpy $UserName ""
243   !insertmacro IsUserAdmin $Answer $UserName ; macro from LyXUtils.nsh
244   ${if} $Answer == "yes"
245    SetShellVarContext all ; set that e.g. shortcuts will be created for all users
246   ${else}
247    SetShellVarContext current
248    StrCpy $INSTDIR "$APPDATA\$(^Name)"
249   ${endif}
250
251 FunctionEnd
252
253
254 # Uninstaller functions
255 Function un.onInit
256
257   ; If the user does *not* have administrator privileges, abort
258   StrCpy $Answer ""
259   !insertmacro IsUserAdmin $Answer $UserName
260   ${if} $Answer == "yes"
261    SetShellVarContext all
262   ${else}
263    SetShellVarContext current
264   ${endif}
265   
266   ; ask if it should really be removed
267   MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "$(UnReallyRemoveLabel)" IDYES +2
268   Abort
269
270 FunctionEnd
271
272 Function un.onUninstSuccess
273
274   HideWindow
275   MessageBox MB_ICONINFORMATION|MB_OK "$(UnRemoveSuccessLabel)"
276
277 FunctionEnd
278