| <?xml version="1.0" encoding="utf-8"?> | 
 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | 
 |   <ItemGroup> | 
 |     <_PegenSources Include="$(PySourcePath)Grammar\python.gram;$(PySourcePath)Grammar\Tokens" /> | 
 |     <_PegenOutputs Include="$(PySourcePath)Parser\parser.c" /> | 
 |     <_ASTSources Include="$(PySourcePath)Parser\Python.asdl" /> | 
 |     <_ASTOutputs Include="$(PySourcePath)Include\internal\pycore_ast.h"> | 
 |       <Argument>-H</Argument> | 
 |     </_ASTOutputs> | 
 |     <_ASTOutputs Include="$(PySourcePath)Include\internal\pycore_ast_state.h"> | 
 |       <Argument>-I</Argument> | 
 |     </_ASTOutputs> | 
 |     <_ASTOutputs Include="$(PySourcePath)Python\Python-ast.c"> | 
 |       <Argument>-C</Argument> | 
 |     </_ASTOutputs> | 
 |     <_OpcodeSources Include="$(PySourcePath)Tools\build\generate_opcode_h.py;$(PySourcePath)Lib\opcode.py" /> | 
 |     <_OpcodeOutputs Include="$(PySourcePath)Include\opcode.h;$(PySourcePath)Include\internal\pycore_opcode.h;$(PySourcePath)Python\opcode_targets.h" /> | 
 |     <_TokenSources Include="$(PySourcePath)Grammar\Tokens" /> | 
 |     <_TokenOutputs Include="$(PySourcePath)Doc\library\token-list.inc"> | 
 |       <Format>rst</Format> | 
 |     </_TokenOutputs> | 
 |     <_TokenOutputs Include="$(PySourcePath)Include\internal\pycore_token.h"> | 
 |       <Format>h</Format> | 
 |     </_TokenOutputs> | 
 |     <_TokenOutputs Include="$(PySourcePath)Parser\token.c"> | 
 |       <Format>c</Format> | 
 |     </_TokenOutputs> | 
 |     <_TokenOutputs Include="$(PySourcePath)Lib\token.py"> | 
 |       <Format>py</Format> | 
 |     </_TokenOutputs> | 
 |     <_KeywordSources Include="$(PySourcePath)Grammar\python.gram;$(PySourcePath)Grammar\Tokens" /> | 
 |     <_KeywordOutputs Include="$(PySourcePath)Lib\keyword.py" /> | 
 |   </ItemGroup> | 
 |  | 
 |   <Target Name="_TouchRegenSources" Condition="$(ForceRegen) == 'true'"> | 
 |     <Message Text="Touching source files to force regeneration" Importance="high" /> | 
 |     <Touch Files="@(_PegenSources);@(_ASTSources);@(_OpcodeSources);@(_TokenSources);@(_KeywordOutputs)" | 
 |            AlwaysCreate="False" /> | 
 |   </Target> | 
 |  | 
 |   <Target Name="_RegenPegen" | 
 |           Inputs="@(_PegenSources)" Outputs="@(_PegenOutputs)" | 
 |           DependsOnTargets="FindPythonForBuild"> | 
 |     <Message Text="Regenerate @(_PegenOutputs->'%(Filename)%(Extension)',' ')" Importance="high" /> | 
 |     <!-- Specify python.gram with POSIX-like path because the argument gets written into the file verbatim --> | 
 |     <Exec Command="set PYTHONPATH=Tools\peg_generator%0D%0A$(PythonForBuild) -m pegen -q c ./Grammar/python.gram Grammar\Tokens -o Parser\parser.c" | 
 |           WorkingDirectory="$(PySourcePath)" /> | 
 |   </Target> | 
 |  | 
 |   <Target Name="_RegenAST_H" | 
 |           Inputs="@(_ASTSources)" Outputs="@(_ASTOutputs)" | 
 |           DependsOnTargets="FindPythonForBuild"> | 
 |     <Message Text="Regenerate @(_ASTOutputs->'%(Filename)%(Extension)',' ')" Importance="high" /> | 
 |     <Exec Command="$(PythonForBuild) Parser\asdl_c.py Parser\Python.asdl @(_ASTOutputs->'%(Argument) "%(Identity)"',' ')" | 
 |           WorkingDirectory="$(PySourcePath)" /> | 
 |   </Target> | 
 |  | 
 |   <Target Name="_RegenOpcodes" | 
 |           Inputs="@(_OpcodeSources)" Outputs="@(_OpcodeOutputs)" | 
 |           DependsOnTargets="FindPythonForBuild"> | 
 |     <Message Text="Regenerate @(_OpcodeOutputs->'%(Filename)%(Extension)',' ')" Importance="high" /> | 
 |     <Exec Command="$(PythonForBuild) Tools\build\generate_opcode_h.py Lib\opcode.py Lib\_opcode_metadata.py Include\opcode.h Include\internal\pycore_opcode.h Include\internal\pycore_intrinsics.h" | 
 |           WorkingDirectory="$(PySourcePath)" /> | 
 |     <Exec Command="$(PythonForBuild) Python\makeopcodetargets.py Python\opcode_targets.h" | 
 |           WorkingDirectory="$(PySourcePath)" /> | 
 |   </Target> | 
 |  | 
 |   <Target Name="_RegenTokens" | 
 |           Inputs="@(_TokenSources)" Outputs="@(_TokenOutputs)" | 
 |           DependsOnTargets="FindPythonForBuild"> | 
 |     <Message Text="Regenerate @(_TokenOutputs->'%(Filename)%(Extension)',' ')" Importance="high" /> | 
 |     <Exec Command="$(PythonForBuild) Tools\build\generate_token.py %(_TokenOutputs.Format) Grammar\Tokens "%(_TokenOutputs.Identity)"" | 
 |           WorkingDirectory="$(PySourcePath)" /> | 
 |     <Touch Files="@(_TokenOutputs)" /> | 
 |   </Target> | 
 |  | 
 |   <Target Name="_RegenKeywords" | 
 |           Inputs="@(_KeywordSources)" Outputs="@(_KeywordOutputs)" | 
 |           DependsOnTargets="FindPythonForBuild"> | 
 |     <Message Text="Regenerate @(_KeywordOutputs->'%(Filename)%(Extension)',' ')" Importance="high" /> | 
 |     <Exec Command="set PYTHONPATH=Tools\peg_generator%0D%0A$(PythonForBuild) -m pegen.keywordgen Grammar\python.gram Grammar\Tokens Lib\keyword.py" | 
 |           WorkingDirectory="$(PySourcePath)" /> | 
 |   </Target> | 
 |  | 
 |   <Target Name="_RegenGlobalObjects" | 
 |           DependsOnTargets="FindPythonForBuild"> | 
 |     <Message Text="Regenerate Global Objects" Importance="high" /> | 
 |     <Exec Command="$(PythonForBuild) Tools\build\generate_global_objects.py" | 
 |           WorkingDirectory="$(PySourcePath)" /> | 
 |   </Target> | 
 |  | 
 |   <Target Name="Regen" | 
 |           Condition="$(Configuration) != 'PGUpdate'" | 
 |           DependsOnTargets="_TouchRegenSources;_RegenPegen;_RegenAST_H;_RegenOpcodes;_RegenTokens;_RegenKeywords;_RegenGlobalObjects"> | 
 |     <Message Text="Generated sources are up to date" Importance="high" /> | 
 |   </Target> | 
 |  | 
 |  | 
 |   <ItemGroup> | 
 |     <_TestFrozenSources Include="$(PySourcePath)Programs\freeze_test_frozenmain.py; | 
 |                                  $(PySourcePath)Programs\test_frozenmain.py; | 
 |                                  @(_OpcodeOutputs)" /> | 
 |     <_TestFrozenOutputs Include="$(PySourcePath)Programs\test_frozenmain.h" /> | 
 |     <_LicenseSources Include="$(PySourcePath)LICENSE; | 
 |                               $(PySourcePath)PC\crtlicense.txt; | 
 |                               $(bz2Dir)LICENSE; | 
 |                               $(libffiDir)LICENSE;" /> | 
 |     <_LicenseSources Include="$(opensslOutDir)LICENSE.txt" Condition="Exists('$(opensslOutDir)LICENSE.txt')" /> | 
 |     <_LicenseSources Include="$(opensslOutDir)LICENSE" Condition="!Exists('$(opensslOutDir)LICENSE.txt')" /> | 
 |     <_LicenseSources Include="$(tcltkDir)tcllicense.terms; | 
 |                               $(tcltkDir)tklicense.terms" Condition="$(IncludeTkinter)" /> | 
 |   </ItemGroup> | 
 |  | 
 |   <Target Name="_RegenTestFrozenmain" Inputs="@(_TestFrozenSources)" Outputs="@(_TestFrozenOutputs)" | 
 |           Condition="($(Platform) == 'Win32' or $(Platform) == 'x64') and | 
 |                      $(Configuration) != 'PGInstrument' and $(Configuration) != 'PGUpdate'"> | 
 |     <Message Text="Regenerate @(_TestFrozenOutputs->'%(Filename)%(Extension)', ' ')" Importance="high" /> | 
 |     <Exec Command='setlocal | 
 | set PYTHONPATH=$(PySourcePath)Lib | 
 | "$(PythonExe)" Programs\freeze_test_frozenmain.py Programs\test_frozenmain.h' | 
 |           WorkingDirectory="$(PySourcePath)" /> | 
 |   </Target> | 
 |  | 
 |   <Target Name="_RegenLicense"> | 
 |     <ItemGroup> | 
 |       <_Text1 Include="@(_LicenseSources)"> | 
 |         <Content Condition="Exists(%(FullPath))">$([System.IO.File]::ReadAllText(%(FullPath)))</Content> | 
 |       </_Text1> | 
 |       <_Text Include="@(_Text1->'%(Content)')" /> | 
 |     </ItemGroup> | 
 |  | 
 |     <WriteLinesToFile File="$(OutDir)LICENSE.txt" Overwrite="true" Lines="@(_Text)" /> | 
 |     <Warning Text="License file %(_LicenseSources.FullPath) is missing" | 
 |              Condition="!Exists(@(_LicenseSources))" /> | 
 |     <Message Text="Wrote $(OutDir)LICENSE.txt" Importance="high" /> | 
 |   </Target> | 
 |  | 
 |   <Target Name="PostBuildRegen" DependsOnTargets="_RegenTestFrozenmain;_RegenLicense" /> | 
 | </Project> |