From 9bbbf602687b7feba905a2b9a4325dbe871965ca Mon Sep 17 00:00:00 2001 From: WildCard65 Date: Tue, 28 Jul 2020 13:16:51 -0400 Subject: [PATCH] Updated 'checkout-deps' to check for 'pip'/'pip3' prior to installing 'AMBuild' --- tools/checkout-deps.ps1 | 53 ++++++++++++++++++++++++++++++++++------- tools/checkout-deps.sh | 48 +++++++++++++++++++++++++++++++------ 2 files changed, 86 insertions(+), 15 deletions(-) diff --git a/tools/checkout-deps.ps1 b/tools/checkout-deps.ps1 index f7b4f537..01f6b51b 100644 --- a/tools/checkout-deps.ps1 +++ b/tools/checkout-deps.ps1 @@ -32,7 +32,7 @@ param( ) ) -Function Checkout-Repo +Function Get-Repository { param( [Parameter(Mandatory=$true)][string]$Name, @@ -74,7 +74,7 @@ if (-not (Test-Path "sourcemod" -PathType Container)) Exit 1 } -Checkout-Repo -Name "mmsource-1.10" -Branch "1.10-dev" -Repo "https://github.com/alliedmodders/metamod-source.git" +Get-Repository -Name "mmsource-1.10" -Branch "1.10-dev" -Repo "https://github.com/alliedmodders/metamod-source.git" if (-not (Test-Path "hl2sdk-proxy-repo" -PathType Container)) { @@ -87,12 +87,49 @@ else Set-Location .. } -$SDKS | % { - Checkout-Repo -Name "hl2sdk-$_" -Branch $_ -Repo "hl2sdk-proxy-repo" "https://github.com/alliedmodders/hl2sdk.git" +$SDKS | ForEach-Object { + Get-Repository -Name "hl2sdk-$_" -Branch $_ -Repo "hl2sdk-proxy-repo" "https://github.com/alliedmodders/hl2sdk.git" } -Checkout-Repo -Name "ambuild" -Branch "master" -Repo "https://github.com/alliedmodders/ambuild.git" -Set-Location ambuild -& python setup.py install +# Find a suitable installation of Python +$PYTHON_CMD = Get-Command 'python' -ErrorAction SilentlyContinue +if ($NULL -eq $PYTHON_CMD) +{ + $PYTHON_CMD = Get-Command 'python3' -ErrorAction SilentlyContinue + if ($NULL -eq $PYTHON_CMD) + { + $PYTHON_CMD = Get-Command 'py' -ErrorAction SilentlyContinue + if ($NULL -eq $PYTHON_CMD) + { + Write-Error 'No suitable installation of Python detected' + Exit 1 + } + } +} -Set-Location .. +$PYTHON_CMD = $PYTHON_CMD.Source # Convert the result into a string path. + +& $PYTHON_CMD -c 'import ambuild2' 2>&1 1>$NULL +if ($LastExitCode -eq 1) +{ + Write-Host -ForegroundColor Red "AMBuild is required to build SourceMod" + + # Ensure PIP is installed, otherwise, install it. + & $PYTHON_CMD -m pip --version 2>&1 1>$NULL # We use PIP's '--version' as it's the least verbose. + if ($LastExitCode -eq 1) { + Write-Host -ForegroundColor Red 'The detected Python installation does not have PIP' + Write-Host 'Installing the latest version of PIP available (VIA "get-pip.py")' + + $GET_PIP = Join-Path $(Resolve-Path './') 'get-pip.py' + Invoke-WebRequest -Uri "https://bootstrap.pypa.io/get-pip.py" -OutFile $GET_PIP + + & $PYTHON_CMD $GET_PIP + if ($LastExitCode -eq 1) { + Write-Error 'Installation of PIP has failed' + Exit 1 + } + } + + Get-Repository -Name "ambuild" -Branch "master" -Repo "https://github.com/alliedmodders/ambuild.git" + & $PYTHON_CMD -m pip install ./ambuild +} diff --git a/tools/checkout-deps.sh b/tools/checkout-deps.sh index 0b770d91..addc68b2 100755 --- a/tools/checkout-deps.sh +++ b/tools/checkout-deps.sh @@ -110,11 +110,11 @@ checkout if [ -z ${sdks+x} ]; then sdks=( csgo hl2dm nucleardawn l4d2 dods l4d css tf2 insurgency sdk2013 doi ) - + if [ $ismac -eq 0 ]; then # Add these SDKs for Windows or Linux sdks+=( orangebox blade episode1 bms ) - + # Add more SDKs for Windows only if [ $iswin -eq 1 ]; then sdks+=( darkm swarm bgt eye contagion ) @@ -140,20 +140,54 @@ do checkout done -`python -c "import ambuild2"` || `python3 -c "import ambuild2"` +python_cmd=`command -v python` +if [ -z "$python_cmd" ]; then + python_cmd=`command -v python3` + + if [ -z "$python_cmd" ]; then + echo "No suitable installation of Python detected" + exit 1 + fi +fi + +`$python_cmd -c "import ambuild2"` 2>&1 1>/dev/null if [ $? -eq 1 ]; then + echo "AMBuild is required to build SourceMod" + + `$python_cmd -m pip --version` 2>&1 1>/dev/null + if [ $? -eq 1 ]; then + echo "The detected Python installation does not have PIP" + echo "Installing the latest version of PIP available (VIA \"get-pip.py\")" + + get_pip="./get-pip.py" + get_pip_url="https://bootstrap.pypa.io/get-pip.py" + + if [ `command -v wget` ]; then + wget $get_pip_url -O $get_pip + elif [ `command -v curl` ]; then + curl -o $get_pip $get_pip_url + else + echo "Failed to locate wget or curl. Install one of these programs to download 'get-pip.py'." + exit 1 + fi + + $python_cmd $get_pip + if [ $? -eq 1 ]; then + echo "Installation of PIP has failed" + exit 1 + fi + fi + repo="https://github.com/alliedmodders/ambuild" origin= branch=master name=ambuild checkout - cd ambuild if [ $iswin -eq 1 ] || [ $ismac -eq 1 ]; then - python setup.py install + $python_cmd -m pip install ./ambuild else - python setup.py build echo "Installing AMBuild at the user level. Location can be: ~/.local/bin" - python setup.py install --user + $python_cmd -m pip install --user ./ambuild fi fi