.
[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
45 # Set the installation directory.
46 !ifndef INSTALL_DIR
47 !define INSTALL_DIR "${PACKAGE}"
48 !endif
49 InstallDir "$PROGRAMFILES\GNU\${INSTALL_DIR}\\" 
50
51
52 InstallDirRegKey HKLM "Software\GNU\${PRETTY_PACKAGE_SHORT}" \
53         "Install Directory"
54
55
56 # Add version information to the file properties.
57 VIProductVersion "${PROD_VERSION}"
58 VIAddVersionKey "ProductName" "${PRETTY_PACKAGE_SHORT} (${VERSION})"
59 !ifdef LICENSE_GPL
60 VIAddVersionKey "Comments" \
61    "${PRETTY_PACKAGE_SHORT} is Free Software; you can redistribute it  \
62     and/or modify it under the terms of the GNU General Public License.  \
63     You should have received a copy of the GNU General Public License  \
64     along with this software; if not, write to the Free Software  \
65     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,  \
66     MA 02110-1301, USA"
67 !else
68 VIAddVersionKey "Comments" \
69    "${PRETTY_PACKAGE_SHORT} is Free Software; you can redistribute it  \
70     and/or modify it under the terms of the GNU Lesser General Public  \
71     License. You should have received a copy of the GNU Lesser General  \
72     Public License along with this software; if not, write to the Free  \
73     Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,  \
74     MA 02110-1301, USA"
75 !endif
76 VIAddVersionKey "CompanyName" "${COMPANY}"
77 VIAddVersionKey "LegalTrademarks" ""
78 VIAddVersionKey "LegalCopyright" "${COPYRIGHT}"
79 VIAddVersionKey "FileDescription" "${DESCRIPTION}"
80 VIAddVersionKey "FileVersion" "${PROD_VERSION}"
81
82
83 # Interface Settings
84
85 # !define MUI_ABORTWARNING
86 !define MUI_FINISHPAGE_NOAUTOCLOSE
87 !define MUI_UNFINISHPAGE_NOAUTOCLOSE
88
89 # Remember the installer language
90
91 #!define MUI_LANGDLL_REGISTRY_ROOT "HKCU" 
92 #!define MUI_LANGDLL_REGISTRY_KEY "Software\GNU\${PRETTY_PACKAGE_SHORT}" 
93 #!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
94
95
96 # The list of wizard pages.
97
98 !define MUI_WELCOMEPAGE_TITLE "$(T_WelcomeTitle)"
99 !define MUI_WELCOMEPAGE_TEXT  "$(T_About)"
100 !insertmacro MUI_PAGE_WELCOME
101
102 !define MUI_LICENSEPAGE_BUTTON "$(^NextBtn)"
103 !define MUI_PAGE_HEADER_SUBTEXT "$(T_GPLHeader)"
104 !define MUI_LICENSEPAGE_TEXT_BOTTOM "$(T_GPLShort)"
105 !insertmacro MUI_PAGE_LICENSE "${TOP_SRCDIR}/COPYING"
106
107 !define MUI_PAGE_CUSTOMFUNCTION_SHOW PrintNonAdminWarning
108 !insertmacro MUI_PAGE_COMPONENTS
109
110 !ifdef HAVE_STARTMENU
111 Var STARTMENU_FOLDER
112 !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU"
113 !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\GNU\${PRETTY_PACKAGE_SHORT}"
114 !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
115
116 !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
117 !endif
118
119 !define MUI_PAGE_CUSTOMFUNCTION_PRE PrintCloseOtherApps
120 !insertmacro MUI_PAGE_INSTFILES
121
122 !define MUI_FINISHPAGE_RUN "$INSTDIR\gpa.exe"
123 !define MUI_FINISHPAGE_RUN_PARAMETERS "--keyring"
124 !define MUI_FINISHPAGE_RUN_TEXT "$(T_RunKeyManager)"
125 !define MUI_FINISHPAGE_RUN_NOTCHECKED
126 !define MUI_FINISHPAGE_LINK "$(T_MoreInfo)"
127 !define MUI_FINISHPAGE_LINK_LOCATION http://www.gpg4win.org
128 !insertmacro MUI_PAGE_FINISH
129
130
131 # Uninstaller pages.
132
133 !insertmacro MUI_UNPAGE_CONFIRM
134 !insertmacro MUI_UNPAGE_INSTFILES
135
136
137 #Page license
138 #Page components
139 #Page directory
140 #Page instfiles
141 #UninstPage uninstConfirm
142 #UninstPage instfiles
143
144
145 # Language support.  This has to be done after defining the pages, but
146 # before defining the translation strings.  Confusing.
147
148 !insertmacro MUI_LANGUAGE "English"
149 !insertmacro MUI_LANGUAGE "German"
150
151 !insertmacro MUI_RESERVEFILE_LANGDLL
152 !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
153 ReserveFile "${BUILD_DIR}\g4wihelp.dll"
154 ReserveFile "${TOP_SRCDIR}\src\gpg4win-splash.bmp"
155 ReserveFile "${TOP_SRCDIR}\src\gpg4win-splash.wav"
156 ReserveFile "${TOP_SRCDIR}\COPYING"
157
158 # Language support
159
160 # The WelcomeTitle is displayed on the first page.
161 LangString T_WelcomeTitle ${LANG_ENGLISH} "${WELCOME_TITLE_ENGLISH}"
162 LangString T_WelcomeTitle ${LANG_GERMAN} "${WELCOME_TITLE_GERMAN}"
163
164 # The About string as displayed on the first page.
165 LangString T_About ${LANG_ENGLISH} "${ABOUT_ENGLISH}"
166 LangString T_About ${LANG_GERMAN} "${ABOUT_GERMAN}"
167
168 # Startup page
169 LangString T_GPLHeader ${LANG_ENGLISH} \
170   "This software is licensed under the terms of the GNU General Public \
171    License (GPL) which guarantees your freedom to share and change Free \
172    Software."
173 LangString T_GPLHeader ${LANG_GERMAN}} \
174   "Diese Software ist unter der GNU General Public License \
175    (GPL) lizensiert; dies gibt Ihnen die Freiheit, sie \
176    zu ändern und weiterzugeben."
177
178 LangString T_GPLShort ${LANG_ENGLISH} \
179   "In short: You are allowed to run this software for any purpose. \
180    You may distribute it as long as you give the recipients the same \
181    rights you have received."
182 LangString T_GPLShort ${LANG_GERMAN} \
183   "In aller Kürze: Sie haben das Recht, die Software zu jedem Zweck \
184    einzusetzen.  Sie können die Software weitergeben, sofern Sie dem \
185    Empfänger dieselben Rechte einräumen, die auch Sie erhalten haben."
186
187 LangString T_RunKeyManager ${LANG_ENGLISH} \
188    "Run the key manager"
189 LangString T_RunKeyManager ${LANG_GERMAN} \
190    "Die Schlüsselverwaltung aufrufen"
191
192 LangString T_MoreInfo ${LANG_ENGLISH} \
193    "Click here for the project's homepage"
194 LangString T_MoreInfo ${LANG_GERMAN} \
195    "Hier klicken um zur Homepage des Projekts zu gelangen"
196
197
198 # Functions
199
200 # Custom functions and macros for gpg4win. 
201 !include "g4wihelp.nsi"
202
203 # PrintNonAdminWarning
204
205 # Check whether the current user is in the Administrator group or an
206 # OS version without the need for an Administrator is in use.  Print a
207 # warning if this is not the case.
208
209 Function PrintNonAdminWarning
210   ClearErrors
211   UserInfo::GetName
212   IfErrors leave
213   Pop $0
214   UserInfo::GetAccountType
215   Pop $1
216   StrCmp $1 "Admin" leave +1
217   MessageBox MB_OK "$(T_AdminNeeded)"
218
219  leave:
220 FunctionEnd
221
222
223 # Check whether this is a reinstall and popup a message box to explain
224 # that it is better to close other apps before continuing
225 Function PrintCloseOtherApps
226     IfFileExists $INSTDIR\gnupg.exe print_warning
227     IfFileExists $INSTDIR\winpt.exe print_warning
228     IfFileExists $INSTDIR\gpa.exe   print_warning
229     IfFileExists $INSTDIR\gpgol.dll print_warning
230     IfFileExists $INSTDIR\gpgee.dll print_warning
231     Return
232    print_warning:
233     MessageBox MB_OK|MB_ICONEXCLAMATION "$(T_CloseOtherApps)"
234     IfFileExists $INSTDIR\winpt.exe 0 +2
235       ExecWait '"$INSTDIR\winpt.exe" --stop'
236    leave:
237 FunctionEnd
238
239
240 # From Function PrintNonAdminWarning
241 LangString T_AdminNeeded ${LANG_ENGLISH} \
242    "Warning: Administrator permissions required for a successful installation"
243 LangString T_AdminNeeded ${LANG_GERMAN} \
244    "Achtung: Für eine erfolgreiche Installation werden \
245     Administratorrechte benötigt."
246
247 # From Function PrintCloseOtherApps
248 LangString T_CloseOtherApps ${LANG_ENGLISH} \
249    "Please make sure that other applications are not running. \
250     In particular you should close Outlook and all Explorer \
251     windows.  Gpg4Win will try to install anyway but a reboot \
252     will be required then."
253 LangString T_CloseOtherApps ${LANG_GERMAN} \
254    "Bitte stellen Sie sicher, daß alle anderen Anwendugen geschlossen \
255     sind.  Insbesondere sollten Sie Outlook und alle Explorer Fenster \
256     schliessen bevor Sie die Installation fortsetzen.  Gpg4Win wird auf \
257     jeden Fall versuchen, eine Installation durchzuführen; es ist dann aber \
258     u.U. notwendig, das System neu zu starten."
259
260 # FIXME: The GetAfterChar function comes from the NSIS wiki.
261 Function un.GetAfterChar
262   Exch $0 ; chop char
263   Exch
264   Exch $1 ; input string
265   Push $2
266   Push $3
267   StrCpy $2 0
268   loop:
269     IntOp $2 $2 - 1
270     StrCpy $3 $1 1 $2
271     StrCmp $3 "" 0 +3
272       StrCpy $0 ""
273       Goto exit2
274     StrCmp $3 $0 exit1
275     Goto loop
276   exit1:
277     IntOp $2 $2 + 1
278     StrCpy $0 $1 "" $2
279   exit2:
280     Pop $3
281     Pop $2
282     Pop $1
283     Exch $0 ; output
284 FunctionEnd
285
286
287 Function un.SourceDelete
288   Push "/"
289   Call un.GetAfterChar
290   Pop $R0
291   Delete "$INSTDIR\$R0"
292 FunctionEnd