Update of /cvsroot/boost/boost/tools/jam/src
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv30455/tools/jam/src

Modified Files:
        build.bat build.jam execnt.c 
Log Message:
Make the action timeout attempt to also close any open dialogs before killing 
processes. Thanks to Bronek Kozicki.

Index: build.bat
===================================================================
RCS file: /cvsroot/boost/boost/tools/jam/src/build.bat,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -d -r1.39 -r1.40
--- build.bat   5 Apr 2006 11:19:34 -0000       1.39
+++ build.bat   6 Jun 2006 23:58:07 -0000       1.40
@@ -210,7 +210,7 @@
 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 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 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 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 @@
     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

Index: build.jam
===================================================================
RCS file: /cvsroot/boost/boost/tools/jam/src/build.jam,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -d -r1.82 -r1.83
--- build.jam   6 Jun 2006 20:42:08 -0000       1.82
+++ build.jam   6 Jun 2006 23:58:07 -0000       1.83
@@ -177,7 +177,7 @@
     [ 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 @@
         [ 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 @@
     [ 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 @@
     [ 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

Index: execnt.c
===================================================================
RCS file: /cvsroot/boost/boost/tools/jam/src/execnt.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -d -r1.24 -r1.25
--- execnt.c    21 Nov 2005 05:36:29 -0000      1.24
+++ execnt.c    6 Jun 2006 23:58:07 -0000       1.25
@@ -897,6 +897,67 @@
     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 @@
                     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 */



_______________________________________________
Boost-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/boost-cvs

Reply via email to