summaryrefslogtreecommitdiffstats
path: root/PCbuild/regen.targets
blob: cc9469c7ddd726b35614f01298d0ae460f1b26ec (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
<?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>
    <_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);@(_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="_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="Regen"
          Condition="$(Configuration) != 'PGUpdate'"
          DependsOnTargets="_TouchRegenSources;_RegenPegen;_RegenAST_H;_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>