kopia lustrzana https://github.com/espressif/esp-idf
win_installer: add PowerShell shortcut
add idf_cmd_init.ps1 update git vesionpull/6491/head
rodzic
76acc8ddde
commit
d23989aee2
|
@ -63,7 +63,7 @@ if ($dif_Path -ne $null) {
|
||||||
|
|
||||||
Write-Output "Checking if Python packages are up to date..."
|
Write-Output "Checking if Python packages are up to date..."
|
||||||
|
|
||||||
Start-Process -Wait -NoNewWindow -FilePath "python" -Args "$IDF_PATH/tools/check_python_dependencies.py"
|
Start-Process -Wait -NoNewWindow -FilePath "python" -Args "`"$IDF_PATH/tools/check_python_dependencies.py`""
|
||||||
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } # if error
|
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } # if error
|
||||||
|
|
||||||
Write-Output "
|
Write-Output "
|
||||||
|
|
|
@ -0,0 +1,108 @@
|
||||||
|
# This script is called from a Windows shortcut, with
|
||||||
|
# the working directory set to an ESP-IDF directory.
|
||||||
|
# Its purpose is to support using the "IDF Tools Directory" method of
|
||||||
|
# installation for ESP-IDF versions older than IDF v4.1.
|
||||||
|
# It does the same thing as "export.ps1" in IDF v4.1.
|
||||||
|
|
||||||
|
Param
|
||||||
|
(
|
||||||
|
[String]$IdfGitDir,
|
||||||
|
[String]$IdfPythonDir
|
||||||
|
)
|
||||||
|
|
||||||
|
$IDF_PATH = "."
|
||||||
|
$isEspIdfRoot = (Test-Path "$IDF_PATH/tools/idf.py")
|
||||||
|
if (-not $isEspIdfRoot) {
|
||||||
|
Write-Output "Usage: idf_cmd_init.ps1 ^<Python directory^> ^<Git directory^>"
|
||||||
|
Write-Output "This script must be invoked from ESP-IDF directory."
|
||||||
|
}
|
||||||
|
|
||||||
|
# Strip quotes
|
||||||
|
$IdfGitDir = $IdfGitDir.Trim("`"")
|
||||||
|
$IdfPythonDir = $IdfPythonDir.Trim("`"")
|
||||||
|
|
||||||
|
# Add Python and Git paths to PATH
|
||||||
|
$env:PATH = "$IdfGitDir;$IdfPythonDir;$env:PATH"
|
||||||
|
Write-Output "Using Python in $IdfPythonDir"
|
||||||
|
python.exe --version
|
||||||
|
Write-Output "Using Git in $IdfGitDir"
|
||||||
|
git.exe --version
|
||||||
|
|
||||||
|
# Check if this is a recent enough copy of ESP-IDF.
|
||||||
|
# If so, use export.ps1 provided there.
|
||||||
|
$isExport = (Test-Path "$IDF_PATH/export.ps1")
|
||||||
|
if ($isExport){
|
||||||
|
. $IDF_PATH/export.ps1
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Output "IDF version does not include export.ps1. Using the fallback version."
|
||||||
|
|
||||||
|
if ((Test-Path "$IDF_PATH/tools/tools.json")){
|
||||||
|
$IDF_TOOLS_JSON_PATH = "$IDF_PATH/tools/tools.json"
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Write-Output "IDF version does not include tools/tools.json. Using the fallback version."
|
||||||
|
$IDF_TOOLS_JSON_PATH = "$PSScriptRoot/tools_fallback.json"
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((Test-Path "$IDF_PATH/tools/idf_tools.py")){
|
||||||
|
$IDF_TOOLS_PY_PATH = "$IDF_PATH/tools/idf_tools.py"
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Write-Output "IDF version does not include tools/idf_tools.py. Using the fallback version."
|
||||||
|
$IDF_TOOLS_PY_PATH = "$PSScriptRoot/idf_tools_fallback.py"
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Output "Setting IDF_PATH: $IDF_PATH"
|
||||||
|
$env:IDF_PATH = $IDF_PATH
|
||||||
|
|
||||||
|
Write-Output "Adding ESP-IDF tools to PATH..."
|
||||||
|
$OLD_PATH = $env:Path.split(";") | Select-Object -Unique # array without duplicates
|
||||||
|
# using idf_tools.py to get $envars_array to set
|
||||||
|
$envars_raw = (python.exe "$IDF_TOOLS_PY_PATH" --tools-json "$IDF_TOOLS_JSON_PATH" export --format key-value)
|
||||||
|
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } # if error
|
||||||
|
|
||||||
|
$envars_array # will be filled like:
|
||||||
|
# [
|
||||||
|
# [vname1, vval1], [vname2, vval2], ...
|
||||||
|
# ]
|
||||||
|
foreach ($line in $envars_raw) {
|
||||||
|
$pair = $line.split("=") # split in name, val
|
||||||
|
$var_name = $pair[0].Trim() # trim spaces on the ends of the name
|
||||||
|
$var_val = $pair[1].Trim() # trim spaces on the ends of the val
|
||||||
|
$var_val = $var_val -replace "%(.+)%", "`$env:`$1" # convert var syntax to PS using RegEx
|
||||||
|
$var_val = $ExecutionContext.InvokeCommand.ExpandString($var_val) # expand variables to values
|
||||||
|
$envars_array += (, ($var_name, $var_val))
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($pair in $envars_array) {
|
||||||
|
# setting the values
|
||||||
|
$var_name = $pair[0].Trim() # trim spaces on the ends of the name
|
||||||
|
$var_val = $pair[1].Trim() # trim spaces on the ends of the val
|
||||||
|
Set-Item -Path "Env:$var_name" -Value "$var_val"
|
||||||
|
}
|
||||||
|
|
||||||
|
#Compare Path's OLD vs. NEW
|
||||||
|
$NEW_PATH = $env:Path.split(";") | Select-Object -Unique # array without duplicates
|
||||||
|
$dif_Path = Compare-Object -ReferenceObject $OLD_PATH -DifferenceObject $NEW_PATH -PassThru
|
||||||
|
if ($dif_Path -ne $null) {
|
||||||
|
Write-Output $dif_Path
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Output "No directories added to PATH:"
|
||||||
|
Write-Output $OLD_PATH
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Write-Output "Checking if Python packages are up to date..."
|
||||||
|
|
||||||
|
Start-Process -Wait -NoNewWindow -FilePath "python" -Args "`"$IDF_PATH/tools/check_python_dependencies.py`""
|
||||||
|
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } # if error
|
||||||
|
|
||||||
|
Write-Output "
|
||||||
|
Done! You can now compile ESP-IDF projects.
|
||||||
|
Go to the project directory and run:
|
||||||
|
idf.py build
|
||||||
|
"
|
||||||
|
|
||||||
|
}
|
|
@ -413,7 +413,38 @@ begin
|
||||||
GetIDFPath(''),
|
GetIDFPath(''),
|
||||||
'', 0, SW_SHOWNORMAL);
|
'', 0, SW_SHOWNORMAL);
|
||||||
except
|
except
|
||||||
MsgBox('Failed to create the Start menu shortcut: ' + Destination, mbError, MB_OK);
|
MsgBox('Failed to create the shortcut: ' + Destination, mbError, MB_OK);
|
||||||
|
RaiseException('Failed to create the shortcut');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure CreateIDFPowershellShortcut(LnkString: String);
|
||||||
|
var
|
||||||
|
Destination: String;
|
||||||
|
Description: String;
|
||||||
|
Command: String;
|
||||||
|
GitPathWithForwardSlashes: String;
|
||||||
|
PythonPathWithForwardSlashes: String;
|
||||||
|
begin
|
||||||
|
ForceDirectories(ExpandConstant(LnkString));
|
||||||
|
Destination := ExpandConstant(LnkString + '\{#IDFPsShortcutFile}');
|
||||||
|
Description := '{#IDFPsShortcutDescription}';
|
||||||
|
GitPathWithForwardSlashes := GitPath;
|
||||||
|
PythonPathWithForwardSlashes := PythonPath;
|
||||||
|
StringChangeEx(GitPathWithForwardSlashes, '\', '/', True);
|
||||||
|
StringChangeEx(PythonPathWithForwardSlashes, '\', '/', True);
|
||||||
|
Command := ExpandConstant('-ExecutionPolicy Bypass -NoExit -File ""{app}\idf_cmd_init.ps1"" ') + '"' + GitPathWithForwardSlashes + '" "' + PythonPathWithForwardSlashes + '"'
|
||||||
|
Log('CreateShellLink Destination=' + Destination + ' Description=' + Description + ' Command=' + Command)
|
||||||
|
try
|
||||||
|
CreateShellLink(
|
||||||
|
Destination,
|
||||||
|
Description,
|
||||||
|
'powershell.exe',
|
||||||
|
Command,
|
||||||
|
GetIDFPath(''),
|
||||||
|
'', 0, SW_SHOWNORMAL);
|
||||||
|
except
|
||||||
|
MsgBox('Failed to create the shortcut: ' + Destination, mbError, MB_OK);
|
||||||
RaiseException('Failed to create the shortcut');
|
RaiseException('Failed to create the shortcut');
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
|
@ -13,12 +13,17 @@
|
||||||
#define PythonInstallerName "idf-python-3.9.1-embed-win64.zip"
|
#define PythonInstallerName "idf-python-3.9.1-embed-win64.zip"
|
||||||
#define PythonInstallerDownloadURL "https://dl.espressif.com/dl/idf-python/idf-python-3.9.1-embed-win64.zip"
|
#define PythonInstallerDownloadURL "https://dl.espressif.com/dl/idf-python/idf-python-3.9.1-embed-win64.zip"
|
||||||
|
|
||||||
#define GitVersion "2.21.0"
|
#define GitVersion "2.28.0"
|
||||||
#define GitInstallerName "Git-2.21.0-64-bit.exe"
|
#define GitInstallerName "Git-2.28.0-64-bit.exe"
|
||||||
#define GitInstallerDownloadURL "https://github.com/git-for-windows/git/releases/download/v2.21.0.windows.1/Git-2.21.0-64-bit.exe"
|
#define GitInstallerDownloadURL "https://github.com/git-for-windows/git/releases/download/v2.28.0.windows.1/Git-2.28.0-64-bit.exe"
|
||||||
|
|
||||||
#define IDFCmdExeShortcutDescription "Open ESP-IDF Command Prompt (cmd.exe)"
|
#define IDFVersionsURL "https://dl.espressif.com/dl/esp-idf/idf_versions.txt"
|
||||||
#define IDFCmdExeShortcutFile "ESP-IDF Command Prompt (cmd.exe).lnk"
|
|
||||||
|
#define IDFCmdExeShortcutDescription "Open ESP-IDF Command Prompt (cmd.exe) Environment"
|
||||||
|
#define IDFCmdExeShortcutFile "ESP-IDF CMD.lnk"
|
||||||
|
|
||||||
|
#define IDFPsShortcutDescription "Open ESP-IDF PowerShell Environment"
|
||||||
|
#define IDFPsShortcutFile "ESP-IDF PowerShell.lnk"
|
||||||
|
|
||||||
[Setup]
|
[Setup]
|
||||||
; NOTE: The value of AppId uniquely identifies this application.
|
; NOTE: The value of AppId uniquely identifies this application.
|
||||||
|
@ -62,6 +67,7 @@ Source: "..\..\idf_tools.py"; DestDir: "{app}"; DestName: "idf_tools_fallback.py
|
||||||
; Note: this tools.json matches the requirements of IDF v3.x versions.
|
; Note: this tools.json matches the requirements of IDF v3.x versions.
|
||||||
Source: "tools_fallback.json"; DestDir: "{app}"; DestName: "tools_fallback.json"
|
Source: "tools_fallback.json"; DestDir: "{app}"; DestName: "tools_fallback.json"
|
||||||
Source: "idf_cmd_init.bat"; DestDir: "{app}"
|
Source: "idf_cmd_init.bat"; DestDir: "{app}"
|
||||||
|
Source: "idf_cmd_init.ps1"; DestDir: "{app}"
|
||||||
Source: "dist\*"; DestDir: "{app}\dist"
|
Source: "dist\*"; DestDir: "{app}\dist"
|
||||||
; Helper Python files for sanity check of Python environment - used by system_check_page
|
; Helper Python files for sanity check of Python environment - used by system_check_page
|
||||||
Source: "system_check\system_check_download.py"; Flags: dontcopy
|
Source: "system_check\system_check_download.py"; Flags: dontcopy
|
||||||
|
@ -77,11 +83,15 @@ Type: filesandordirs; Name: "{app}\releases"
|
||||||
Type: filesandordirs; Name: "{app}\tools"
|
Type: filesandordirs; Name: "{app}\tools"
|
||||||
Type: filesandordirs; Name: "{app}\python_env"
|
Type: filesandordirs; Name: "{app}\python_env"
|
||||||
Type: files; Name: "{group}\{#IDFCmdExeShortcutFile}"
|
Type: files; Name: "{group}\{#IDFCmdExeShortcutFile}"
|
||||||
|
Type: files; Name: "{group}\{#IDFPsShortcutFile}"
|
||||||
Type: files; Name: "{autodesktop}\{#IDFCmdExeShortcutFile}"
|
Type: files; Name: "{autodesktop}\{#IDFCmdExeShortcutFile}"
|
||||||
|
Type: files; Name: "{autodesktop}\{#IDFPsShortcutFile}"
|
||||||
|
|
||||||
[Tasks]
|
[Tasks]
|
||||||
Name: createlnk; Description: "Create Start Menu shortcut for the ESP-IDF Tools Command Prompt";
|
Name: CreateLnkStartCmd; Description: "Create Start Menu shortcut for the ESP-IDF Tools Command Prompt Environment";
|
||||||
Name: createdsk; Description: "Create Desktop shortcut for the ESP-IDF Tools Command Prompt";
|
Name: CreateLnkStartPs; Description: "Create Start Menu shortcut for the ESP-IDF Tools Powershell Environment";
|
||||||
|
Name: CreateLnkDeskCmd; Description: "Create Desktop shortcut for the ESP-IDF Tools Command Prompt Environment";
|
||||||
|
Name: CreateLnkDeskPs; Description: "Create Desktop shortcut for the ESP-IDF Tools Powershell Environment";
|
||||||
; WD registration checkbox is identified by 'Windows Defender' substring anywhere in its caption, not by the position index in WizardForm.TasksList.Items
|
; WD registration checkbox is identified by 'Windows Defender' substring anywhere in its caption, not by the position index in WizardForm.TasksList.Items
|
||||||
; Please, keep this in mind when making changes to the item's description - WD checkbox is to be disabled on systems without the Windows Defender installed
|
; Please, keep this in mind when making changes to the item's description - WD checkbox is to be disabled on systems without the Windows Defender installed
|
||||||
Name: wdexcl; Description: "Register the ESP-IDF Tools executables as Windows Defender exclusions (improves compilation speed, requires elevation)";
|
Name: wdexcl; Description: "Register the ESP-IDF Tools executables as Windows Defender exclusions (improves compilation speed, requires elevation)";
|
||||||
|
@ -89,7 +99,9 @@ Name: idf_tools_use_mirror; Description: "Use Espressif download server instead
|
||||||
|
|
||||||
[Run]
|
[Run]
|
||||||
Filename: "{app}\dist\{#GitInstallerName}"; Parameters: "/silent /tasks="""" /norestart"; Description: "Installing Git"; Check: GitInstallRequired
|
Filename: "{app}\dist\{#GitInstallerName}"; Parameters: "/silent /tasks="""" /norestart"; Description: "Installing Git"; Check: GitInstallRequired
|
||||||
Filename: "{group}\{#IDFCmdExeShortcutFile}"; Flags: postinstall shellexec; Description: "Run ESP-IDF Command Prompt (cmd.exe)"; Check: InstallationSuccessful
|
Filename: "{group}\{#IDFPsShortcutFile}"; Flags: postinstall shellexec unchecked; Description: "Run ESP-IDF PowerShell Environment"; Check: IsPowerShellInstalled
|
||||||
|
Filename: "{group}\{#IDFCmdExeShortcutFile}"; Flags: postinstall shellexec unchecked; Description: "Run ESP-IDF Command Prompt Environment"; Check: IsCmdInstalled
|
||||||
|
|
||||||
|
|
||||||
[UninstallRun]
|
[UninstallRun]
|
||||||
Filename: "powershell.exe"; \
|
Filename: "powershell.exe"; \
|
||||||
|
|
|
@ -134,16 +134,26 @@ begin
|
||||||
IDFToolsSetup();
|
IDFToolsSetup();
|
||||||
|
|
||||||
|
|
||||||
if WizardIsTaskSelected('createlnk') then
|
if WizardIsTaskSelected('CreateLnkStartCmd') then
|
||||||
begin
|
begin
|
||||||
CreateIDFCommandPromptShortcut('{autostartmenu}\Programs\ESP-IDF');
|
CreateIDFCommandPromptShortcut('{autostartmenu}\Programs\ESP-IDF');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if WizardIsTaskSelected('createdsk') then
|
if WizardIsTaskSelected('CreateLnkStartPs') then
|
||||||
|
begin
|
||||||
|
CreateIDFPowershellShortcut('{autostartmenu}\Programs\ESP-IDF' );
|
||||||
|
end;
|
||||||
|
|
||||||
|
if WizardIsTaskSelected('CreateLnkDeskCmd') then
|
||||||
begin
|
begin
|
||||||
CreateIDFCommandPromptShortcut('{autodesktop}');
|
CreateIDFCommandPromptShortcut('{autodesktop}');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
if WizardIsTaskSelected('CreateLnkDeskPs') then
|
||||||
|
begin
|
||||||
|
CreateIDFPowershellShortcut('{autodesktop}');
|
||||||
|
end;
|
||||||
|
|
||||||
if WizardIsTaskSelected('wdexcl') then
|
if WizardIsTaskSelected('wdexcl') then
|
||||||
begin
|
begin
|
||||||
RegisterIDFToolsExecutablesInWD();
|
RegisterIDFToolsExecutablesInWD();
|
||||||
|
@ -170,3 +180,14 @@ begin
|
||||||
Result := SetupAborted;
|
Result := SetupAborted;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function IsPowerShellInstalled(): Boolean;
|
||||||
|
begin
|
||||||
|
Result := ((not SetupAborted) and (WizardIsTaskSelected('CreateLnkDeskPs') or WizardIsTaskSelected('CreateLnkStartPs')));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function IsCmdInstalled(): Boolean;
|
||||||
|
begin
|
||||||
|
Result := ((not SetupAborted) and (WizardIsTaskSelected('CreateLnkDeskCmd') or WizardIsTaskSelected('CreateLnkStartCmd')));
|
||||||
|
end;
|
||||||
|
|
Ładowanie…
Reference in New Issue