From 6fd3321d6c2d374f4d46534e630b822e7da4310e Mon Sep 17 00:00:00 2001 From: Amaury Forgeot d'Arc Date: Thu, 12 Jun 2008 21:58:20 +0000 Subject: Update VS8.0 build files, using the script vs9to8.py. Also remove references to odbc libraries, which are not shipped with vs2003 express. (and certainly not useful) --- PC/VS8.0/_bsddb.vcproj | 16 +- PC/VS8.0/_bsddb44.vcproj | 408 +++++++++++++++++++-------------------- PC/VS8.0/_elementtree.vcproj | 8 - PC/VS8.0/_sqlite3.vcproj | 16 +- PC/VS8.0/kill_python.c | 178 +++++++++++++++++ PC/VS8.0/make_versioninfo.vcproj | 2 - PC/VS8.0/pcbuild.sln | 21 ++ PC/VS8.0/pyproject.vsprops | 8 +- PC/VS8.0/python.vcproj | 8 - PC/VS8.0/sqlite3.vcproj | 138 ++++++------- PCbuild/_elementtree.vcproj | 8 - PCbuild/make_versioninfo.vcproj | 2 - PCbuild/python.vcproj | 8 - PCbuild/vs9to8.py | 6 + 14 files changed, 498 insertions(+), 329 deletions(-) create mode 100644 PC/VS8.0/kill_python.c diff --git a/PC/VS8.0/_bsddb.vcproj b/PC/VS8.0/_bsddb.vcproj index e88aaf0..59b7ce2 100644 --- a/PC/VS8.0/_bsddb.vcproj +++ b/PC/VS8.0/_bsddb.vcproj @@ -42,7 +42,7 @@ /> diff --git a/PC/VS8.0/_elementtree.vcproj b/PC/VS8.0/_elementtree.vcproj index 32fac0c..457da72 100644 --- a/PC/VS8.0/_elementtree.vcproj +++ b/PC/VS8.0/_elementtree.vcproj @@ -56,7 +56,6 @@ /> @@ -437,7 +431,6 @@ /> diff --git a/PC/VS8.0/_sqlite3.vcproj b/PC/VS8.0/_sqlite3.vcproj index afffab0..689585f 100644 --- a/PC/VS8.0/_sqlite3.vcproj +++ b/PC/VS8.0/_sqlite3.vcproj @@ -42,7 +42,7 @@ /> +#include +#include +#include + +#pragma comment(lib, "psapi") + +#ifdef _DEBUG +#define PYTHON_EXE (L"python_d.exe") +#define PYTHON_EXE_LEN (12) +#define KILL_PYTHON_EXE (L"kill_python_d.exe") +#define KILL_PYTHON_EXE_LEN (17) +#else +#define PYTHON_EXE (L"python.exe") +#define PYTHON_EXE_LEN (10) +#define KILL_PYTHON_EXE (L"kill_python.exe") +#define KILL_PYTHON_EXE_LEN (15) +#endif + +int +main(int argc, char **argv) +{ + HANDLE hp, hsp, hsm; /* process, snapshot processes, snapshot modules */ + DWORD dac, our_pid; + size_t len; + wchar_t path[MAX_PATH+1]; + + MODULEENTRY32W me; + PROCESSENTRY32W pe; + + me.dwSize = sizeof(MODULEENTRY32W); + pe.dwSize = sizeof(PROCESSENTRY32W); + + memset(path, 0, MAX_PATH+1); + + our_pid = GetCurrentProcessId(); + + hsm = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, our_pid); + if (hsm == INVALID_HANDLE_VALUE) { + printf("CreateToolhelp32Snapshot[1] failed: %d\n", GetLastError()); + return 1; + } + + if (!Module32FirstW(hsm, &me)) { + printf("Module32FirstW[1] failed: %d\n", GetLastError()); + CloseHandle(hsm); + return 1; + } + + /* + * Enumerate over the modules for the current process in order to find + * kill_process[_d].exe, then take a note of the directory it lives in. + */ + do { + if (_wcsnicmp(me.szModule, KILL_PYTHON_EXE, KILL_PYTHON_EXE_LEN)) + continue; + + len = wcsnlen_s(me.szExePath, MAX_PATH) - KILL_PYTHON_EXE_LEN; + wcsncpy_s(path, MAX_PATH+1, me.szExePath, len); + + break; + + } while (Module32NextW(hsm, &me)); + + CloseHandle(hsm); + + if (path == NULL) { + printf("failed to discern directory of running process\n"); + return 1; + } + + /* + * Take a snapshot of system processes. Enumerate over the snapshot, + * looking for python processes. When we find one, verify it lives + * in the same directory we live in. If it does, kill it. If we're + * unable to kill it, treat this as a fatal error and return 1. + * + * The rationale behind this is that we're called at the start of the + * build process on the basis that we'll take care of killing any + * running instances, such that the build won't encounter permission + * denied errors during linking. If we can't kill one of the processes, + * we can't provide this assurance, and the build shouldn't start. + */ + + hsp = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if (hsp == INVALID_HANDLE_VALUE) { + printf("CreateToolhelp32Snapshot[2] failed: %d\n", GetLastError()); + return 1; + } + + if (!Process32FirstW(hsp, &pe)) { + printf("Process32FirstW failed: %d\n", GetLastError()); + CloseHandle(hsp); + return 1; + } + + dac = PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE; + do { + + /* + * XXX TODO: if we really wanted to be fancy, we could check the + * modules for all processes (not just the python[_d].exe ones) + * and see if any of our DLLs are loaded (i.e. python30[_d].dll), + * as that would also inhibit our ability to rebuild the solution. + * Not worth loosing sleep over though; for now, a simple check + * for just the python executable should be sufficient. + */ + + if (_wcsnicmp(pe.szExeFile, PYTHON_EXE, PYTHON_EXE_LEN)) + /* This isn't a python process. */ + continue; + + /* It's a python process, so figure out which directory it's in... */ + hsm = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pe.th32ProcessID); + if (hsm == INVALID_HANDLE_VALUE) + /* + * If our module snapshot fails (which will happen if we don't own + * the process), just ignore it and continue. (It seems different + * versions of Windows return different values for GetLastError() + * in this situation; it's easier to just ignore it and move on vs. + * stopping the build for what could be a false positive.) + */ + continue; + + if (!Module32FirstW(hsm, &me)) { + printf("Module32FirstW[2] failed: %d\n", GetLastError()); + CloseHandle(hsp); + CloseHandle(hsm); + return 1; + } + + do { + if (_wcsnicmp(me.szModule, PYTHON_EXE, PYTHON_EXE_LEN)) + /* Wrong module, we're looking for python[_d].exe... */ + continue; + + if (_wcsnicmp(path, me.szExePath, len)) + /* Process doesn't live in our directory. */ + break; + + /* Python process residing in the right directory, kill it! */ + hp = OpenProcess(dac, FALSE, pe.th32ProcessID); + if (!hp) { + printf("OpenProcess failed: %d\n", GetLastError()); + CloseHandle(hsp); + CloseHandle(hsm); + return 1; + } + + if (!TerminateProcess(hp, 1)) { + printf("TerminateProcess failed: %d\n", GetLastError()); + CloseHandle(hsp); + CloseHandle(hsm); + CloseHandle(hp); + return 1; + } + + CloseHandle(hp); + break; + + } while (Module32NextW(hsm, &me)); + + CloseHandle(hsm); + + } while (Process32NextW(hsp, &pe)); + + CloseHandle(hsp); + + return 0; +} + +/* vi: set ts=8 sw=4 sts=4 expandtab */ diff --git a/PC/VS8.0/make_versioninfo.vcproj b/PC/VS8.0/make_versioninfo.vcproj index b097162..9dbf10d 100644 --- a/PC/VS8.0/make_versioninfo.vcproj +++ b/PC/VS8.0/make_versioninfo.vcproj @@ -67,7 +67,6 @@ /> diff --git a/PC/VS8.0/python.vcproj b/PC/VS8.0/python.vcproj index 5628fdf..2f47c0e 100644 --- a/PC/VS8.0/python.vcproj +++ b/PC/VS8.0/python.vcproj @@ -62,7 +62,6 @@ /> @@ -573,167 +573,167 @@ Name="Source Files" > diff --git a/PCbuild/_elementtree.vcproj b/PCbuild/_elementtree.vcproj index c22c252..b308c18 100644 --- a/PCbuild/_elementtree.vcproj +++ b/PCbuild/_elementtree.vcproj @@ -56,7 +56,6 @@ /> @@ -437,7 +431,6 @@ /> diff --git a/PCbuild/make_versioninfo.vcproj b/PCbuild/make_versioninfo.vcproj index dcb922b..e2b86c7 100644 --- a/PCbuild/make_versioninfo.vcproj +++ b/PCbuild/make_versioninfo.vcproj @@ -67,7 +67,6 @@ />