Fix bug 11639 : unistall removed ALL scilab registry information.
[scilab.git] / scilab / tools / innosetup / code.iss
1 //
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) DIGITEO - 2010-2012 - Allan CORNET
4 //
5 // This file must be used under the terms of the CeCILL.
6 // This source file is licensed as described in the file COPYING, which
7 // you should have received as part of this distribution.  The terms
8 // are also available at
9 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10 //
11 //------------------------------------------------------------------------------
12 // Inno Setup Script (5.3 and more) for Scilab (UNICODE version required)
13 //
14 //------------------------------------------------------------------------------
15
16 function IsProcessorFeaturePresent(ProcessorFeature: DWORD): Boolean;
17 external 'IsProcessorFeaturePresent@kernel32.dll stdcall';
18
19 function GetModuleHandle(lpModuleName: LongInt): LongInt;
20 external 'GetModuleHandleA@kernel32.dll stdcall';
21
22 var
23     AboutModulesButton: TButton;
24 //------------------------------------------------------------------------------
25 function isCLIType(): Boolean;
26   begin
27     Result := true;
28     if (IsComponentSelected( ExpandConstant('{#COMPN_JVM_MODULE}'))) then
29       begin
30         Result := false;
31       end;
32   end;
33 //------------------------------------------------------------------------------
34 function getExecNameForDesktop(Param: String): String;
35   begin
36     if (isCLIType() = true) then
37       begin
38         Result := ExpandConstant('{app}') + '\bin\scilex.exe';
39       end
40     else
41       begin
42         Result := ExpandConstant('{app}') + '\bin\wscilex.exe';
43       end;
44   end;
45 //------------------------------------------------------------------------------
46 function DoTaskInstall_MKL: Boolean;
47   begin
48     Result := true;
49     if (IsComponentSelected( ExpandConstant('{#COMPN_MKL_CPU_LIBRARY}') ) = true) then
50       begin
51         Result := Install_commons_MKL();
52         if (Result = true) then
53           begin
54             Result := Install_MKL();
55           end
56       end;
57   end;
58 //------------------------------------------------------------------------------
59 function DoTaskInstall_MKL_FFTW: Boolean;
60   begin
61     Result := true;
62     if (IsComponentSelected( ExpandConstant('{#COMPN_FFTW_MKL_LIBRARY}') ) = true) then
63       begin
64         Result := Install_MKL_FFTW();
65       end;
66   end;
67 //------------------------------------------------------------------------------
68 function DoTaskInstall_CHM: Boolean;
69   begin
70     Result := true;
71     if (IsComponentSelected( ExpandConstant('{#COMPN_CHM}') ) = true) then
72       begin
73         Result := Install_CHM();
74       end;
75   end;
76 //------------------------------------------------------------------------------
77 function DoTasksJustAfterInstall: Boolean;
78   begin
79     Result := true;
80     Result := CreateModulesFile();
81     Result := DoTaskInstall_MKL();
82     Result := DoTaskInstall_MKL_FFTW();
83     Result := DoTaskInstall_CHM();
84   end;
85 //------------------------------------------------------------------------------
86 function GetJREVersion(): String;
87 begin
88     Result := '';
89
90     if Is64BitInstallMode() or not IsWin64() then
91     begin
92         //64 bits installation or 32 bits OS -> same registry path
93         RegQueryStringValue( HKLM, 'SOFTWARE\JavaSoft\Java Runtime Environment', 'CurrentVersion', Result );
94     end else begin
95         // Scilab 32 bits sur Windows 64 bits
96         RegQueryStringValue( HKLM, 'SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment', 'CurrentVersion', Result );
97     end
98 end;
99 //------------------------------------------------------------------------------
100  function CheckJREVersion(): Boolean;
101   var
102     jreVersion:  String;
103     minJREVersionRegistry:  String;
104   begin
105     //
106     // Initialize min java version constant
107     //
108     minJREVersionRegistry := ExpandConstant('{#javaSpecificationVersion}');
109     //
110     // now we check the version of the installed JRE
111     //
112     jreVersion := GetJREVersion();
113     if ( jreVersion = '' ) then begin
114       Result := false;
115     end else if ( jreVersion < minJREVersionRegistry ) then begin
116       Result := false;
117     end else begin
118       Result := true;
119     end;
120   end;
121 //------------------------------------------------------------------------------
122  function VerifyJREVersion() : Boolean;
123   var
124     bJREVersion: Boolean;
125   begin
126     bJREVersion := CheckJREVersion();
127
128     if ( bJREVersion <> true ) then begin
129         SuppressibleMsgBox( CustomMessage('MsgBoxJavaDetection1') + #13 +
130           CustomMessage('MsgBoxJavaDetection2') + ExpandConstant('{#javaSpecificationVersion}') + '.',
131           mbError, MB_OK, MB_OK );
132     end;
133
134     Result := bJREVersion;
135   end;
136 //------------------------------------------------------------------------------
137 procedure ButtonAboutModulesOnClick(Sender: TObject);
138 var
139   ErrorCode: Integer;
140
141 begin
142     if not ShellExec('', ExpandConstant('{#MODULES_LIST_WEB_PAGE}'),
143              '', '', SW_SHOW, ewNoWait, ErrorCode) then
144     begin
145       // handle failure if necessary
146       SuppressibleMsgBox( CustomMessage('MsgBoxWebOpen'),mbError, MB_OK, MB_OK );
147     end;
148 end;
149 //------------------------------------------------------------------------------
150  function BackButtonClick(CurPageID: Integer): Boolean;
151   begin
152     Result := true;
153     if (CurPageId = wpSelectProgramGroup) then
154       begin
155         AboutModulesButton.Visible := true;
156       end else begin
157         AboutModulesButton.Visible := false;
158       end;
159   end;
160 //------------------------------------------------------------------------------
161 function NextButtonClick_Download_MKL(): Boolean;
162   Var
163     bRes : Boolean;
164   begin
165     Result := true;
166     if (IsComponentSelected( ExpandConstant('{#COMPN_MKL_CPU_LIBRARY}') ) = true) then
167       begin
168         bRes := Download_commons_MKL();
169         if ( bRes = true ) then
170           begin
171             bRes := Download_MKL();
172           end;
173       end;
174   end;
175 //------------------------------------------------------------------------------
176 function NextButtonClick_Download_MKL_FFTW(): Boolean;
177   Var
178     bRes : Boolean;
179   begin
180     Result := true;
181     if (IsComponentSelected( ExpandConstant('{#COMPN_FFTW_MKL_LIBRARY}') ) = true) then
182       begin
183         bRes := Download_MKL_FFTW();
184       end;
185   end;
186 //------------------------------------------------------------------------------
187 function NextButtonClick_Download_CHM(): Boolean;
188   Var
189     bRes : Boolean;
190   begin
191     Result := true;
192     if (IsComponentSelected( ExpandConstant('{#COMPN_CHM}') ) = true) then
193       begin
194         bRes := Download_CHM();
195       end;
196   end;
197 //------------------------------------------------------------------------------
198 function NextButtonClick(CurPageID: Integer): Boolean;
199   Var
200     bRes : Boolean;
201
202   begin
203     Result := true;
204
205     if (CurPageID = wpWelcome) then
206       begin
207         if (Is64BitInstallMode() = false) then
208           begin
209             if IsWin64() then
210               begin
211                 SuppressibleMsgBox(CustomMessage('MsgBoxX64Ready'), mbInformation, MB_OK, MB_OK );
212               end;
213           end;
214
215         if (IsProcessorFeaturePresent(10) = false) then
216           begin
217             bRes := false;
218             SuppressibleMsgBox(CustomMessage('MsgBoxSSERequired'), mbError, MB_OK, MB_OK );
219             Result := false;
220           end;
221       end;
222
223     if (CurPageId = wpSelectDir) then
224       begin
225         AboutModulesButton.Visible := true;
226       end else begin
227         AboutModulesButton.Visible := false;
228       end;
229
230     if (CurPageID =  wpReady) then
231       begin
232         bRes := NextButtonClick_Download_MKL();
233         bRes := NextButtonClick_Download_MKL_FFTW();
234         bRes := NextButtonClick_Download_CHM();
235       end;
236
237     if (CurPageId = wpSelectComponents) then
238       begin
239         if ( IsComponentSelected( ExpandConstant('{#COMPN_JRE}') ) = false ) then
240           begin
241             bRes := VerifyJREVersion();
242             if ( bRes = false ) then
243               begin
244                 Result := false;
245               end;
246           end;
247
248         if ( (IsComponentSelected( ExpandConstant('{#COMPN_DEVTOOLS}') ) = false) and (IsComponentSelected( ExpandConstant('{#COMPN_TOOLBOX_SKELETON}') ) = true) ) then
249           begin
250               SuppressibleMsgBox( CustomMessage('MsgBoxDevToolsRequired1') + #13 +
251                 CustomMessage('MsgBoxDevToolsRequired2'),
252                 mbError, MB_OK, MB_OK );
253             Result := false;
254           end;
255
256           if ( (IsComponentSelected( ExpandConstant('{#COMPN_DEVTOOLS}') ) = false) and (IsComponentSelected( ExpandConstant('{#COMPN_TESTS}') ) = true) ) then
257           begin
258             SuppressibleMsgBox( CustomMessage('MsgBoxDevToolsRequired3') + #13 +
259                 CustomMessage('MsgBoxDevToolsRequired2'),
260                 mbError, MB_OK, MB_OK );
261             Result := false;
262           end;
263
264       end;
265   end;
266 //------------------------------------------------------------------------------
267 procedure DeinitializeUninstall;
268 var
269     Names: TArrayOfString;
270     iLen: Integer;
271 begin
272     //read registry to find others scilab installation in the same arch
273     if RegGetSubkeyNames(HKLM, 'Software\Scilab', Names) then
274     begin
275         iLen := length(Names);
276         if iLen > 0 then
277         begin
278             RegWriteStringValue(HKLM, 'Software\Scilab', 'LASTINSTALL', Names[iLen - 1]);
279         end else begin
280             //no other install in the same arch
281             //remove LASTINSTALL key and Scilab registry folder ( auto )
282             RegDeleteValue(HKLM, 'Software\Scilab', 'LASTINSTALL');
283         end;
284     end;
285 end;
286 //------------------------------------------------------------------------------
287 function InitializeSetup: Boolean;
288   Var
289     Version: TWindowsVersion;
290 #ifdef SCILAB_WITHOUT_JRE
291     bRes : Boolean;
292 #endif
293   begin
294     Result := True;
295     GetWindowsVersionEx(Version);
296
297     if Version.NTPlatform and (Version.Major > 4) then
298       begin
299         Result := True;
300       end else begin
301           SuppressibleMsgBox(CustomMessage('MsgBoxWinVer'), mbCriticalError, MB_OK, MB_OK);
302           Result := False;
303           Exit;
304       end
305 #ifdef SCILAB_WITHOUT_JRE
306     bRes := CheckJREVersion();
307     if ( bRes = false ) then
308     begin
309       SuppressibleMsgBox(CustomMessage('MsgBoxJRENotFound')+ '(' +ExpandConstant('{#javaSpecificationVersion}') + ')' + #13 +
310         CustomMessage('MsgBoxJREURL')+ #13 +
311         CustomMessage('MsgBoxJREReinstall')
312         , mbCriticalError, MB_OK, MB_OK);
313        Result := False;
314        Exit;
315     end else begin
316       Result := True;
317     end
318 #endif
319   end;
320 //------------------------------------------------------------------------------
321 procedure CreateTheWizardPages;
322 var
323   CancelButton: TButton;
324
325 begin
326
327   CancelButton := WizardForm.CancelButton;
328
329   AboutModulesButton := TButton.Create(WizardForm);
330   AboutModulesButton.Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
331   AboutModulesButton.Top := CancelButton.Top;
332   AboutModulesButton.Width := CancelButton.Width * 2;
333
334   AboutModulesButton.Caption := CustomMessage('ButtonAboutModules');
335
336   AboutModulesButton.Height := CancelButton.Height;
337
338   AboutModulesButton.OnClick := @ButtonAboutModulesOnClick;
339   AboutModulesButton.Parent := CancelButton.Parent;
340   AboutModulesButton.Visible := false;
341 end;
342 //------------------------------------------------------------------------------
343 procedure InitializeWizard();
344
345 begin
346   CreateTheWizardPages;
347 end;
348 //------------------------------------------------------------------------------
349 //convert Boolean expresion in string ( debug function )
350 function BoolToStr(Value : Boolean) : String;
351 begin
352   if Value then
353     result := 'true'
354   else
355     result := 'false';
356 end;
357 //------------------------------------------------------------------------------
358 //check user rights
359 function IsAdminUser(): Boolean;
360 begin
361   Result := (IsAdminLoggedOn or IsPowerUserLoggedOn);
362 end;
363 //------------------------------------------------------------------------------
364 //returns default install path ( take care of user rights )
365 function DefDirRoot(Param: String): String;
366 begin
367   if IsAdminUser then
368     //program files path
369     Result := ExpandConstant('{pf}')
370   else
371     //local app data path
372     Result := ExpandConstant('{localappdata}')
373 end;