| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- { Copyright 2019 Espressif Systems (Shanghai) PTE LTD
- SPDX-License-Identifier: Apache-2.0 }
- { ------------------------------ Page to select Python interpreter ------------------------------ }
- #include "python_find_installed.iss.inc"
- var
- PythonPage: TInputOptionWizardPage;
- PythonVersion, PythonPath, PythonExecutablePath: String;
- PythonUseExisting: Boolean;
- function GetPythonPath(Unused: String): String;
- begin
- Result := PythonPath;
- end;
- function PythonInstallRequired(): Boolean;
- begin
- Result := not PythonUseExisting;
- end;
- function PythonVersionSupported(Version: String): Boolean;
- var
- Major, Minor: Integer;
- begin
- Result := False;
- if not VersionExtractMajorMinor(Version, Major, Minor) then
- begin
- Log('PythonVersionSupported: Could not parse version=' + Version);
- exit;
- end;
- if (Major = 2) and (Minor = 7) then Result := True;
- if (Major = 3) and (Minor >= 5) then Result := True;
- end;
- procedure OnPythonPagePrepare(Sender: TObject);
- var
- Page: TInputOptionWizardPage;
- FullName: String;
- i, Index, FirstEnabledIndex: Integer;
- OfferToInstall: Boolean;
- VersionToInstall: String;
- VersionSupported: Boolean;
- begin
- Page := TInputOptionWizardPage(Sender);
- Log('OnPythonPagePrepare');
- if Page.CheckListBox.Items.Count > 0 then
- exit;
- FindInstalledPythonVersions();
- VersionToInstall := '{#PythonVersion}';
- OfferToInstall := True;
- FirstEnabledIndex := -1;
- for i := 0 to InstalledPythonVersions.Count - 1 do
- begin
- VersionSupported := PythonVersionSupported(InstalledPythonVersions[i]);
- FullName := InstalledPythonDisplayNames.Strings[i];
- if not VersionSupported then
- begin
- FullName := FullName + ' (unsupported)';
- end;
- FullName := FullName + #13#10 + InstalledPythonExecutables.Strings[i];
- Index := Page.Add(FullName);
- if not VersionSupported then
- begin
- Page.CheckListBox.ItemEnabled[Index] := False;
- end else begin
- if FirstEnabledIndex < 0 then FirstEnabledIndex := Index;
- end;
- if InstalledPythonVersions[i] = VersionToInstall then
- begin
- OfferToInstall := False;
- end;
- end;
- if OfferToInstall then
- begin
- Index := Page.Add('Install Python ' + VersionToInstall);
- if FirstEnabledIndex < 0 then FirstEnabledIndex := Index;
- end;
- Page.SelectedValueIndex := FirstEnabledIndex;
- end;
- procedure OnPythonSelectionChange(Sender: TObject);
- var
- Page: TInputOptionWizardPage;
- begin
- Page := TInputOptionWizardPage(Sender);
- Log('OnPythonSelectionChange index=' + IntToStr(Page.SelectedValueIndex));
- end;
- function OnPythonPageValidate(Sender: TWizardPage): Boolean;
- var
- Page: TInputOptionWizardPage;
- begin
- Page := TInputOptionWizardPage(Sender);
- Log('OnPythonPageValidate index=' + IntToStr(Page.SelectedValueIndex));
- if Page.SelectedValueIndex < InstalledPythonExecutables.Count then
- begin
- PythonUseExisting := True;
- PythonExecutablePath := InstalledPythonExecutables[Page.SelectedValueIndex];
- PythonPath := ExtractFilePath(PythonExecutablePath);
- PythonVersion := InstalledPythonVersions[Page.SelectedValueIndex];
- end else begin
- PythonUseExisting := False;
- PythonExecutablePath := '';
- PythonPath := '';
- PythonVersion := '{#PythonVersion}';
- end;
- Log('OnPythonPageValidate: PythonPath='+PythonPath+' PythonExecutablePath='+PythonExecutablePath);
- Result := True;
- end;
- procedure PythonExecutablePathUpdateAfterInstall();
- var
- Version, DisplayName, ExecutablePath: String;
- begin
- if not GetPythonVersionInfoFromKey(
- HKEY_CURRENT_USER, 'Software\Python', 'PythonCore', '{#PythonVersion}',
- Version, DisplayName, ExecutablePath) then
- begin
- Log('Failed to find ExecutablePath for the installed copy of Python');
- exit;
- end;
- Log('Found ExecutablePath for ' + DisplayName + ': ' + ExecutablePath);
- PythonExecutablePath := ExecutablePath;
- PythonPath := ExtractFilePath(PythonExecutablePath);
- Log('PythonExecutablePathUpdateAfterInstall: PythonPath='+PythonPath+' PythonExecutablePath='+PythonExecutablePath);
- end;
- <event('InitializeWizard')>
- procedure CreatePythonPage();
- begin
- PythonPage := ChoicePageCreate(
- wpLicense,
- 'Python choice', 'Please choose Python version',
- 'Available Python versions',
- '',
- False,
- @OnPythonPagePrepare,
- @OnPythonSelectionChange,
- @OnPythonPageValidate);
- end;
|