111 lines
3.7 KiB
Batchfile
111 lines
3.7 KiB
Batchfile
@echo off
|
|
setlocal
|
|
rem Simple script to fetch source for external libraries
|
|
|
|
if "%PCBUILD%"=="" (set PCBUILD=%~dp0)
|
|
if "%EXTERNALS_DIR%"=="" (set EXTERNALS_DIR=%PCBUILD%\..\externals)
|
|
if "%NUGET%"=="" (set NUGET=%EXTERNALS_DIR%\nuget.exe)
|
|
if "%NUGET_URL%"=="" (set NUGET_URL=https://aka.ms/nugetclidl)
|
|
|
|
set DO_FETCH=true
|
|
set DO_CLEAN=false
|
|
|
|
:CheckOpts
|
|
if "%~1"=="--no-tkinter" (set IncludeTkinter=false) & shift & goto CheckOpts
|
|
if "%~1"=="--no-openssl" (set IncludeSSL=false) & shift & goto CheckOpts
|
|
if "%~1"=="--python" (set PYTHON_FOR_BUILD=%2) & shift & shift & goto CheckOpts
|
|
if "%~1"=="--organization" (set ORG=%2) & shift & shift & goto CheckOpts
|
|
if "%~1"=="-c" (set DO_CLEAN=true) & shift & goto CheckOpts
|
|
if "%~1"=="--clean" (set DO_CLEAN=true) & shift & goto CheckOpts
|
|
if "%~1"=="--clean-only" (set DO_FETCH=false) & goto clean
|
|
if "x%~1" NEQ "x" goto usage
|
|
|
|
if "%DO_CLEAN%"=="false" goto fetch
|
|
:clean
|
|
echo.Cleaning up external libraries.
|
|
if exist "%EXTERNALS_DIR%" (
|
|
rem Sometimes this fails the first time; try it twice
|
|
rmdir /s /q "%EXTERNALS_DIR%" || rmdir /s /q "%EXTERNALS_DIR%"
|
|
)
|
|
|
|
if "%DO_FETCH%"=="false" goto end
|
|
:fetch
|
|
|
|
if "%ORG%"=="" (set ORG=python)
|
|
|
|
if "%PYTHON_FOR_BUILD%"=="" (
|
|
echo Checking for installed python...
|
|
py -3.6 -V >nul 2>&1 && (set PYTHON_FOR_BUILD=py -3.6)
|
|
)
|
|
if "%PYTHON_FOR_BUILD%"=="" (
|
|
if NOT exist "%EXTERNALS_DIR%" mkdir "%EXTERNALS_DIR%"
|
|
if NOT exist "%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
|
|
powershell.exe -Command Invoke-WebRequest %NUGET_URL% -OutFile '%NUGET%'
|
|
)
|
|
echo Installing Python via nuget...
|
|
"%NUGET%" install pythonx86 -ExcludeVersion -OutputDirectory "%EXTERNALS_DIR%"
|
|
rem Quote it here; it's not quoted later because "py -3.6" wouldn't work
|
|
set PYTHON_FOR_BUILD="%EXTERNALS_DIR%\pythonx86\tools\python.exe"
|
|
)
|
|
|
|
echo.Fetching external libraries...
|
|
|
|
set libraries=
|
|
set libraries=%libraries% bzip2-1.0.6
|
|
if NOT "%IncludeSSL%"=="false" set libraries=%libraries% openssl-1.0.2k
|
|
set libraries=%libraries% sqlite-3.14.2.0
|
|
if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tcl-core-8.6.6.0
|
|
if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tk-8.6.6.0
|
|
if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tix-8.4.3.6
|
|
set libraries=%libraries% xz-5.2.2
|
|
|
|
for %%e in (%libraries%) do (
|
|
if exist "%EXTERNALS_DIR%\%%e" (
|
|
echo.%%e already exists, skipping.
|
|
) else (
|
|
echo.Fetching %%e...
|
|
%PYTHON_FOR_BUILD% "%PCBUILD%get_external.py" -O %ORG% %%e
|
|
)
|
|
)
|
|
|
|
echo.Fetching external binaries...
|
|
|
|
set binaries=
|
|
set binaries=%binaries%
|
|
if NOT "%IncludeSSL%"=="false" set binaries=%binaries% nasm-2.11.06
|
|
|
|
for %%b in (%binaries%) do (
|
|
if exist "%EXTERNALS_DIR%\%%b" (
|
|
echo.%%b already exists, skipping.
|
|
) else (
|
|
echo.Fetching %%b...
|
|
%PYTHON_FOR_BUILD% "%PCBUILD%get_external.py" -b -O %ORG% %%b
|
|
)
|
|
)
|
|
|
|
echo Finished.
|
|
goto end
|
|
|
|
:usage
|
|
echo.Valid options: -c, --clean, --clean-only, --organization, --python,
|
|
echo.--no-tkinter, --no-openssl
|
|
echo.
|
|
echo.Pull all sources and binaries necessary for compiling optional extension
|
|
echo.modules that rely on external libraries.
|
|
echo.
|
|
echo.The --organization option determines which github organization to download
|
|
echo.from, the --python option determines which Python 3.6+ interpreter to use
|
|
echo.with PCbuild\get_external.py.
|
|
echo.
|
|
echo.Use the -c or --clean option to remove the entire externals directory.
|
|
echo.
|
|
echo.Use the --clean-only option to do the same cleaning, without pulling in
|
|
echo.anything new.
|
|
echo.
|
|
exit /b -1
|
|
|
|
:end
|