2
0
mirror of https://github.com/boostorg/build.git synced 2026-02-16 13:22:11 +00:00

Make the action timeout attempt to also close any open dialogs before killing processes. Thanks to Bronek Kozicki.

[SVN r34210]
This commit is contained in:
Rene Rivera
2006-06-06 23:58:07 +00:00
parent 43c3f39ef8
commit 5cb7524ce7
3 changed files with 74 additions and 10 deletions

View File

@@ -210,7 +210,7 @@ if "_%BOOST_JAM_TOOLSET%_" == "_metrowerks_" (
if "_%BOOST_JAM_TOOLSET%_" == "_metrowerks_" (
if not "_%BOOST_JAM_TOOLSET_ROOT%_" == "__" (
set PATH=%BOOST_JAM_TOOLSET_ROOT%Other Metrowerks Tools\Command Line Tools;%PATH%)
set BOOST_JAM_CC=mwcc -runtime ss -cwd include -DNT -ladvapi32.lib
set BOOST_JAM_CC=mwcc -runtime ss -cwd include -DNT -lkernel32.lib -ladvapi32.lib -luser32.lib
set BOOST_JAM_OPT_JAM=-o bootstrap\jam0.exe
set BOOST_JAM_OPT_MKJAMBASE=-o bootstrap\mkjambase0.exe
set BOOST_JAM_OPT_YYACC=-o bootstrap\yyacc0.exe
@@ -225,7 +225,7 @@ if "_%BOOST_JAM_TOOLSET%_" == "_msvc_" (
if "_%BOOST_JAM_TOOLSET%_" == "_msvc_" (
if not "_%BOOST_JAM_TOOLSET_ROOT%_" == "__" (
set PATH=%BOOST_JAM_TOOLSET_ROOT%bin;%PATH%)
set BOOST_JAM_CC=cl /nologo /GZ /Zi /MLd -DNT -DYYDEBUG kernel32.lib advapi32.lib
set BOOST_JAM_CC=cl /nologo /GZ /Zi /MLd -DNT -DYYDEBUG kernel32.lib advapi32.lib user32.lib
set BOOST_JAM_OPT_JAM=/Febootstrap\jam0
set BOOST_JAM_OPT_MKJAMBASE=/Febootstrap\mkjambase0
set BOOST_JAM_OPT_YYACC=/Febootstrap\yyacc0
@@ -240,7 +240,7 @@ if "_%BOOST_JAM_TOOLSET%_" == "_vc7_" (
if "_%BOOST_JAM_TOOLSET%_" == "_vc7_" (
if not "_%BOOST_JAM_TOOLSET_ROOT%_" == "__" (
set PATH=%BOOST_JAM_TOOLSET_ROOT%bin;%PATH%)
set BOOST_JAM_CC=cl /nologo /GZ /Zi /MLd -DNT -DYYDEBUG kernel32.lib advapi32.lib
set BOOST_JAM_CC=cl /nologo /GZ /Zi /MLd -DNT -DYYDEBUG kernel32.lib advapi32.lib user32.lib
set BOOST_JAM_OPT_JAM=/Febootstrap\jam0
set BOOST_JAM_OPT_MKJAMBASE=/Febootstrap\mkjambase0
set BOOST_JAM_OPT_YYACC=/Febootstrap\yyacc0
@@ -255,7 +255,7 @@ if "_%BOOST_JAM_TOOLSET%_" == "_vc8_" (
if "_%BOOST_JAM_TOOLSET%_" == "_vc8_" (
if not "_%BOOST_JAM_TOOLSET_ROOT%_" == "__" (
set PATH=%BOOST_JAM_TOOLSET_ROOT%bin;%PATH%)
set BOOST_JAM_CC=cl /nologo /RTC1 /Zi /MTd -DNT -DYYDEBUG -wd4996 kernel32.lib advapi32.lib
set BOOST_JAM_CC=cl /nologo /RTC1 /Zi /MTd -DNT -DYYDEBUG -wd4996 kernel32.lib advapi32.lib user32.lib
set BOOST_JAM_OPT_JAM=/Febootstrap\jam0
set BOOST_JAM_OPT_MKJAMBASE=/Febootstrap\mkjambase0
set BOOST_JAM_OPT_YYACC=/Febootstrap\yyacc0
@@ -298,7 +298,7 @@ if "_%BOOST_JAM_TOOLSET%_" == "_gcc-nocygwin_" (
set _known_=1
)
if "_%BOOST_JAM_TOOLSET%_" == "_intel-win32_" (
set BOOST_JAM_CC=icl -DNT /nologo kernel32.lib advapi32.lib
set BOOST_JAM_CC=icl -DNT /nologo kernel32.lib advapi32.lib user32.lib
set BOOST_JAM_OPT_JAM=/Febootstrap\jam0
set BOOST_JAM_OPT_MKJAMBASE=/Febootstrap\mkjambase0
set BOOST_JAM_OPT_YYACC=/Febootstrap\yyacc0

View File

@@ -177,7 +177,7 @@ toolset intel-win32 icl : /Fe : -D
[ opt --release : /ML /O2 /Ob2 /Gy /GF /GA /GB ]
[ opt --debug : /MLd /DEBUG /Z7 /Od /Ob0 ]
-I$(--python-include)
: kernel32.lib advapi32.lib $(--python-lib[1]) ;
: kernel32.lib advapi32.lib user32.lib $(--python-lib[1]) ;
## KCC ?
toolset kcc KCC : "-o " : -D
:
@@ -203,7 +203,7 @@ toolset kylix bc++ : -o : -D
[ opt --debug : -runtime ssd -opt none -inline off ]
-I$(--python-include) ;
toolset metrowerks $(mwcc) .link : "-o " :
: -subsystem console -ladvapi32.lib
: -subsystem console -lkernel32.lib -ladvapi32.lib -luser32.lib
[ opt --release : -runtime ss ]
[ opt --debug : -runtime ssd ]
: $(--python-lib[1]) ;
@@ -228,7 +228,7 @@ toolset msvc cl : /Fe : -D
[ opt --release : /ML /O2 /Ob2 /Gy /GF /GA /GB ]
[ opt --debug : /MLd /DEBUG /Z7 /Od /Ob0 ]
-I$(--python-include)
: kernel32.lib advapi32.lib $(--python-lib[1]) ;
: kernel32.lib advapi32.lib user32.lib $(--python-lib[1]) ;
## QNX 6.x GCC 3.x/2.95.3
toolset qcc qcc : "-o " : -D
: -Wc,-pedantic
@@ -264,14 +264,14 @@ toolset vc7 cl : /Fe : -D
[ opt --release : /ML /O2 /Ob2 /Gy /GF /GA /GB ]
[ opt --debug : /MLd /DEBUG /Z7 /Od /Ob0 ]
-I$(--python-include)
: kernel32.lib advapi32.lib $(--python-lib[1]) ;
: kernel32.lib advapi32.lib user32.lib $(--python-lib[1]) ;
## Microsoft Visual C++ 2005
toolset vc8 cl : /Fe : -D
: /nologo
[ opt --release : /MT /O2 /Ob2 /Gy /GF /GA /wd4996 ]
[ opt --debug : /MTd /DEBUG /Z7 /Od /Ob0 /wd4996 ]
-I$(--python-include)
: kernel32.lib advapi32.lib $(--python-lib[1]) ;
: kernel32.lib advapi32.lib user32.lib $(--python-lib[1]) ;
## VMS/OpenVMS DEC C
toolset vmsdecc cc : /OBJECT= : "/DEFINES=(" "," ")"
: /STANDARD=VAXC /PREFIX_LIBRARY_ENTRIES=ALL_ENTRIES

View File

@@ -897,6 +897,67 @@ check_process_exit(
return result;
}
int is_parent_child(DWORD parent, DWORD child)
{
HANDLE process_snapshot_h = INVALID_HANDLE_VALUE;
if (parent == child)
return 1;
process_snapshot_h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (INVALID_HANDLE_VALUE != process_snapshot_h)
{
BOOL ok = TRUE;
PROCESSENTRY32 pinfo;
pinfo.dwSize = sizeof(PROCESSENTRY32);
for (
ok = Process32First(process_snapshot_h, &pinfo);
ok == TRUE;
ok = Process32Next(process_snapshot_h, &pinfo) )
{
if (pinfo.th32ProcessID == child && pinfo.th32ParentProcessID)
return is_parent_child(parent, pinfo.th32ParentProcessID);
}
CloseHandle(process_snapshot_h);
}
return 0;
}
int related(HANDLE h, DWORD p)
{
return is_parent_child(get_process_id(h), p);
}
BOOL CALLBACK window_enum(HWND hwnd, LPARAM lParam)
{
char buf[10] = {0};
HANDLE h = *((HANDLE*) (lParam));
DWORD pid = 0;
if (!GetClassNameA(hwnd, buf, 10))
return TRUE; // failed to read class name
if (strcmp(buf, "#32770"))
return TRUE; // not a dialog
GetWindowThreadProcessId(hwnd, &pid);
if (related(h, pid))
{
PostMessage(hwnd, WM_QUIT, 0, 0);
// just one window at a time
return FALSE;
}
return TRUE;
}
void close_alert(HANDLE process)
{
EnumWindows(&window_enum, (LPARAM) &process);
}
static double
running_time(HANDLE process)
{
@@ -1046,6 +1107,9 @@ my_wait( int *status )
double t = running_time(active_handles[i]);
if ( t > (double)globs.timeout )
{
/* the job may have left an alert dialog around,
try and get rid of it before killing */
close_alert(active_handles[i]);
/* we have a "runaway" job, kill it */
kill_all(0,active_handles[i]);
/* indicate the job "finished" so we query its status below */