bpo-30450: Pull Windows dependencies from GitHub rather than svn (GH-… · pythoncapi/cpython@51599e2 · GitHub
Skip to content

Commit 51599e2

Browse files
authored
bpo-30450: Pull Windows dependencies from GitHub rather than svn (pythonGH-1783)
The Windows build now depends on Python 3.6 to fetch externals, but it will be downloaded via NuGet (which is downloaded via PowerShell) if it is not available via `py -3.6`. This means the only thing that must be installed on a modern Windows box to do a full build of CPython with all extensions is Visual Studio. Also fixes an outdated note about _lzma in PCbuild/readme.txt
1 parent 7a80183 commit 51599e2

4 files changed

Lines changed: 241 additions & 87 deletions

File tree

PCbuild/get_external.py

Lines changed: 60 additions & 0 deletions

PCbuild/get_externals.bat

Lines changed: 66 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -2,58 +2,59 @@
22
setlocal
33
rem Simple script to fetch source for external libraries
44

5-
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)
79

8-
if "%SVNROOT%"=="" set SVNROOT=http://svn.python.org/projects/external/
10+
set DO_FETCH=true
11+
set DO_CLEAN=false
912

10-
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
1822

23+
if "%DO_CLEAN%"=="false" goto fetch
1924
:clean
2025
echo.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
)
3930

31+
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
)
5153

5254
echo.Fetching external libraries...
5355

5456
set libraries=
5557
set libraries=%libraries% bzip2-1.0.6
56-
if NOT "%IncludeSSL%"=="false" set libraries=%libraries% nasm-2.11.06
5758
if NOT "%IncludeSSL%"=="false" set libraries=%libraries% openssl-1.0.2k
5859
set libraries=%libraries% sqlite-3.14.2.0
5960
if 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
6263
set libraries=%libraries% xz-5.2.2
6364

6465
for %%e in (%libraries%) do (
65-
if exist %%e (
66+
if exist "%EXTERNALS_DIR%\%%e" (
6667
echo.%%e already exists, skipping.
6768
) else (
6869
echo.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
)
7288

89+
echo Finished.
7390
goto end
7491

7592
: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
7895
echo.
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.
8298
echo.
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.
85104
echo.
86105
echo.Use the --clean-only option to do the same cleaning, without pulling in
87106
echo.anything new.
88107
echo.
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
99108
exit /b -1
100109

101-
102110
:end
103-
echo Finished.
104-
popd

PCbuild/readme.txt

Lines changed: 16 additions & 8 deletions

0 commit comments

Comments
 (0)