2017-07-17 11:15:48 +02: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 =  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-11-18 19:32:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@ rem If there is an active virtual env, use that one  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@ if  NOT  " %VIRTUAL_ENV% " == " "  ( set  PYTHON = " %VIRTUAL_ENV% \Scripts\python.exe " )  &  ( set  _Py_Python_Source = found in virtual env)  &  goto  : found  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-01-10 01:19:29 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@ set  _Py_EXTERNALS_DIR = %EXTERNALS_DIR%  
						 
					
						
							
								
									
										
										
										
											2017-07-17 11:15:48 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								@ 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  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-07-18 19:31:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@ rem If HOST_PYTHON is recent enough, use that  
						 
					
						
							
								
									
										
										
										
											2018-02-17 18:59:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@ if  NOT  " %HOST_PYTHON% " == " "  @ %HOST_PYTHON%  -Ec " import sys; assert sys.version_info[:2] >= (3, 6) "  > nul 2 > nul &&  ( set  PYTHON = " %HOST_PYTHON% " )  &&  ( set  _Py_Python_Source = found as HOST_PYTHON)  &&  goto  : found  
						 
					
						
							
								
									
										
										
										
											2017-07-18 19:31:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-07-17 11:15:48 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								@ rem If py.exe finds a recent enough version, use that one  
						 
					
						
							
								
									
										
										
										
											2019-11-20 19:25:45 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@ for  %% p in  ( 3.8 3.7 3.6)  do  @ py -%% p -EV > nul 2 >& 1  &&  ( set  PYTHON = py -%% p)  &&  ( set  _Py_Python_Source = found %% p with py.exe)  &&  goto  : found  
						 
					
						
							
								
									
										
										
										
											2017-07-17 11:15:48 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@ if  NOT  exist  " %_Py_EXTERNALS_DIR% "  mkdir  " %_Py_EXTERNALS_DIR% "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@ set  _Py_NUGET = %NUGET%  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@ set  _Py_NUGET_URL = %NUGET_URL%  
						 
					
						
							
								
									
										
										
										
											2017-07-18 19:31:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@ set  _Py_HOST_PYTHON = %HOST_PYTHON%  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@ if  " %_Py_HOST_PYTHON% " == " "  set  _Py_HOST_PYTHON = py 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@ if  " %_Py_NUGET% " == " "  ( set  _Py_NUGET = %_Py_EXTERNALS_DIR% \nuget.exe)  
						 
					
						
							
								
									
										
										
										
											2017-07-17 11:15:48 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								@ 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 14:55:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @ rem If it fails, retry with any available copy of Python 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-18 19:31:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @ powershell.exe -Command Invoke-WebRequest %_Py_NUGET_URL%  -OutFile '%_Py_NUGET% '
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @ if  errorlevel  1  ( 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-17 18:59:03 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        @ %_Py_HOST_PYTHON%  -E " %~dp0 \urlretrieve.py "  " %_Py_NUGET_URL% "  " %_Py_NUGET% " 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-18 19:31:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-17 11:15:48 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								)  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@ echo  Installing Python via nuget... 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@ " %_Py_NUGET% "  install pythonx86 -ExcludeVersion -OutputDirectory " %_Py_EXTERNALS_DIR% "  
						 
					
						
							
								
									
										
										
										
											2018-09-17 14:41:53 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@ rem Quote it here; it's not quoted later because "py -x.y" wouldn't work  
						 
					
						
							
								
									
										
										
										
											2017-07-17 11:15:48 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								@ if  not  errorlevel  1  ( set  PYTHON = " %_Py_EXTERNALS_DIR% \pythonx86\tools\python.exe " )  &  ( set  _Py_Python_Source = found on nuget.org)  &  goto  : found  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-07-18 19:31:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@ set  _Py_Python_Source =  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@ set  _Py_EXTERNALS_DIR =  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@ set  _Py_NUGET =  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@ set  _Py_NUGET_URL =  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@ set  _Py_HOST_PYTHON =  
						 
					
						
							
								
									
										
										
										
											2017-07-17 11:15:48 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								@ exit  /b 1 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								: found  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@ echo  Using %PYTHON%  (%_Py_Python_Source% ) 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@ set  _Py_Python_Source =  
						 
					
						
							
								
									
										
										
										
											2017-07-18 19:31:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@ set  _Py_EXTERNALS_DIR =  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@ set  _Py_NUGET =  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@ set  _Py_NUGET_URL =  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@ set  _Py_HOST_PYTHON =