Files
ci-emsdk/test/test_path_preservation.ps1
Sam Clegg 3d87d5ea81 Avoid exporting EM_CONFIG for modern SDK versions (#1110)
Newer versions of emscipten, starting all the way back in 1.39.13, can
automatically locate the `.emscripten` config file that emsdk creates so
there is no need for the explicit EM_CONFIG environment variable.  Its
redundant and adds unnessary noisce/complexity.

Really, adding emcc to the PATH is all the is needed these days.

One nice thing about this change is that it allows folks to run
whichever emcc they want to and have it just work, even if they have
configured emsdk.   Without this change, if I activate emsdk and I run
`some/other/emcc` then emsdk's `EM_CONFIG` will still be present and
override the configuration embedded in `some/other/emcc`.

e.g. in the same shell, with emsdk activated, I can run both these
commands and have them both just work as expected.

```
$ emcc --version
$ /path/to/my/emcc --version
```
2022-10-06 14:13:13 -07:00

146 lines
5.8 KiB
PowerShell

# This test installs emsdk and activates the latest toolchain using `--system` or `--permanent` flags,
# and checks if parts of PATH are lost or overwritten. Set $env:SYSTEM_FLAG and $env:PERMANENT_FLAG to test each.
# If no flag is provided the process/shell values are tested. See the CI file for an example.
refreshenv
$repo_root = [System.IO.Path]::GetDirectoryName((resolve-path "$PSScriptRoot"))
$PATH_USER_BEFORE = [System.Environment]::GetEnvironmentVariable("PATH", "User")
$PATH_MACHINE_BEFORE = [System.Environment]::GetEnvironmentVariable("PATH", "Machine")
$PATH_Process_BEFORE = [System.Environment]::GetEnvironmentVariable("PATH", "Process")
try {
& "$repo_root/emsdk.ps1" install latest
$esc = '--%'
& "$repo_root/emsdk.ps1" activate latest $esc $env:PERMANENT_FLAG $env:SYSTEM_FLAG
$PATH_USER = [System.Environment]::GetEnvironmentVariable("PATH", "User")
$PATH_MACHINE = [System.Environment]::GetEnvironmentVariable("PATH", "Machine")
$PATH_Process = [System.Environment]::GetEnvironmentVariable("PATH", "Process")
if ($env:SYSTEM_FLAG) {
echo "--system test............................."
$path_before_arr = $PATH_MACHINE_BEFORE.Split(';')
$path_arr = $PATH_MACHINE.Split(';')
}
elseif ($env:PERMANENT_FLAG) {
echo "--permanent test.........................."
$path_before_arr = $PATH_USER_BEFORE.Split(';')
$path_arr = $PATH_USER.Split(';')
} else {
echo "no flag test (shell/process).............."
$path_before_arr = $PATH_Process_BEFORE.Split(';')
$path_arr = $PATH_Process.Split(';')
}
$EMSDK_Path = $path_arr | Where-Object { $_ -like "$repo_root*" }
$EMSDK_NODE_Path = $path_arr | Where-Object { $_ -like "$repo_root\node*" }
$EMSDK_PYTHON_Path = $path_arr | Where-Object { $_ -like "$repo_root\python*" }
$EMSDK_JAVA_Path = $path_arr | Where-Object { $_ -like "$repo_root\java*" }
$EMSDK_UPSTREAM_Path = $path_arr | Where-Object { $_ -like "$repo_root\upstream\emscripten*" }
$number_of_items = $path_arr.count
[System.Collections.ArrayList]$rest_of_path = @()
Foreach ($item in $path_arr) {
if (
($item -like "$repo_root*") -or
($item -like "$repo_root\node*") -or
($item -like "$repo_root\python*") -or
($item -like "$repo_root\java*") -or
($item -like "$repo_root\upstream\emscripten*")
) {
echo "$item is on the PATH"
}
else {
$rest_of_path.add($item) | Out-Null
}
}
# compare the PATHs before activation and after activation
if (Compare-Object -ReferenceObject $path_before_arr -DifferenceObject $rest_of_path ) {
echo "Old path is ............................."
echo $path_before_arr
echo "Current rest of path is ................."
echo $rest_of_path
throw "some parts of PATH are removed"
}
# Compare the other untouched PATH
if ($env:SYSTEM_FLAG) {
if (Compare-Object -ReferenceObject $PATH_USER_BEFORE.Split(';') -DifferenceObject $PATH_USER.Split(';') ) {
echo "Old user path is ...................."
echo $PATH_USER_BEFORE
echo "Current user path is ................"
echo $PATH_USER
throw "User PATH are changed while --system had been provided"
}
}
elseif ($env:PERMANENT_FLAG) {
if (Compare-Object -ReferenceObject $PATH_MACHINE_BEFORE.Split(';') -DifferenceObject $PATH_MACHINE.Split(';') ) {
echo "Old machine path is.................."
echo $PATH_MACHINE_BEFORE
echo "Current machine path is.............."
echo $PATH_MACHINE
throw "MACHINE PATH are changed while --system was not provided"
}
} else {
if (
(Compare-Object -ReferenceObject $PATH_MACHINE_BEFORE.Split(';') -DifferenceObject $PATH_MACHINE.Split(';')) -or
(Compare-Object -ReferenceObject $PATH_MACHINE_BEFORE.Split(';') -DifferenceObject $PATH_MACHINE.Split(';'))
) {
echo "Old machine path is.................."
echo $PATH_MACHINE_BEFORE
echo "Current machine path is.............."
echo $PATH_MACHINE
echo "Old user path is ...................."
echo $PATH_USER_BEFORE
echo "Current user path is ................"
echo $PATH_USER
throw "MACHINE/USER PATH are changed while no flag was provided"
}
}
}
finally {
# Recover pre-split PATH
refreshenv
[Environment]::SetEnvironmentVariable("Path", $PATH_USER_BEFORE, "User")
try {
[Environment]::SetEnvironmentVariable("Path", $PATH_MACHINE_BEFORE, "Machine")
}
catch {}
[Environment]::SetEnvironmentVariable("Path", $PATH_Process_BEFORE, "Process")
# Recover pre activation env variables
[Environment]::SetEnvironmentVariable("EMSDK", $null, "User")
[Environment]::SetEnvironmentVariable("EMSDK_NODE", $null, "User")
[Environment]::SetEnvironmentVariable("EMSDK_PYTHON", $null, "User")
[Environment]::SetEnvironmentVariable("JAVA_HOME", $null, "User")
try {
[Environment]::SetEnvironmentVariable("EMSDK", $null, "Machine")
[Environment]::SetEnvironmentVariable("EMSDK_NODE", $null, "Machine")
[Environment]::SetEnvironmentVariable("EMSDK_PYTHON", $null, "Machine")
[Environment]::SetEnvironmentVariable("JAVA_HOME", $null, "Machine")
} catch {}
[Environment]::SetEnvironmentVariable("EMSDK", $null, "Process")
[Environment]::SetEnvironmentVariable("EMSDK_NODE", $null, "Process")
[Environment]::SetEnvironmentVariable("EMSDK_PYTHON", $null, "Process")
[Environment]::SetEnvironmentVariable("JAVA_HOME", $null, "Process")
refreshenv
}