issue 9981

let make_buildinfo use a temporary directory on windows
parent 0eee1f58
...@@ -19,9 +19,15 @@ ...@@ -19,9 +19,15 @@
invoked as a pre-link step for pythoncore, so that overwrites invoked as a pre-link step for pythoncore, so that overwrites
any previous getbuildinfo.o. any previous getbuildinfo.o.
However, if a second argument is provided, this will be used
as a temporary directory where any getbuildinfo2.c and
getbuildinfo.o files are put. This is useful if multiple
configurations are being built in parallel, to avoid them
trampling each other's files.
*/ */
int make_buildinfo2() int make_buildinfo2(const char *tmppath)
{ {
struct _stat st; struct _stat st;
HKEY hTortoise; HKEY hTortoise;
...@@ -46,7 +52,9 @@ int make_buildinfo2() ...@@ -46,7 +52,9 @@ int make_buildinfo2()
if (_stat(command+1, &st) < 0) if (_stat(command+1, &st) < 0)
/* subwcrev.exe not part of the release */ /* subwcrev.exe not part of the release */
return 0; return 0;
strcat_s(command, CMD_SIZE, "\" .. ..\\Modules\\getbuildinfo.c getbuildinfo2.c"); strcat_s(command, CMD_SIZE, "\" .. ..\\Modules\\getbuildinfo.c ");
strcat_s(command, CMD_SIZE, tmppath);
strcat_s(command, CMD_SIZE, "getbuildinfo2.c");
puts(command); fflush(stdout); puts(command); fflush(stdout);
if (system(command) < 0) if (system(command) < 0)
return 0; return 0;
...@@ -55,10 +63,12 @@ int make_buildinfo2() ...@@ -55,10 +63,12 @@ int make_buildinfo2()
int main(int argc, char*argv[]) int main(int argc, char*argv[])
{ {
char command[500] = "cl.exe -c -D_WIN32 -DUSE_DL_EXPORT -D_WINDOWS -DWIN32 -D_WINDLL "; char command[CMD_SIZE] = "cl.exe -c -D_WIN32 -DUSE_DL_EXPORT -D_WINDOWS -DWIN32 -D_WINDLL ";
char tmppath[CMD_SIZE] = "";
int do_unlink, result; int do_unlink, result;
if (argc != 2) { char *tmpdir = NULL;
fprintf(stderr, "make_buildinfo $(ConfigurationName)\n"); if (argc <= 2 || argc > 3) {
fprintf(stderr, "make_buildinfo $(ConfigurationName) [tmpdir]\n");
return EXIT_FAILURE; return EXIT_FAILURE;
} }
if (strcmp(argv[1], "Release") == 0) { if (strcmp(argv[1], "Release") == 0) {
...@@ -78,16 +88,28 @@ int main(int argc, char*argv[]) ...@@ -78,16 +88,28 @@ int main(int argc, char*argv[])
fprintf(stderr, "unsupported configuration %s\n", argv[1]); fprintf(stderr, "unsupported configuration %s\n", argv[1]);
return EXIT_FAILURE; return EXIT_FAILURE;
} }
if (argc > 2) {
tmpdir = argv[2];
strcat_s(tmppath, _countof(tmppath), tmpdir);
strcat_s(tmppath, _countof(tmppath), "\\");
}
if ((do_unlink = make_buildinfo2())) if ((do_unlink = make_buildinfo2(tmppath))) {
strcat_s(command, CMD_SIZE, tmppath);
strcat_s(command, CMD_SIZE, "getbuildinfo2.c -DSUBWCREV "); strcat_s(command, CMD_SIZE, "getbuildinfo2.c -DSUBWCREV ");
else } else
strcat_s(command, CMD_SIZE, "..\\Modules\\getbuildinfo.c"); strcat_s(command, CMD_SIZE, "..\\Modules\\getbuildinfo.c");
strcat_s(command, CMD_SIZE, " -Fogetbuildinfo.o -I..\\Include -I..\\PC"); strcat_s(command, CMD_SIZE, " -Fo");
strcat_s(command, CMD_SIZE, tmppath);
strcat_s(command, CMD_SIZE, "getbuildinfo.o -I..\\Include -I..\\PC");
puts(command); fflush(stdout); puts(command); fflush(stdout);
result = system(command); result = system(command);
if (do_unlink) if (do_unlink) {
_unlink("getbuildinfo2.c"); command[0] = '\0';
strcat_s(command, CMD_SIZE, tmppath);
strcat_s(command, CMD_SIZE, "getbuildinfo2.c");
_unlink(command);
}
if (result < 0) if (result < 0)
return EXIT_FAILURE; return EXIT_FAILURE;
return 0; return 0;
......
...@@ -12,9 +12,6 @@ ...@@ -12,9 +12,6 @@
<Platform <Platform
Name="Win32" Name="Win32"
/> />
<Platform
Name="x64"
/>
</Platforms> </Platforms>
<ToolFiles> <ToolFiles>
</ToolFiles> </ToolFiles>
...@@ -84,64 +81,6 @@ ...@@ -84,64 +81,6 @@
Name="VCPostBuildEventTool" Name="VCPostBuildEventTool"
/> />
</Configuration> </Configuration>
<Configuration
Name="Release|x64"
ConfigurationType="1"
InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions="_CONSOLE"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations> </Configurations>
<References> <References>
</References> </References>
......
...@@ -59,11 +59,11 @@ ...@@ -59,11 +59,11 @@
<Tool <Tool
Name="VCPreLinkEventTool" Name="VCPreLinkEventTool"
Description="Generate build information..." Description="Generate build information..."
CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release" CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release $(IntDir)"
/> />
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="getbuildinfo.o" AdditionalDependencies="$(IntDir)\getbuildinfo.o"
OutputFile="$(OutDir)\$(PyDllName).dll" OutputFile="$(OutDir)\$(PyDllName).dll"
IgnoreDefaultLibraryNames="libc" IgnoreDefaultLibraryNames="libc"
ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb" ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb"
...@@ -134,11 +134,11 @@ ...@@ -134,11 +134,11 @@
<Tool <Tool
Name="VCPreLinkEventTool" Name="VCPreLinkEventTool"
Description="Generate build information..." Description="Generate build information..."
CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release" CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release $(IntDir)"
/> />
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="getbuildinfo.o" AdditionalDependencies="$(IntDir)\getbuildinfo.o"
OutputFile="$(OutDir)\$(PyDllName).dll" OutputFile="$(OutDir)\$(PyDllName).dll"
IgnoreDefaultLibraryNames="libc" IgnoreDefaultLibraryNames="libc"
ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb" ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb"
...@@ -212,11 +212,11 @@ ...@@ -212,11 +212,11 @@
<Tool <Tool
Name="VCPreLinkEventTool" Name="VCPreLinkEventTool"
Description="Generate build information..." Description="Generate build information..."
CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Debug" CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Debug $(IntDir)"
/> />
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="getbuildinfo.o" AdditionalDependencies="$(IntDir)\getbuildinfo.o"
OutputFile="$(OutDir)\$(PyDllName)_d.dll" OutputFile="$(OutDir)\$(PyDllName)_d.dll"
IgnoreDefaultLibraryNames="libc" IgnoreDefaultLibraryNames="libc"
ProgramDatabaseFile="$(OutDir)$(PyDllName)_d.pdb" ProgramDatabaseFile="$(OutDir)$(PyDllName)_d.pdb"
...@@ -290,11 +290,11 @@ ...@@ -290,11 +290,11 @@
<Tool <Tool
Name="VCPreLinkEventTool" Name="VCPreLinkEventTool"
Description="Generate build information..." Description="Generate build information..."
CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Debug" CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Debug $(IntDir)"
/> />
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="getbuildinfo.o" AdditionalDependencies="$(IntDir)\getbuildinfo.o"
OutputFile="$(OutDir)\$(PyDllName)_d.dll" OutputFile="$(OutDir)\$(PyDllName)_d.dll"
IgnoreDefaultLibraryNames="libc" IgnoreDefaultLibraryNames="libc"
ProgramDatabaseFile="$(OutDir)$(PyDllName)_d.pdb" ProgramDatabaseFile="$(OutDir)$(PyDllName)_d.pdb"
...@@ -364,11 +364,11 @@ ...@@ -364,11 +364,11 @@
<Tool <Tool
Name="VCPreLinkEventTool" Name="VCPreLinkEventTool"
Description="Generate build information..." Description="Generate build information..."
CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release" CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release $(IntDir)"
/> />
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="getbuildinfo.o" AdditionalDependencies="$(IntDir)\getbuildinfo.o"
OutputFile="$(OutDir)\$(PyDllName).dll" OutputFile="$(OutDir)\$(PyDllName).dll"
IgnoreDefaultLibraryNames="libc" IgnoreDefaultLibraryNames="libc"
ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb" ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb"
...@@ -439,11 +439,11 @@ ...@@ -439,11 +439,11 @@
<Tool <Tool
Name="VCPreLinkEventTool" Name="VCPreLinkEventTool"
Description="Generate build information..." Description="Generate build information..."
CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release" CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release $(IntDir)"
/> />
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="getbuildinfo.o" AdditionalDependencies="$(IntDir)\getbuildinfo.o"
OutputFile="$(OutDir)\$(PyDllName).dll" OutputFile="$(OutDir)\$(PyDllName).dll"
IgnoreDefaultLibraryNames="libc" IgnoreDefaultLibraryNames="libc"
ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb" ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb"
...@@ -514,11 +514,11 @@ ...@@ -514,11 +514,11 @@
<Tool <Tool
Name="VCPreLinkEventTool" Name="VCPreLinkEventTool"
Description="Generate build information..." Description="Generate build information..."
CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release" CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release ($IntDir)"
/> />
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="getbuildinfo.o" AdditionalDependencies="$(IntDir)\getbuildinfo.o"
OutputFile="$(OutDir)\$(PyDllName).dll" OutputFile="$(OutDir)\$(PyDllName).dll"
IgnoreDefaultLibraryNames="libc" IgnoreDefaultLibraryNames="libc"
ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb" ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb"
...@@ -589,11 +589,11 @@ ...@@ -589,11 +589,11 @@
<Tool <Tool
Name="VCPreLinkEventTool" Name="VCPreLinkEventTool"
Description="Generate build information..." Description="Generate build information..."
CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release" CommandLine="&quot;$(SolutionDir)make_buildinfo.exe&quot; Release $(IntDir)"
/> />
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="getbuildinfo.o" AdditionalDependencies="$(IntDir)\getbuildinfo.o"
OutputFile="$(OutDir)\$(PyDllName).dll" OutputFile="$(OutDir)\$(PyDllName).dll"
IgnoreDefaultLibraryNames="libc" IgnoreDefaultLibraryNames="libc"
ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb" ProgramDatabaseFile="$(OutDir)$(PyDllName).pdb"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment