0
0
mirror of https://github.com/python/cpython.git synced 2024-11-21 21:09:37 +01:00
cpython/PCbuild/regen.targets
Seth Michael Larson f5406ef454
gh-116122: Add SBOM generation to PCbuild/build.bat (GH-116138)
(cherry picked from commit 72dae53e09)

Co-authored-by: Seth Michael Larson <seth@python.org>
2024-05-01 15:47:41 +01:00

150 lines
7.7 KiB
XML

<?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" />
<_SbomSources Include="$(PySourcePath)PCbuild\get_externals.bat" />
<_SbomOutputs Include="$(PySourcePath)Misc\externals.spdx.json;$(PySourcePath)Misc\sbom.spdx.json">
<Format>json</Format>
</_SbomOutputs>
</ItemGroup>
<Target Name="_TouchRegenSources" Condition="$(ForceRegen) == 'true'">
<Message Text="Touching source files to force regeneration" Importance="high" />
<Touch Files="@(_PegenSources);@(_ASTSources);@(_OpcodeSources);@(_TokenSources);@(_KeywordOutputs);@(_SbomSources)"
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) &quot;%(Identity)&quot;',' ')"
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 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 &quot;%(_TokenOutputs.Identity)&quot;"
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="_RegenSbom"
DependsOnTargets="FindPythonForBuild"
Inputs="@(_SbomSources)"
Outputs="@(_SbomOutputs)">
<Exec Command='$(PythonForBuild) "$(PySourcePath)Tools\build\generate_sbom.py"'/>
</Target>
<Target Name="Regen"
Condition="$(Configuration) != 'PGUpdate'"
DependsOnTargets="_TouchRegenSources;_RegenPegen;_RegenAST_H;_RegenOpcodes;_RegenTokens;_RegenKeywords;_RegenGlobalObjects;_RegenSbom">
<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;
$(tcltkDir)tixlicense.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%0D%0Aset PYTHONPATH=$(PySourcePath)Lib%0D%0A"$(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>