2017-07-17 09:15:48 +00:00
@ rem
@ rem Searches for python.exe and may download a private copy from nuget.
@ rem
@ rem This file is supposed to modify the state of the caller (specifically
@ rem the MSBUILD variable), so we do not use setlocal or echo, and avoid
@ rem changing any other persistent state.
@ rem
@ rem No arguments provided means do full search
@ if '%1 ' EQU '' goto : begin_search
@ rem One argument may be the full path. Use a goto so we don't try to
@ rem parse the next if statement - incorrect quoting in the multi-arg
@ rem case can cause us to break immediately.
@ if '%2 ' EQU '' goto : one_arg
@ rem Entire command line may represent the full path if quoting failed.
@ if exist " %* " ( set PYTHON = " %* " ) & ( set _Py_Python_Source = from environment) & goto : found
@ goto : begin_search
: one_arg
@ if exist " %~1 " ( set PYTHON = " %~1 " ) & ( set _Py_Python_Source = from environment) & goto : found
: begin_search
@ set PYTHON =
@ set _Py_EXTERNALS_DIR = %EXTERNAL_DIR%
@ if " %_Py_EXTERNALS_DIR% " == " " ( set _Py_EXTERNALS_DIR = %~dp0 \..\externals)
@ rem If we have Python in externals, use that one
@ if exist " %_Py_EXTERNALS_DIR% \pythonx86\tools\python.exe " ( set PYTHON = " %_Py_EXTERNALS_DIR% \pythonx86\tools\python.exe " ) & ( set _Py_Python_Source = found in externals directory) & goto : found
@ rem If py.exe finds a recent enough version, use that one
@ py -3.6 -V > nul 2 >& 1 && ( set PYTHON = py -3.6) && ( set _Py_Python_Source = found with py.exe) && goto : found
@ if NOT exist " %_Py_EXTERNALS_DIR% " mkdir " %_Py_EXTERNALS_DIR% "
@ set _Py_NUGET = %NUGET%
@ set _Py_NUGET_URL = %NUGET_URL%
@ if " %_Py_NUGET% " == " " ( set _Py_NUGET = %EXTERNALS_DIR% \nuget.exe)
@ if " %_Py_NUGET_URL% " == " " ( set _Py_NUGET_URL = https://aka.ms/nugetclidl)
@ if NOT exist " %_Py_NUGET% " (
@ echo Downloading nuget...
@ rem NB: Must use single quotes around NUGET here, NOT double!
@ rem Otherwise, a space in the path would break things
2017-07-17 12:55:28 +00:00
@ rem If it fails, retry with any available copy of Python
@ powershell.exe -Command Invoke-WebRequest %_Py_NUGET_URL% -OutFile '%_Py_NUGET% ' || @ py -c " %~dp0 \urlretrieve.py " " %_Py_NUGET_URL% " " %_Py_NUGET% "
2017-07-17 09:15:48 +00:00
)
@ echo Installing Python via nuget...
@ " %_Py_NUGET% " install pythonx86 -ExcludeVersion -OutputDirectory " %_Py_EXTERNALS_DIR% "
@ rem Quote it here; it's not quoted later because "py -3.6" wouldn't work
@ if not errorlevel 1 ( set PYTHON = " %_Py_EXTERNALS_DIR% \pythonx86\tools\python.exe " ) & ( set _Py_Python_Source = found on nuget.org) & goto : found
@ exit /b 1
: found
@ echo Using %PYTHON% (%_Py_Python_Source% )
@ set _Py_Python_Source =