#include "wx/thread.h"
#include "wx/process.h"
+#include <sys/wait.h>
+
// Use polling instead of Mach ports, which doesn't work on Intel
// due to task_for_pid security issues.
#if USE_POLLING
+#if wxUSE_THREADS
class wxProcessTerminationEventHandler: public wxEvtHandler
{
public:
break;
}
}
-
+
return NULL;
}
if (pid < 1)
return -1;
- wxProcessTerminationEventHandler* handler = new wxProcessTerminationEventHandler(proc_data);
+ wxProcessTerminationEventHandler* handler = new wxProcessTerminationEventHandler(proc_data);
wxProcessTerminationThread* thread = new wxProcessTerminationThread(proc_data, handler);
-
+
if (thread->Create() != wxTHREAD_NO_ERROR)
{
wxLogDebug(wxT("Could not create termination detection thread."));
}
thread->Run();
-
+
return 0;
}
+#else // !wxUSE_THREADS
+int wxAddProcessCallbackForPid(wxEndProcessData*, int)
+{
+ wxLogDebug(wxT("Could not create termination detection thread."));
+ return -1;
+}
+#endif // wxUSE_THREADS/!wxUSE_THREADS
-#else
+#else // !USE_POLLING
#include <CoreFoundation/CFMachPort.h>
-#include <sys/wait.h>
extern "C" {
#include <mach/mach.h>
}
int rc = waitpid(abs(proc_data->pid), &status, WNOHANG);
if(!rc)
{
- wxLogDebug(wxT("Mach port was invalidated, but process hasn't terminated!"));
- return;
+ wxLogDebug(wxT("Mach port was invalidated, but process hasn't terminated!"));
+ return;
}
if((rc != -1) && WIFEXITED(status))
- proc_data->exitcode = WEXITSTATUS(status);
+ proc_data->exitcode = WEXITSTATUS(status);
else
- proc_data->exitcode = -1;
+ proc_data->exitcode = -1;
wxHandleProcessTermination(proc_data);
}
wxLogDebug(wxT("Couldn't create runloopsource"));
return -1;
}
-
+
CFRelease(CFMachPortForProcess);
CFRunLoopAddSource(CFRunLoopGetCurrent(),runloopsource,kCFRunLoopDefaultMode);
return 0;
}
-#endif
- // USE_POLLING
+#endif // USE_POLLING/!USE_POLLING
-// NOTE: This doens't really belong here but this was a handy file to
+// NOTE: This doesn't really belong here but this was a handy file to
// put it in because it's already compiled for wxCocoa and wxMac GUI lib.
+#if wxUSE_GUI
+
static wxStandardPathsCF gs_stdPaths;
wxStandardPathsBase& wxGUIAppTraits::GetStandardPaths()
{
return gs_stdPaths;
}
+#endif // wxUSE_GUI
+