133 lines
4.6 KiB
PowerShell
133 lines
4.6 KiB
PowerShell
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||
|
|
||
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||
|
# #######################################################################
|
||
|
|
||
|
function Compare-CommonArgs {
|
||
|
$CMDArgs = $args[0]
|
||
|
# These aruments take precedence and call for no futher parsing of arguments
|
||
|
# invoke actual Spack entrypoint with that context and exit after
|
||
|
"--help", "-h", "--version", "-V" | ForEach-Object {
|
||
|
$arg_opt = $_
|
||
|
if(($CMDArgs) -and ([bool]($CMDArgs.Where({$_ -eq $arg_opt})))) {
|
||
|
return $true
|
||
|
}
|
||
|
}
|
||
|
return $false
|
||
|
}
|
||
|
|
||
|
function Read-SpackArgs {
|
||
|
$SpackCMD_params = @()
|
||
|
$SpackSubCommand = $NULL
|
||
|
$SpackSubCommandArgs = @()
|
||
|
$args_ = $args[0]
|
||
|
$args_ | ForEach-Object {
|
||
|
if (!$SpackSubCommand) {
|
||
|
if($_.SubString(0,1) -eq "-")
|
||
|
{
|
||
|
$SpackCMD_params += $_
|
||
|
}
|
||
|
else{
|
||
|
$SpackSubCommand = $_
|
||
|
}
|
||
|
}
|
||
|
else{
|
||
|
$SpackSubCommandArgs += $_
|
||
|
}
|
||
|
}
|
||
|
return $SpackCMD_params, $SpackSubCommand, $SpackSubCommandArgs
|
||
|
}
|
||
|
|
||
|
function Invoke-SpackCD {
|
||
|
if (Compare-CommonArgs $SpackSubCommandArgs) {
|
||
|
python $Env:SPACK_ROOT/bin/spack cd -h
|
||
|
}
|
||
|
else {
|
||
|
$LOC = $(python $Env:SPACK_ROOT/bin/spack location $SpackSubCommandArgs)
|
||
|
if (($NULL -ne $LOC)){
|
||
|
if ( Test-Path -Path $LOC){
|
||
|
Set-Location $LOC
|
||
|
}
|
||
|
else{
|
||
|
exit 1
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
exit 1
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function Invoke-SpackEnv {
|
||
|
if (Compare-CommonArgs $SpackSubCommandArgs[0]) {
|
||
|
python $Env:SPACK_ROOT/bin/spack env -h
|
||
|
}
|
||
|
else {
|
||
|
$SubCommandSubCommand = $SpackSubCommandArgs[0]
|
||
|
$SubCommandSubCommandArgs = $SpackSubCommandArgs[1..$SpackSubCommandArgs.Count]
|
||
|
switch ($SubCommandSubCommand) {
|
||
|
"activate" {
|
||
|
if (Compare-CommonArgs $SubCommandSubCommandArgs) {
|
||
|
python $Env:SPACK_ROOT/bin/spack env activate $SubCommandSubCommandArgs
|
||
|
}
|
||
|
elseif ([bool]($SubCommandSubCommandArgs.Where({$_ -eq "--pwsh"}))) {
|
||
|
python $Env:SPACK_ROOT/bin/spack env activate $SubCommandSubCommandArgs
|
||
|
}
|
||
|
elseif (!$SubCommandSubCommandArgs) {
|
||
|
python $Env:SPACK_ROOT/bin/spack env activate $SubCommandSubCommandArgs
|
||
|
}
|
||
|
else {
|
||
|
$SpackEnv = $(python $Env:SPACK_ROOT/bin/spack $SpackCMD_params env activate "--pwsh" $SubCommandSubCommandArgs)
|
||
|
$ExecutionContext.InvokeCommand($SpackEnv)
|
||
|
}
|
||
|
}
|
||
|
"deactivate" {
|
||
|
if ([bool]($SubCommandSubCommandArgs.Where({$_ -eq "--pwsh"}))) {
|
||
|
python $Env:SPACK_ROOT/bin/spack env deactivate $SubCommandSubCommandArgs
|
||
|
}
|
||
|
elseif($SubCommandSubCommandArgs) {
|
||
|
python $Env:SPACK_ROOT/bin/spack env deactivate -h
|
||
|
}
|
||
|
else {
|
||
|
$SpackEnv = $(python $Env:SPACK_ROOT/bin/spack $SpackCMD_params env deactivate --pwsh)
|
||
|
$ExecutionContext.InvokeCommand($SpackEnv)
|
||
|
}
|
||
|
}
|
||
|
default {python $Env:SPACK_ROOT/bin/spack $SpackCMD_params $SpackSubCommand $SpackSubCommandArgs}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function Invoke-SpackLoad {
|
||
|
if (Compare-CommonArgs $SpackSubCommandArgs) {
|
||
|
python $Env:SPACK_ROOT/bin/spack $SpackCMD_params $SpackSubCommand $SpackSubCommandArgs
|
||
|
}
|
||
|
elseif ([bool]($SpackSubCommandArgs.Where({($_ -eq "--pwsh") -or ($_ -eq "--list")}))) {
|
||
|
python $Env:SPACK_ROOT/bin/spack $SpackCMD_params $SpackSubCommand $SpackSubCommandArgs
|
||
|
}
|
||
|
else {
|
||
|
$SpackEnv = $(python $Env:SPACK_ROOT/bin/spack $SpackCMD_params $SpackSubCommand "--pwsh" $SpackSubCommandArgs)
|
||
|
$ExecutionContext.InvokeCommand($SpackEnv)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
$SpackCMD_params, $SpackSubCommand, $SpackSubCommandArgs = Read-SpackArgs $args
|
||
|
|
||
|
if (Compare-CommonArgs $SpackCMD_params) {
|
||
|
python $Env:SPACK_ROOT/bin/spack $SpackCMD_params $SpackSubCommand $SpackSubCommandArgs
|
||
|
exit $LASTEXITCODE
|
||
|
}
|
||
|
|
||
|
# Process Spack commands with special conditions
|
||
|
# all other commands are piped directly to Spack
|
||
|
switch($SpackSubCommand)
|
||
|
{
|
||
|
"cd" {Invoke-SpackCD}
|
||
|
"env" {Invoke-SpackEnv}
|
||
|
"load" {Invoke-SpackLoad}
|
||
|
"unload" {Invoke-SpackLoad}
|
||
|
default {python $Env:SPACK_ROOT/bin/spack $SpackCMD_params $SpackSubCommand $SpackSubCommandArgs}
|
||
|
}
|