]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/win32/installer/winbacula.nsi
f360c6dc28a03c66bff4713ff10e9064c8f95605
[bacula/bacula] / bacula / src / win32 / installer / winbacula.nsi
1 ; winbacula.nsi\r
2 ;\r
3 ; Began as a version written by Michel Meyers (michel@tcnnet.dyndns.org)\r
4 ;\r
5 ; Adapted by Kern Sibbald for native Win32 Bacula\r
6 ;    added a number of elements from Christopher Hull's installer\r
7 ;\r
8 ; D. Scott Barninger Nov 13 2004\r
9 ; added configuration editing for bconsole.conf and bwx-console.conf\r
10 ; better explanation in dialog boxes for editing config files\r
11 ; added Start Menu items\r
12 ; fix uninstall of config files to do all not just bacula-fd.conf\r
13 ;\r
14 ; D. Scott Barninger Dec 05 2004\r
15 ; added specification of default permissions for bacula-fd.conf\r
16 ;   - thanks to Jamie Ffolliott for pointing me at cacls\r
17 ; added removal of working-dir files if user selects to remove config\r
18 ; uninstall is now 100% clean\r
19 ;\r
20 ; D. Scott Barninger Apr 17 2005\r
21 ; 1.36.3 release docs update\r
22 ; add pdf manual and menu shortcut\r
23 ;\r
24 ; Robert Nelson May 15 2006\r
25 ; Added server installs and implemented Microsoft install locations\r
26 ; Use LogicLib.nsh\r
27 ; Added Bacula-SD and Bacula-DIR\r
28 ; Replaced ParameterGiven with standard GetOptions\r
29 ;\r
30 ; Version $Id$\r
31 ;\r
32 ; Command line options:\r
33 ;\r
34 ; /service    - \r
35 ; /start\r
36 ;\r
37 ; netsh firewall add portopening protocol=tcp port=9102 name="Bacula-FD"\r
38 \r
39 \r
40 !define PRODUCT "Bacula"\r
41 \r
42 ;\r
43 ; Include the Modern UI\r
44 ;\r
45 \r
46 !include "MUI.nsh"\r
47 !include "LogicLib.nsh"\r
48 !include "FileFunc.nsh"\r
49 !include "Sections.nsh"\r
50 !include "StrFunc.nsh"\r
51 !include "WinMessages.nsh"\r
52 ;\r
53 ; Basics\r
54 ;\r
55 Name "Bacula"\r
56 OutFile "${OUT_DIR}\winbacula-${VERSION}.exe"\r
57 SetCompressor lzma\r
58 InstallDir "$PROGRAMFILES\Bacula"\r
59 InstallDirRegKey HKLM "Software\Bacula" "InstallLocation"\r
60 \r
61 InstType "Client"\r
62 InstType "Server"\r
63 InstType "Full"\r
64 \r
65 !insertmacro GetParent\r
66 \r
67 ${StrCase}\r
68 ${StrRep}\r
69 ${StrTok}\r
70 ${StrTrimNewLines}\r
71 \r
72 ;\r
73 ; Pull in pages\r
74 ;\r
75 \r
76 !define      MUI_COMPONENTSPAGE_SMALLDESC\r
77 \r
78 !define      MUI_HEADERIMAGE\r
79 !define      MUI_BGCOLOR                739AB9\r
80 !define      MUI_HEADERIMAGE_BITMAP     "bacula-logo.bmp"\r
81 \r
82 !InsertMacro MUI_PAGE_WELCOME\r
83 !InsertMacro MUI_PAGE_LICENSE "..\..\..\LICENSE"\r
84 Page custom EnterInstallType\r
85 !define      MUI_PAGE_CUSTOMFUNCTION_SHOW PageComponentsShow\r
86 !InsertMacro MUI_PAGE_COMPONENTS\r
87 !define      MUI_PAGE_CUSTOMFUNCTION_PRE PageDirectoryPre\r
88 !InsertMacro MUI_PAGE_DIRECTORY\r
89 Page custom EnterConfigPage1 LeaveConfigPage1\r
90 Page custom EnterConfigPage2 LeaveConfigPage2\r
91 !Define      MUI_PAGE_CUSTOMFUNCTION_LEAVE LeaveInstallPage\r
92 !InsertMacro MUI_PAGE_INSTFILES\r
93 Page custom EnterWriteTemplates\r
94 !Define      MUI_FINISHPAGE_SHOWREADME $INSTDIR\Readme.txt\r
95 !InsertMacro MUI_PAGE_FINISH\r
96 \r
97 !InsertMacro MUI_UNPAGE_WELCOME\r
98 !InsertMacro MUI_UNPAGE_CONFIRM\r
99 !InsertMacro MUI_UNPAGE_INSTFILES\r
100 !InsertMacro MUI_UNPAGE_FINISH\r
101 \r
102 !define      MUI_ABORTWARNING\r
103 \r
104 !InsertMacro MUI_LANGUAGE "English"\r
105 \r
106 !InsertMacro GetParameters\r
107 !InsertMacro GetOptions\r
108 \r
109 DirText "Setup will install Bacula ${VERSION} to the directory specified below. To install in a different folder, click Browse and select another folder."\r
110 \r
111 !InsertMacro MUI_RESERVEFILE_INSTALLOPTIONS\r
112 ;\r
113 ; Global Variables\r
114 ;\r
115 Var OptService\r
116 Var OptStart\r
117 Var OptSilent\r
118 \r
119 Var CommonFilesDone\r
120 \r
121 Var OsIsNT\r
122 \r
123 Var HostName\r
124 \r
125 Var ConfigClientName\r
126 Var ConfigClientPort\r
127 Var ConfigClientMaxJobs\r
128 Var ConfigClientPassword\r
129 Var ConfigClientInstallService\r
130 Var ConfigClientStartService\r
131 \r
132 Var ConfigStorageName\r
133 Var ConfigStoragePort\r
134 Var ConfigStorageMaxJobs\r
135 Var ConfigStoragePassword\r
136 Var ConfigStorageInstallService\r
137 Var ConfigStorageStartService\r
138 \r
139 Var ConfigDirectorName\r
140 Var ConfigDirectorPort\r
141 Var ConfigDirectorMaxJobs\r
142 Var ConfigDirectorPassword\r
143 Var ConfigDirectorAddress\r
144 Var ConfigDirectorMailServer\r
145 Var ConfigDirectorMailAddress\r
146 Var ConfigDirectorDB\r
147 Var ConfigDirectorInstallService\r
148 Var ConfigDirectorStartService\r
149 \r
150 Var ConfigMonitorName\r
151 Var ConfigMonitorPassword\r
152 \r
153 Var LocalDirectorPassword\r
154 Var LocalHostAddress\r
155 \r
156 Var MySQLPath\r
157 Var MySQLVersion\r
158 Var PostgreSQLPath\r
159 Var PostgreSQLVersion\r
160 \r
161 Var AutomaticInstall\r
162 Var InstallType\r
163 !define NewInstall      0\r
164 !define UpgradeInstall  1\r
165 !define MigrateInstall  2\r
166 \r
167 Var OldInstallDir\r
168 Var PreviousComponents\r
169 Var NewComponents\r
170 \r
171 ; Bit 0 = File Service\r
172 ;     1 = Storage Service\r
173 ;     2 = Director Service\r
174 ;     3 = Command Console\r
175 ;     4 = Graphical Console\r
176 ;     5 = Documentation (PDF)\r
177 ;     6 = Documentation (HTML)\r
178 \r
179 !define ComponentFile                   1\r
180 !define ComponentStorage                2\r
181 !define ComponentDirector               4\r
182 !define ComponentTextConsole            8\r
183 !define ComponentGUIConsole             16\r
184 !define ComponentPDFDocs                32\r
185 !define ComponentHTMLDocs               64\r
186 \r
187 !define ComponentsRequiringUserConfig           31\r
188 !define ComponentsFileAndStorage                3\r
189 !define ComponentsFileAndStorageAndDirector     7\r
190 !define ComponentsDirectorAndTextGuiConsoles    28\r
191 !define ComponentsTextAndGuiConsoles            24\r
192 \r
193 Var HDLG\r
194 Var HCTL\r
195 \r
196 Function .onInit\r
197   Push $R0\r
198   Push $R1\r
199 \r
200   ; Process Command Line Options\r
201   StrCpy $OptService 1\r
202   StrCpy $OptStart 1\r
203   StrCpy $OptSilent 0\r
204   StrCpy $CommonFilesDone 0\r
205   StrCpy $OsIsNT 0\r
206   StrCpy $AutomaticInstall 0\r
207   StrCpy $InstallType ${NewInstall}\r
208   StrCpy $OldInstallDir ""\r
209   StrCpy $PreviousComponents 0\r
210   StrCpy $NewComponents 0\r
211   StrCpy $MySQLPath ""\r
212   StrCpy $MySQLVersion ""\r
213   StrCpy $PostgreSQLPath ""\r
214   StrCpy $PostgreSQLVersion ""\r
215 \r
216   ${GetParameters} $R0\r
217 \r
218   ClearErrors\r
219   ${GetOptions} $R0 "/noservice" $R1\r
220   IfErrors +2\r
221     StrCpy $OptService 0\r
222 \r
223   ClearErrors\r
224   ${GetOptions} $R0 "/nostart" $R1\r
225   IfErrors +2\r
226     StrCpy $OptStart 0\r
227 \r
228   IfSilent 0 +2\r
229     StrCpy $OptSilent 1\r
230 \r
231   ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion\r
232   ${If} $R0 != ""\r
233     StrCpy $OsIsNT 1\r
234   ${EndIf}\r
235 \r
236   Call GetComputerName\r
237   Pop $HostName\r
238 \r
239   Call GetHostName\r
240   Pop $LocalHostAddress\r
241 \r
242   Call GetUserName\r
243   Pop $ConfigDirectorMailAddress\r
244 \r
245   Call FindDatabaseApps\r
246 \r
247   ; Configuration Defaults\r
248 \r
249   StrCpy $ConfigClientName               "$HostName-fd"\r
250   StrCpy $ConfigClientPort               9102\r
251   StrCpy $ConfigClientMaxJobs            2\r
252   ;StrCpy $ConfigClientPassword\r
253   StrCpy $ConfigClientInstallService     "$OptService"\r
254   StrCpy $ConfigClientStartService       "$OptStart"\r
255 \r
256   StrCpy $ConfigStorageName              "$HostName-sd"\r
257   StrCpy $ConfigStoragePort              9103\r
258   StrCpy $ConfigStorageMaxJobs           10\r
259   ;StrCpy $ConfigStoragePassword\r
260   StrCpy $ConfigStorageInstallService    "$OptService"\r
261   StrCpy $ConfigStorageStartService      "$OptStart"\r
262 \r
263   ;StrCpy $ConfigDirectorName            "$HostName-dir"\r
264   StrCpy $ConfigDirectorPort             9101\r
265   StrCpy $ConfigDirectorMaxJobs          1\r
266   ;StrCpy $ConfigDirectorPassword\r
267   StrCpy $ConfigDirectorDB               0\r
268   StrCpy $ConfigDirectorInstallService   "$OptService"\r
269   StrCpy $ConfigDirectorStartService     "$OptStart"\r
270 \r
271   StrCpy $ConfigMonitorName              "$HostName-mon"\r
272   ;StrCpy $ConfigMonitorPassword\r
273 \r
274   InitPluginsDir\r
275   File "/oname=$PLUGINSDIR\openssl.exe"  "${SRC_DIR}\openssl.exe"\r
276   File "/oname=$PLUGINSDIR\libeay32.dll" "${SRC_DIR}\libeay32.dll"\r
277   File "/oname=$PLUGINSDIR\ssleay32.dll" "${SRC_DIR}\ssleay32.dll"\r
278   File "/oname=$PLUGINSDIR\sed.exe"      "${SRC_DIR}\sed.exe"\r
279 \r
280   !InsertMacro MUI_INSTALLOPTIONS_EXTRACT "InstallType.ini"\r
281   !InsertMacro MUI_INSTALLOPTIONS_EXTRACT "WriteTemplates.ini"\r
282 \r
283   SetPluginUnload alwaysoff\r
284 \r
285   nsExec::Exec '"$PLUGINSDIR\openssl.exe" rand -base64 -out $PLUGINSDIR\pw.txt 33'\r
286   pop $R0\r
287   ${If} $R0 = 0\r
288    FileOpen $R1 "$PLUGINSDIR\pw.txt" r\r
289    IfErrors +4\r
290      FileRead $R1 $R0\r
291      ${StrTrimNewLines} $ConfigClientPassword $R0\r
292      FileClose $R1\r
293   ${EndIf}\r
294 \r
295   nsExec::Exec '"$PLUGINSDIR\openssl.exe" rand -base64 -out $PLUGINSDIR\pw.txt 33'\r
296   pop $R0\r
297   ${If} $R0 = 0\r
298    FileOpen $R1 "$PLUGINSDIR\pw.txt" r\r
299    IfErrors +4\r
300      FileRead $R1 $R0\r
301      ${StrTrimNewLines} $ConfigStoragePassword $R0\r
302      FileClose $R1\r
303   ${EndIf}\r
304 \r
305   nsExec::Exec '"$PLUGINSDIR\openssl.exe" rand -base64 -out $PLUGINSDIR\pw.txt 33'\r
306   pop $R0\r
307   ${If} $R0 = 0\r
308    FileOpen $R1 "$PLUGINSDIR\pw.txt" r\r
309    IfErrors +4\r
310      FileRead $R1 $R0\r
311      ${StrTrimNewLines} $LocalDirectorPassword $R0\r
312      FileClose $R1\r
313   ${EndIf}\r
314 \r
315   SetPluginUnload manual\r
316 \r
317   nsExec::Exec '"$PLUGINSDIR\openssl.exe" rand -base64 -out $PLUGINSDIR\pw.txt 33'\r
318   pop $R0\r
319   ${If} $R0 = 0\r
320    FileOpen $R1 "$PLUGINSDIR\pw.txt" r\r
321    IfErrors +4\r
322      FileRead $R1 $R0\r
323      ${StrTrimNewLines} $ConfigMonitorPassword $R0\r
324      FileClose $R1\r
325   ${EndIf}\r
326 \r
327   Pop $R1\r
328   Pop $R0\r
329 FunctionEnd\r
330 \r
331 Function .onSelChange\r
332   Call UpdateComponentUI\r
333 FunctionEnd\r
334 \r
335 Function InstallCommonFiles\r
336   ${If} $CommonFilesDone = 0\r
337     SetOutPath "$INSTDIR"\r
338     File "Readme.txt"\r
339 \r
340     SetOutPath "$INSTDIR\bin"\r
341 !if "${BUILD_TOOLS}" == "VC8"\r
342     File "${SRC_DIR}\msvcm80.dll"\r
343     File "${SRC_DIR}\msvcp80.dll"\r
344     File "${SRC_DIR}\msvcr80.dll"\r
345     File "${SRC_DIR}\Microsoft.VC80.CRT.manifest"\r
346     File "${SRC_DIR}\pthreadVCE.dll"\r
347 !endif\r
348 !if "${BUILD_TOOLS}" == "VC8_DEBUG"\r
349     File "${SRC_DIR}\msvcm80.dll"\r
350     File "${SRC_DIR}\msvcp80.dll"\r
351     File "${SRC_DIR}\msvcr80.dll"\r
352     File "${SRC_DIR}\Microsoft.VC80.CRT.manifest"\r
353     File "${SRC_DIR}\msvcm80d.dll"\r
354     File "${SRC_DIR}\msvcp80d.dll"\r
355     File "${SRC_DIR}\msvcr80d.dll"\r
356     File "${SRC_DIR}\Microsoft.VC80.DebugCRT.manifest"\r
357     File "${SRC_DIR}\pthreadVCE.dll"\r
358 !endif\r
359 !if "${BUILD_TOOLS}" == "MinGW"\r
360     File "${SRC_DIR}\mingwm10.dll"\r
361     File "${SRC_DIR}\pthreadGCE.dll"\r
362 !endif\r
363     File "${SRC_DIR}\libeay32.dll"\r
364     File "${SRC_DIR}\ssleay32.dll"\r
365     File "${SRC_DIR}\zlib1.dll"\r
366 !if "${BUILD_TOOLS}" == "VC8"\r
367     File "${SRC_DIR}\zlib1.dll.manifest"\r
368 !endif\r
369 !If "${BUILD_TOOLS}" == "VC8_DEBUG"\r
370     File "${SRC_DIR}\zlib1.dll.manifest"\r
371 !endif\r
372     File "/oname=$INSTDIR\openssl.cnf" "${SRC_DIR}\openssl.cnf"\r
373     File "${SRC_DIR}\openssl.exe"\r
374     File "${SRC_DIR}\bsleep.exe"\r
375     File "${SRC_DIR}\bsmtp.exe"\r
376     File "${SRC_DIR}\bacula.dll"\r
377     File "${SRC_DIR}\expr64.exe"\r
378     File "${SRC_DIR}\snooze.exe"\r
379 \r
380     CreateShortCut "$SMPROGRAMS\Bacula\Documentation\View Readme.lnk" "write.exe" '"$INSTDIR\Readme.txt"'\r
381 \r
382     StrCpy $CommonFilesDone 1\r
383   ${EndIf}\r
384 FunctionEnd\r
385 \r
386 Section "-Initialize"\r
387   ${If} $MySQLPath != ""\r
388     DetailPrint "Found MySQL (version $MySQLVersion)"\r
389   ${EndIf}\r
390   ${If} $PostgreSQLPath != ""\r
391     DetailPrint "Found PostgreSQL (version $PostgreSQLVersion)"\r
392   ${EndIf}\r
393 \r
394   WriteRegStr   HKLM Software\Bacula InstallLocation "$INSTDIR"\r
395 \r
396   Call GetSelectedComponents\r
397   Pop $R2\r
398   WriteRegDWORD HKLM Software\Bacula Components $R2\r
399 \r
400   WriteRegDWORD HKLM Software\Bacula Database $ConfigDirectorDB\r
401 \r
402   ; remove start menu items\r
403   SetShellVarContext all\r
404 \r
405   Delete /REBOOTOK "$SMPROGRAMS\Bacula\Configuration\*"\r
406   Delete /REBOOTOK "$SMPROGRAMS\Bacula\Documentation\*"\r
407   Delete /REBOOTOK "$SMPROGRAMS\Bacula\*"\r
408   RMDir "$SMPROGRAMS\Bacula\Configuration"\r
409   RMDir "$SMPROGRAMS\Bacula\Documentation"\r
410   RMDir "$SMPROGRAMS\Bacula"\r
411   CreateDirectory "$SMPROGRAMS\Bacula"\r
412   CreateDirectory "$SMPROGRAMS\Bacula\Configuration"\r
413   CreateDirectory "$SMPROGRAMS\Bacula\Documentation"\r
414 \r
415   CreateDirectory "$INSTDIR"\r
416   CreateDirectory "$INSTDIR\bin"\r
417   CreateDirectory "$APPDATA\Bacula"\r
418   CreateDirectory "$APPDATA\Bacula\Work"\r
419   CreateDirectory "$APPDATA\Bacula\Spool"\r
420 \r
421   SetOutPath "$INSTDIR"\r
422   File "..\..\..\LICENSE"\r
423   Delete /REBOOTOK "$INSTDIR\bin\License.txt"\r
424 \r
425   FileOpen $R1 $PLUGINSDIR\config.sed w\r
426   FileWrite $R1 "s;@VERSION@;${VERSION};g$\r$\n"\r
427   FileWrite $R1 "s;@DATE@;${__DATE__};g$\r$\n"\r
428   FileWrite $R1 "s;@DISTNAME@;Windows;g$\r$\n"\r
429 \r
430 !If "$BUILD_TOOLS" == "MinGW"\r
431   StrCpy $R2 "MinGW32"\r
432 !Else\r
433   StrCpy $R2 "MVS"\r
434 !EndIf\r
435 \r
436   Call GetHostName\r
437   Exch $R3\r
438   Pop $R3\r
439 \r
440   FileWrite $R1 "s;@DISTVER@;$R2;g$\r$\n"\r
441 \r
442   ${StrRep} $R2 "$APPDATA\Bacula\Work" "\" "\\\\"\r
443   FileWrite $R1 's;@working_dir@;$R2;g$\r$\n'\r
444   ${StrRep} $R2 "$APPDATA\Bacula\Work" "\" "\\"\r
445   FileWrite $R1 's;@working_dir_cmd@;$R2;g$\r$\n'\r
446 \r
447   ${StrRep} $R2 "$INSTDIR\bin" "\" "\\\\"\r
448   FileWrite $R1 's;@bin_dir@;$R2;g$\r$\n'\r
449   ${StrRep} $R2 "$INSTDIR\bin" "\" "\\"\r
450   FileWrite $R1 's;@bin_dir_cmd@;$R2;g$\r$\n'\r
451 \r
452   ${StrRep} $R2 "$INSTDIR" "\" "/"\r
453   FileWrite $R1 "s;@BUILD_DIR@;$R2;g$\r$\n"\r
454 \r
455   Call IsDirectorSelected\r
456   Pop $R2\r
457   ${If} $R2 = 1\r
458     FileWrite $R1 "s;@director_address@;$LocalHostAddress;g$\r$\n"\r
459   ${Else}\r
460     ${If} "$ConfigDirectorAddress" != ""\r
461       FileWrite $R1 "s;@director_address@;$ConfigDirectorAddress;g$\r$\n"\r
462     ${EndIf}\r
463   ${EndIf}\r
464 \r
465   FileWrite $R1 "s;@client_address@;$LocalHostAddress;g$\r$\n"\r
466   FileWrite $R1 "s;@storage_address@;$LocalHostAddress;g$\r$\n"\r
467 \r
468   ${If} "$ConfigClientName" != ""\r
469     FileWrite $R1 "s;@client_name@;$ConfigClientName;g$\r$\n"\r
470   ${EndIf}\r
471   ${If} "$ConfigClientPort" != ""\r
472     FileWrite $R1 "s;@client_port@;$ConfigClientPort;g$\r$\n"\r
473   ${EndIf}\r
474   ${If} "$ConfigClientMaxJobs" != ""\r
475     FileWrite $R1 "s;@client_maxjobs@;$ConfigClientMaxJobs;g$\r$\n"\r
476   ${EndIf}\r
477   ${If} "$ConfigClientPassword" != ""\r
478     FileWrite $R1 "s;@client_password@;$ConfigClientPassword;g$\r$\n"\r
479   ${EndIf}\r
480   ${If} "$ConfigStorageName" != ""\r
481     FileWrite $R1 "s;@storage_name@;$ConfigStorageName;g$\r$\n"\r
482   ${EndIf}\r
483   ${If} "$ConfigStoragePort" != ""\r
484     FileWrite $R1 "s;@storage_port@;$ConfigStoragePort;g$\r$\n"\r
485   ${EndIf}\r
486   ${If} "$ConfigStorageMaxJobs" != ""\r
487     FileWrite $R1 "s;@storage_maxjobs@;$ConfigStorageMaxJobs;g$\r$\n"\r
488   ${EndIf}\r
489   ${If} "$ConfigStoragePassword" != ""\r
490     FileWrite $R1 "s;@storage_password@;$ConfigStoragePassword;g$\r$\n"\r
491   ${EndIf}\r
492   ${If} "$ConfigDirectorName" != ""\r
493     FileWrite $R1 "s;@director_name@;$ConfigDirectorName;g$\r$\n"\r
494   ${EndIf}\r
495   ${If} "$ConfigDirectorPort" != ""\r
496     FileWrite $R1 "s;@director_port@;$ConfigDirectorPort;g$\r$\n"\r
497   ${EndIf}\r
498   ${If} "$ConfigDirectorMaxJobs" != ""\r
499     FileWrite $R1 "s;@director_maxjobs@;$ConfigDirectorMaxJobs;g$\r$\n"\r
500   ${EndIf}\r
501   ${If} "$ConfigDirectorPassword" != ""\r
502     FileWrite $R1 "s;@director_password@;$ConfigDirectorPassword;g$\r$\n"\r
503   ${EndIf}\r
504   ${If} "$ConfigDirectorMailServer" != ""\r
505     FileWrite $R1 "s;@smtp_host@;$ConfigDirectorMailServer;g$\r$\n"\r
506   ${EndIf}\r
507   ${If} "$ConfigDirectorMailAddress" != ""\r
508     FileWrite $R1 "s;@job_email@;$ConfigDirectorMailAddress;g$\r$\n"\r
509   ${EndIf}\r
510   ${If} "$ConfigMonitorName" != ""\r
511     FileWrite $R1 "s;@monitor_name@;$ConfigMonitorName;g$\r$\n"\r
512   ${EndIf}\r
513   ${If} "$ConfigMonitorPassword" != ""\r
514     FileWrite $R1 "s;@monitor_password@;$ConfigMonitorPassword;g$\r$\n"\r
515   ${EndIf}\r
516 \r
517   ${If} $ConfigDirectorDB = 1\r
518     ${If} $MySQLPath != ""\r
519       ${StrRep} $R2 "$MySQLPath\bin" "\" "\\"\r
520       FileWrite $R1 "s;@SQL_BINDIR@;$R2;g$\r$\n"\r
521     ${EndIf}\r
522   ${ElseIf} $ConfigDirectorDB = 2\r
523     ${If} $PostgreSQLPath != ""\r
524       ${StrRep} $R2 "$PostgreSQLPath\bin" "\" "\\"\r
525       FileWrite $R1 "s;@SQL_BINDIR@;$R2;g$\r$\n"\r
526     ${EndIf}\r
527   ${EndIf}\r
528 \r
529   FileClose $R1\r
530 \r
531   ${If} $InstallType = ${MigrateInstall}\r
532     FileOpen $R1 $PLUGINSDIR\migrate.sed w\r
533     ${StrRep} $R2 "$APPDATA\Bacula\Work" "\" "\\\\"\r
534     FileWrite $R1 's;\(Working *Directory *= *\)[^ ][^ ]*.*$$;\1"$R2";$\r$\n'\r
535     FileWrite $R1 's;\(Pid *Directory *= *\)[^ ][^ ]*.*$$;\1"$R2";$\r$\n'\r
536     FileClose $R1\r
537   ${EndIf}\r
538 \r
539   ${If} ${FileExists} "$OldInstallDir\bin\bacula-fd.exe"\r
540     nsExec::ExecToLog '"$OldInstallDir\bin\bacula-fd.exe" /kill'     ; Shutdown any bacula that could be running\r
541     Sleep 3000\r
542     nsExec::ExecToLog '"$OldInstallDir\bin\bacula-fd.exe" /remove'   ; Remove existing service\r
543   ${EndIf}\r
544 \r
545   ${If} ${FileExists} "$OldInstallDir\bin\bacula-sd.exe"\r
546     nsExec::ExecToLog '"$OldInstallDir\bin\bacula-sd.exe" /kill'     ; Shutdown any bacula that could be running\r
547     Sleep 3000\r
548     nsExec::ExecToLog '"$OldInstallDir\bin\bacula-sd.exe" /remove'   ; Remove existing service\r
549   ${EndIf}\r
550 \r
551   ${If} ${FileExists} "$OldInstallDir\bin\bacula-dir.exe"\r
552     nsExec::ExecToLog '"$OldInstallDir\bin\bacula-dir.exe" /kill'     ; Shutdown any bacula that could be running\r
553     Sleep 3000\r
554     nsExec::ExecToLog '"$OldInstallDir\bin\bacula-dir.exe" /remove'   ; Remove existing service\r
555   ${EndIf}\r
556 \r
557 SectionEnd\r
558 \r
559 SectionGroup "Client" SecGroupClient\r
560 \r
561 Section "File Service" SecFileDaemon\r
562   SectionIn 1 2 3\r
563 \r
564   SetOutPath "$INSTDIR\bin"\r
565 \r
566   File "${SRC_DIR}\bacula-fd.exe"\r
567 \r
568   ${If} $InstallType = ${MigrateInstall}\r
569   ${AndIf} ${FileExists} "$OldInstallDir\bin\bacula-fd.conf"\r
570     CopyFiles "$OldInstallDir\bin\bacula-fd.conf" "$APPDATA\Bacula"\r
571     nsExec::ExecToLog '$PLUGINSDIR\sed.exe -f "$PLUGINSDIR\migrate.sed" -i.bak "$APPDATA\Bacula\bacula-fd.conf"'\r
572   ${Else}\r
573     File "/oname=$PLUGINSDIR\bacula-fd.conf" "bacula-fd.conf.in"\r
574 \r
575     StrCpy $0 "$APPDATA\Bacula"\r
576     StrCpy $1 bacula-fd.conf\r
577     Call ConfigEditAndCopy\r
578   ${EndIf}\r
579 \r
580   StrCpy $0 bacula-fd\r
581   StrCpy $1 "File Service"\r
582   StrCpy $2 $ConfigClientInstallService\r
583   StrCpy $3 $ConfigClientStartService\r
584 \r
585   Call InstallDaemon\r
586 \r
587   CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Client Configuration.lnk" "write.exe" '"$APPDATA\Bacula\bacula-fd.conf"'\r
588 SectionEnd\r
589 \r
590 SectionGroupEnd\r
591 \r
592 SectionGroup "Server" SecGroupServer\r
593 \r
594 Section "Storage Service" SecStorageDaemon\r
595   SectionIn 2 3\r
596 \r
597   SetOutPath "$INSTDIR\bin"\r
598 \r
599   File "${SRC_DIR}\loaderinfo.exe"\r
600   File "${SRC_DIR}\mt.exe"\r
601   File "${SRC_DIR}\mtx.exe"\r
602   File "${SRC_DIR}\scsitape.exe"\r
603   File "${SRC_DIR}\tapeinfo.exe"\r
604   File "${SRC_DIR}\bacula-sd.exe"\r
605   File "${SRC_DIR}\bcopy.exe"\r
606   File "${SRC_DIR}\bextract.exe"\r
607   File "${SRC_DIR}\bls.exe"\r
608   File "${SRC_DIR}\bscan.exe"\r
609   File "${SRC_DIR}\btape.exe"\r
610   File "${SRC_DIR}\scsilist.exe"\r
611   File "${SRC_DIR}\mkisofs.exe"\r
612   File "${SRC_DIR}\growisofs.exe"\r
613   File "${SRC_DIR}\dvd-ram-control.exe"\r
614   File "${SRC_DIR}\dvd+rw-booktype.exe"\r
615   File "${SRC_DIR}\dvd+rw-format.exe"\r
616   File "${SRC_DIR}\dvd+rw-mediainfo.exe"\r
617 \r
618   File "/oname=$PLUGINSDIR\mtx-changer.cmd" "${SRC_DIR}\mtx-changer.cmd"\r
619 \r
620   StrCpy $0 "$INSTDIR\bin"\r
621   StrCpy $1 mtx-changer.cmd\r
622   Call ConfigEditAndCopy\r
623 \r
624   File "/oname=$PLUGINSDIR\disk-changer.cmd" "${SRC_DIR}\disk-changer.cmd"\r
625 \r
626   StrCpy $0 "$INSTDIR\bin"\r
627   StrCpy $1 disk-changer.cmd\r
628   Call ConfigEditAndCopy\r
629 \r
630   File "/oname=$PLUGINSDIR\dvd-handler.cmd" "${SRC_DIR}\dvd-handler.cmd"\r
631 \r
632   StrCpy $0 "$INSTDIR\bin"\r
633   StrCpy $1 dvd-handler.cmd\r
634   Call ConfigEditAndCopy\r
635 \r
636   File "/oname=$PLUGINSDIR\bacula-sd.conf" "bacula-sd.conf.in"\r
637 \r
638   StrCpy $0 "$APPDATA\Bacula"\r
639   StrCpy $1 bacula-sd.conf\r
640   Call ConfigEditAndCopy\r
641 \r
642   StrCpy $0 bacula-sd\r
643   StrCpy $1 "Storage Service"\r
644   StrCpy $2 $ConfigStorageInstallService\r
645   StrCpy $3 $ConfigStorageStartService\r
646   Call InstallDaemon\r
647 \r
648   CreateShortCut "$SMPROGRAMS\Bacula\Configuration\List Devices.lnk" "$INSTDIR\bin\scsilist.exe" "/pause"\r
649   CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Storage Configuration.lnk" "write.exe" '"$APPDATA\Bacula\bacula-sd.conf"'\r
650 SectionEnd\r
651 \r
652 Section "Director Service" SecDirectorDaemon\r
653   SectionIn 2 3\r
654 \r
655   SetOutPath "$INSTDIR\bin"\r
656 \r
657   ${If} $ConfigDirectorDB = 1\r
658     File /oname=bacula_cats.dll "${SRC_DIR}\cats_mysql.dll"\r
659     File "${SRC_DIR}\libmysql.dll"\r
660     File /oname=$PLUGINSDIR\create_database.cmd ${SRC_DIR}\create_mysql_database.cmd\r
661     File /oname=$PLUGINSDIR\drop_database.cmd ${SRC_DIR}\drop_mysql_database.cmd\r
662     File /oname=$PLUGINSDIR\make_tables.cmd ${SRC_DIR}\make_mysql_tables.cmd\r
663     File ${SRC_DIR}\make_mysql_tables.sql\r
664     File /oname=$PLUGINSDIR\drop_tables.cmd ${SRC_DIR}\drop_mysql_tables.cmd\r
665     File ${SRC_DIR}\drop_mysql_tables.sql\r
666     File /oname=$PLUGINSDIR\grant_privileges.cmd ${SRC_DIR}\grant_mysql_privileges.cmd\r
667     File ${SRC_DIR}\grant_mysql_privileges.sql\r
668     File /oname=$PLUGINSDIR\make_catalog_backup.cmd ${SRC_DIR}\make_mysql_catalog_backup.cmd\r
669   ${ElseIf} $ConfigDirectorDB = 2\r
670     File /oname=bacula_cats.dll "${SRC_DIR}\cats_postgresql.dll"\r
671     File "${SRC_DIR}\libpq.dll"\r
672 !if "${BUILD_TOOLS}" == "VC8"\r
673     File "${SRC_DIR}\comerr32.dll"\r
674     File "${SRC_DIR}\libintl-2.dll"\r
675     File "${SRC_DIR}\libiconv-2.dll"\r
676     File "${SRC_DIR}\krb5_32.dll"\r
677 !endif\r
678 !If "${BUILD_TOOLS}" == "VC8_DEBUG"\r
679     File "${SRC_DIR}\comerr32.dll"\r
680     File "${SRC_DIR}\libintl-2.dll"\r
681     File "${SRC_DIR}\libiconv-2.dll"\r
682     File "${SRC_DIR}\krb5_32.dll"\r
683 !endif\r
684     File /oname=$PLUGINSDIR\create_database.cmd ${SRC_DIR}\create_postgresql_database.cmd\r
685     File /oname=$PLUGINSDIR\drop_database.cmd ${SRC_DIR}\drop_postgresql_database.cmd\r
686     File /oname=$PLUGINSDIR\make_tables.cmd ${SRC_DIR}\make_postgresql_tables.cmd\r
687     File ${SRC_DIR}\make_postgresql_tables.sql\r
688     File /oname=$PLUGINSDIR\drop_tables.cmd ${SRC_DIR}\drop_postgresql_tables.cmd\r
689     File ${SRC_DIR}\drop_postgresql_tables.sql\r
690     File /oname=$PLUGINSDIR\grant_privileges.cmd ${SRC_DIR}\grant_postgresql_privileges.cmd\r
691     File ${SRC_DIR}\grant_postgresql_privileges.sql\r
692     File /oname=$PLUGINSDIR\make_catalog_backup.cmd ${SRC_DIR}\make_postgresql_catalog_backup.cmd\r
693   ${ElseIf} $ConfigDirectorDB = 3\r
694     File "${SRC_DIR}\sqlite3.exe"\r
695 !if "${BUILD_TOOLS}" == "VC8"\r
696     File "${SRC_DIR}\sqlite3.exe.manifest"\r
697 !endif\r
698 !If "${BUILD_TOOLS}" == "VC8_DEBUG"\r
699     File "${SRC_DIR}\sqlite3.exe.manifest"\r
700 !endif\r
701     File /oname=bacula_cats.dll "${SRC_DIR}\cats_sqlite3.dll"\r
702     File /oname=$PLUGINSDIR\create_database.cmd ${SRC_DIR}\create_sqlite3_database.cmd\r
703     File /oname=$PLUGINSDIR\drop_database.cmd ${SRC_DIR}\drop_sqlite3_database.cmd\r
704     File /oname=$PLUGINSDIR\make_tables.cmd ${SRC_DIR}\make_sqlite3_tables.cmd\r
705     File ${SRC_DIR}\make_sqlite3_tables.sql\r
706     File /oname=$PLUGINSDIR\drop_tables.cmd ${SRC_DIR}\drop_sqlite3_tables.cmd\r
707     File /oname=$PLUGINSDIR\grant_privileges.cmd ${SRC_DIR}\grant_sqlite3_privileges.cmd\r
708     File /oname=$PLUGINSDIR\make_catalog_backup.cmd ${SRC_DIR}\make_sqlite3_catalog_backup.cmd\r
709   ${EndIf}\r
710 \r
711   File "${SRC_DIR}\bacula-dir.exe"\r
712   File "${SRC_DIR}\dbcheck.exe"\r
713 \r
714   File "/oname=$PLUGINSDIR\delete_catalog_backup.cmd" "${SRC_DIR}\delete_catalog_backup.cmd"\r
715 \r
716   StrCpy $0 "$INSTDIR\bin"\r
717   \r
718   StrCpy $1 create_database.cmd\r
719   Call ConfigEditAndCopy\r
720 \r
721   StrCpy $1 drop_database.cmd\r
722   Call ConfigEditAndCopy\r
723 \r
724   StrCpy $1 make_tables.cmd\r
725   Call ConfigEditAndCopy\r
726 \r
727   StrCpy $1 drop_tables.cmd\r
728   Call ConfigEditAndCopy\r
729 \r
730   StrCpy $1 grant_privileges.cmd\r
731   Call ConfigEditAndCopy\r
732 \r
733   StrCpy $1 make_catalog_backup.cmd\r
734   Call ConfigEditAndCopy\r
735 \r
736   StrCpy $1 delete_catalog_backup.cmd\r
737   Call ConfigEditAndCopy\r
738 \r
739   File "${SRC_DIR}\query.sql"\r
740 \r
741   File "/oname=$PLUGINSDIR\bacula-dir.conf" "bacula-dir.conf.in"\r
742 \r
743   StrCpy $0 "$APPDATA\Bacula"\r
744   StrCpy $1 bacula-dir.conf\r
745   Call ConfigEditAndCopy\r
746 \r
747   StrCpy $0 bacula-dir\r
748   StrCpy $1 "Director Service"\r
749   StrCpy $2 $ConfigDirectorInstallService\r
750   StrCpy $3 $ConfigDirectorStartService\r
751   Call InstallDaemon\r
752 \r
753   CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Director Configuration.lnk" "write.exe" '"$APPDATA\Bacula\bacula-dir.conf"'\r
754 SectionEnd\r
755 \r
756 SectionGroupEnd\r
757 \r
758 SectionGroup "Consoles" SecGroupConsoles\r
759 \r
760 Section "Command Console" SecConsole\r
761   SectionIn 1 2 3\r
762 \r
763   SetOutPath "$INSTDIR\bin"\r
764 \r
765   File "${SRC_DIR}\bconsole.exe"\r
766   Call InstallCommonFiles\r
767 \r
768   ${If} $InstallType = ${MigrateInstall}\r
769   ${AndIf} ${FileExists} "$OldInstallDir\bin\bconsole.conf"\r
770     CopyFiles "$OldInstallDir\bin\bconsole.conf" "$APPDATA\Bacula"\r
771   ${Else}\r
772     File "/oname=$PLUGINSDIR\bconsole.conf" "bconsole.conf.in"\r
773     StrCpy $0 "$APPDATA\Bacula"\r
774     StrCpy $1 bconsole.conf\r
775     Call ConfigEditAndCopy\r
776   ${EndIf}\r
777 \r
778   CreateShortCut "$SMPROGRAMS\Bacula\bconsole.lnk" "$INSTDIR\bin\bconsole.exe" '-c "$APPDATA\Bacula\bconsole.conf"' "$INSTDIR\bin\bconsole.exe" 0\r
779   CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Command Console Configuration.lnk" "write.exe" '"$APPDATA\Bacula\bconsole.conf"'\r
780 \r
781 SectionEnd\r
782 \r
783 Section "Graphical Console" SecWxConsole\r
784   SectionIn 1 2 3\r
785   \r
786   SetOutPath "$INSTDIR\bin"\r
787 \r
788   Call InstallCommonFiles\r
789 !if "${BUILD_TOOLS}" == "VC8"\r
790   File "${SRC_DIR}\wxbase28_vc_bacula.dll"\r
791   File "${SRC_DIR}\wxmsw28_core_vc_bacula.dll"\r
792 !endif\r
793 !If "${BUILD_TOOLS}" == "VC8_DEBUG"\r
794   File "${SRC_DIR}\wxbase28_vc_bacula.dll"\r
795   File "${SRC_DIR}\wxmsw28_core_vc_bacula.dll"\r
796 !endif\r
797 !if "${BUILD_TOOLS}" == "MinGW"\r
798   File "${SRC_DIR}\wxbase28_gcc_bacula.dll"\r
799   File "${SRC_DIR}\wxmsw28_core_gcc_bacula.dll"\r
800 !endif\r
801 \r
802   File "${SRC_DIR}\bwx-console.exe"\r
803 \r
804   ${If} $InstallType = ${MigrateInstall}\r
805   ${AndIf} ${FileExists} "$OldInstallDir\bin\bwx-console.conf"\r
806     CopyFiles "$OldInstallDir\bin\bwx-console.conf" "$APPDATA\Bacula"\r
807   ${Else}\r
808     File "/oname=$PLUGINSDIR\bwx-console.conf" "bwx-console.conf.in"\r
809     StrCpy $0 "$APPDATA\Bacula"\r
810     StrCpy $1 bwx-console.conf\r
811     Call ConfigEditAndCopy\r
812   ${EndIf}\r
813 \r
814   ; Create Start Menu entry\r
815   CreateShortCut "$SMPROGRAMS\Bacula\bwx-console.lnk" "$INSTDIR\bin\bwx-console.exe" '-c "$APPDATA\Bacula\bwx-console.conf"' "$INSTDIR\bin\bwx-console.exe" 0\r
816   CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Graphical Console Configuration.lnk" "write.exe" '"$APPDATA\Bacula\bwx-console.conf"'\r
817 SectionEnd\r
818 \r
819 SectionGroupEnd\r
820 \r
821 SectionGroup "Documentation" SecGroupDocumentation\r
822 \r
823 Section "Documentation (Acrobat Format)" SecDocPdf\r
824   SectionIn 1 2 3\r
825 \r
826   SetOutPath "$INSTDIR\doc"\r
827   CreateDirectory "$INSTDIR\doc"\r
828 \r
829   File "${SRC_DIR}\manual\bacula.pdf"\r
830   CreateShortCut "$SMPROGRAMS\Bacula\Documentation\Manual.lnk" '"$INSTDIR\doc\bacula.pdf"'\r
831 SectionEnd\r
832 \r
833 Section "Documentation (HTML Format)" SecDocHtml\r
834   SectionIn 3\r
835 \r
836   SetOutPath "$INSTDIR\doc"\r
837   CreateDirectory "$INSTDIR\doc"\r
838 \r
839   File "${SRC_DIR}\manual\bacula\*.html"\r
840   File "${SRC_DIR}\manual\bacula\*.png"\r
841   File "${SRC_DIR}\manual\bacula\*.css"\r
842   CreateShortCut "$SMPROGRAMS\Bacula\Documentation\Manual (HTML).lnk" '"$INSTDIR\doc\index.html"'\r
843 SectionEnd\r
844 \r
845 SectionGroupEnd\r
846 \r
847 Section "-Finish"\r
848   Push $R0\r
849 \r
850   ${If} $OsIsNT = 1\r
851     nsExec::ExecToLog 'cmd.exe /C echo Y|cacls "$INSTDIR" /T /G SYSTEM:F Administrators:F'\r
852     nsExec::ExecToLog 'cmd.exe /C echo Y|cacls "$APPDATA\Bacula" /T /G SYSTEM:F Administrators:F'\r
853   ${EndIf}\r
854 \r
855   ; Write the uninstall keys for Windows & create Start Menu entry\r
856   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "DisplayName" "Bacula"\r
857   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "InstallLocation" "$INSTDIR"\r
858   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "DisplayVersion" "${VERSION}"\r
859   ${StrTok} $R0 "${VERSION}" "." 0 0\r
860   WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "VersionMajor" $R0\r
861   ${StrTok} $R0 "${VERSION}" "." 1 0\r
862   WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "VersionMinor" $R0\r
863   WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "NoModify" 1\r
864   WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "NoRepair" 1\r
865   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "URLUpdateInfo" "http://sourceforge.net/project/showfiles.php?group_id=50727"\r
866   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "URLInfoAbout" "http://www.bacula.org"\r
867   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "HelpLink" "http://www.bacula.org/?page=support"\r
868   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "UninstallString" '"$INSTDIR\uninstall.exe"'\r
869   WriteUninstaller "$INSTDIR\Uninstall.exe"\r
870   CreateShortCut "$SMPROGRAMS\Bacula\Uninstall Bacula.lnk" "$INSTDIR\Uninstall.exe" "" "$INSTDIR\Uninstall.exe" 0\r
871   Pop $R0\r
872 SectionEnd\r
873 \r
874 ; Extra Page descriptions\r
875 \r
876 LangString DESC_SecFileDaemon ${LANG_ENGLISH} "Install Bacula File Daemon on this system."\r
877 LangString DESC_SecStorageDaemon ${LANG_ENGLISH} "Install Bacula Storage Daemon on this system."\r
878 LangString DESC_SecDirectorDaemon ${LANG_ENGLISH} "Install Bacula Director Daemon on this system."\r
879 LangString DESC_SecConsole ${LANG_ENGLISH} "Install command console program on this system."\r
880 LangString DESC_SecWxConsole ${LANG_ENGLISH} "Install graphical console program on this system."\r
881 LangString DESC_SecDocPdf ${LANG_ENGLISH} "Install documentation in Acrobat format on this system."\r
882 LangString DESC_SecDocHtml ${LANG_ENGLISH} "Install documentation in HTML format on this system."\r
883 \r
884 LangString TITLE_ConfigPage1 ${LANG_ENGLISH} "Configuration"\r
885 LangString SUBTITLE_ConfigPage1 ${LANG_ENGLISH} "Set installation configuration."\r
886 \r
887 LangString TITLE_ConfigPage2 ${LANG_ENGLISH} "Configuration (continued)"\r
888 LangString SUBTITLE_ConfigPage2 ${LANG_ENGLISH} "Set installation configuration."\r
889 \r
890 LangString TITLE_InstallType ${LANG_ENGLISH} "Installation Type"\r
891 LangString SUBTITLE_InstallType ${LANG_ENGLISH} "Choose installation type."\r
892 \r
893 LangString TITLE_WriteTemplates ${LANG_ENGLISH} "Create Templates"\r
894 LangString SUBTITLE_WriteTemplates ${LANG_ENGLISH} "Create resource templates for inclusion in the Director's configuration file."\r
895 \r
896 !InsertMacro MUI_FUNCTION_DESCRIPTION_BEGIN\r
897   !InsertMacro MUI_DESCRIPTION_TEXT ${SecFileDaemon} $(DESC_SecFileDaemon)\r
898   !InsertMacro MUI_DESCRIPTION_TEXT ${SecStorageDaemon} $(DESC_SecStorageDaemon)\r
899   !InsertMacro MUI_DESCRIPTION_TEXT ${SecDirectorDaemon} $(DESC_SecDirectorDaemon)\r
900   !InsertMacro MUI_DESCRIPTION_TEXT ${SecConsole} $(DESC_SecConsole)\r
901   !InsertMacro MUI_DESCRIPTION_TEXT ${SecWxConsole} $(DESC_SecWxConsole)\r
902   !InsertMacro MUI_DESCRIPTION_TEXT ${SecDocPdf} $(DESC_SecDocPdf)\r
903   !InsertMacro MUI_DESCRIPTION_TEXT ${SecDocHtml} $(DESC_SecDocHtml)\r
904 !InsertMacro MUI_FUNCTION_DESCRIPTION_END\r
905 \r
906 ; Uninstall section\r
907 \r
908 UninstallText "This will uninstall Bacula. Hit next to continue."\r
909 \r
910 Section "Uninstall"\r
911   ; Shutdown any baculum that could be running\r
912   nsExec::ExecToLog '"$INSTDIR\bin\bacula-fd.exe" /kill'\r
913   nsExec::ExecToLog '"$INSTDIR\bin\bacula-sd.exe" /kill'\r
914   nsExec::ExecToLog '"$INSTDIR\bin\bacula-dir.exe" /kill'\r
915   Sleep 3000\r
916 \r
917   ReadRegDWORD $R0 HKLM "Software\Bacula" "Service_Bacula-fd"\r
918   ${If} $R0 = 1\r
919     ; Remove bacula service\r
920     nsExec::ExecToLog '"$INSTDIR\bin\bacula-fd.exe" /remove'\r
921   ${EndIf}\r
922   \r
923   ReadRegDWORD $R0 HKLM "Software\Bacula" "Service_Bacula-sd"\r
924   ${If} $R0 = 1\r
925     ; Remove bacula service\r
926     nsExec::ExecToLog '"$INSTDIR\bin\bacula-sd.exe" /remove'\r
927   ${EndIf}\r
928   \r
929   ReadRegDWORD $R0 HKLM "Software\Bacula" "Service_Bacula-dir"\r
930   ${If} $R0 = 1\r
931     ; Remove bacula service\r
932     nsExec::ExecToLog '"$INSTDIR\bin\bacula-dir.exe" /remove'\r
933   ${EndIf}\r
934   \r
935   ; remove registry keys\r
936   DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula"\r
937   DeleteRegKey HKLM "Software\Bacula"\r
938 \r
939   ; remove start menu items\r
940   SetShellVarContext all\r
941   Delete /REBOOTOK "$SMPROGRAMS\Bacula\*"\r
942   RMDir "$SMPROGRAMS\Bacula"\r
943 \r
944   ; remove files and uninstaller (preserving config for now)\r
945   Delete /REBOOTOK "$INSTDIR\bin\*"\r
946   Delete /REBOOTOK "$INSTDIR\doc\*"\r
947   Delete /REBOOTOK "$INSTDIR\*"\r
948 \r
949   ; Check for existing installation\r
950   MessageBox MB_YESNO|MB_ICONQUESTION \\r
951   "Would you like to delete the current configuration files and the working state file?" IDNO NoDel\r
952     Delete /REBOOTOK "$APPDATA\Bacula\*"\r
953     Delete /REBOOTOK "$APPDATA\Bacula\Work\*"\r
954     Delete /REBOOTOK "$APPDATA\Bacula\Spool\*"\r
955     Delete /REBOOTOK "$PLUGINSDIR\bacula-*.conf"\r
956     Delete /REBOOTOK "$PLUGINSDIR\*console.conf"\r
957     Delete /REBOOTOK "$PLUGINSDIR\*conf.in"\r
958     Delete /REBOOTOK "$PLUGINSDIR\openssl.exe"\r
959     Delete /REBOOTOK "$PLUGINSDIR\libeay32.dll"\r
960     Delete /REBOOTOK "$PLUGINSDIR\ssleay32.dll"\r
961     Delete /REBOOTOK "$PLUGINSDIR\sed.exe"    \r
962     Delete /REBOOTOK "$PLUGINSDIR\pw.txt"     \r
963     Delete /REBOOTOK "$PLUGINSDIR\*.sed" \r
964     Delete /REBOOTOK "$PLUGINSDIR\*.cmd"    \r
965     Delete /REBOOTOK "$PLUGINSDIR\*.sql"    \r
966     RMDir "$APPDATA\Bacula\Work"\r
967     RMDir "$APPDATA\Bacula\Spool"\r
968     RMDir "$APPDATA\Bacula"\r
969 NoDel:\r
970 \r
971   ; remove directories used\r
972   RMDir "$INSTDIR\bin"\r
973   RMDir "$INSTDIR\doc"\r
974   RMDir "$INSTDIR"\r
975 SectionEnd\r
976 \r
977 ;\r
978 ; $0 - Service Name (ie Bacula-FD)\r
979 ; $1 - Service Description (ie Bacula File Daemon)\r
980 ; $2 - Install as Service\r
981 ; $3 - Start Service now\r
982 ;\r
983 Function InstallDaemon\r
984   Call InstallCommonFiles\r
985 \r
986   WriteRegDWORD HKLM "Software\Bacula" "Service_$0" $2\r
987   \r
988   ${If} $2 = 1\r
989     nsExec::ExecToLog '"$INSTDIR\bin\$0.exe" /install -c "$APPDATA\Bacula\$0.conf"'\r
990 \r
991     ${If} $OsIsNT <> 1\r
992       File "Start.bat"\r
993       File "Stop.bat"\r
994     ${EndIf}\r
995 \r
996     ; Start the service?\r
997 \r
998     ${If} $3 = 1  \r
999       ${If} $OsIsNT = 1\r
1000         nsExec::ExecToLog 'net start $0'\r
1001       ${Else}\r
1002         Exec '"$INSTDIR\bin\$0.exe" -c "$APPDATA\Bacula\$0.conf"'\r
1003       ${EndIf}\r
1004     ${EndIf}\r
1005   ${Else}\r
1006     CreateShortCut "$SMPROGRAMS\Bacula\Start $1.lnk" "$INSTDIR\bin\$0.exe" '-c "$APPDATA\Bacula\$0.conf"' "$INSTDIR\bin\$0.exe" 0\r
1007   ${EndIf}\r
1008 FunctionEnd\r
1009 \r
1010 Function GetComputerName\r
1011   Push $R0\r
1012   Push $R1\r
1013   Push $R2\r
1014 \r
1015   System::Call "kernel32::GetComputerNameA(t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2"\r
1016 \r
1017   ${StrCase} $R0 $R0 "L"\r
1018 \r
1019   Pop $R2\r
1020   Pop $R1\r
1021   Exch $R0\r
1022 FunctionEnd\r
1023 \r
1024 !define ComputerNameDnsFullyQualified   3\r
1025 \r
1026 Function GetHostName\r
1027   Push $R0\r
1028   Push $R1\r
1029   Push $R2\r
1030 \r
1031   ${If} $OsIsNT = 1\r
1032     System::Call "kernel32::GetComputerNameExA(i ${ComputerNameDnsFullyQualified}, t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2 ?e"\r
1033     ${If} $R2 = 0\r
1034       Pop $R2\r
1035       DetailPrint "GetComputerNameExA failed - LastError = $R2"\r
1036       Call GetComputerName\r
1037       Pop $R0\r
1038     ${Else}\r
1039       Pop $R2\r
1040     ${EndIf}\r
1041   ${Else}\r
1042     Call GetComputerName\r
1043     Pop $R0\r
1044   ${EndIf}\r
1045 \r
1046   Pop $R2\r
1047   Pop $R1\r
1048   Exch $R0\r
1049 FunctionEnd\r
1050 \r
1051 !define NameUserPrincipal 8\r
1052 \r
1053 Function GetUserName\r
1054   Push $R0\r
1055   Push $R1\r
1056   Push $R2\r
1057 \r
1058   ${If} $OsIsNT = 1\r
1059     System::Call "secur32::GetUserNameExA(i ${NameUserPrincipal}, t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2 ?e"\r
1060     ${If} $R2 = 0\r
1061       Pop $R2\r
1062       DetailPrint "GetUserNameExA failed - LastError = $R2"\r
1063       Pop $R0\r
1064       StrCpy $R0 ""\r
1065     ${Else}\r
1066       Pop $R2\r
1067     ${EndIf}\r
1068   ${Else}\r
1069       StrCpy $R0 ""\r
1070   ${EndIf}\r
1071 \r
1072   ${If} $R0 == ""\r
1073     System::Call "advapi32::GetUserNameA(t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2 ?e"\r
1074     ${If} $R2 = 0\r
1075       Pop $R2\r
1076       DetailPrint "GetUserNameA failed - LastError = $R2"\r
1077       StrCpy $R0 ""\r
1078     ${Else}\r
1079       Pop $R2\r
1080     ${EndIf}\r
1081   ${EndIf}\r
1082 \r
1083   Pop $R2\r
1084   Pop $R1\r
1085   Exch $R0\r
1086 FunctionEnd\r
1087 \r
1088 Function ConfigEditAndCopy\r
1089   Push $R1\r
1090 \r
1091   ${If} ${FileExists} "$0\$1"\r
1092     StrCpy $R1 ".new"\r
1093   ${Else}\r
1094     StrCpy $R1 ""\r
1095   ${EndIf}\r
1096 \r
1097   nsExec::ExecToLog '$PLUGINSDIR\sed.exe -f "$PLUGINSDIR\config.sed" -i.bak "$PLUGINSDIR\$1"'\r
1098   CopyFiles "$PLUGINSDIR\$1" "$0\$1$R1"\r
1099 \r
1100   Pop $R1\r
1101 FunctionEnd\r
1102 \r
1103 Function FindDatabaseApps\r
1104   Push $R1\r
1105 \r
1106   ReadRegStr $0 HKLM "Software\MySQL AB\MySQL Server 5.0" "Location"\r
1107 \r
1108   ${If} $0 != ""\r
1109     Call RemoveTrailingSlash\r
1110     StrCpy $MySQLPath $0\r
1111     ReadRegStr $0 HKLM "Software\MySQL AB\MySQL Server 5.0" "Version"\r
1112     StrCpy $MySQLVersion $0\r
1113   ${EndIf}\r
1114 \r
1115   EnumRegKey $R1 HKLM "Software\PostgreSQL\Installations" 0\r
1116   ${If} $R1 != ""\r
1117     ReadRegStr $0 HKLM "Software\PostgreSQL\Installations\$R1" "Base Directory"\r
1118     Call RemoveTrailingSlash\r
1119     StrCpy $PostgreSQLPath $0\r
1120     ReadRegStr $0 HKLM "Software\PostgreSQL\Installations\$R1" "Version"\r
1121     StrCpy $PostgreSQLVersion $0\r
1122   ${EndIf}\r
1123 \r
1124   Pop $R1\r
1125 FunctionEnd\r
1126 \r
1127 Function RemoveTrailingSlash\r
1128   Push $R1\r
1129   StrCpy $R1 $0 "" -1\r
1130   ${If} $R1 == "\"\r
1131     StrCpy $0 $0 -1\r
1132   ${EndIf}\r
1133   Pop $R1\r
1134 FunctionEnd\r
1135 \r
1136 Function IsDirectorSelected\r
1137   Push $R0\r
1138   SectionGetFlags ${SecDirectorDaemon} $R0\r
1139   IntOp $R0 $R0 & ${SF_SELECTED}\r
1140   Exch $R0\r
1141 FunctionEnd\r
1142 \r
1143 Function GetSelectedComponents\r
1144   Push $R0\r
1145   StrCpy $R0 0\r
1146   ${If} ${SectionIsSelected} ${SecFileDaemon}\r
1147     IntOp $R0 $R0 | ${ComponentFile}\r
1148   ${EndIf}\r
1149   ${If} ${SectionIsSelected} ${SecStorageDaemon}\r
1150     IntOp $R0 $R0 | ${ComponentStorage}\r
1151   ${EndIf}\r
1152   ${If} ${SectionIsSelected} ${SecDirectorDaemon}\r
1153     IntOp $R0 $R0 | ${ComponentDirector}\r
1154   ${EndIf}\r
1155   ${If} ${SectionIsSelected} ${SecConsole}\r
1156     IntOp $R0 $R0 | ${ComponentTextConsole}\r
1157   ${EndIf}\r
1158   ${If} ${SectionIsSelected} ${SecWxConsole}\r
1159     IntOp $R0 $R0 | ${ComponentGUIConsole}\r
1160   ${EndIf}\r
1161   ${If} ${SectionIsSelected} ${SecDocPdf}\r
1162     IntOp $R0 $R0 | ${ComponentPDFDocs}\r
1163   ${EndIf}\r
1164   ${If} ${SectionIsSelected} ${SecDocHtml}\r
1165     IntOp $R0 $R0 | ${ComponentHTMLDocs}\r
1166   ${EndIf}\r
1167   Exch $R0\r
1168 FunctionEnd\r
1169 \r
1170 Function PageComponentsShow\r
1171   ${If} $OsIsNT <> 1\r
1172     Call DisableServerSections\r
1173   ${EndIf}\r
1174 \r
1175   Call SelectPreviousComponents\r
1176   Call UpdateComponentUI\r
1177 FunctionEnd\r
1178 \r
1179 Function PageDirectoryPre\r
1180   ${If} $AutomaticInstall = 1\r
1181   ${OrIf} $InstallType = ${UpgradeInstall}\r
1182     Abort\r
1183   ${EndIf}\r
1184 FunctionEnd\r
1185 \r
1186 Function LeaveInstallPage\r
1187   Push "$INSTDIR\install.log"\r
1188   Call DumpLog\r
1189 FunctionEnd\r
1190 \r
1191 Function EnterWriteTemplates\r
1192   Push $R0\r
1193   Push $R1\r
1194 \r
1195   Call GetSelectedComponents\r
1196   Pop $R0\r
1197 \r
1198   IntOp $R0 $R0 & ${ComponentDirector}\r
1199   IntOp $R1 $NewComponents & ${ComponentsFileAndStorage}\r
1200 \r
1201   ${If} $R0 <> 0\r
1202   ${OrIf} $R1 = 0\r
1203     Pop $R1\r
1204     Pop $R0\r
1205     Abort\r
1206   ${EndIf}\r
1207 \r
1208   IntOp $R0 $NewComponents & ${ComponentFile}\r
1209   ${If} $R0 = 0\r
1210     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" State 0\r
1211     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" Flags DISABLED\r
1212     DeleteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 3" State\r
1213     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 3" Flags REQ_SAVE|FILE_EXPLORER|WARN_IF_EXIST|DISABLED\r
1214   ${Else}\r
1215     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" State 1\r
1216     DeleteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" Flags\r
1217     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 3" State "C:\$ConfigClientName.conf"\r
1218     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 5" Flags REQ_SAVE|FILE_EXPLORER|WARN_IF_EXIST\r
1219   ${EndIf}\r
1220 \r
1221   IntOp $R0 $NewComponents & ${ComponentStorage}\r
1222   ${If} $R0 = 0\r
1223     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 4" State 0\r
1224     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 4" Flags DISABLED\r
1225     DeleteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 5" State\r
1226     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 5" Flags REQ_SAVE|FILE_EXPLORER|WARN_IF_EXIST|DISABLED\r
1227   ${Else}\r
1228     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 4" State 1\r
1229     DeleteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 4" Flags\r
1230     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 5" State "C:\$ConfigStorageName.conf"\r
1231     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 5" Flags REQ_SAVE|FILE_EXPLORER|WARN_IF_EXIST\r
1232   ${EndIf}\r
1233 \r
1234   !InsertMacro MUI_HEADER_TEXT "$(TITLE_WriteTemplates)" "$(SUBTITLE_WriteTemplates)"\r
1235   !InsertMacro MUI_INSTALLOPTIONS_DISPLAY "WriteTemplates.ini"\r
1236 \r
1237   !InsertMacro MUI_INSTALLOPTIONS_READ $R0 "WriteTemplates.ini" "Field 2" State\r
1238   ${If} $R0 <> 0\r
1239     File "/oname=$PLUGINSDIR\client.conf.in" "client.conf.in"\r
1240 \r
1241     nsExec::ExecToLog '$PLUGINSDIR\sed.exe -f "$PLUGINSDIR\config.sed" -i.bak "$PLUGINSDIR\client.conf.in"'\r
1242     !InsertMacro MUI_INSTALLOPTIONS_READ $R0 "WriteTemplates.ini" "Field 3" State\r
1243     ${If} $R0 != ""\r
1244       CopyFiles "$PLUGINSDIR\client.conf.in" "$R0"\r
1245     ${EndIf}\r
1246   ${EndIf}\r
1247 \r
1248   !InsertMacro MUI_INSTALLOPTIONS_READ $R0 "WriteTemplates.ini" "Field 4" State\r
1249   ${If} $R0 <> 0\r
1250     File "/oname=$PLUGINSDIR\storage.conf.in" "storage.conf.in"\r
1251 \r
1252     nsExec::ExecToLog '$PLUGINSDIR\sed.exe -f "$PLUGINSDIR\config.sed" -i.bak "$PLUGINSDIR\storage.conf.in"'\r
1253     !InsertMacro MUI_INSTALLOPTIONS_READ $R0 "WriteTemplates.ini" "Field 5" State\r
1254     ${If} $R0 != ""\r
1255       CopyFiles "$PLUGINSDIR\storage.conf.in" "$R0"\r
1256     ${EndIf}\r
1257   ${EndIf}\r
1258 \r
1259   Pop $R1\r
1260   Pop $R0\r
1261 FunctionEnd\r
1262 \r
1263 Function SelectPreviousComponents\r
1264   ${If} $InstallType <> ${NewInstall}\r
1265     IntOp $R1 $PreviousComponents & ${ComponentFile}\r
1266     ${If} $R1 <> 0\r
1267       !InsertMacro SelectSection ${SecFileDaemon}\r
1268       !InsertMacro SetSectionFlag ${SecFileDaemon} ${SF_RO}\r
1269     ${Else}\r
1270       !InsertMacro UnselectSection ${SecFileDaemon}\r
1271       !InsertMacro ClearSectionFlag ${SecFileDaemon} ${SF_RO}\r
1272     ${EndIf}\r
1273     IntOp $R1 $PreviousComponents & ${ComponentStorage}\r
1274     ${If} $R1 <> 0\r
1275       !InsertMacro SelectSection ${SecStorageDaemon}\r
1276       !InsertMacro SetSectionFlag ${SecStorageDaemon} ${SF_RO}\r
1277     ${Else}\r
1278       !InsertMacro UnselectSection ${SecStorageDaemon}\r
1279       !InsertMacro ClearSectionFlag ${SecStorageDaemon} ${SF_RO}\r
1280     ${EndIf}\r
1281     IntOp $R1 $PreviousComponents & ${ComponentDirector}\r
1282     ${If} $R1 <> 0\r
1283       !InsertMacro SelectSection ${SecDirectorDaemon}\r
1284       !InsertMacro SetSectionFlag ${SecDirectorDaemon} ${SF_RO}\r
1285     ${Else}\r
1286       !InsertMacro UnselectSection ${SecDirectorDaemon}\r
1287       !InsertMacro ClearSectionFlag ${SecDirectorDaemon} ${SF_RO}\r
1288     ${EndIf}\r
1289     IntOp $R1 $PreviousComponents & ${ComponentTextConsole}\r
1290     ${If} $R1 <> 0\r
1291       !InsertMacro SelectSection ${SecConsole}\r
1292       !InsertMacro SetSectionFlag ${SecConsole} ${SF_RO}\r
1293     ${Else}\r
1294       !InsertMacro UnselectSection ${SecConsole}\r
1295       !InsertMacro ClearSectionFlag ${SecConsole} ${SF_RO}\r
1296     ${EndIf}\r
1297     IntOp $R1 $PreviousComponents & ${ComponentGUIConsole}\r
1298     ${If} $R1 <> 0\r
1299       !InsertMacro SelectSection ${SecWxConsole}\r
1300       !InsertMacro SetSectionFlag ${SecWxConsole} ${SF_RO}\r
1301     ${Else}\r
1302       !InsertMacro UnselectSection ${SecWxConsole}\r
1303       !InsertMacro ClearSectionFlag ${SecWxConsole} ${SF_RO}\r
1304     ${EndIf}\r
1305     IntOp $R1 $PreviousComponents & ${ComponentPDFDocs}\r
1306     ${If} $R1 <> 0\r
1307       !InsertMacro SelectSection ${SecDocPdf}\r
1308       !InsertMacro SetSectionFlag ${SecDocPdf} ${SF_RO}\r
1309     ${Else}\r
1310       !InsertMacro UnselectSection ${SecDocPdf}\r
1311       !InsertMacro ClearSectionFlag ${SecDocPdf} ${SF_RO}\r
1312     ${EndIf}\r
1313     IntOp $R1 $PreviousComponents & ${ComponentHTMLDocs}\r
1314     ${If} $R1 <> 0\r
1315       !InsertMacro SelectSection ${SecDocHtml}\r
1316       !InsertMacro SetSectionFlag ${SecDocHtml} ${SF_RO}\r
1317     ${Else}\r
1318       !InsertMacro UnselectSection ${SecDocHtml}\r
1319       !InsertMacro ClearSectionFlag ${SecDocHtml} ${SF_RO}\r
1320     ${EndIf}\r
1321   ${EndIf}\r
1322 FunctionEnd\r
1323 \r
1324 Function DisableServerSections\r
1325   !InsertMacro UnselectSection ${SecGroupServer}\r
1326   !InsertMacro SetSectionFlag  ${SecGroupServer} ${SF_RO}\r
1327   !InsertMacro UnselectSection ${SecStorageDaemon}\r
1328   !InsertMacro SetSectionFlag  ${SecStorageDaemon} ${SF_RO}\r
1329   !InsertMacro UnselectSection ${SecDirectorDaemon}\r
1330   !InsertMacro SetSectionFlag  ${SecDirectorDaemon} ${SF_RO}\r
1331 FunctionEnd\r
1332 \r
1333 Function UpdateComponentUI\r
1334   Push $R0\r
1335   Push $R1\r
1336 \r
1337   Call GetSelectedComponents\r
1338   Pop $R0\r
1339 \r
1340   IntOp $R1 $R0 ^ $PreviousComponents\r
1341   IntOp $NewComponents $R0 & $R1\r
1342 \r
1343   ${If} $InstallType <> ${NewInstall}\r
1344     IntOp $R1 $NewComponents & ${ComponentFile}\r
1345     ${If} $R1 <> 0\r
1346       !InsertMacro SetSectionFlag ${SecFileDaemon} ${SF_BOLD}\r
1347     ${Else}\r
1348       !InsertMacro ClearSectionFlag ${SecFileDaemon} ${SF_BOLD}\r
1349     ${EndIf}\r
1350     IntOp $R1 $NewComponents & ${ComponentStorage}\r
1351     ${If} $R1 <> 0\r
1352       !InsertMacro SetSectionFlag ${SecStorageDaemon} ${SF_BOLD}\r
1353     ${Else}\r
1354       !InsertMacro ClearSectionFlag ${SecStorageDaemon} ${SF_BOLD}\r
1355     ${EndIf}\r
1356     IntOp $R1 $NewComponents & ${ComponentDirector}\r
1357     ${If} $R1 <> 0\r
1358       !InsertMacro SetSectionFlag ${SecDirectorDaemon} ${SF_BOLD}\r
1359     ${Else}\r
1360       !InsertMacro ClearSectionFlag ${SecDirectorDaemon} ${SF_BOLD}\r
1361     ${EndIf}\r
1362     IntOp $R1 $NewComponents & ${ComponentTextConsole}\r
1363     ${If} $R1 <> 0\r
1364       !InsertMacro SetSectionFlag ${SecConsole} ${SF_BOLD}\r
1365     ${Else}\r
1366       !InsertMacro ClearSectionFlag ${SecConsole} ${SF_BOLD}\r
1367     ${EndIf}\r
1368     IntOp $R1 $NewComponents & ${ComponentGUIConsole}\r
1369     ${If} $R1 <> 0\r
1370       !InsertMacro SetSectionFlag ${SecWxConsole} ${SF_BOLD}\r
1371     ${Else}\r
1372       !InsertMacro ClearSectionFlag ${SecWxConsole} ${SF_BOLD}\r
1373     ${EndIf}\r
1374     IntOp $R1 $NewComponents & ${ComponentPDFDocs}\r
1375     ${If} $R1 <> 0\r
1376       !InsertMacro SetSectionFlag ${SecDocPdf} ${SF_BOLD}\r
1377     ${Else}\r
1378       !InsertMacro ClearSectionFlag ${SecDocPdf} ${SF_BOLD}\r
1379     ${EndIf}\r
1380     IntOp $R1 $NewComponents & ${ComponentHTMLDocs}\r
1381     ${If} $R1 <> 0\r
1382       !InsertMacro SetSectionFlag ${SecDocHtml} ${SF_BOLD}\r
1383     ${Else}\r
1384       !InsertMacro ClearSectionFlag ${SecDocHtml} ${SF_BOLD}\r
1385     ${EndIf}\r
1386   ${EndIf}\r
1387 \r
1388   GetDlgItem $R0 $HWNDPARENT 1\r
1389 \r
1390   IntOp $R1 $NewComponents & ${ComponentsRequiringUserConfig}\r
1391   ${If} $R1 = 0\r
1392     SendMessage $R0 ${WM_SETTEXT} 0 "STR:Install"\r
1393   ${Else}\r
1394     SendMessage $R0 ${WM_SETTEXT} 0 "STR:&Next >"\r
1395   ${EndIf}\r
1396 \r
1397   Pop $R1\r
1398   Pop $R0\r
1399 FunctionEnd\r
1400 \r
1401 !include "InstallType.nsh"\r
1402 !include "ConfigPage1.nsh"\r
1403 !include "ConfigPage2.nsh"\r
1404 !include "DumpLog.nsh"\r