summaryrefslogtreecommitdiffstats
path: root/PCbuild
diff options
context:
space:
mode:
authorSteve Dower <steve.dower@python.org>2021-04-06 22:54:43 (GMT)
committerGitHub <noreply@github.com>2021-04-06 22:54:43 (GMT)
commit748283819043c60b1cb272c2cc9ab5b457afb03a (patch)
tree2196786e4df24aa8c9361036794b80ad0f50f01b /PCbuild
parent0fdf11e8e901a5f47149232557a7f9726b8177c9 (diff)
downloadcpython-748283819043c60b1cb272c2cc9ab5b457afb03a.zip
cpython-748283819043c60b1cb272c2cc9ab5b457afb03a.tar.gz
cpython-748283819043c60b1cb272c2cc9ab5b457afb03a.tar.bz2
bpo-43567: Improved generated code refresh on Windows (GH-25120)
Generated files are now refreshed automatically on regular build, or may be forcibly regenerated by calling `build.bat --regen`.
Diffstat (limited to 'PCbuild')
-rw-r--r--PCbuild/_freeze_importlib.vcxproj8
-rw-r--r--PCbuild/build.bat27
-rw-r--r--PCbuild/pythoncore.vcxproj2
-rw-r--r--PCbuild/regen.targets84
-rw-r--r--PCbuild/regen.vcxproj215
5 files changed, 108 insertions, 228 deletions
diff --git a/PCbuild/_freeze_importlib.vcxproj b/PCbuild/_freeze_importlib.vcxproj
index a0fe49c..52d8f1a 100644
--- a/PCbuild/_freeze_importlib.vcxproj
+++ b/PCbuild/_freeze_importlib.vcxproj
@@ -140,10 +140,12 @@
Condition="!Exists(%(None.OutFile)) or (Exists(%(None.IntFile)) and '$([System.IO.File]::ReadAllText(%(None.OutFile)).Replace(`&#x0D;&#x0A;`, `&#x0A;`))' != '$([System.IO.File]::ReadAllText(%(None.IntFile)).Replace(`&#x0D;&#x0A;`, `&#x0A;`))')">
<Output TaskParameter="CopiedFiles" ItemName="_Updated" />
</Copy>
-
- <Warning Text="@(_Updated->'%(Filename)%(Extension)',', ') updated. You will need to rebuild pythoncore to see the changes.%0D%0A%0D%0AIf you are not developing on Windows but you see this error on a continuous integration build, you need to run 'make regen-all' and commit any changes."
+
+ <Message Text="Updated files: @(_Updated->'%(Filename)%(Extension)',', ')"
+ Condition="'@(_Updated)' != ''" Importance="high" />
+ <Warning Text="Frozen importlib files were updated. Please rebuild to pick up the changes.%0D%0A%0D%0AIf you are not developing on Windows but you see this error on a continuous integration build, please run 'make regen-all' and commit anything that changes."
Condition="'@(_Updated)' != '' and $(Configuration) == 'Debug'" />
- <Error Text="@(_Updated->'%(Filename)%(Extension)',', ') updated. You will need to rebuild pythoncore to see the changes.%0D%0A%0D%0AIf you are not developing on Windows but you see this error on a continuous integration build, you need to run 'make regen-all' and commit any changes."
+ <Error Text="Frozen importlib files were updated. Please rebuild to pick up the changes.%0D%0A%0D%0AIf you are not developing on Windows but you see this error on a continuous integration build, please run 'make regen-all' and commit anything that changes."
Condition="'@(_Updated)' != '' and $(Configuration) == 'Release'" />
</Target>
<Target Name="RebuildImportLib" AfterTargets="AfterBuild" Condition="$(Configuration) == 'Debug' or $(Configuration) == 'Release'"
diff --git a/PCbuild/build.bat b/PCbuild/build.bat
index 5a41ca5..d333cea 100644
--- a/PCbuild/build.bat
+++ b/PCbuild/build.bat
@@ -34,7 +34,7 @@ echo. automatically by the pythoncore project)
echo. --pgo Build with Profile-Guided Optimization. This flag
echo. overrides -c and -d
echo. --test-marker Enable the test marker within the build.
-echo. --regen Regenerate all opcodes, grammar and tokens
+echo. --regen Regenerate all opcodes, grammar and tokens.
echo.
echo.Available flags to avoid building certain modules.
echo.These flags have no effect if '-e' is not given:
@@ -116,8 +116,14 @@ rem Setup the environment
call "%dir%find_msbuild.bat" %MSBUILD%
if ERRORLEVEL 1 (echo Cannot locate MSBuild.exe on PATH or as MSBUILD variable & exit /b 2)
+call "%dir%find_python.bat" %PYTHON%
+if ERRORLEVEL 1 (echo Cannot locate python.exe on PATH or as PYTHON variable & exit /b 3)
+set PythonForBuild=%PYTHON%
+
if "%kill%"=="true" call :Kill
-if ERRORLEVEL 1 exit /B 3
+if ERRORLEVEL 1 exit /B %ERRORLEVEL%
+
+if "%regen%"=="true" goto :Regen
if "%do_pgo%"=="true" (
set conf=PGInstrument
@@ -147,6 +153,15 @@ echo on
@echo off
exit /B %ERRORLEVEL%
+:Regen
+echo on
+%MSBUILD% "%dir%\pythoncore.vcxproj" /t:Regen %verbose%^
+ /p:Configuration=%conf% /p:Platform=%platf%^
+ /p:ForceRegen=true
+
+@echo off
+exit /B %ERRORLEVEL%
+
:Build
rem Call on MSBuild to do the work, echo the command.
rem Passing %1-9 is not the preferred option, but argument parsing in
@@ -160,14 +175,6 @@ echo on
/p:UseTestMarker=%UseTestMarker% %GITProperty%^
%1 %2 %3 %4 %5 %6 %7 %8 %9
-@if not ERRORLEVEL 1 @if "%Regen%"=="true" (
- %MSBUILD% "%dir%regen.vcxproj" /t:%target% %parallel% %verbose%^
- /p:IncludeExternals=%IncludeExternals%^
- /p:Configuration=%conf% /p:Platform=%platf%^
- /p:UseTestMarker=%UseTestMarker% %GITProperty%^
- %1 %2 %3 %4 %5 %6 %7 %8 %9
-)
-
@echo off
exit /b %ERRORLEVEL%
diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj
index 81ac236..2c1cc0d 100644
--- a/PCbuild/pythoncore.vcxproj
+++ b/PCbuild/pythoncore.vcxproj
@@ -513,7 +513,9 @@
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
+ <Import Project="regen.targets" />
</ImportGroup>
+ <Target Name="_TriggerRegen" BeforeTargets="PrepareForBuild" DependsOnTargets="Regen" />
<Target Name="_GetBuildInfo" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<GIT Condition="$(GIT) == ''">git</GIT>
diff --git a/PCbuild/regen.targets b/PCbuild/regen.targets
new file mode 100644
index 0000000..4d386cf
--- /dev/null
+++ b/PCbuild/regen.targets
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Target Name="_SetPythonForBuild">
+ <PropertyGroup>
+ <PythonForBuild>$(PYTHON)</PythonForBuild>
+ </PropertyGroup>
+ </Target>
+
+ <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\scripts\generate_opcode_h.py;$(PySourcePath)Lib\opcode.py" />
+ <_OpcodeOutputs Include="$(PySourcePath)Include\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\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)">
+ <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)">
+ <Message Text="Regenerate @(_ASTOutputs->'%(Filename)%(Extension)',' ')" Importance="high" />
+ <Exec Command="$(PythonForBuild) Parser\asdl_c.py Parser\Python.asdl @(_ASTOutputs->'%(Argument) &quot;%(Identity)&quot;',' ')"
+ WorkingDirectory="$(PySourcePath)" />
+ </Target>
+
+ <Target Name="_RegenOpcodes" Inputs="@(_OpcodeSources)" Outputs="@(_OpcodeOutputs)">
+ <Message Text="Regenerate @(_OpcodeOutputs->'%(Filename)%(Extension)',' ')" Importance="high" />
+ <Exec Command="$(PythonForBuild) Tools\scripts\generate_opcode_h.py Lib\opcode.py Include\opcode.h"
+ WorkingDirectory="$(PySourcePath)" />
+ <Exec Command="$(PythonForBuild) Python\makeopcodetargets.py Python\opcode_targets.h"
+ WorkingDirectory="$(PySourcePath)" />
+ </Target>
+
+ <Target Name="_RegenTokens" Inputs="@(_TokenSources)" Outputs="@(_TokenOutputs)">
+ <Message Text="Regenerate @(_TokenOutputs->'%(Filename)%(Extension)',' ')" Importance="high" />
+ <Exec Command="$(PythonForBuild) Tools\scripts\generate_token.py %(_TokenOutputs.Format) Grammar\Tokens &quot;%(_TokenOutputs.Identity)&quot;"
+ WorkingDirectory="$(PySourcePath)" />
+ <Touch Files="@(_TokenOutputs)" />
+ </Target>
+
+ <Target Name="_RegenKeywords" Inputs="@(_KeywordSources)" Outputs="@(_KeywordOutputs)">
+ <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="Regen" DependsOnTargets="_TouchRegenSources;_RegenPegen;_RegenAST_H;_RegenOpcodes;_RegenTokens;_RegenKeywords">
+ <Message Text="Generated sources are up to date" Importance="high" />
+ </Target>
+</Project>
diff --git a/PCbuild/regen.vcxproj b/PCbuild/regen.vcxproj
deleted file mode 100644
index ef355a2..0000000
--- a/PCbuild/regen.vcxproj
+++ /dev/null
@@ -1,215 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|ARM">
- <Configuration>Debug</Configuration>
- <Platform>ARM</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="PGInstrument|ARM">
- <Configuration>PGInstrument</Configuration>
- <Platform>ARM</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="PGInstrument|Win32">
- <Configuration>PGInstrument</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="PGInstrument|x64">
- <Configuration>PGInstrument</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="PGUpdate|ARM">
- <Configuration>PGUpdate</Configuration>
- <Platform>ARM</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="PGUpdate|Win32">
- <Configuration>PGUpdate</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="PGUpdate|x64">
- <Configuration>PGUpdate</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|ARM">
- <Configuration>Release</Configuration>
- <Platform>ARM</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{21CF2108-2CC9-4005-A6ED-B7965ADE3854}</ProjectGuid>
- <Keyword>Win32Proj</Keyword>
- <RootNamespace>regen</RootNamespace>
- <SupportPGO>false</SupportPGO>
- <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
- </PropertyGroup>
- <Import Project="python.props" />
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Label="Configuration">
- <ConfigurationType>Utility</ConfigurationType>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='PGUpdate|x64'">
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='PGUpdate|ARM'">
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='PGUpdate|Win32'">
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='PGInstrument|ARM'">
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='PGInstrument|x64'">
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='PGInstrument|Win32'">
- <PlatformToolset>v142</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- <Import Project="pyproject.props" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <ItemDefinitionGroup>
- <ClCompile>
- <PreprocessorDefinitions>_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <Link>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\Programs\_freeze_importlib.c" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="pythoncore.vcxproj">
- <Project>{cf7ac3d1-e2df-41d2-bea6-1e2556cdea26}</Project>
- <Private>true</Private>
- <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
- <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
- <LinkLibraryDependencies>true</LinkLibraryDependencies>
- <UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <None Include="..\Grammar\Grammar">
- </None>
- <None Include="..\Grammar\Tokens">
- </None>
- <None Include="..\Include\token.h">
- </None>
- <None Include="..\Include\opcode.h">
- </None>
- <None Include="..\Include\internal\pycore_ast_state.h">
- </None>
- <None Include="..\Include\internal\pycore_ast.h">
- </None>
- <None Include="..\Python\Python-ast.c">
- </None>
- <None Include="..\Lib\keyword.py">
- </None>
- <None Include="..\Lib\symbol.py">
- </None>
- <None Include="..\Doc\library\token-list.inc">
- </None>
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
- <Target Name="_RegenPegen" BeforeTargets="Build">
- <!-- Regenerate Parser/parser.c -->
- <SetEnv Name="PYTHONPATH" Prefix="true" Value="$(PySourcePath)Tools\peg_generator\" />
- <Exec Command="&quot;$(PythonExe)&quot; -m pegen -q c &quot;$(PySourcePath)Grammar\python.gram&quot; &quot;$(PySourcePath)Grammar\Tokens&quot; -o &quot;$(IntDir)parser.c&quot;" />
- <Copy SourceFiles="$(IntDir)parser.c" DestinationFiles="$(PySourcePath)Parser\parser.c">
- <Output TaskParameter="CopiedFiles" ItemName="_UpdatedParse" />
- </Copy>
- <Warning Text="Pegen updated. You will need to rebuild pythoncore to see the changes." Condition="'@(_UpdatedParse)' != ''" />
- </Target>
- <Target Name="_RegenAST_H" AfterTargets="_RegenGrammar">
- <!-- Regenerate Include/internal/pycore_ast.h, Python/Python-ast.c and Include/internal/pycore_ast_state.h using Parser/asdl_c.py -h -->
- <Exec Command="&quot;$(PythonExe)&quot; &quot;$(PySourcePath)Parser\asdl_c.py&quot; &quot;$(PySourcePath)Parser\Python.asdl&quot; -H &quot;$(IntDir)pycore_ast.h&quot; -C &quot;$(IntDir)Python-ast.c&quot; -I &quot;$(IntDir)pycore_ast_state.h&quot;" />
- <Copy SourceFiles="$(IntDir)pycore_ast.h" DestinationFiles="$(PySourcePath)Include\internal\pycore_ast.h">
- <Output TaskParameter="CopiedFiles" ItemName="_UpdatedH" />
- </Copy>
- <Copy SourceFiles="$(IntDir)Python-ast.c" DestinationFiles="$(PySourcePath)Python\Python-ast.c">
- <Output TaskParameter="CopiedFiles" ItemName="_UpdatedC" />
- </Copy>
- <Copy SourceFiles="$(IntDir)pycore_ast_state.h" DestinationFiles="$(PySourcePath)Include\internal\pycore_ast_state.h">
- <Output TaskParameter="CopiedFiles" ItemName="_UpdatedInternalH" />
- </Copy>
- <Warning Text="ASDL is updated. You will need to rebuild pythoncore to see the changes." Condition="'@(_UpdatedH)' != '' != '' and '@(_UpdatedC)' != '' and @(_UpdatedInternalH)'" />
- </Target>
- <Target Name="_RegenOpcodes" AfterTargets="_RegenAST_C">
- <!-- Regenerate Include/opcode.h from Lib/opcode.py using Tools/scripts/generate_opcode_h.py-->
- <Exec Command="&quot;$(PythonExe)&quot; $(PySourcePath)Tools\scripts\generate_opcode_h.py &quot;$(PySourcePath)Lib\opcode.py&quot; &quot;$(IntDir)opcode.h&quot;" />
- <Copy SourceFiles="$(IntDir)opcode.h" DestinationFiles="$(PySourcePath)Include\opcode.h">
- <Output TaskParameter="CopiedFiles" ItemName="_Updated" />
- </Copy>
- <Warning Text="Opcodes updated. You will need to rebuild pythoncore to see the changes." Condition="'@(_Updated)' != ''" />
- </Target>
- <Target Name="_RegenTokens" AfterTargets="_RegenOpcodes">
- <!-- Regenerate Doc/library/token-list.inc from Grammar/Tokens using Tools/scripts/generate_token.py-->
- <Exec Command="&quot;$(PythonExe)&quot; $(PySourcePath)Tools\scripts\generate_token.py rst &quot;$(PySourcePath)Grammar\Tokens&quot; &quot;$(PySourcePath)Doc\library\token-list.inc&quot;" />
- <!-- Regenerate Include/token.h from Grammar/Tokens using Tools/scripts/generate_token.py-->
- <Exec Command="&quot;$(PythonExe)&quot; $(PySourcePath)Tools\scripts\generate_token.py h &quot;$(PySourcePath)Grammar\Tokens&quot; &quot;$(PySourcePath)Include\token.h&quot;" />
- <!-- Regenerate Parser/token.c from Grammar/Tokens using Tools/scripts/generate_token.py-->
- <Exec Command="&quot;$(PythonExe)&quot; $(PySourcePath)Tools\scripts\generate_token.py c &quot;$(PySourcePath)Grammar\Tokens&quot; &quot;$(PySourcePath)Parser\token.c&quot;" />
- <!-- Regenerate Lib/token.py from Grammar/Tokens using Tools/scripts/generate_token.py -->
- <Exec Command="&quot;$(PythonExe)&quot; $(PySourcePath)Tools\scripts\generate_token.py py &quot;$(PySourcePath)Grammar\Tokens&quot; &quot;$(PySourcePath)Lib\token.py&quot;" />
- </Target>
- <Target Name="_RegenKeywords" AfterTargets="_RegenTokens">
- <!-- Regenerate Lib/keyword.py from Grammar/python.gram and Grammar/Tokens using Tools/peg_generator/pegen-->
- <SetEnv Name="PYTHONPATH" Prefix="true" Value="$(PySourcePath)Tools\peg_generator\" />
- <Exec Command="&quot;$(PythonExe)&quot; -m pegen.keywordgen &quot;$(PySourcePath)Grammar\python.gram&quot; &quot;$(PySourcePath)Grammar\Tokens&quot; &quot;$(IntDir)keyword.py&quot;" />
- <Copy SourceFiles="$(IntDir)keyword.py" DestinationFiles="$(PySourcePath)Lib\keyword.py">
- <Output TaskParameter="CopiedFiles" ItemName="_Updated" />
- </Copy>
- <Warning Text="Keywords updated. You will need to rebuild pythoncore to see the changes." Condition="'@(_Updated)' != ''" />
- </Target>
- <Target Name="_CleanFiles" BeforeTargets="CoreClean">
- <ItemGroup>
- <Clean Include="$(IntDir)keyword.py" />
- <Clean Include="$(IntDir)opcode.h" />
- <Clean Include="$(IntDir)Python-ast.c" />
- <Clean Include="$(IntDir)pycore_ast.h" />
- <Clean Include="$(IntDir)pycore_ast_state.h" />
- </ItemGroup>
- </Target>
-</Project>