bpo-30450: Pull Windows dependencies from GitHub rather than svn (GH-… · python/cpython@04431c9

@@ -2,58 +2,59 @@

22

setlocal

33

rem 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

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

)

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

)

51535254

echo.Fetching external libraries...

53555456

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

63646465

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

)

728889+

echo Finished.

7390

goto 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

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

100109101-102110

:end

103-

echo Finished.

104-

popd