| # 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("EM_CONFIG", $null, "User") |
| [Environment]::SetEnvironmentVariable("EMSDK_NODE", $null, "User") |
| [Environment]::SetEnvironmentVariable("EMSDK_PYTHON", $null, "User") |
| [Environment]::SetEnvironmentVariable("JAVA_HOME", $null, "User") |
| [Environment]::SetEnvironmentVariable("EM_CACHE", $null, "User") |
| |
| try { |
| [Environment]::SetEnvironmentVariable("EMSDK", $null, "Machine") |
| [Environment]::SetEnvironmentVariable("EM_CONFIG", $null, "Machine") |
| [Environment]::SetEnvironmentVariable("EMSDK_NODE", $null, "Machine") |
| [Environment]::SetEnvironmentVariable("EMSDK_PYTHON", $null, "Machine") |
| [Environment]::SetEnvironmentVariable("JAVA_HOME", $null, "Machine") |
| [Environment]::SetEnvironmentVariable("EM_CACHE", $null, "Machine") |
| } catch {} |
| |
| |
| [Environment]::SetEnvironmentVariable("EMSDK", $null, "Process") |
| [Environment]::SetEnvironmentVariable("EM_CONFIG", $null, "Process") |
| [Environment]::SetEnvironmentVariable("EMSDK_NODE", $null, "Process") |
| [Environment]::SetEnvironmentVariable("EMSDK_PYTHON", $null, "Process") |
| [Environment]::SetEnvironmentVariable("JAVA_HOME", $null, "Process") |
| [Environment]::SetEnvironmentVariable("EM_CACHE", $null, "Process") |
| |
| refreshenv |
| |
| } |