9a627e8881
Note this still needs some work: currently all source files are always preprocessed no matter which one actually changed, moreover that happens file by file without any parallellism so builds are painstakingly slow.
97 lines
4.7 KiB
XML
97 lines
4.7 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="GenerateHeaders">
|
|
|
|
<Import Project="paths.props" Condition="'$(PyPathsIncluded)' != 'True'"/>
|
|
|
|
<!--Generate qstrdefs.h and mpversion.h similar to what is done in py/mkrules.mk-->
|
|
<Target Name="GenerateHeaders" DependsOnTargets="MakeVersionHdr;MakeQstrData">
|
|
</Target>
|
|
|
|
<PropertyGroup>
|
|
<DestDir>$(PyBuildDir)genhdr\</DestDir>
|
|
<PySrcDir>$(PyBaseDir)py\</PySrcDir>
|
|
<QstrDefs>$(PyBaseDir)unix\qstrdefsport.h</QstrDefs>
|
|
<QstrDefsCollected>$(DestDir)qstrdefscollected.h</QstrDefsCollected>
|
|
<QstrGen>$(DestDir)qstrdefs.generated.h</QstrGen>
|
|
<PyPython Condition="'$(PyPython)' == ''">python</PyPython>
|
|
</PropertyGroup>
|
|
|
|
<ItemGroup>
|
|
<PyQstrSourceFiles Include="@(ClCompile);$(PySrcDir)qstrdefs.h"/>
|
|
</ItemGroup>
|
|
|
|
<Target Name="MakeDestDir">
|
|
<MakeDir Directories="$(DestDir)"/>
|
|
</Target>
|
|
|
|
<Target Name="MakeQstrDefs" DependsOnTargets="MakeDestDir" Inputs="@(PyQstrSourceFiles)" Outputs="$(QstrDefsCollected)">
|
|
<ItemGroup>
|
|
<PyIncDirs Include="$(PyIncDirs)"/>
|
|
<PreProcDefs Include=" %(ClCompile.PreProcessorDefinitions)"/>
|
|
<PyQstrSourceFiles>
|
|
<Qstr>$([System.String]::new('%(FullPath)').Replace('$(PyBaseDir)', '$(DestDir)'))</Qstr>
|
|
</PyQstrSourceFiles>
|
|
<PyQstrSourceFiles>
|
|
<Qstr>$([System.IO.Path]::ChangeExtension('%(Qstr)', '.qstr'))</Qstr>
|
|
<PreProc>$([System.IO.Path]::ChangeExtension('%(Qstr)', '.pp'))</PreProc>
|
|
<QstrDir>$([System.IO.Path]::GetDirectoryName('%(Qstr)'))</QstrDir>
|
|
<PreProcOnly>$([System.String]::new('%(FileName)').Contains('qstrdefs'))</PreProcOnly>
|
|
</PyQstrSourceFiles>
|
|
</ItemGroup>
|
|
<PropertyGroup>
|
|
|
|
</PropertyGroup>
|
|
|
|
<!-- Preprocess and pass to makeqstrdefs if needed, else just copy -->
|
|
<MakeDir Directories="@(PyQstrSourceFiles->'%(QstrDir)')"/>
|
|
<Touch Files="$(QstrGen)" AlwaysCreate="true"/>
|
|
|
|
<Exec Command="cl /nologo /I@(PyIncDirs, ' /I') /D@(PreProcDefs, ' /D') /Fi%(PyQstrSourceFiles.PreProc) /P %(PyQstrSourceFiles.Identity)"/>
|
|
<Exec Command="$(PyPython) $(PySrcDir)makeqstrdefs.py -s -o %(PyQstrSourceFiles.Qstr) %(PyQstrSourceFiles.PreProc)" Condition="'%(PyQstrSourceFiles.PreProcOnly)' != 'True'"/>
|
|
<Copy SourceFiles="%(PyQstrSourceFiles.PreProc)" DestinationFiles="%(PyQstrSourceFiles.Qstr)" Condition="'%(PyQstrSourceFiles.PreProcOnly)' == 'True'"/>
|
|
|
|
<!-- Collect all output (where qstrdefs file(s) have priority over autogenerated ones), then
|
|
filter out lines which definitely aren't qstr definitions so we don't end up with a huge (> 10mb) filesize -->
|
|
<ReadLinesFromFile File="%(PyQstrSourceFiles.Qstr)" Condition="'%(PyQstrSourceFiles.PreProcOnly)' == 'True'">
|
|
<Output TaskParameter="Lines" ItemName="PreProcLines"/>
|
|
</ReadLinesFromFile>
|
|
<ReadLinesFromFile File="%(PyQstrSourceFiles.Qstr)">
|
|
<Output TaskParameter="Lines" ItemName="PreProcLines"/>
|
|
</ReadLinesFromFile>
|
|
<ItemGroup>
|
|
<QStrLines Include="@(PreProcLines)" Condition="$([System.String]::new('%(Identity)').Contains('Q'))"/>
|
|
</ItemGroup>
|
|
|
|
<WriteLinesToFile Lines="@(QStrLines)" File="$(QstrDefsCollected)" Overwrite="true"/>
|
|
</Target>
|
|
|
|
<Target Name="MakeQstrData" DependsOnTargets="MakeQstrDefs">
|
|
<PropertyGroup>
|
|
<TmpFile>$(DestFile).tmp</TmpFile>
|
|
</PropertyGroup>
|
|
<Exec Command="$(PyPython) $(PySrcDir)makeqstrdata.py $(QstrDefs) $(QstrDefsCollected) > $(TmpFile)"/>
|
|
<MSBuild Projects="$(MSBuildThisFileFullPath)" Targets="CopyFileIfDifferent" Properties="SourceFile=$(TmpFile);DestFile=$(QstrGen)"/>
|
|
</Target>
|
|
|
|
<Target Name="MakeVersionHdr" DependsOnTargets="MakeDestDir">
|
|
<PropertyGroup>
|
|
<DestFile>$(DestDir)mpversion.h</DestFile>
|
|
<TmpFile>$(DestFile).tmp</TmpFile>
|
|
</PropertyGroup>
|
|
<Exec Command="$(PyPython) $(PySrcDir)makeversionhdr.py $(TmpFile)"/>
|
|
<MSBuild Projects="$(MSBuildThisFileFullPath)" Targets="CopyFileIfDifferent" Properties="SourceFile=$(TmpFile);DestFile=$(DestFile)"/>
|
|
</Target>
|
|
|
|
<!--Copies SourceFile to DestFile only if SourceFile's content differs from DestFile's.
|
|
We use this to 'touch' the generated files only when they are really newer
|
|
so a build is only triggered if the generated content actually changed,
|
|
and not just because the file date changed since the last build-->
|
|
<Target Name="CopyFileIfDifferent">
|
|
<Exec Command="fc /B $(SourceFile) $(DestFile) > NUL 2>&1" IgnoreExitCode="true">
|
|
<Output TaskParameter="ExitCode" PropertyName="FilesDiffer" />
|
|
</Exec>
|
|
<Copy SourceFiles="$(SourceFile)" DestinationFiles="$(DestFile)" Condition="'$(FilesDiffer)'!='0'"/>
|
|
</Target>
|
|
|
|
</Project>
|