2005-10-20 Marcus Brinkmann <marcus@g10code.de>
[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
37 # Set the package name.
38 Name "${PRETTY_PACKAGE} ${VERSION}"
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 # Select the best compression algorithm available.  The dictionary
57 # size is the default (8 MB).
58 SetCompressor lzma
59 # SetCompressorDictSize 8
60
61
62 # Add version information to the file properties.
63 VIProductVersion "${PROD_VERSION}"
64 VIAddVersionKey "ProductName" "${PRETTY_PACKAGE_SHORT} (${VERSION})"
65 !ifdef LICENSE_GPL
66 VIAddVersionKey "Comments" \
67    "${PRETTY_PACKAGE_SHORT} is Free Software; you can redistribute it  \
68     and/or modify it under the terms of the GNU General Public License.  \
69     You should have received a copy of the GNU General Public License  \
70     along with this software; if not, write to the Free Software  \
71     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,  \
72     MA 02110-1301, USA"
73 !else
74 VIAddVersionKey "Comments" \
75    "${PRETTY_PACKAGE_SHORT} is Free Software; you can redistribute it  \
76     and/or modify it under the terms of the GNU Lesser General Public  \
77     License. You should have received a copy of the GNU Lesser General  \
78     Public License along with this software; if not, write to the Free  \
79     Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,  \
80     MA 02110-1301, USA"
81 !endif
82 VIAddVersionKey "CompanyName" "${COMPANY}"
83 VIAddVersionKey "LegalTrademarks" ""
84 VIAddVersionKey "LegalCopyright" "${COPYRIGHT}"
85 VIAddVersionKey "FileDescription" "${DESCRIPTION}"
86 VIAddVersionKey "FileVersion" "${PROD_VERSION}"
87
88
89 # Interface Settings
90
91 # !define MUI_ABORTWARNING
92 !define MUI_FINISHPAGE_NOAUTOCLOSE
93 !define MUI_UNFINISHPAGE_NOAUTOCLOSE
94
95 # Remember the installer language
96
97 #!define MUI_LANGDLL_REGISTRY_ROOT "HKCU" 
98 #!define MUI_LANGDLL_REGISTRY_KEY "Software\GNU\${PRETTY_PACKAGE_SHORT}" 
99 #!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
100
101
102 # The list of wizard pages.
103
104 !define MUI_WELCOMEPAGE_TEXT "$(T_About)"
105 !insertmacro MUI_PAGE_WELCOME
106
107 !define MUI_LICENSEPAGE_BUTTON "$(^NextBtn)"
108 !define MUI_PAGE_HEADER_SUBTEXT "$(T_GPLHeader)"
109 !define MUI_LICENSEPAGE_TEXT_BOTTOM "$(T_GPLShort)"
110 !insertmacro MUI_PAGE_LICENSE "../COPYING"
111
112 !define MUI_PAGE_CUSTOMFUNCTION_SHOW PrintNonAdminWarning
113 !insertmacro MUI_PAGE_COMPONENTS
114
115 !ifdef HAVE_STARTMENU
116 Var STARTMENU_FOLDER
117 !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU"
118 !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\GNU\${PRETTY_PACKAGE_SHORT}"
119 !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
120
121 !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
122 !endif
123
124 !insertmacro MUI_PAGE_INSTFILES
125
126 !insertmacro MUI_PAGE_FINISH
127
128
129 # Uninstaller pages.
130
131 !insertmacro MUI_UNPAGE_CONFIRM
132 !insertmacro MUI_UNPAGE_INSTFILES
133
134
135 #Page license
136 #Page components
137 #Page directory
138 #Page instfiles
139 #UninstPage uninstConfirm
140 #UninstPage instfiles
141
142
143 # Language support.  This has to be done after defining the pages, but
144 # before defining the translation strings.  Confusing.
145
146 !insertmacro MUI_LANGUAGE "English"
147 !insertmacro MUI_LANGUAGE "German"
148
149 !insertmacro MUI_RESERVEFILE_LANGDLL
150 !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
151
152 ReserveFile "../COPYING"
153
154
155 # Language support
156
157 # The About string as displayed on the first page.
158 LangString T_About ${LANG_ENGLISH} "${ABOUT_ENGLISH}"
159 LangString T_About ${LANG_GERMAN} "${ABOUT_GERMAN}"
160
161 # Startup page
162 LangString T_GPLHeader ${LANG_ENGLISH} \
163   "This software is licensed under the terms of the GNU General Public \
164    License (GPL) which guarantees your freedom to share and change Free \
165    Software."
166 LangString T_GPLHeader ${LANG_GERMAN}} \
167   "Diese Software ist unter der GNU General Public License \
168    (GPL) lizensiert; dies gibt Ihnen die Freiheit, sie \
169    zu ändern und weiterzugeben."
170
171 LangString T_GPLShort ${LANG_ENGLISH} \
172   "In short: You are allowed to run this software for any purpose. \
173    You may distribute it as long as you give the recipients the same \
174    rights you have received."
175 LangString T_GPLShort ${LANG_GERMAN} \
176   "In aller Kürze: Sie haben das Recht, die Software zu jedem Zweck \
177    einzusetzen.  Sie können die Software weitergeben, sofern Sie dem \
178    Empfänger dieselben Rechte einräumen, die auch Sie erhalten haben."
179
180
181 # Functions
182
183 # PrintNonAdminWarning
184
185 # Check whether the current user is in the Administrator group or an
186 # OS version without the need for an Administrator is in use.  Print a
187 # warning if this is not the case.
188
189 Function PrintNonAdminWarning
190   ClearErrors
191   UserInfo::GetName
192   IfErrors leave
193   Pop $0
194   UserInfo::GetAccountType
195   Pop $1
196   StrCmp $1 "Admin" leave +1
197   MessageBox MB_OK "$(T_AdminNeeded)"
198
199  leave:
200 FunctionEnd
201
202 # From Function PrintNonAdminWarning
203 LangString T_AdminNeeded ${LANG_ENGLISH} \
204    "Warning: Administrator permissions required for a successful installation"
205 LangString T_AdminNeeded ${LANG_GERMAN} \
206    "Warnung: Für eine erfolgreiche Installation werden \
207     Administratorrechte benötigt."
208
209
210 # FIXME: The GetAfterChar function comes from the NSIS wiki.
211 Function un.GetAfterChar
212   Exch $0 ; chop char
213   Exch
214   Exch $1 ; input string
215   Push $2
216   Push $3
217   StrCpy $2 0
218   loop:
219     IntOp $2 $2 - 1
220     StrCpy $3 $1 1 $2
221     StrCmp $3 "" 0 +3
222       StrCpy $0 ""
223       Goto exit2
224     StrCmp $3 $0 exit1
225     Goto loop
226   exit1:
227     IntOp $2 $2 + 1
228     StrCpy $0 $1 "" $2
229   exit2:
230     Pop $3
231     Pop $2
232     Pop $1
233     Exch $0 ; output
234 FunctionEnd
235
236
237 Function un.SourceDelete
238   Push "/"
239   Call un.GetAfterChar
240   Pop $R0
241   Delete "$INSTDIR\$R0"
242 FunctionEnd