-
-
Notifications
You must be signed in to change notification settings - Fork 34.2k
bpo-36500: Enable Windows users to regen grammar, opcodes, tokens and symbols from Visual Studio #12654
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
bpo-36500: Enable Windows users to regen grammar, opcodes, tokens and symbols from Visual Studio #12654
Changes from all commits
f291fb1
0f4b23a
759e241
192f358
5eb7795
4017063
0be5632
a2c1e0c
b52329f
95eaa9f
1396fd9
80d2d9a
45c7999
2162db2
89246a4
546cea5
eb87863
9fca9db
7863992
370fcba
8f93907
0a6ab75
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| Added an optional "regen" project to the Visual Studio solution that will | ||
| regenerate all grammar, tokens, and opcodes. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,225 @@ | ||
| <?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\graminit.h"> | ||
| </None> | ||
| <None Include="..\Python\graminit.c"> | ||
| </None> | ||
| <None Include="..\Include\token.h"> | ||
| </None> | ||
| <None Include="..\Include\opcode.h"> | ||
| </None> | ||
| <None Include="..\Include\Python-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="_RegenGrammar" BeforeTargets="Build"> | ||
| <!-- Regenerate Include/graminit.h and Python/graminit.c from Grammar/Grammar using pgen--> | ||
| <Exec Command=""$(PythonExe)" -m Parser.pgen "$(PySourcePath)Grammar\Grammar" "$(PySourcePath)Grammar\Tokens" "$(IntDir)graminit.h" "$(IntDir)graminit.c"" /> | ||
| <Copy SourceFiles="$(IntDir)graminit.h" DestinationFiles="$(PySourcePath)Include\graminit.h"> | ||
| <Output TaskParameter="CopiedFiles" ItemName="_UpdatedH" /> | ||
| </Copy> | ||
| <Copy SourceFiles="$(IntDir)graminit.c" DestinationFiles="$(PySourcePath)Python\graminit.c"> | ||
| <Output TaskParameter="CopiedFiles" ItemName="_UpdatedC" /> | ||
| </Copy> | ||
| <Warning Text="Grammar updated. You will need to rebuild pythoncore to see the changes." Condition="'@(_UpdatedH)' != '' and '@(_UpdatedC)' != ''" /> | ||
| </Target> | ||
| <Target Name="_RegenAST_H" AfterTargets="_RegenGrammar"> | ||
| <!-- Regenerate Include/Python-ast.h using Parser/asdl_c.py -h --> | ||
| <Exec Command=""$(PythonExe)" "$(PySourcePath)Parser\asdl_c.py" -h "$(IntDir)Python-ast.h" "$(PySourcePath)Parser\Python.asdl"" /> | ||
| <Copy SourceFiles="$(IntDir)Python-ast.h" DestinationFiles="$(PySourcePath)Include\Python-ast.h"> | ||
| <Output TaskParameter="CopiedFiles" ItemName="_UpdatedH" /> | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This isn't sufficient for detecting files that were regenerated without changing. Look in the importlib one for the contents check. (If you want an excuse to learn about target batching in MSBuild - which is ridiculously powerful - you might consider having one target for doing the optional-copy and fail if updated step, then pass it all the target files in an ItemGroup with the generated file as metadata.)
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @zooba It copies them regardless in the same way that the
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yep, that'll be most reliable. If you add all the source files as items in the project then it should skip rebuilding if none of them have changed.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I've tried the target batching, it doesn't seem to be able to determine any better than this revision whether the contents have changed. The docs say that it uses timestamps on the files to determine (which won't work in this case)
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah, you'll need to do content comparisons. See what the current freezeimportlib project does. |
||
| </Copy> | ||
| <Warning Text="Python-ast.h updated. You will need to rebuild pythoncore to see the changes." Condition="'@(_UpdatedH)' != '' and '@(_UpdatedC)' != ''" /> | ||
| </Target> | ||
| <Target Name="_RegenAST_C" AfterTargets="_RegenGrammar"> | ||
| <!-- Regenerate Python/Python-ast.c using Parser/asdl_c.py -c --> | ||
| <Exec Command=""$(PythonExe)" "$(PySourcePath)Parser\asdl_c.py" -c "$(IntDir)Python-ast.c" "$(PySourcePath)Parser\Python.asdl"" /> | ||
| <Copy SourceFiles="$(IntDir)Python-ast.c" DestinationFiles="$(PySourcePath)Python\Python-ast.c"> | ||
| <Output TaskParameter="CopiedFiles" ItemName="_UpdatedH" /> | ||
| </Copy> | ||
| <Warning Text="Python-ast.c updated. You will need to rebuild pythoncore to see the changes." Condition="'@(_UpdatedH)' != '' and '@(_UpdatedC)' != ''" /> | ||
| </Target> | ||
| <Target Name="_RegenOpcodes" AfterTargets="_RegenAST_C"> | ||
| <!-- Regenerate Include/opcode.h from Lib/opcode.py using Tools/scripts/generate_opcode_h.py--> | ||
| <Exec Command=""$(PythonExe)" $(PySourcePath)Tools\scripts\generate_opcode_h.py "$(PySourcePath)Lib\opcode.py" "$(IntDir)opcode.h"" /> | ||
| <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=""$(PythonExe)" $(PySourcePath)Tools\scripts\generate_token.py rst "$(PySourcePath)Grammar\Tokens" "$(PySourcePath)Doc\library\token-list.inc"" /> | ||
| <!-- Regenerate Include/token.h from Grammar/Tokens using Tools/scripts/generate_token.py--> | ||
| <Exec Command=""$(PythonExe)" $(PySourcePath)Tools\scripts\generate_token.py h "$(PySourcePath)Grammar\Tokens" "$(PySourcePath)Include\token.h"" /> | ||
| <!-- Regenerate Parser/token.c from Grammar/Tokens using Tools/scripts/generate_token.py--> | ||
| <Exec Command=""$(PythonExe)" $(PySourcePath)Tools\scripts\generate_token.py c "$(PySourcePath)Grammar\Tokens" "$(PySourcePath)Parser\token.c"" /> | ||
| <!-- Regenerate Lib/token.py from Grammar/Tokens using Tools/scripts/generate_token.py --> | ||
| <Exec Command=""$(PythonExe)" $(PySourcePath)Tools\scripts\generate_token.py py "$(PySourcePath)Grammar\Tokens" "$(PySourcePath)Lib\token.py"" /> | ||
| </Target> | ||
| <Target Name="_RegenKeywords" AfterTargets="_RegenTokens"> | ||
| <!-- Regenerate Lib/keyword.py from Grammar/Grammar and Grammar/Tokens using Parser/pgen--> | ||
| <Exec Command=""$(PythonExe)" -m Parser.pgen.keywordgen "$(PySourcePath)Grammar\Grammar" "$(PySourcePath)Grammar\Tokens" "$(IntDir)keyword.py"" /> | ||
| <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="_RegenSymbols" AfterTargets="_RegenKeywords"> | ||
| <!-- Regenerate Lib/symbol.py from Include/graminit.h using Tools/scripts/generate_symbol_py.py--> | ||
| <Exec Command=""$(PythonExe)" $(PySourcePath)Tools\scripts\generate_symbol_py.py "$(PySourcePath)Include\graminit.h" "$(PySourcePath)Lib\symbol.py"" /> | ||
| </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)Python-ast.h" /> | ||
| <Clean Include="$(IntDir)graminit.h.new" /> | ||
| <Clean Include="$(IntDir)graminit.c.new" /> | ||
| </ItemGroup> | ||
| </Target> | ||
| </Project> | ||
Uh oh!
There was an error while loading. Please reload this page.