diff options
Diffstat (limited to 'tools/innosetup/code.iss')
-rwxr-xr-x | tools/innosetup/code.iss | 363 |
1 files changed, 363 insertions, 0 deletions
diff --git a/tools/innosetup/code.iss b/tools/innosetup/code.iss new file mode 100755 index 000000000..1b98cce53 --- /dev/null +++ b/tools/innosetup/code.iss @@ -0,0 +1,363 @@ +// +// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab +// Copyright (C) DIGITEO - 2010-2012 - Allan CORNET +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt +// +//------------------------------------------------------------------------------ +// Inno Setup Script (5.3 and more) for Scilab (UNICODE version required) +// +//------------------------------------------------------------------------------ + +function IsProcessorFeaturePresent(ProcessorFeature: DWORD): Boolean; +external 'IsProcessorFeaturePresent@kernel32.dll stdcall'; + +function GetModuleHandle(lpModuleName: LongInt): LongInt; +external 'GetModuleHandleA@kernel32.dll stdcall'; + +var + AboutModulesButton: TButton; + OriginalOnTypesComboChange: TNotifyEvent; + +//------------------------------------------------------------------------------ +function isCLIType(): Boolean; + begin + Result := true; + if (IsComponentSelected( ExpandConstant('{#COMPN_JVM_MODULE}'))) then + begin + Result := false; + end; + end; +//------------------------------------------------------------------------------ +function getExecNameForDesktop(Param: String): String; + begin + if (isCLIType() = true) then + begin + Result := ExpandConstant('{app}') + '\bin\scilex.exe'; + end + else + begin + Result := ExpandConstant('{app}') + '\bin\wscilex.exe'; + end; + end; +//------------------------------------------------------------------------------ +function DoTaskInstall_MKL: Boolean; + begin + Result := true; + if (IsComponentSelected( ExpandConstant('{#COMPN_MKL_CPU_LIBRARY}') ) = true) then + begin + Result := Install_commons_MKL(); + if (Result = true) then + begin + Result := Install_MKL(); + end + end; + end; +//------------------------------------------------------------------------------ +function DoTaskInstall_MKL_FFTW: Boolean; + begin + Result := true; + if (IsComponentSelected( ExpandConstant('{#COMPN_FFTW_MKL_LIBRARY}') ) = true) then + begin + Result := Install_MKL_FFTW(); + end; + end; +//------------------------------------------------------------------------------ +function DoTasksJustAfterInstall: Boolean; + begin + Result := true; + Result := CreateModulesFile(); + Result := DoTaskInstall_MKL(); + Result := DoTaskInstall_MKL_FFTW(); + end; +//------------------------------------------------------------------------------ +function GetJREVersion(): String; +begin + Result := ''; + + if Is64BitInstallMode() or not IsWin64() then + begin + //64 bits installation or 32 bits OS -> same registry path + RegQueryStringValue( HKLM, 'SOFTWARE\JavaSoft\Java Runtime Environment', 'CurrentVersion', Result ); + end else begin + // Scilab 32 bits sur Windows 64 bits + RegQueryStringValue( HKLM, 'SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment', 'CurrentVersion', Result ); + end +end; +//------------------------------------------------------------------------------ + function CheckJREVersion(): Boolean; + var + jreVersion: String; + minJREVersionRegistry: String; + begin + // + // Initialize min java version constant + // + minJREVersionRegistry := ExpandConstant('{#javaSpecificationVersion}'); + // + // now we check the version of the installed JRE + // + jreVersion := GetJREVersion(); + if ( jreVersion = '' ) then begin + Result := false; + end else if ( jreVersion < minJREVersionRegistry ) then begin + Result := false; + end else begin + Result := true; + end; + end; +//------------------------------------------------------------------------------ + function VerifyJREVersion() : Boolean; + var + bJREVersion: Boolean; + begin + bJREVersion := CheckJREVersion(); + + if ( bJREVersion <> true ) then begin + SuppressibleMsgBox( CustomMessage('MsgBoxJavaDetection1') + #13 + + CustomMessage('MsgBoxJavaDetection2') + ExpandConstant('{#javaSpecificationVersion}') + '.', + mbError, MB_OK, MB_OK ); + end; + + Result := bJREVersion; + end; +//------------------------------------------------------------------------------ +procedure ButtonAboutModulesOnClick(Sender: TObject); +var + ErrorCode: Integer; + +begin + if not ShellExec('', ExpandConstant('{#MODULES_LIST_WEB_PAGE}'), + '', '', SW_SHOW, ewNoWait, ErrorCode) then + begin + // handle failure if necessary + SuppressibleMsgBox( CustomMessage('MsgBoxWebOpen'),mbError, MB_OK, MB_OK ); + end; +end; +//------------------------------------------------------------------------------ + function BackButtonClick(CurPageID: Integer): Boolean; + begin + Result := true; + if (CurPageId = wpSelectProgramGroup) then + begin + AboutModulesButton.Visible := true; + end else begin + AboutModulesButton.Visible := false; + end; + end; +//------------------------------------------------------------------------------ +function NextButtonClick_Download_MKL(): Boolean; + Var + bRes : Boolean; + begin + Result := true; + if (IsComponentSelected( ExpandConstant('{#COMPN_MKL_CPU_LIBRARY}') ) = true) then + begin + bRes := Download_commons_MKL(); + if ( bRes = true ) then + begin + bRes := Download_MKL(); + end; + end; + end; +//------------------------------------------------------------------------------ +function NextButtonClick_Download_MKL_FFTW(): Boolean; + Var + bRes : Boolean; + begin + Result := true; + if (IsComponentSelected( ExpandConstant('{#COMPN_FFTW_MKL_LIBRARY}') ) = true) then + begin + bRes := Download_MKL_FFTW(); + end; + end; +//------------------------------------------------------------------------------ +function NextButtonClick(CurPageID: Integer): Boolean; + Var + bRes : Boolean; + + begin + Result := true; + + if (CurPageID = wpWelcome) then + begin + if (Is64BitInstallMode() = false) then + begin + if IsWin64() then + begin + SuppressibleMsgBox(CustomMessage('MsgBoxX64Ready'), mbInformation, MB_OK, MB_OK ); + end; + end; + + if (IsProcessorFeaturePresent(10) = false) then + begin + bRes := false; + SuppressibleMsgBox(CustomMessage('MsgBoxSSERequired'), mbError, MB_OK, MB_OK ); + Result := false; + end; + end; + + if (CurPageId = wpSelectDir) then + begin + AboutModulesButton.Visible := true; + end else begin + AboutModulesButton.Visible := false; + end; + + if (CurPageID = wpReady) then + begin + bRes := NextButtonClick_Download_MKL(); + bRes := NextButtonClick_Download_MKL_FFTW(); + end; + + if (CurPageId = wpSelectComponents) then + begin + if ( IsComponentSelected( ExpandConstant('{#COMPN_JRE}') ) = false ) then + begin + bRes := VerifyJREVersion(); + if ( bRes = false ) then + begin + Result := false; + end; + end; + + if ( (IsComponentSelected( ExpandConstant('{#COMPN_DEVTOOLS}') ) = false) and (IsComponentSelected( ExpandConstant('{#COMPN_TOOLBOX_SKELETON}') ) = true) ) then + begin + SuppressibleMsgBox( CustomMessage('MsgBoxDevToolsRequired1') + #13 + + CustomMessage('MsgBoxDevToolsRequired2'), + mbError, MB_OK, MB_OK ); + Result := false; + end; + + if ( (IsComponentSelected( ExpandConstant('{#COMPN_DEVTOOLS}') ) = false) and (IsComponentSelected( ExpandConstant('{#COMPN_TESTS}') ) = true) ) then + begin + SuppressibleMsgBox( CustomMessage('MsgBoxDevToolsRequired3') + #13 + + CustomMessage('MsgBoxDevToolsRequired2'), + mbError, MB_OK, MB_OK ); + Result := false; + end; + + end; + end; +//------------------------------------------------------------------------------ +procedure DeinitializeUninstall; +var + Names: TArrayOfString; + iLen: Integer; +begin + //read registry to find others scilab installation in the same arch + if RegGetSubkeyNames(HKLM, 'Software\Scilab', Names) then + begin + iLen := length(Names); + if iLen > 0 then + begin + RegWriteStringValue(HKLM, 'Software\Scilab', 'LASTINSTALL', Names[iLen - 1]); + end else begin + //no other install in the same arch + //remove LASTINSTALL key and Scilab registry folder ( auto ) + RegDeleteValue(HKLM, 'Software\Scilab', 'LASTINSTALL'); + end; + end; +end; +//------------------------------------------------------------------------------ +function InitializeSetup: Boolean; + Var + Version: TWindowsVersion; +#ifdef SCILAB_WITHOUT_JRE + bRes : Boolean; +#endif + begin + Result := True; + GetWindowsVersionEx(Version); + + if Version.NTPlatform and (Version.Major > 4) then + begin + Result := True; + end else begin + SuppressibleMsgBox(CustomMessage('MsgBoxWinVer'), mbCriticalError, MB_OK, MB_OK); + Result := False; + Exit; + end +#ifdef SCILAB_WITHOUT_JRE + bRes := CheckJREVersion(); + if ( bRes = false ) then + begin + SuppressibleMsgBox(CustomMessage('MsgBoxJRENotFound')+ '(' +ExpandConstant('{#javaSpecificationVersion}') + ')' + #13 + + CustomMessage('MsgBoxJREURL')+ #13 + + CustomMessage('MsgBoxJREReinstall') + , mbCriticalError, MB_OK, MB_OK); + Result := False; + Exit; + end else begin + Result := True; + end +#endif + end; +//------------------------------------------------------------------------------ +procedure OnTypesComboChange(Sender: TObject); +var + ItemIndex: Integer; + Res: Boolean; +begin + OriginalOnTypesComboChange(Sender); +end; +//------------------------------------------------------------------------------ +procedure CreateTheWizardPages; +var + CancelButton: TButton; +begin + CancelButton := WizardForm.CancelButton; + + AboutModulesButton := TButton.Create(WizardForm); + AboutModulesButton.Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width; + AboutModulesButton.Top := CancelButton.Top; + AboutModulesButton.Width := CancelButton.Width * 2; + + AboutModulesButton.Caption := CustomMessage('ButtonAboutModules'); + + AboutModulesButton.Height := CancelButton.Height; + + AboutModulesButton.OnClick := @ButtonAboutModulesOnClick; + AboutModulesButton.Parent := CancelButton.Parent; + AboutModulesButton.Visible := false; + + CreateOfflineInstallationCheckBox; + + OriginalOnTypesComboChange := WizardForm.TypesCombo.OnChange; + WizardForm.TypesCombo.OnChange := @OnTypesComboChange; +end; +//------------------------------------------------------------------------------ +procedure InitializeWizard(); +begin + CreateTheWizardPages; +end; +//------------------------------------------------------------------------------ +//convert Boolean expresion in string ( debug function ) +function BoolToStr(Value : Boolean) : String; +begin + if Value then + result := 'true' + else + result := 'false'; +end; +//------------------------------------------------------------------------------ +//check user rights +function IsAdminUser(): Boolean; +begin + Result := (IsAdminLoggedOn or IsPowerUserLoggedOn); +end; +//------------------------------------------------------------------------------ +//returns default install path ( take care of user rights ) +function DefDirRoot(Param: String): String; +begin + if IsAdminUser then + //program files path + Result := ExpandConstant('{pf}') + else + //local app data path + Result := ExpandConstant('{localappdata}') +end; |