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