bpo-30450: Pull Windows dependencies from GitHub rather than svn (GH-… · python/cpython@04431c9
@@ -2,58 +2,59 @@
22setlocal
33rem Simple script to fetch source for external libraries
445-if not exist "%~dp0..\externals" mkdir "%~dp0..\externals"
6-pushd "%~dp0..\externals"
5+if "%PCBUILD%"=="" (set PCBUILD=%~dp0)
6+if "%EXTERNALS_DIR%"=="" (set EXTERNALS_DIR=%PCBUILD%\..\externals)
7+if "%NUGET%"=="" (set NUGET=%EXTERNALS_DIR%\nuget.exe)
8+if "%NUGET_URL%"=="" (set NUGET_URL=https://aka.ms/nugetclidl)
798-if "%SVNROOT%"=="" set SVNROOT=http://svn.python.org/projects/external/
10+set DO_FETCH=true
11+set DO_CLEAN=false
91210-rem Optionally clean up first. Be warned that this can be very destructive!
11-if not "%1"=="" (
12-for %%c in (-c --clean --clean-only) do (
13-if "%1"=="%%c" goto clean
14- )
15-goto usage
16-)
17-goto fetch
13+:CheckOpts
14+if "%~1"=="--no-tkinter" (set IncludeTkinter=false) & shift & goto CheckOpts
15+if "%~1"=="--no-openssl" (set IncludeSSL=false) & shift & goto CheckOpts
16+if "%~1"=="--python" (set PYTHON_FOR_BUILD=%2) & shift & shift & goto CheckOpts
17+if "%~1"=="--organization" (set ORG=%2) & shift & shift & goto CheckOpts
18+if "%~1"=="-c" (set DO_CLEAN=true) & shift & goto CheckOpts
19+if "%~1"=="--clean" (set DO_CLEAN=true) & shift & goto CheckOpts
20+if "%~1"=="--clean-only" (set DO_FETCH=false) & goto clean
21+if "x%~1" NEQ "x" goto usage
182223+if "%DO_CLEAN%"=="false" goto fetch
1924:clean
2025echo.Cleaning up external libraries.
21-for /D %%d in (
22- bzip2-*
23- db-*
24- nasm-*
25- openssl-*
26- tcl-*
27- tcltk*
28- tk-*
29- tix-*
30- sqlite-*
31- xz-*
32- ) do (
33-echo.Removing %%d
34-rmdir /s /q %%d
35-)
36-if "%1"=="--clean-only" (
37-goto end
26+if exist "%EXTERNALS_DIR%" (
27+rem Sometimes this fails the first time; try it twice
28+rmdir /s /q "%EXTERNALS_DIR%" || rmdir /s /q "%EXTERNALS_DIR%"
3829)
393031+if "%DO_FETCH%"=="false" goto end
4032:fetch
41-rem Fetch current versions
42-43-svn --version > nul 2>&1
44-if ERRORLEVEL 9009 (
45-echo.svn.exe must be on your PATH.
46-echo.Try TortoiseSVN (http://tortoisesvn.net/^) and be sure to check the
47-echo.command line tools option.
48-popd
49-exit /b 1
33+34+if "%ORG%"=="" (set ORG=python)
35+36+if "%PYTHON_FOR_BUILD%"=="" (
37+echo Checking for installed python...
38+ py -3.6 -V >nul 2>&1 && (set PYTHON_FOR_BUILD=py -3.6)
39+)
40+if "%PYTHON_FOR_BUILD%"=="" (
41+if NOT exist "%EXTERNALS_DIR%" mkdir "%EXTERNALS_DIR%"
42+if NOT exist "%NUGET%" (
43+echo Downloading nuget...
44+rem NB: Must use single quotes around NUGET here, NOT double!
45+rem Otherwise, a space in the path would break things
46+ powershell.exe -Command Invoke-WebRequest %NUGET_URL% -OutFile '%NUGET%'
47+ )
48+echo Installing Python via nuget...
49+"%NUGET%" install pythonx86 -ExcludeVersion -OutputDirectory "%EXTERNALS_DIR%"
50+rem Quote it here; it's not quoted later because "py -3.6" wouldn't work
51+set PYTHON_FOR_BUILD="%EXTERNALS_DIR%\pythonx86\tools\python.exe"
5052)
51535254echo.Fetching external libraries...
53555456set libraries=
5557set libraries=%libraries% bzip2-1.0.6
56-if NOT "%IncludeSSL%"=="false" set libraries=%libraries% nasm-2.11.06
5758if NOT "%IncludeSSL%"=="false" set libraries=%libraries% openssl-1.0.2k
5859set libraries=%libraries% sqlite-3.14.2.0
5960if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tcl-core-8.6.6.0
@@ -62,43 +63,48 @@ if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tix-8.4.3.6
6263set libraries=%libraries% xz-5.2.2
63646465for %%e in (%libraries%) do (
65-if exist %%e (
66+if exist "%EXTERNALS_DIR%\%%e" (
6667echo.%%e already exists, skipping.
6768 ) else (
6869echo.Fetching %%e...
69- svn export -q %SVNROOT%%%e
70+%PYTHON_FOR_BUILD% "%PCBUILD%get_external.py" -O %ORG% %%e
71+ )
72+)
73+74+echo.Fetching external binaries...
75+76+set binaries=
77+set binaries=%binaries%
78+if NOT "%IncludeSSL%"=="false" set binaries=%binaries% nasm-2.11.06
79+80+for %%b in (%binaries%) do (
81+if exist "%EXTERNALS_DIR%\%%b" (
82+echo.%%b already exists, skipping.
83+ ) else (
84+echo.Fetching %%b...
85+%PYTHON_FOR_BUILD% "%PCBUILD%get_external.py" -b -O %ORG% %%b
7086 )
7187)
728889+echo Finished.
7390goto end
74917592:usage
76-echo.invalid argument: %1
77-echo.usage: %~n0 [[ -c ^| --clean ] ^| --clean-only ]
93+echo.Valid options: -c, --clean, --clean-only, --organization, --python,
94+echo.--no-tkinter, --no-openssl
7895echo.
79-echo.Pull all sources necessary for compiling optional extension modules
80-echo.that rely on external libraries. Requires svn.exe to be on your PATH
81-echo.and pulls sources from %SVNROOT%.
96+echo.Pull all sources and binaries necessary for compiling optional extension
97+echo.modules that rely on external libraries.
8298echo.
83-echo.Use the -c or --clean option to clean up all external library sources
84-echo.before pulling in the current versions.
99+echo.The --organization option determines which github organization to download
100+echo.from, the --python option determines which Python 3.6+ interpreter to use
101+echo.with PCbuild\get_external.py.
102+echo.
103+echo.Use the -c or --clean option to remove the entire externals directory.
85104echo.
86105echo.Use the --clean-only option to do the same cleaning, without pulling in
87106echo.anything new.
88107echo.
89-echo.Only the first argument is checked, all others are ignored.
90-echo.
91-echo.**WARNING**: the cleaning options unconditionally remove any directory
92-echo.that is a child of
93-echo. %CD%
94-echo.and matches wildcard patterns beginning with bzip2-, db-, nasm-, openssl-,
95-echo.tcl-, tcltk, tk-, tix-, sqlite-, or xz-, and as such has the potential
96-echo.to be very destructive if you are not aware of what it is doing. Use with
97-echo.caution!
98-popd
99108exit /b -1
100109101-102110:end
103-echo Finished.
104-popd