Commit 1db43f98 authored by Zachary Ware's avatar Zachary Ware

Issue #24986: Allow building Python without external libraries on Windows

This modifies the behavior of the '-e' flag to PCbuild\build.bat: when '-e'
is not supplied, no attempt will be made to build extension modules that
require external libraries, even if the external libraries are present.

Also adds '--no-<module>' flags to PCbuild\build.bat, where '<module>' is
one of 'ssl', 'tkinter', or 'bsddb', to allow skipping just those modules
(if '-e' is given).
parent 7ab6cb44
...@@ -134,6 +134,9 @@ Library ...@@ -134,6 +134,9 @@ Library
Build Build
----- -----
- Issue #24986: It is now possible to build Python on Windows without errors
when external libraries are not available.
- Issue #24508: Backported the MSBuild project files from Python 3.5. The - Issue #24508: Backported the MSBuild project files from Python 3.5. The
backported files replace the old project files in PCbuild; the old files moved backported files replace the old project files in PCbuild; the old files moved
to PC/VS9.0 and remain supported. to PC/VS9.0 and remain supported.
......
...@@ -17,12 +17,20 @@ echo. -h Display this help message ...@@ -17,12 +17,20 @@ echo. -h Display this help message
echo. -r Target Rebuild instead of Build echo. -r Target Rebuild instead of Build
echo. -d Set the configuration to Debug echo. -d Set the configuration to Debug
echo. -e Build external libraries fetched by get_externals.bat echo. -e Build external libraries fetched by get_externals.bat
echo. Extension modules that depend on external libraries will not attempt
echo. to build if this flag is not present
echo. -m Enable parallel build echo. -m Enable parallel build
echo. -M Disable parallel build (disabled by default) echo. -M Disable parallel build (disabled by default)
echo. -v Increased output messages echo. -v Increased output messages
echo. -k Attempt to kill any running Pythons before building (usually done echo. -k Attempt to kill any running Pythons before building (usually done
echo. automatically by the pythoncore project) echo. automatically by the pythoncore project)
echo. echo.
echo.Available flags to avoid building certain modules.
echo.These flags have no effect if '-e' is not given:
echo. --no-ssl Do not attempt to build _ssl
echo. --no-tkinter Do not attempt to build Tkinter
echo. --no-bsddb Do not attempt to build _bsddb
echo.
echo.Available arguments: echo.Available arguments:
echo. -c Release ^| Debug ^| PGInstrument ^| PGUpdate echo. -c Release ^| Debug ^| PGInstrument ^| PGUpdate
echo. Set the configuration (default: Release) echo. Set the configuration (default: Release)
...@@ -50,11 +58,22 @@ if "%~1"=="-p" (set platf=%2) & shift & shift & goto CheckOpts ...@@ -50,11 +58,22 @@ if "%~1"=="-p" (set platf=%2) & shift & shift & goto CheckOpts
if "%~1"=="-r" (set target=Rebuild) & shift & goto CheckOpts if "%~1"=="-r" (set target=Rebuild) & shift & goto CheckOpts
if "%~1"=="-t" (set target=%2) & shift & shift & goto CheckOpts if "%~1"=="-t" (set target=%2) & shift & shift & goto CheckOpts
if "%~1"=="-d" (set conf=Debug) & shift & goto CheckOpts if "%~1"=="-d" (set conf=Debug) & shift & goto CheckOpts
if "%~1"=="-e" call "%dir%get_externals.bat" & shift & goto CheckOpts
if "%~1"=="-m" (set parallel=/m) & shift & goto CheckOpts if "%~1"=="-m" (set parallel=/m) & shift & goto CheckOpts
if "%~1"=="-M" (set parallel=) & shift & goto CheckOpts if "%~1"=="-M" (set parallel=) & shift & goto CheckOpts
if "%~1"=="-v" (set verbose=/v:n) & shift & goto CheckOpts if "%~1"=="-v" (set verbose=/v:n) & shift & goto CheckOpts
if "%~1"=="-k" (set kill=true) & shift & goto CheckOpts if "%~1"=="-k" (set kill=true) & shift & goto CheckOpts
rem These use the actual property names used by MSBuild. We could just let
rem them in through the environment, but we specify them on the command line
rem anyway for visibility so set defaults after this
if "%~1"=="-e" (set IncludeExternals=true) & call "%dir%get_externals.bat" & shift & goto CheckOpts
if "%~1"=="--no-ssl" (set IncludeSSL=false) & shift & goto CheckOpts
if "%~1"=="--no-tkinter" (set IncludeTkinter=false) & shift & goto CheckOpts
if "%~1"=="--no-bsddb" (set IncludeBsddb=false) & shift & goto CheckOpts
if "%IncludeExternals%"=="" set IncludeExternals=false
if "%IncludeSSL%"=="" set IncludeSSL=true
if "%IncludeTkinter%"=="" set IncludeTkinter=true
if "%IncludeBsddb%"=="" set IncludeBsddb=true
if "%platf%"=="x64" (set vs_platf=x86_amd64) if "%platf%"=="x64" (set vs_platf=x86_amd64)
...@@ -69,4 +88,9 @@ rem Call on MSBuild to do the work, echo the command. ...@@ -69,4 +88,9 @@ rem Call on MSBuild to do the work, echo the command.
rem Passing %1-9 is not the preferred option, but argument parsing in rem Passing %1-9 is not the preferred option, but argument parsing in
rem batch is, shall we say, "lackluster" rem batch is, shall we say, "lackluster"
echo on echo on
msbuild "%dir%pcbuild.proj" /t:%target% %parallel% %verbose% /p:Configuration=%conf% /p:Platform=%platf% %1 %2 %3 %4 %5 %6 %7 %8 %9 msbuild "%dir%pcbuild.proj" /t:%target% %parallel% %verbose%^
/p:Configuration=%conf% /p:Platform=%platf%^
/p:IncludeExternals=%IncludeExternals%^
/p:IncludeSSL=%IncludeSSL% /p:IncludeTkinter=%IncludeTkinter%^
/p:IncludeBsddb=%IncludeBsddb%^
%1 %2 %3 %4 %5 %6 %7 %8 %9
...@@ -5,8 +5,11 @@ ...@@ -5,8 +5,11 @@
<Platform Condition="'$(Platform)' == ''">Win32</Platform> <Platform Condition="'$(Platform)' == ''">Win32</Platform>
<Configuration Condition="'$(Configuration)' == ''">Release</Configuration> <Configuration Condition="'$(Configuration)' == ''">Release</Configuration>
<IncludeExtensions Condition="'$(IncludeExtensions)' == ''">true</IncludeExtensions> <IncludeExtensions Condition="'$(IncludeExtensions)' == ''">true</IncludeExtensions>
<IncludeExternals Condition="'$(IncludeExternals)' == ''">true</IncludeExternals>
<IncludeTests Condition="'$(IncludeTest)' == ''">true</IncludeTests> <IncludeTests Condition="'$(IncludeTest)' == ''">true</IncludeTests>
<IncludeSSL Condition="'$(IncludeSSL)' == ''">true</IncludeSSL> <IncludeSSL Condition="'$(IncludeSSL)' == ''">true</IncludeSSL>
<IncludeTkinter Condition="'$(IncludeTkinter)' == ''">true</IncludeTkinter>
<IncludeBsddb Condition="'$(IncludeBsddb)' == ''">true</IncludeBsddb>
</PropertyGroup> </PropertyGroup>
<ItemDefinitionGroup> <ItemDefinitionGroup>
...@@ -34,10 +37,15 @@ ...@@ -34,10 +37,15 @@
<!-- python[w].exe --> <!-- python[w].exe -->
<Projects Include="python.vcxproj;pythonw.vcxproj" /> <Projects Include="python.vcxproj;pythonw.vcxproj" />
<!-- Extension modules --> <!-- Extension modules -->
<ExtensionModules Include="_bsddb;bz2;_ctypes;_elementtree;_msi;_multiprocessing;_sqlite3;_tkinter;tix;pyexpat;select;unicodedata;winsound" /> <ExtensionModules Include="_ctypes;_elementtree;_msi;_multiprocessing;pyexpat;select;unicodedata;winsound" />
<!-- Extension modules that require external sources -->
<ExternalModules Include="bz2;_sqlite3" />
<!-- _ssl will build _socket as well, which may cause conflicts in parallel builds --> <!-- _ssl will build _socket as well, which may cause conflicts in parallel builds -->
<ExtensionModules Include="_socket" Condition="!$(IncludeSSL)" /> <ExtensionModules Include="_socket" Condition="!$(IncludeSSL) or !$(IncludeExternals)" />
<ExtensionModules Include="_ssl;_hashlib" Condition="$(IncludeSSL)" /> <ExternalModules Include="_ssl;_hashlib" Condition="$(IncludeSSL)" />
<ExternalModules Include="_tkinter;tix" Condition="$(IncludeTkinter)" />
<ExternalModules Include="_bsddb" Condition="$(IncludeBsddb)" />
<ExtensionModules Include="@(ExternalModules->'%(Identity)')" Condition="$(IncludeExternals)" />
<Projects Include="@(ExtensionModules->'%(Identity).vcxproj')" Condition="$(IncludeExtensions)" /> <Projects Include="@(ExtensionModules->'%(Identity).vcxproj')" Condition="$(IncludeExtensions)" />
<!-- Test modules --> <!-- Test modules -->
<TestModules Include="_ctypes_test;_testcapi" /> <TestModules Include="_ctypes_test;_testcapi" />
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment