--- /dev/null
+#include <windows.h>\r
+#include <sys/types.h>\r
+#include <sys/stat.h>\r
+#include <stdio.h>\r
+\r
+/* This file creates the getbuildinfo.o object, by first\r
+ invoking subwcrev.exe (if found), and then invoking cl.exe.\r
+ As a side effect, it might generate PCBuild\getbuildinfo2.c\r
+ also. If this isn't a subversion checkout, or subwcrev isn't\r
+ found, it compiles ..\\Modules\\getbuildinfo.c instead.\r
+\r
+ Currently, subwcrev.exe is found from the registry entries\r
+ of TortoiseSVN.\r
+\r
+ No attempt is made to place getbuildinfo.o into the proper\r
+ binary directory. This isn't necessary, as this tool is\r
+ invoked as a pre-link step for pythoncore, so that overwrites\r
+ any previous getbuildinfo.o.\r
+\r
+*/\r
+\r
+int make_buildinfo2()\r
+{\r
+ struct _stat st;\r
+ HKEY hTortoise;\r
+ char command[500];\r
+ DWORD type, size;\r
+ if (_stat(".svn", &st) < 0)\r
+ return 0;\r
+ if (RegOpenKey(HKEY_LOCAL_MACHINE, "Software\\TortoiseSVN", &hTortoise) != ERROR_SUCCESS &&\r
+ RegOpenKey(HKEY_CURRENT_USER, "Software\\TortoiseSVN", &hTortoise) != ERROR_SUCCESS)\r
+ /* Tortoise not installed */\r
+ return 0;\r
+ size = sizeof(command);\r
+ if (RegQueryValueEx(hTortoise, "Directory", 0, &type, command, &size) != ERROR_SUCCESS ||\r
+ type != REG_SZ)\r
+ /* Registry corrupted */\r
+ return 0;\r
+ strcat(command, "bin\\subwcrev.exe");\r
+ if (_stat(command, &st) < 0)\r
+ /* subwcrev.exe not part of the release */\r
+ return 0;\r
+ strcat(command, " .. ..\\Modules\\getbuildinfo.c getbuildinfo2.c");\r
+ puts(command); fflush(stdout);\r
+ if (system(command) < 0)\r
+ return 0;\r
+ return 1;\r
+}\r
+\r
+int main(int argc, char*argv[])\r
+{\r
+ char command[500] = "cl.exe -c -D_WIN32 -DUSE_DL_EXPORT -D_WINDOWS -DWIN32 -D_WINDLL ";\r
+ int do_unlink, result;\r
+ if (argc != 2) {\r
+ fprintf(stderr, "make_buildinfo $(ConfigurationName)\n");\r
+ return EXIT_FAILURE;\r
+ }\r
+ if (strcmp(argv[1], "Release") == 0) {\r
+ strcat(command, "-MD ");\r
+ //strcpy(targetdir, "x86-temp-debug");\r
+ }\r
+ else if (strcmp(argv[1], "Debug") == 0) {\r
+ strcat(command, "-D_DEBUG -MDd ");\r
+ //strcpy(targetdir, "x86-temp-release");\r
+ }\r
+ else if (strcmp(argv[1], "ReleaseItanium")) {\r
+ strcat(command, "-MD ");\r
+ //strcpy(targetdir, "ia64-temp-release");\r
+ }\r
+ else {\r
+ fprintf(stderr, "unsupported configuration %s\n", argv[1]);\r
+ return EXIT_FAILURE;\r
+ }\r
+\r
+ if ((do_unlink = make_buildinfo2()))\r
+ strcat(command, "getbuildinfo2.c -DSUBWCREV ");\r
+ else\r
+ strcat(command, "..\\Modules\\getbuildinfo.c");\r
+ strcat(command, " -Fogetbuildinfo.o -I..\\Include -I..\\PC");\r
+ puts(command); fflush(stdout);\r
+ result = system(command);\r
+ if (do_unlink)\r
+ unlink("getbuildinfo2.c");\r
+ if (result < 0)\r
+ return EXIT_FAILURE;\r
+ return 0;\r
+}
\ No newline at end of file