Jelajahi Sumber

Merge branch 'feature/export_ps1_tools_v4.2' into 'release/v4.2'

scripts: updates export.ps1 to export tools' paths (v4.2)

See merge request espressif/esp-idf!9876
Ivan Grokhotkov 5 tahun lalu
induk
melakukan
9f4f7aa8b1
1 mengubah file dengan 34 tambahan dan 22 penghapusan
  1. 34 22
      export.ps1

+ 34 - 22
export.ps1

@@ -1,49 +1,61 @@
-if ($env:MSYSTEM -ne $null) {
-    Write-Output "This .ps1 file is for Windows Powershell only. When using MSYS, run:`n. ./export.sh."
-    exit 1
-}
-
+#!/usr/bin/env pwsh
+$S = [IO.Path]::PathSeparator # path separator. WIN:';', UNIX:":"
 
 $IDF_PATH = $PSScriptRoot
 
 Write-Output "Setting IDF_PATH: $IDF_PATH"
-$env: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
+$OLD_PATH = $env:PATH.split($S) | Select-Object -Unique # array without duplicates
 # using idf_tools.py to get $envars_array to set
-$envars_raw = python.exe $IDF_PATH\tools\idf_tools.py export --format key-value
+$envars_raw = python $IDF_PATH/tools/idf_tools.py export --format key-value
 if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } # if error
 
-$envars_array # will be filled like: 
+$envars_array # will be filled like:
 #               [
 #                    [vname1, vval1], [vname2, vval2], ...
 #               ]
-foreach ($line  in $envars_raw)
-{
+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))
+    $envars_array += (, ($var_name, $var_val))
 }
 
-foreach ($pair  in $envars_array) # setting the values
-{
+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" 
+    if ($var_name -eq "PATH") {
+        # trim "%PATH%" or "`$PATH"
+        if ($IsWindows) {
+            $var_val = $var_val.Trim($S + "%PATH%")
+        } else {
+            $var_val = $var_val.Trim($S + "`$PATH")
+        }
+        # apply
+        $env:PATH = $var_val + $S + $env:PATH
+    } else {
+        New-Item -Path "env:$var_name" -Value "$var_val" -Force
+    }
 }
 
+# Allow calling some IDF python tools without specifying the full path
+# ${IDF_PATH}/tools is already added by 'idf_tools.py export'
+$IDF_ADD_PATHS_EXTRAS = [IO.Path]::Combine(${IDF_PATH}, "components", "esptool_py", "esptool")
+$IDF_ADD_PATHS_EXTRAS += ${S} + [IO.Path]::Combine(${IDF_PATH}, "components", "app_update")
+$IDF_ADD_PATHS_EXTRAS += ${S} + [IO.Path]::Combine(${IDF_PATH}, "components", "espcoredump")
+$IDF_ADD_PATHS_EXTRAS += ${S} + [IO.Path]::Combine(${IDF_PATH}, "components", "partition_table")
+$env:PATH = $IDF_ADD_PATHS_EXTRAS + $S + $env:PATH
+
 #Compare Path's OLD vs. NEW
-$NEW_PATH = $env:Path.split(";") | Select-Object -Unique # array without duplicates
+$NEW_PATH = $env:PATH.split($S) | Select-Object -Unique # array without duplicates
 $dif_Path = Compare-Object -ReferenceObject $OLD_PATH -DifferenceObject $NEW_PATH -PassThru
-if ($dif_Path -ne $null)
-{
+if ($dif_Path -ne $null) {
+    Write-Output "`nAdded to PATH`n-------------"
     Write-Output $dif_Path
-}
-else {
+} else {
     Write-Output "No directories added to PATH:"
     Write-Output $OLD_PATH
 }