9203a10b57ddd9f569a8a11b6c6cd05bbb137c83
[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     if Is64BitInstallMode() then
90       begin
91         RegQueryStringValue( HKLM, 'SOFTWARE\JavaSoft\Java Runtime Environment', 'CurrentVersion', Result );
92       end;
93
94 // 2 cas :
95   if IsWin64() then
96     begin
97       // Scilab 32 bits sur Windows 64 bits
98       RegQueryStringValue( HKLM, 'SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment', 'CurrentVersion', Result );
99     end
100   else
101     begin
102       // Scilab 32 bits sur Windows 32 bits
103       RegQueryStringValue( HKLM, 'SOFTWARE\JavaSoft\Java Runtime Environment', 'CurrentVersion', Result );
104     end;
105   end;
106 //------------------------------------------------------------------------------
107  function CheckJREVersion(): Boolean;
108   var
109     jreVersion:  String;
110     minJREVersionRegistry:  String;
111   begin
112     //
113     // Initialize min java version constant
114     //
115     minJREVersionRegistry := ExpandConstant('{#javaSpecificationVersion}');
116     //
117     // now we check the version of the installed JRE
118     //
119     jreVersion := GetJREVersion();
120     if ( jreVersion = '' ) then begin
121       Result := false;
122     end else if ( jreVersion < minJREVersionRegistry ) then begin
123       Result := false;
124     end else begin
125       Result := true;
126     end;
127   end;
128 //------------------------------------------------------------------------------
129  function VerifyJREVersion() : Boolean;
130   var
131     bJREVersion: Boolean;
132   begin
133     bJREVersion := CheckJREVersion();
134
135     if ( bJREVersion <> true ) then begin
136         SuppressibleMsgBox( CustomMessage('MsgBoxJavaDetection1') + #13 +
137           CustomMessage('MsgBoxJavaDetection2') + ExpandConstant('{#javaSpecificationVersion}') + '.',
138           mbError, MB_OK, MB_OK );
139     end;
140
141     Result := bJREVersion;
142   end;
143 //------------------------------------------------------------------------------
144 procedure ButtonAboutModulesOnClick(Sender: TObject);
145 var
146   ErrorCode: Integer;
147
148 begin
149     if not ShellExec('', ExpandConstant('{#MODULES_LIST_WEB_PAGE}'),
150              '', '', SW_SHOW, ewNoWait, ErrorCode) then
151     begin
152       // handle failure if necessary
153       SuppressibleMsgBox( CustomMessage('MsgBoxWebOpen'),mbError, MB_OK, MB_OK );
154     end;
155 end;
156 //------------------------------------------------------------------------------
157  function BackButtonClick(CurPageID: Integer): Boolean;
158   begin
159     Result := true;
160     if (CurPageId = wpSelectProgramGroup) then
161       begin
162         AboutModulesButton.Visible := true;
163       end else begin
164         AboutModulesButton.Visible := false;
165       end;
166   end;
167 //------------------------------------------------------------------------------
168 function NextButtonClick_Download_MKL(): Boolean;
169   Var
170     bRes : Boolean;
171   begin
172     Result := true;
173     if (IsComponentSelected( ExpandConstant('{#COMPN_MKL_CPU_LIBRARY}') ) = true) then
174       begin
175         bRes := Download_commons_MKL();
176         if ( bRes = true ) then
177           begin
178             bRes := Download_MKL();
179           end;
180       end;
181   end;
182 //------------------------------------------------------------------------------
183 function NextButtonClick_Download_MKL_FFTW(): Boolean;
184   Var
185     bRes : Boolean;
186   begin
187     Result := true;
188     if (IsComponentSelected( ExpandConstant('{#COMPN_FFTW_MKL_LIBRARY}') ) = true) then
189       begin
190         bRes := Download_MKL_FFTW();
191       end;
192   end;
193 //------------------------------------------------------------------------------
194 function NextButtonClick_Download_CHM(): Boolean;
195   Var
196     bRes : Boolean;
197   begin
198     Result := true;
199     if (IsComponentSelected( ExpandConstant('{#COMPN_CHM}') ) = true) then
200       begin
201         bRes := Download_CHM();
202       end;
203   end;
204 //------------------------------------------------------------------------------
205 function NextButtonClick(CurPageID: Integer): Boolean;
206   Var
207     bRes : Boolean;
208
209   begin
210     Result := true;
211
212     if (CurPageID = wpWelcome) then
213       begin
214         if (Is64BitInstallMode() = false) then
215           begin
216             if IsWin64() then
217               begin
218                 SuppressibleMsgBox(CustomMessage('MsgBoxX64Ready'), mbInformation, MB_OK, MB_OK );
219               end;
220           end;
221
222         if (IsProcessorFeaturePresent(10) = false) then
223           begin
224             bRes := false;
225             SuppressibleMsgBox(CustomMessage('MsgBoxSSERequired'), mbError, MB_OK, MB_OK );
226             Result := false;
227           end;
228       end;
229
230     if (CurPageId = wpSelectDir) then
231       begin
232         AboutModulesButton.Visible := true;
233       end else begin
234         AboutModulesButton.Visible := false;
235       end;
236
237     if (CurPageID =  wpReady) then
238       begin
239         bRes := NextButtonClick_Download_MKL();
240         bRes := NextButtonClick_Download_MKL_FFTW();
241         bRes := NextButtonClick_Download_CHM();
242       end;
243
244     if (CurPageId = wpSelectComponents) then
245       begin
246         if ( IsComponentSelected( ExpandConstant('{#COMPN_JRE}') ) = false ) then
247           begin
248             bRes := VerifyJREVersion();
249             if ( bRes = false ) then
250               begin
251                 Result := false;
252               end;
253           end;
254
255         if ( (IsComponentSelected( ExpandConstant('{#COMPN_DEVTOOLS}') ) = false) and (IsComponentSelected( ExpandConstant('{#COMPN_TOOLBOX_SKELETON}') ) = true) ) then
256           begin
257               SuppressibleMsgBox( CustomMessage('MsgBoxDevToolsRequired1') + #13 +
258                 CustomMessage('MsgBoxDevToolsRequired2'),
259                 mbError, MB_OK, MB_OK );
260             Result := false;
261           end;
262
263           if ( (IsComponentSelected( ExpandConstant('{#COMPN_DEVTOOLS}') ) = false) and (IsComponentSelected( ExpandConstant('{#COMPN_TESTS}') ) = true) ) then
264           begin
265             SuppressibleMsgBox( CustomMessage('MsgBoxDevToolsRequired3') + #13 +
266                 CustomMessage('MsgBoxDevToolsRequired2'),
267                 mbError, MB_OK, MB_OK );
268             Result := false;
269           end;
270
271       end;
272   end;
273 //------------------------------------------------------------------------------
274 function InitializeSetup: Boolean;
275   Var
276     Version: TWindowsVersion;
277 #ifdef SCILAB_WITHOUT_JRE
278     bRes : Boolean;
279 #endif
280   begin
281     Result := True;
282     GetWindowsVersionEx(Version);
283
284     if Version.NTPlatform and (Version.Major > 4) then
285       begin
286         Result := True;
287       end else begin
288           SuppressibleMsgBox(CustomMessage('MsgBoxWinVer'), mbCriticalError, MB_OK, MB_OK);
289           Result := False;
290           Exit;
291       end
292 #ifdef SCILAB_WITHOUT_JRE
293     bRes := CheckJREVersion();
294     if ( bRes = false ) then
295     begin
296       SuppressibleMsgBox(CustomMessage('MsgBoxJRENotFound')+ '(' +ExpandConstant('{#javaSpecificationVersion}') + ')' + #13 +
297         CustomMessage('MsgBoxJREURL')+ #13 +
298         CustomMessage('MsgBoxJREReinstall')
299         , mbCriticalError, MB_OK, MB_OK);
300        Result := False;
301        Exit;
302     end else begin
303       Result := True;
304     end
305 #endif
306   end;
307 //------------------------------------------------------------------------------
308 procedure CreateTheWizardPages;
309 var
310   CancelButton: TButton;
311
312 begin
313
314   CancelButton := WizardForm.CancelButton;
315
316   AboutModulesButton := TButton.Create(WizardForm);
317   AboutModulesButton.Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
318   AboutModulesButton.Top := CancelButton.Top;
319   AboutModulesButton.Width := CancelButton.Width * 2;
320
321   AboutModulesButton.Caption := CustomMessage('ButtonAboutModules');
322
323   AboutModulesButton.Height := CancelButton.Height;
324
325   AboutModulesButton.OnClick := @ButtonAboutModulesOnClick;
326   AboutModulesButton.Parent := CancelButton.Parent;
327   AboutModulesButton.Visible := false;
328 end;
329 //------------------------------------------------------------------------------
330 procedure InitializeWizard();
331
332 begin
333   CreateTheWizardPages;
334 end;
335 //------------------------------------------------------------------------------
336 //convert Boolean expresion in string ( debug function )
337 function BoolToStr(Value : Boolean) : String;
338 begin
339   if Value then
340     result := 'true'
341   else
342     result := 'false';
343 end;
344 //------------------------------------------------------------------------------
345 //check user rights
346 function IsAdminUser(): Boolean;
347 begin
348   Result := (IsAdminLoggedOn or IsPowerUserLoggedOn);
349 end;
350 //------------------------------------------------------------------------------
351 //returns default install path ( take care of user rights )
352 function DefDirRoot(Param: String): String;
353 begin
354   if IsAdminUser then
355     //program files path
356     Result := ExpandConstant('{pf}')
357   else
358     //local app data path
359     Result := ExpandConstant('{localappdata}')
360 end;