12903fdb782fc0454dfae5bdf5e1bd7cef3ffae7
[gpg4win.git] / src / installer.nsi
1 # installer.nsi - Installer for GnuPG 4 Windows.    -*- coding: latin-1; -*-
2 # Copyright (C) 2005 g10 Code GmbH
3
4 # This file is part of GPG4Win.
5
6 # GPG4Win is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
10
11 # GPG4Win is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
15
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19
20 # No servicable parts beyond this line.  Stay clear :)
21
22 !ifdef REQUIRE_W32_NSIS
23 !ifdef PACKAGE_LIBRARY
24 !include "Library.nsh"
25 !endif
26 !else
27 !macro InstallLib libtype shared install localfile destfile tempbasedir
28   File "${localfile}"
29 !macroend
30 !endif
31
32
33 # We use the modern UI.
34 !include "MUI.nsh"
35
36 # Set the package name.  Note that this name should not be sufficed
37 #  with the version because this would get displayed in the start menu.
38 Name "${PRETTY_PACKAGE}"
39
40
41 # Set the output filename.
42 OutFile "${PACKAGE}-${VERSION}.exe"
43
44 Icon "${TOP_SRCDIR}/doc/logo/gpg4win-logo-icon.ico"
45 UninstallIcon "${TOP_SRCDIR}/doc/logo/gpg4win-logo-icon.ico"
46
47 # Set the installation directory.
48 !ifndef INSTALL_DIR
49 !define INSTALL_DIR "${PACKAGE}"
50 !endif
51 InstallDir "$PROGRAMFILES\GNU\${INSTALL_DIR}" 
52
53
54 InstallDirRegKey HKLM "Software\GNU\${PRETTY_PACKAGE_SHORT}" \
55         "Install Directory"
56
57
58 # Add version information to the file properties.
59 VIProductVersion "${PROD_VERSION}"
60 VIAddVersionKey "ProductName" "${PRETTY_PACKAGE_SHORT} (${VERSION})"
61 !ifdef LICENSE_GPL
62 VIAddVersionKey "Comments" \
63    "${PRETTY_PACKAGE_SHORT} is Free Software; you can redistribute it  \
64     and/or modify it under the terms of the GNU General Public License.  \
65     You should have received a copy of the GNU General Public License  \
66     along with this software; if not, write to the Free Software  \
67     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,  \
68     MA 02110-1301, USA"
69 !else
70 VIAddVersionKey "Comments" \
71    "${PRETTY_PACKAGE_SHORT} is Free Software; you can redistribute it  \
72     and/or modify it under the terms of the GNU Lesser General Public  \
73     License. You should have received a copy of the GNU Lesser General  \
74     Public License along with this software; if not, write to the Free  \
75     Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,  \
76     MA 02110-1301, USA"
77 !endif
78 VIAddVersionKey "CompanyName" "${COMPANY}"
79 VIAddVersionKey "LegalTrademarks" ""
80 VIAddVersionKey "LegalCopyright" "${COPYRIGHT}"
81 VIAddVersionKey "FileDescription" "${DESCRIPTION}"
82 VIAddVersionKey "FileVersion" "${PROD_VERSION}"
83
84
85 # Interface Settings
86
87 # !define MUI_ABORTWARNING
88 !define MUI_FINISHPAGE_NOAUTOCLOSE
89 !define MUI_UNFINISHPAGE_NOAUTOCLOSE
90
91 # Remember the installer language
92
93 #!define MUI_LANGDLL_REGISTRY_ROOT "HKCU" 
94 #!define MUI_LANGDLL_REGISTRY_KEY "Software\GNU\${PRETTY_PACKAGE_SHORT}" 
95 #!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
96
97 # The list of wizard pages.
98
99 !define MUI_WELCOMEPAGE_TITLE "$(T_WelcomeTitle)"
100 !define MUI_WELCOMEPAGE_TEXT  "$(T_About)"
101 !insertmacro MUI_PAGE_WELCOME
102
103 !define MUI_LICENSEPAGE_BUTTON "$(^NextBtn)"
104 !define MUI_PAGE_HEADER_SUBTEXT "$(T_GPLHeader)"
105 !define MUI_LICENSEPAGE_TEXT_BOTTOM "$(T_GPLShort)"
106 !insertmacro MUI_PAGE_LICENSE "${TOP_SRCDIR}/COPYING"
107
108 !define MUI_PAGE_CUSTOMFUNCTION_SHOW PrintNonAdminWarning
109 !insertmacro MUI_PAGE_COMPONENTS
110
111 !insertmacro MUI_PAGE_DIRECTORY
112
113 !ifdef HAVE_STARTMENU
114 Var STARTMENU_FOLDER
115
116 !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU"
117 !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\GNU\${PRETTY_PACKAGE_SHORT}"
118 !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
119
120 !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
121 !endif
122
123 !define MUI_PAGE_CUSTOMFUNCTION_PRE PrintCloseOtherApps
124 !insertmacro MUI_PAGE_INSTFILES
125
126 !define MUI_FINISHPAGE_SHOWREADME "README.$(T_LangCode).txt"
127 !define MUI_FINISHPAGE_SHOWREADME_TEXT "$(T_ShowReadme)"
128 #!define MUI_FINISHPAGE_RUN
129 #!define MUI_FINISHPAGE_RUN_FUNCTION RunOnFinish
130 #!define MUI_FINISHPAGE_RUN_TEXT "$(T_RunKeyManager)"
131 #!define MUI_FINISHPAGE_RUN_NOTCHECKED
132 !define MUI_FINISHPAGE_LINK "$(T_MoreInfo)"
133 !define MUI_FINISHPAGE_LINK_LOCATION http://www.gpg4win.org
134 !insertmacro MUI_PAGE_FINISH
135
136
137 # Uninstaller pages.
138
139 !insertmacro MUI_UNPAGE_CONFIRM
140 !insertmacro MUI_UNPAGE_INSTFILES
141
142
143 #Page license
144 #Page components
145 #Page directory
146 #Page instfiles
147 #UninstPage uninstConfirm
148 #UninstPage instfiles
149
150
151 # Language support.  This has to be done after defining the pages, but
152 # before defining the translation strings.  Confusing.
153
154 !insertmacro MUI_LANGUAGE "English"
155 !insertmacro MUI_LANGUAGE "German"
156
157 #!insertmacro MUI_RESERVEFILE_LANGDLL
158 #!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
159 ReserveFile "${BUILD_DIR}\g4wihelp.dll"
160 ReserveFile "${TOP_SRCDIR}\doc\logo\gpg4win-logo-400px.bmp"
161 ReserveFile "${TOP_SRCDIR}\src\gpg4win-splash.wav"
162 ReserveFile "${TOP_SRCDIR}\COPYING"
163
164 # Language support
165
166 LangString T_LangCode ${LANG_ENGLISH} "en"
167 LangString T_LangCode ${LANG_GERMAN}  "de"
168
169
170 # The WelcomeTitle is displayed on the first page.
171 LangString T_WelcomeTitle ${LANG_ENGLISH} "${WELCOME_TITLE_ENGLISH}"
172 LangString T_WelcomeTitle ${LANG_GERMAN} "${WELCOME_TITLE_GERMAN}"
173
174 # The About string as displayed on the first page.
175 LangString T_About ${LANG_ENGLISH} "${ABOUT_ENGLISH}"
176 LangString T_About ${LANG_GERMAN} "${ABOUT_GERMAN}"
177
178 # Startup page
179 LangString T_GPLHeader ${LANG_ENGLISH} \
180   "This software is licensed under the terms of the GNU General Public \
181    License (GPL) which guarantees your freedom to share and change Free \
182    Software."
183 LangString T_GPLHeader ${LANG_GERMAN}} \
184   "Diese Software ist unter der GNU General Public License \
185    (GPL) lizensiert; dies gibt Ihnen die Freiheit, sie \
186    zu ändern und weiterzugeben."
187
188 LangString T_GPLShort ${LANG_ENGLISH} \
189   "In short: You are allowed to run this software for any purpose. \
190    You may distribute it as long as you give the recipients the same \
191    rights you have received."
192 LangString T_GPLShort ${LANG_GERMAN} \
193   "In aller Kürze: Sie haben das Recht, die Software zu jedem Zweck \
194    einzusetzen.  Sie können die Software weitergeben, sofern Sie dem \
195    Empfänger dieselben Rechte einräumen, die auch Sie erhalten haben."
196
197 LangString T_RunKeyManager ${LANG_ENGLISH} \
198    "Run the key manager"
199 LangString T_RunKeyManager ${LANG_GERMAN} \
200    "Die Schlüsselverwaltung aufrufen"
201
202 LangString T_MoreInfo ${LANG_ENGLISH} \
203    "Click here for the project's homepage"
204 LangString T_MoreInfo ${LANG_GERMAN} \
205    "Hier klicken um zur Homepage des Projekts zu gelangen"
206
207 LangString T_ShowReadme ${LANG_ENGLISH} \
208    "Show the README file"
209 LangString T_ShowReadme ${LANG_GERMAN} \
210    "Die README Datei anzeigen"
211
212 LangString T_NoKeyManager ${LANG_ENGLISH} \
213    "No key manager has been installed, thus we can't run one now."
214 LangString T_NoKeyManager ${LANG_GERMAN} \
215    "Es wurde keine Schlüsselverwaltung installiert. \
216     Deswegen kann sie jetzt auch nicht ausgeführt werden."
217
218
219 # Functions
220
221 # Custom functions and macros for gpg4win. 
222 !include "g4wihelp.nsi"
223
224 # PrintNonAdminWarning
225
226 # Check whether the current user is in the Administrator group or an
227 # OS version without the need for an Administrator is in use.  Print a
228 # warning if this is not the case.
229
230 Function PrintNonAdminWarning
231   ClearErrors
232   UserInfo::GetName
233   IfErrors leave
234   Pop $0
235   UserInfo::GetAccountType
236   Pop $1
237   StrCmp $1 "Admin" leave +1
238   MessageBox MB_OK "$(T_AdminNeeded)"
239
240  leave:
241 FunctionEnd
242
243
244 # Check whether this is a reinstall and popup a message box to explain
245 # that it is better to close other apps before continuing
246 Function PrintCloseOtherApps
247     IfFileExists $INSTDIR\gnupg.exe print_warning
248     IfFileExists $INSTDIR\winpt.exe print_warning
249     IfFileExists $INSTDIR\gpa.exe   print_warning
250     IfFileExists $INSTDIR\gpgol.dll print_warning
251     IfFileExists $INSTDIR\gpgee.dll print_warning
252     Return
253    print_warning:
254     MessageBox MB_OK|MB_ICONEXCLAMATION "$(T_CloseOtherApps)"
255     IfFileExists $INSTDIR\winpt.exe 0 +2
256       ExecWait '"$INSTDIR\winpt.exe" --stop'
257    leave:
258 FunctionEnd
259
260
261 # From Function PrintNonAdminWarning
262 LangString T_AdminNeeded ${LANG_ENGLISH} \
263    "Warning: Administrator permissions required for a successful installation"
264 LangString T_AdminNeeded ${LANG_GERMAN} \
265    "Achtung: Für eine erfolgreiche Installation werden \
266     Administratorrechte benötigt."
267
268 # From Function PrintCloseOtherApps
269 LangString T_CloseOtherApps ${LANG_ENGLISH} \
270    "Please make sure that other applications are not running. \
271     In particular you should close Outlook and all Explorer \
272     windows.  Gpg4Win will try to install anyway but a reboot \
273     will be required then."
274 LangString T_CloseOtherApps ${LANG_GERMAN} \
275    "Bitte stellen Sie sicher, daß alle anderen Anwendugen geschlossen \
276     sind.  Insbesondere sollten Sie Outlook und alle Explorer Fenster \
277     schliessen bevor Sie die Installation fortsetzen.  Gpg4Win wird auf \
278     jeden Fall versuchen, eine Installation durchzuführen; es ist dann aber \
279     u.U. notwendig, das System neu zu starten."
280
281 # FIXME: The GetAfterChar function comes from the NSIS wiki.
282 Function un.GetAfterChar
283   Exch $0 ; chop char
284   Exch
285   Exch $1 ; input string
286   Push $2
287   Push $3
288   StrCpy $2 0
289   loop:
290     IntOp $2 $2 - 1
291     StrCpy $3 $1 1 $2
292     StrCmp $3 "" 0 +3
293       StrCpy $0 ""
294       Goto exit2
295     StrCmp $3 $0 exit1
296     Goto loop
297   exit1:
298     IntOp $2 $2 + 1
299     StrCpy $0 $1 "" $2
300   exit2:
301     Pop $3
302     Pop $2
303     Pop $1
304     Exch $0 ; output
305 FunctionEnd
306
307
308 Function un.SourceDelete
309   Push "/"
310   Call un.GetAfterChar
311   Pop $R0
312   Delete "$INSTDIR\$R0"
313 FunctionEnd