1<?xml version="1.0" encoding="utf-8"?>
2<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3  <PropertyGroup Label="Globals">
4    <ProjectGuid>{CC9B93A2-439D-4058-9D29-6DCF43774405}</ProjectGuid>
5    <Platform Condition="'$(Platform)' == ''">Win32</Platform>
6    <Configuration Condition="'$(Configuration)' == ''">Release</Configuration>
7    <IncludeExtensions Condition="'$(IncludeExtensions)' == ''">true</IncludeExtensions>
8    <IncludeExternals Condition="'$(IncludeExternals)' == ''">true</IncludeExternals>
9    <IncludeTests Condition="'$(IncludeTest)' == ''">true</IncludeTests>
10    <IncludeCTypes Condition="'$(IncludeCTypes)' == ''">true</IncludeCTypes>
11    <IncludeSSL Condition="'$(IncludeSSL)' == ''">true</IncludeSSL>
12    <IncludeTkinter Condition="'$(IncludeTkinter)' == ''">true</IncludeTkinter>
13    <IncludeUwp Condition="'$(IncludeUwp)' == ''">false</IncludeUwp>
14  </PropertyGroup>
15
16  <ItemDefinitionGroup>
17    <Projects>
18      <Platform>$(Platform)</Platform>
19      <Configuration>$(Configuration)</Configuration>
20      <Properties></Properties>
21      <BuildTarget>Build</BuildTarget>
22      <CleanTarget>Clean</CleanTarget>
23      <CleanAllTarget>CleanAll</CleanAllTarget>
24      <BuildInParallel>true</BuildInParallel>
25    </Projects>
26    <Projects2>
27      <Platform>$(Platform)</Platform>
28      <Configuration>$(Configuration)</Configuration>
29      <Properties></Properties>
30      <BuildTarget>Build</BuildTarget>
31      <CleanTarget>Clean</CleanTarget>
32      <CleanAllTarget>CleanAll</CleanAllTarget>
33      <BuildInParallel>false</BuildInParallel>
34    </Projects2>
35  </ItemDefinitionGroup>
36  <ItemGroup>
37    <!-- pythonXY.dll -->
38    <!--
39    Parallel build is explicitly disabled for this project because it
40    causes many conflicts between pythoncore and projects that depend
41    on pythoncore. Once the core DLL has been built, subsequent
42    projects will be built in parallel.
43    -->
44    <Projects Include="pythoncore.vcxproj">
45      <BuildInParallel>false</BuildInParallel>
46    </Projects>
47    <!-- python3.dll -->
48    <Projects Include="python3dll.vcxproj" />
49    <!-- py[w].exe -->
50    <Projects Include="pylauncher.vcxproj;pywlauncher.vcxproj" />
51    <!-- pyshellext.dll -->
52    <Projects Include="pyshellext.vcxproj" />
53    <!-- Extension modules -->
54    <ExtensionModules Include="_asyncio;_decimal;_elementtree;_msi;_multiprocessing;_overlapped;pyexpat;_queue;select;unicodedata;winsound" />
55    <ExtensionModules Include="_ctypes" Condition="$(IncludeCTypes)" />
56    <!-- Extension modules that require external sources -->
57    <ExternalModules Include="_bz2;_lzma;_sqlite3" />
58    <!-- venv launchers -->
59    <Projects Include="venvlauncher.vcxproj;venvwlauncher.vcxproj" />
60    <!-- _ssl will build _socket as well, which may cause conflicts in parallel builds -->
61    <ExtensionModules Include="_socket" Condition="!$(IncludeSSL) or !$(IncludeExternals)" />
62    <ExternalModules Include="_ssl;_hashlib" Condition="$(IncludeSSL)" />
63    <ExternalModules Include="_tkinter" Condition="$(IncludeTkinter) and $(Platform) != 'ARM' and $(Platform) != 'ARM64'" />
64    <ExtensionModules Include="@(ExternalModules->'%(Identity)')" Condition="$(IncludeExternals)" />
65    <Projects Include="@(ExtensionModules->'%(Identity).vcxproj')" Condition="$(IncludeExtensions)" />
66    <!-- Test modules -->
67    <TestModules Include="_ctypes_test;_testbuffer;_testcapi;_testinternalcapi;_testembed;_testimportmultiple;_testmultiphase;_testconsole" />
68    <TestModules Include="xxlimited" Condition="'$(Configuration)' == 'Release'" />
69    <Projects Include="@(TestModules->'%(Identity).vcxproj')" Condition="$(IncludeTests)">
70      <!-- Disable parallel build for test modules -->
71      <BuildInParallel>false</BuildInParallel>
72    </Projects>
73
74    <!-- _freeze_importlib -->
75    <Projects2 Condition="$(Platform) != 'ARM' and $(Platform) != 'ARM64'" Include="_freeze_importlib.vcxproj" />
76    <!-- python[w].exe -->
77    <Projects2 Include="python.vcxproj;pythonw.vcxproj" />
78    <Projects2 Include="python_uwp.vcxproj;pythonw_uwp.vcxproj" Condition="$(IncludeUwp)" />
79    <!-- venv[w]launcher.exe -->
80    <Projects2 Include="venvlauncher.vcxproj;venvwlauncher.vcxproj" />
81  </ItemGroup>
82
83  <Target Name="Build">
84    <MSBuild Projects="@(Projects)"
85             Properties="Configuration=%(Configuration);Platform=%(Platform);%(Properties)"
86             BuildInParallel="%(BuildInParallel)"
87             StopOnFirstFailure="true"
88             Targets="%(BuildTarget)" />
89    <MSBuild Projects="@(Projects2)"
90             Properties="Configuration=%(Configuration);Platform=%(Platform);%(Properties)"
91             BuildInParallel="%(BuildInParallel)"
92             StopOnFirstFailure="true"
93             Targets="%(BuildTarget)" />
94  </Target>
95
96  <Target Name="Clean">
97    <MSBuild Projects="@(Projects2)"
98             Properties="Configuration=%(Configuration);Platform=%(Platform);%(Properties)"
99             BuildInParallel="%(BuildInParallel)"
100             StopOnFirstFailure="false"
101             Condition="%(CleanTarget) != ''"
102             Targets="%(CleanTarget)" />
103    <MSBuild Projects="@(Projects)"
104             Properties="Configuration=%(Configuration);Platform=%(Platform);%(Properties)"
105             BuildInParallel="%(BuildInParallel)"
106             StopOnFirstFailure="false"
107             Condition="%(CleanTarget) != ''"
108             Targets="%(CleanTarget)" />
109  </Target>
110
111  <Target Name="CleanAll">
112    <MSBuild Projects="@(Projects2)"
113             Properties="Configuration=%(Configuration);Platform=%(Platform);%(Properties)"
114             BuildInParallel="%(BuildInParallel)"
115             StopOnFirstFailure="false"
116             Condition="%(CleanAllTarget) != ''"
117             Targets="%(CleanAllTarget)" />
118    <MSBuild Projects="@(Projects)"
119             Properties="Configuration=%(Configuration);Platform=%(Platform);%(Properties)"
120             BuildInParallel="%(BuildInParallel)"
121             StopOnFirstFailure="false"
122             Condition="%(CleanAllTarget) != ''"
123             Targets="%(CleanAllTarget)" />
124  </Target>
125
126  <Target Name="Rebuild" DependsOnTargets="Clean;Build" />
127  <Target Name="RebuildAll" DependsOnTargets="CleanAll;Build" />
128</Project>
129