About to release 0.8.0
[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 !ifdef SOURCES
162 ReserveFile "${TOP_SRCDIR}\src\gpg4win-splash.wav"
163 !endif
164 ReserveFile "${TOP_SRCDIR}\COPYING"
165
166 # Language support
167
168 LangString T_LangCode ${LANG_ENGLISH} "en"
169 LangString T_LangCode ${LANG_GERMAN}  "de"
170
171
172 # The WelcomeTitle is displayed on the first page.
173 LangString T_WelcomeTitle ${LANG_ENGLISH} "${WELCOME_TITLE_ENGLISH}"
174 LangString T_WelcomeTitle ${LANG_GERMAN} "${WELCOME_TITLE_GERMAN}"
175
176 # The About string as displayed on the first page.
177 LangString T_About ${LANG_ENGLISH} "${ABOUT_ENGLISH}"
178 LangString T_About ${LANG_GERMAN} "${ABOUT_GERMAN}"
179
180 # Startup page
181 LangString T_GPLHeader ${LANG_ENGLISH} \
182   "This software is licensed under the terms of the GNU General Public \
183    License (GPL) which guarantees your freedom to share and change Free \
184    Software."
185 LangString T_GPLHeader ${LANG_GERMAN}} \
186   "Diese Software ist unter der GNU General Public License \
187    (GPL) lizensiert; dies gibt Ihnen die Freiheit, sie \
188    zu ändern und weiterzugeben."
189
190 LangString T_GPLShort ${LANG_ENGLISH} \
191   "In short: You are allowed to run this software for any purpose. \
192    You may distribute it as long as you give the recipients the same \
193    rights you have received."
194 LangString T_GPLShort ${LANG_GERMAN} \
195   "In aller Kürze: Sie haben das Recht, die Software zu jedem Zweck \
196    einzusetzen.  Sie können die Software weitergeben, sofern Sie dem \
197    Empfänger dieselben Rechte einräumen, die auch Sie erhalten haben."
198
199 LangString T_RunKeyManager ${LANG_ENGLISH} \
200    "Run the key manager"
201 LangString T_RunKeyManager ${LANG_GERMAN} \
202    "Die Schlüsselverwaltung aufrufen"
203
204 LangString T_MoreInfo ${LANG_ENGLISH} \
205    "Click here for the project's homepage"
206 LangString T_MoreInfo ${LANG_GERMAN} \
207    "Hier klicken um zur Homepage des Projekts zu gelangen"
208
209 LangString T_ShowReadme ${LANG_ENGLISH} \
210    "Show the README file"
211 LangString T_ShowReadme ${LANG_GERMAN} \
212    "Die README Datei anzeigen"
213
214 LangString T_NoKeyManager ${LANG_ENGLISH} \
215    "No key manager has been installed, thus we can't run one now."
216 LangString T_NoKeyManager ${LANG_GERMAN} \
217    "Es wurde keine Schlüsselverwaltung installiert. \
218     Deswegen kann sie jetzt auch nicht ausgeführt werden."
219
220
221 # Functions
222
223 # Custom functions and macros for gpg4win. 
224 !include "g4wihelp.nsi"
225
226 # PrintNonAdminWarning
227
228 # Check whether the current user is in the Administrator group or an
229 # OS version without the need for an Administrator is in use.  Print a
230 # warning if this is not the case.
231
232 Function PrintNonAdminWarning
233   ClearErrors
234   UserInfo::GetName
235   IfErrors leave
236   Pop $0
237   UserInfo::GetAccountType
238   Pop $1
239   StrCmp $1 "Admin" leave +1
240   MessageBox MB_OK "$(T_AdminNeeded)"
241
242  leave:
243 FunctionEnd
244
245
246 # Check whether this is a reinstall and popup a message box to explain
247 # that it is better to close other apps before continuing
248 Function PrintCloseOtherApps
249     IfFileExists $INSTDIR\gnupg.exe print_warning
250     IfFileExists $INSTDIR\winpt.exe print_warning
251     IfFileExists $INSTDIR\gpa.exe   print_warning
252     IfFileExists $INSTDIR\gpgol.dll print_warning
253     IfFileExists $INSTDIR\gpgee.dll print_warning
254     Return
255    print_warning:
256     MessageBox MB_OK|MB_ICONEXCLAMATION "$(T_CloseOtherApps)"
257     IfFileExists $INSTDIR\winpt.exe 0 +2
258       ExecWait '"$INSTDIR\winpt.exe" --stop'
259    leave:
260 FunctionEnd
261
262
263 # From Function PrintNonAdminWarning
264 LangString T_AdminNeeded ${LANG_ENGLISH} \
265    "Warning: Administrator permissions required for a successful installation"
266 LangString T_AdminNeeded ${LANG_GERMAN} \
267    "Achtung: Für eine erfolgreiche Installation werden \
268     Administratorrechte benötigt."
269
270 # From Function PrintCloseOtherApps
271 LangString T_CloseOtherApps ${LANG_ENGLISH} \
272    "Please make sure that other applications are not running. \
273     In particular you should close Outlook and all Explorer \
274     windows.  Gpg4Win will try to install anyway but a reboot \
275     will be required then."
276 LangString T_CloseOtherApps ${LANG_GERMAN} \
277    "Bitte stellen Sie sicher, daß alle anderen Anwendugen geschlossen \
278     sind.  Insbesondere sollten Sie Outlook und alle Explorer Fenster \
279     schliessen bevor Sie die Installation fortsetzen.  Gpg4Win wird auf \
280     jeden Fall versuchen, eine Installation durchzuführen; es ist dann aber \
281     u.U. notwendig, das System neu zu starten."
282
283 # FIXME: The GetAfterChar function comes from the NSIS wiki.
284 Function un.GetAfterChar
285   Exch $0 ; chop char
286   Exch
287   Exch $1 ; input string
288   Push $2
289   Push $3
290   StrCpy $2 0
291   loop:
292     IntOp $2 $2 - 1
293     StrCpy $3 $1 1 $2
294     StrCmp $3 "" 0 +3
295       StrCpy $0 ""
296       Goto exit2
297     StrCmp $3 $0 exit1
298     Goto loop
299   exit1:
300     IntOp $2 $2 + 1
301     StrCpy $0 $1 "" $2
302   exit2:
303     Pop $3
304     Pop $2
305     Pop $1
306     Exch $0 ; output
307 FunctionEnd
308
309
310 Function un.SourceDelete
311   Push "/"
312   Call un.GetAfterChar
313   Pop $R0
314   Delete "$INSTDIR\$R0"
315 FunctionEnd