Show English HOWTO-SMIME for all non-German languages.
[gpg4win.git] / src / installer.nsi
1 # installer.nsi - Installer for GnuPG 4 Windows.    -*- coding: latin-1; -*-
2 # Copyright (C) 2005, 2007 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 !include "WinMessages.nsh"
33
34 # Define for the registry key to change the environment.  The
35 # commented one may be used if the setting should affect only the
36 # current user.
37 !define Regkey_for_Env \
38     'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'
39 # !define Regkey_for_Env 'HKCU "Environment"'
40
41
42 # We use Memento to remember past installation choices.
43 !include Memento.nsh
44 !define MEMENTO_REGISTRY_ROOT HKLM
45 !define MEMENTO_REGISTRY_KEY \
46   Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRETTY_PACKAGE_SHORT}
47
48
49 # We use the modern UI.
50 !include "MUI.nsh"
51
52 # Set the package name.  Note that this name should not be sufficed
53 #  with the version because this would get displayed in the start menu.
54 Name "${PRETTY_PACKAGE}"
55
56
57 # Set the output filename.
58 !ifdef GPG4WIN_LIGHT
59 OutFile "${PACKAGE}-light-${VERSION}.exe"
60 !else
61 OutFile "${PACKAGE}-${VERSION}.exe"
62 !endif
63
64
65 # Set the installation directory.
66 !ifndef INSTALL_DIR
67 !define INSTALL_DIR "${PACKAGE}"
68 !endif
69 InstallDir "$PROGRAMFILES\GNU\${INSTALL_DIR}" 
70
71
72 InstallDirRegKey HKLM "Software\GNU\${PRETTY_PACKAGE_SHORT}" \
73         "Install Directory"
74
75
76 # Add version information to the file properties.
77 VIProductVersion "${PROD_VERSION}"
78 VIAddVersionKey "ProductName" "${PRETTY_PACKAGE_SHORT} (${VERSION})"
79 !ifdef LICENSE_GPL
80 VIAddVersionKey "Comments" \
81    "${PRETTY_PACKAGE_SHORT} is Free Software; you can redistribute it  \
82     and/or modify it under the terms of the GNU General Public License.  \
83     You should have received a copy of the GNU General Public License  \
84     along with this software; if not, write to the Free Software  \
85     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,  \
86     MA 02110-1301, USA"
87 !else
88 VIAddVersionKey "Comments" \
89    "${PRETTY_PACKAGE_SHORT} is Free Software; you can redistribute it  \
90     and/or modify it under the terms of the GNU Lesser General Public  \
91     License. You should have received a copy of the GNU Lesser General  \
92     Public License along with this software; if not, write to the Free  \
93     Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,  \
94     MA 02110-1301, USA"
95 !endif
96 VIAddVersionKey "CompanyName" "${COMPANY}"
97 VIAddVersionKey "LegalTrademarks" ""
98 VIAddVersionKey "LegalCopyright" "${COPYRIGHT}"
99 VIAddVersionKey "FileDescription" "${DESCRIPTION}"
100 VIAddVersionKey "FileVersion" "${PROD_VERSION}"
101
102 # Set to the name of another GnuPG installation if one has been detected
103 Var OtherGnuPGDetected
104
105 # Interface Settings
106
107 # !define MUI_ABORTWARNING
108 !define MUI_FINISHPAGE_NOAUTOCLOSE
109 !define MUI_UNFINISHPAGE_NOAUTOCLOSE
110
111 !define MUI_HEADERIMAGE
112 !define MUI_HEADERIMAGE_BITMAP \
113                "${TOP_SRCDIR}/doc/logo/gpg4win-nsis-header-install-150x57.bmp"
114 !define MUI_HEADERIMAGE_UNBITMAP \
115                "${TOP_SRCDIR}/doc/logo/gpg4win-nsis-header-uninstall-150x57.bmp"
116 !define MUI_WELCOMEFINISHPAGE_BITMAP \
117                "${TOP_SRCDIR}/doc/logo/gpg4win-nsis-wizard-install-164x314.bmp"
118 !define MUI_UNWELCOMEFINISHPAGE_BITMAP \
119                "${TOP_SRCDIR}/doc/logo/gpg4win-nsis-wizard-uninstall-164x314.bmp"
120 !define MUI_ICON "${TOP_SRCDIR}/doc/logo/gpg4win-nsis-install.ico"
121 !define MUI_UNICON "${TOP_SRCDIR}/doc/logo/gpg4win-nsis-uninstall.ico"
122
123 # Remember the installer language
124
125 !define MUI_LANGDLL_REGISTRY_ROOT "HKLM"
126 !define MUI_LANGDLL_REGISTRY_KEY "Software\GNU\${PRETTY_PACKAGE_SHORT}" 
127 !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
128
129 # No Umlaute, please!
130 !define MUI_LANGDLL_INFO "Please choose a language for the setup.$\r$\n\
131 Bitte die Sprache des Installations-Vorgangs angeben."
132
133 # The list of wizard pages.
134
135 !define MUI_WELCOMEPAGE_TITLE "${WELCOME_TITLE_STR}"
136 !define MUI_WELCOMEPAGE_TEXT "${ABOUT_STR}"
137
138 !insertmacro MUI_PAGE_WELCOME
139
140 !define MUI_LICENSEPAGE_BUTTON "$(^NextBtn)"
141 !define MUI_PAGE_HEADER_SUBTEXT "$(T_GPLHeader)"
142 !define MUI_LICENSEPAGE_TEXT_BOTTOM "$(T_GPLShort)"
143 !insertmacro MUI_PAGE_LICENSE "${TOP_SRCDIR}/COPYING"
144
145 !define MUI_PAGE_CUSTOMFUNCTION_SHOW PrintNonAdminWarning
146 !insertmacro MUI_PAGE_COMPONENTS
147
148 !define MUI_PAGE_CUSTOMFUNCTION_LEAVE CheckExistingVersion
149 !insertmacro MUI_PAGE_DIRECTORY
150
151 !ifdef HAVE_STARTMENU
152
153 Page custom CustomPageOptions
154
155 Var STARTMENU_FOLDER
156
157 !define MUI_PAGE_CUSTOMFUNCTION_PRE CheckIfStartMenuWanted
158 !define MUI_STARTMENUPAGE_NODISABLE
159 !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM"
160 !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\GNU\${PRETTY_PACKAGE_SHORT}"
161 !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
162
163 !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
164
165 !endif
166
167 !define MUI_PAGE_CUSTOMFUNCTION_PRE PrintCloseOtherApps
168 !insertmacro MUI_PAGE_INSTFILES
169 !define MUI_PAGE_CUSTOMFUNCTION_PRE ShowFinalWarnings
170
171 # SMIME configuration page
172 !define MUI_PAGE_HEADER_TEXT "$(T_SMIMEHeaderText)"
173 !define MUI_PAGE_HEADER_SUBTEXT "$(T_SMIMEHeaderSubtext)"
174 !define MUI_LICENSEPAGE_TEXT_TOP "$(T_SMIMETextTop)"
175 !define MUI_LICENSEPAGE_TEXT_BOTTOM "$(T_SMIMETextBottom)"
176 !define MUI_LICENSEPAGE_CHECKBOX 
177 !define MUI_LICENSEPAGE_CHECKBOX_TEXT "$(T_SMIMECheckboxText)"
178 !insertmacro MUI_PAGE_LICENSE $(T_HowtoSmimeFile) 
179
180 # Finish page
181 !define MUI_FINISHPAGE_SHOWREADME "share\gpg4win\README.$(T_LangCode).txt"
182 !define MUI_FINISHPAGE_SHOWREADME_TEXT "$(T_ShowReadme)"
183 #!define MUI_FINISHPAGE_RUN
184 #!define MUI_FINISHPAGE_RUN_FUNCTION RunOnFinish
185 #!define MUI_FINISHPAGE_RUN_TEXT "$(T_RunKeyManager)"
186 #!define MUI_FINISHPAGE_RUN_NOTCHECKED
187 !define MUI_FINISHPAGE_LINK "$(T_MoreInfo)"
188 !define MUI_FINISHPAGE_LINK_LOCATION "$(T_MoreInfoURL)"
189 !insertmacro MUI_PAGE_FINISH
190
191
192 # Uninstaller pages.
193
194 !insertmacro MUI_UNPAGE_WELCOME
195 !insertmacro MUI_UNPAGE_CONFIRM
196 !insertmacro MUI_UNPAGE_INSTFILES
197 !insertmacro MUI_UNPAGE_FINISH
198
199 #Page license
200 #Page components
201 #Page directory
202 #Page instfiles
203 #UninstPage uninstConfirm
204 #UninstPage instfiles
205
206
207 # Language support.  This has to be done after defining the pages, but
208 # before defining the translation strings.  Confusing.
209
210 # Enable this to not filter languages for the current code page.  Note
211 # that languages which are then not filtered out may not be displayed
212 # correctly in the Windows version the user is using.  Not recommended,
213 # but can be useful for testing.
214 !ifdef DEBUG
215 !define MUI_LANGDLL_ALLLANGUAGES
216 !endif
217
218 !insertmacro MUI_LANGUAGE "English"
219 !define PO_HEADER
220 !include "../po/catalogs.nsi"
221 !undef PO_HEADER
222
223 !insertmacro MUI_RESERVEFILE_LANGDLL
224 !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
225 ReserveFile "${BUILD_DIR}\g4wihelp.dll"
226 !ifdef SOURCES
227 ReserveFile "${TOP_SRCDIR}\doc\logo\gpg4win-logo-400px.bmp"
228 ReserveFile "${TOP_SRCDIR}\src\gpg4win-splash.wav"
229 !endif
230 ReserveFile "${TOP_SRCDIR}\COPYING"
231 ReserveFile "installer-options.ini"
232 ReserveFile "${TOP_SRCDIR}\doc\logo\gpg4win-logo-164x314.bmp"
233
234 # Language support
235
236 LangString T_LangCode ${LANG_ENGLISH} "en"
237
238 # Startup page
239 LangString T_GPLHeader ${LANG_ENGLISH} \
240   "This software is licensed under the terms of the GNU General Public \
241    License (GPL)."
242
243 LangString T_GPLShort ${LANG_ENGLISH} \
244   "In short: You are allowed to run this software for any purpose. \
245    You may distribute it as long as you give the recipients the same \
246    rights you have received."
247
248 LangString T_RunKeyManager ${LANG_ENGLISH} \
249    "Run the key manager"
250
251 LangString T_MoreInfo ${LANG_ENGLISH} \
252    "Click here for the project's homepage"
253 LangString T_MoreInfoURL ${LANG_ENGLISH} "http://www.gpg4win.org"
254
255 LangString T_ShowReadme ${LANG_ENGLISH} \
256    "Show the README file"
257
258 LangString T_NoKeyManager ${LANG_ENGLISH} \
259    "No key manager has been installed, thus we can't run one now."
260
261 # Used as subdirectory name in Start Menu.
262
263 LangString DESC_Menu_manuals ${LANG_ENGLISH} \
264    "Documentation"
265
266 LangString DESC_Menu_uninstall ${LANG_ENGLISH} \
267    "Uninstall"
268
269 # Used as subdirectory name on Desktop.
270 LangString DESC_Desktop_manuals ${LANG_ENGLISH} \
271    "Gpg4win Documentation"
272
273
274 # Functions
275
276 # Custom functions and macros for gpg4win. 
277 !include "g4wihelp.nsi"
278
279 #
280 # Control function for the Custom page to select special
281 # install options.
282 #
283 Function CustomPageOptions
284   !insertmacro MUI_HEADER_TEXT "$(T_InstallOptions)" "$(T_InstallOptLinks)"
285
286   # Note that the default selection is done in the ini file.
287   !insertmacro MUI_INSTALLOPTIONS_WRITE "installer-options.ini" \
288         "Field 1" "Text"  "$(T_InstOptLabelA)"
289   !insertmacro MUI_INSTALLOPTIONS_WRITE "installer-options.ini" \
290         "Field 2" "Text"  "$(T_InstOptFieldA)"
291   !insertmacro MUI_INSTALLOPTIONS_WRITE "installer-options.ini" \
292         "Field 3" "Text"  "$(T_InstOptFieldB)"
293   !insertmacro MUI_INSTALLOPTIONS_WRITE "installer-options.ini" \
294         "Field 4" "Text"  "$(T_InstOptFieldC)"
295   !insertmacro MUI_INSTALLOPTIONS_WRITE "installer-options.ini" \
296         "Field 5" "Text"  "$(T_InstOptLabelB)"
297
298   !insertmacro MUI_INSTALLOPTIONS_DISPLAY "installer-options.ini"
299 FunctionEnd
300
301 # Display a warning if this is a Beta version.
302 #Function PrintBetaWarning
303 #   MessageBox MB_OK "$(T_BetaWarning)"
304 #FunctionEnd
305
306
307 # Display a warning if GnuPP has been detected and allow the user to abort
308 # the installation.
309 Function PrintGnuPPWarning
310    MessageBox MB_YESNO "$(T_FoundOldGnuPP)" IDYES cont
311      Abort
312  cont:
313    StrCpy $OtherGnuPGDetected "GnuPP"
314 FunctionEnd
315
316 # Display a warning if GnuPT has been detected and allow the user to abort
317 # the installation.
318 Function PrintGnuPTWarning
319    MessageBox MB_YESNO "$(T_FoundOldGnuPT)" IDYES cont
320      Abort
321  cont:
322    StrCpy $OtherGnuPGDetected "GnuPT"
323 FunctionEnd
324
325 # Display a warning if the Sourceforge WinPT has been detected and
326 # allow the user to abort the installation.
327 Function PrintWinPTSFWarning
328    MessageBox MB_YESNO "$(T_FoundOldWinPTSF)" IDYES cont
329      Abort
330  cont:
331    StrCpy $OtherGnuPGDetected "WinPT-SF"
332 FunctionEnd
333
334 # Display a warning if GnuPG Pack has been detected and abort the
335 # the installation.  This one clobbers our own Registry space.
336 Function PrintGnuPackWarning
337    MessageBox MB_OK "$(T_FoundOldGnuPack)"
338    Abort
339 FunctionEnd
340
341
342 # Check whether one of the other GnuPG systems has already been
343 # installed.  We do this by looking at the registry.
344 Function CheckOtherGnuPGApps
345   StrCpy $OtherGnuPGDetected ""
346   ClearErrors
347   ReadRegStr $0 HKLM "Software\GNU\GnuPP\Settings" "Path"
348   IfErrors +2 0
349     Call PrintGnuPPWarning
350
351   EnumRegKey $0 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Start Menu\Programs\GnuPT" 0
352   StrCmp $0 "" +2
353     Call PrintGnuPTWarning
354
355   ClearErrors
356   ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Windows Privacy Tools" "DisplayVersion"
357   IfErrors +2 0
358     Call PrintWinPTSFWarning
359
360   ReadRegStr $0 HKLM "Software\GNU\GnuPG" "Install Directory"
361   Push $0
362   Push "GnuPG-Pack"
363   Call StrStr
364   Pop $0
365   StrCmp $0 "" +2
366     Call PrintGnuPackWarning
367
368
369 FunctionEnd
370
371 # Check whether gpg4win has already been installed.  This is called as
372 # a leave function from the directory page.  A call to abort will get
373 # back to the directory selection.
374 Function CheckExistingVersion
375   ClearErrors
376   FileOpen $0 "$INSTDIR\VERSION" r
377   IfErrors nexttest
378   FileRead $0 $R0
379   FileRead $0 $R1
380   FileClose $0
381
382   Push $R1
383   Call TrimNewLines
384   Pop $R1
385
386   # Extract major version.
387   StrCpy $0 $R1 2
388   StrCmp $0 "1." 0 secondtest
389     MessageBox MB_YESNO "$(T_FoundExistingOldVersion)" IDYES leave
390     Abort
391
392  secondtest:
393   MessageBox MB_YESNO "$(T_FoundExistingVersion)" IDYES leave
394   Abort
395
396  nexttest:
397   ClearErrors
398   ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\GPG4Win" "DisplayVersion"
399   IfErrors leave 0
400      MessageBox MB_YESNO "$(T_FoundExistingVersionB)" IDYES leave
401      Abort
402      
403  leave:
404 FunctionEnd
405
406
407
408 # PrintNonAdminWarning
409
410 # Check whether the current user is in the Administrator group or an
411 # OS version without the need for an Administrator is in use.  Print a
412 # diagnostic if this is not the case and abort installation.
413 Function PrintNonAdminWarning
414
415   #Call PrintBetaWarning
416
417   ClearErrors
418   UserInfo::GetName
419   IfErrors leave
420   Pop $0
421   UserInfo::GetAccountType
422   Pop $1
423   StrCmp $1 "Admin" leave +1
424   MessageBox MB_OK "$(T_AdminNeeded)"
425   Quit
426
427  leave:
428 FunctionEnd
429
430
431 # Check whether the start menu is actually wanted.
432
433 Function CheckIfStartMenuWanted
434   !insertmacro MUI_INSTALLOPTIONS_READ $R0 "installer-options.ini" \
435         "Field 2" "State"
436   IntCmp $R0 1 +2
437     Abort
438 FunctionEnd
439
440
441 # Check whether this is a reinstall and popup a message box to explain
442 # that it is better to close other apps before continuing
443 Function PrintCloseOtherApps
444     IfFileExists $INSTDIR\gnupg.exe print_warning
445     IfFileExists $INSTDIR\winpt.exe print_warning
446     IfFileExists $INSTDIR\gpa.exe   print_warning
447     IfFileExists $INSTDIR\gpgol.dll print_warning
448     IfFileExists $INSTDIR\dirmngr.exe print_warning
449     Return
450    print_warning:
451     MessageBox MB_OK|MB_ICONEXCLAMATION "$(T_CloseOtherApps)"
452     IfFileExists $INSTDIR\winpt.exe 0 +3
453       MessageBox MB_OK "$(T_ShuttingDownWinPT)"
454       ExecWait '"$INSTDIR\winpt.exe" --stop'
455     IfFileExists $INSTDIR\dirmngr.exe 0 +3
456       MessageBox MB_OK "$(T_ShuttingDownDirMngr)"
457       g4wihelp::service_stop "DirMngr"
458    leave:
459 FunctionEnd
460
461 # Called right before the final page to show more warnings.
462 Function ShowFinalWarnings
463    StrCmp $OtherGnupgDetected "" +2
464      MessageBox MB_OK "$(T_FoundOldSeeManual)"
465    leave:
466 FunctionEnd
467
468 #-----------------------------------------------
469 # Strings pertaining to the install options page
470 #-----------------------------------------------
471
472 # Installation options title
473 LangString T_InstallOptions ${LANG_ENGLISH} "Install Options"
474
475 # Installation options subtitle 1
476 LangString T_InstallOptLinks ${LANG_ENGLISH} "Start links"
477
478 LangString T_InstOptLabelA  ${LANG_ENGLISH} \
479      "Please select where Gpg4win shall install links:"
480
481 LangString T_InstOptLabelB  ${LANG_ENGLISH} \
482      "(Only programs will be linked into the quick launch bar.)"
483
484 LangString T_InstOptFieldA  ${LANG_ENGLISH} \
485      "Start Menu"
486
487 LangString T_InstOptFieldB  ${LANG_ENGLISH} \
488      "Desktop"
489
490 LangString T_InstOptFieldC  ${LANG_ENGLISH} \
491      "Quick Launch Bar"
492
493 #------------------------------------------------
494 # String pertaining to the existing version check
495 #------------------------------------------------
496 LangString T_FoundExistingVersion ${LANG_ENGLISH} \
497      "Version $R1 has already been installed.  $\r$\n\
498       Do you want to overwrite it with version ${VERSION}?"
499 LangString T_FoundExistingOldVersion ${LANG_ENGLISH} \
500      "An old version $R1 has already been installed.  It is \
501       strongly recommended to deinstall previous versions on \
502       major upgrades. $\r$\n\
503       Do you want to continue installing Gpg4win ${VERSION} anyway?"
504 LangString T_FoundExistingVersionB ${LANG_ENGLISH} \
505      "A version of Gpg4Win has already been installed on the system. \
506       There will be no problem installing and thus overwriting this \
507       Version. $\r$\n\
508        $\r$\n\
509       Do you want to continue installing Gpg4win?"
510
511 #---------------------------------------------------
512 # Strings pertaining to the SMIME configuration page
513 #---------------------------------------------------
514 LangString T_SMIMEHeaderText ${LANG_ENGLISH} \
515         "Define trustable root certificates"
516 LangString T_SMIMEHeaderSubtext ${LANG_ENGLISH} \
517         "S/MIME configuration"
518 LangString T_SMIMETextTop ${LANG_ENGLISH} \
519         "Gpg4win needs a list of root certificates which you trust."
520 LangString T_SMIMETextBottom ${LANG_ENGLISH} \
521         "Therewith you can use S/MIME, the configuration is stringently \
522         required. Skip this configuration only if you don't want to use \
523         S/MIME."
524 LangString T_SMIMECheckboxText ${LANG_ENGLISH} \
525         "Root certificate defined or skip configuration"
526
527 LicenseLangString T_HowtoSmimeFile ${LANG_GERMAN} \
528         "${TOP_SRCDIR}/doc/HOWTO-SMIME.de.txt"
529 LicenseLangString T_HowtoSmimeFile ${LANG_ENGLISH} \
530         "${TOP_SRCDIR}/doc/HOWTO-SMIME.en.txt"
531 LicenseLangString T_HowtoSmimeFile ${LANG_FRENCH} \
532         "${TOP_SRCDIR}/doc/HOWTO-SMIME.en.txt"
533 LicenseLangString T_HowtoSmimeFile ${LANG_SPANISH} \
534         "${TOP_SRCDIR}/doc/HOWTO-SMIME.en.txt"
535 LicenseLangString T_HowtoSmimeFile ${LANG_PORTUGUESE} \
536         "${TOP_SRCDIR}/doc/HOWTO-SMIME.en.txt"
537 LicenseLangString T_HowtoSmimeFile ${LANG_CZECH} \
538         "${TOP_SRCDIR}/doc/HOWTO-SMIME.en.txt"
539 LicenseLangString T_HowtoSmimeFile ${LANG_ARABIC} \
540         "${TOP_SRCDIR}/doc/HOWTO-SMIME.en.txt"
541 LicenseLangString T_HowtoSmimeFile ${LANG_RUSSIAN} \
542         "${TOP_SRCDIR}/doc/HOWTO-SMIME.en.txt"
543
544 #---------------------------------------------
545 # From the old installation checking functions
546 #---------------------------------------------
547 LangString T_FoundOldSeeManual ${LANG_ENGLISH} \
548      "Please see the Gpg4win user manual to learn how to migrate existing \
549       keys from other GnuPG based installations to Gpg4win."
550
551 #---------
552 LangString T_FoundOldGnuPP ${LANG_ENGLISH} \
553      "An old installation of GnuPP (GNU Privacy Project) has been been \
554       detected.  That software is not maintained anymore and thus should \
555       be removed. $\r$\n\
556           $\r$\n\
557       Do you want to continue installing Gpg4win and take care of the old \
558       installation later?"
559
560 #---------
561 LangString T_FoundOldGnuPT ${LANG_ENGLISH} \
562      "An installation of GnuPT has been been detected.  This may cause \
563       problems when used along with Gpg4win. $\r$\n\
564           $\r$\n\
565       Do you want to continue installing Gpg4win?"
566
567 #---------
568 LangString T_FoundOldWinPTSF ${LANG_ENGLISH} \
569      "An old installation of the Sourceforge hosted WinPT has been been \
570       detected.  That software is not maintained anymore and should \
571       be removed. $\r$\n\
572           $\r$\n\
573       Do you want to continue installing Gpg4win and take care of the old \
574       installation later?"
575
576
577 #--------
578 LangString T_FoundOldGnuPack ${LANG_ENGLISH} \
579      "An installation of GnuPG-Pack has been been detected. You need to \
580       uninstall it before you can continue with Gpg4win installation. $\r$\n\
581         $\r$\n\
582       The installation will be aborted now!"
583
584
585
586 # From Function PrintBetaWarning
587 LangString T_BetaWarning ${LANG_ENGLISH} \
588    "Note: This is a BETA version of Gpg4win. $\r$\n\
589      $\r$\n\
590     Beta versions are only intended for testing and \
591     shall not be used in a production environment."
592
593 # From Function PrintNonAdminWarning
594 LangString T_AdminNeeded ${LANG_ENGLISH} \
595    "Warning: Administrator permissions required for a successful installation"
596
597 # From Function PrintCloseOtherApps
598 LangString T_CloseOtherApps ${LANG_ENGLISH} \
599    "Please make sure that other applications are not running. \
600     In particular you should close Outlook and all Explorer \
601     windows.  Gpg4win will try to install anyway but a reboot \
602     will be required then."
603 LangString T_ShuttingDownWinPT ${LANG_ENGLISH} \
604    "Trying to shutdown a possible running instance of WinPT."
605 LangString T_ShuttingDownDirMngr ${LANG_ENGLISH} \
606    "Trying to shutdown a possible running instance of DirMngr."
607
608
609 # FIXME: The GetAfterChar function comes from the NSIS wiki.
610 Function un.GetAfterChar
611   Exch $0 ; chop char
612   Exch
613   Exch $1 ; input string
614   Push $2
615   Push $3
616   StrCpy $2 0
617   loop:
618     IntOp $2 $2 - 1
619     StrCpy $3 $1 1 $2
620     StrCmp $3 "" 0 +3
621       StrCpy $0 ""
622       Goto exit2
623     StrCmp $3 $0 exit1
624     Goto loop
625   exit1:
626     IntOp $2 $2 + 1
627     StrCpy $0 $1 "" $2
628   exit2:
629     Pop $3
630     Pop $2
631     Pop $1
632     Exch $0 ; output
633 FunctionEnd
634
635
636 Function un.SourceDelete
637   Push "/"
638   Call un.GetAfterChar
639   Pop $R0
640   Delete "$INSTDIR\$R0"
641 FunctionEnd
642
643
644 # StrStr  - taken from the NSIS reference
645 # input, top of stack = string to search for
646 #        top of stack-1 = string to search in
647 # output, top of stack (replaces with the portion of the string remaining)
648 # modifies no other variables.
649 #
650 # Usage:
651 #   Push "this is a long ass string"
652 #   Push "ass"
653 #   Call StrStr
654 #   Pop $R0
655 #  ($R0 at this point is "ass string")
656 #
657 !macro StrStr un
658 Function ${un}StrStr
659    Exch $R1 # st=haystack,old$R1, $R1=needle
660    Exch     # st=old$R1,haystack
661    Exch $R2 # st=old$R1,old$R2, $R2=haystack
662    Push $R3
663    Push $R4
664    Push $R5
665    StrLen $R3 $R1
666    StrCpy $R4 0
667    # $R1=needle
668    # $R2=haystack
669    # $R3=len(needle)
670    # $R4=cnt
671    # $R5=tmp
672    loop:
673      StrCpy $R5 $R2 $R3 $R4
674      StrCmp $R5 $R1 done
675      StrCmp $R5 "" done
676      IntOp $R4 $R4 + 1
677      Goto loop
678  done:
679    StrCpy $R1 $R2 "" $R4
680    Pop $R5
681    Pop $R4
682    Pop $R3
683    Pop $R2
684    Exch $R1
685 FunctionEnd
686 !macroend
687 !insertmacro StrStr ""
688 !insertmacro StrStr "un."
689
690
691 # TrimNewlines  - taken from the NSIS reference
692 # input, top of stack  (e.g. whatever$\r$\n)
693 # output, top of stack (replaces, with e.g. whatever)
694 # modifies no other variables.
695 Function TrimNewlines
696    Exch $R0
697    Push $R1
698    Push $R2
699    StrCpy $R1 0
700  
701  loop:
702    IntOp $R1 $R1 - 1
703    StrCpy $R2 $R0 1 $R1
704    StrCmp $R2 "$\r" loop
705    StrCmp $R2 "$\n" loop
706    IntOp $R1 $R1 + 1
707    IntCmp $R1 0 no_trim_needed
708    StrCpy $R0 $R0 $R1
709  
710  no_trim_needed:
711    Pop $R2
712    Pop $R1
713    Exch $R0
714 FunctionEnd
715
716
717 # AddToPath - Adds the given dir to the search path.
718 #        Input - head of the stack
719 Function AddToPath
720   Exch $0
721   g4wihelp::path_add "$0"
722   StrCmp $R5 "0" add_to_path_done
723   SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
724   add_to_path_done:
725   Pop $0
726 FunctionEnd
727  
728 # RemoveFromPath - Remove a given dir from the path
729 #     Input: head of the stack
730 Function un.RemoveFromPath
731   Exch $0
732   g4wihelp::path_remove "$0"
733   StrCmp $R5 "0" remove_from_path_done
734   SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
735   remove_from_path_done:
736   Pop $0
737 FunctionEnd
738  
739