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