summaryrefslogtreecommitdiffstats
path: root/PCbuild/regen.targets
blob: 3938b66678eee05f2bd2198d43356ab086acea0e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<?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\scripts\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) &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\scripts\generate_opcode_h.py Lib\opcode.py Include\opcode.h Include\internal\pycore_opcode.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\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)"
          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\scripts\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;
                              $(opensslOutDir)LICENSE;
                              $(libffiDir)LICENSE;" />
    <_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
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>