]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/utilsunx.cpp
Check for Pango XFT presence (for wxX11).
[wxWidgets.git] / src / unix / utilsunx.cpp
index 85c4250675b63d006870a790829aa88197ec2c36..6115ef333051e083d796849646d821714f27d87b 100644 (file)
@@ -15,6 +15,8 @@
 // headers
 // ----------------------------------------------------------------------------
 
+#include <pwd.h>
+
 // for compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 
 #if wxUSE_BASE
 
-#if defined( __MWERKS__ ) && defined(__MACH__)
-#define WXWIN_OS_DESCRIPTION "MacOS X"
-#define HAVE_NANOSLEEP
-#define HAVE_UNAME
+#if defined(__MWERKS__) && defined(__MACH__)
+    #ifndef WXWIN_OS_DESCRIPTION
+        #define WXWIN_OS_DESCRIPTION "MacOS X"
+    #endif
+    #ifndef HAVE_NANOSLEEP
+        #define HAVE_NANOSLEEP
+    #endif
+    #ifndef HAVE_UNAME
+        #define HAVE_UNAME
+    #endif
+
+    // our configure test believes we can use sigaction() if the function is
+    // available but Metrowekrs with MSL run-time does have the function but
+    // doesn't have sigaction struct so finally we can't use it...
+    #ifdef __MSL__
+        #undef wxUSE_ON_FATAL_EXCEPTION
+        #define wxUSE_ON_FATAL_EXCEPTION 0
+    #endif
 #endif
 
 // not only the statfs syscall is called differently depending on platform, but
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <unistd.h>
-#include <pwd.h>
 #include <errno.h>
 #include <netdb.h>
 #include <signal.h>
@@ -185,9 +200,12 @@ void wxMilliSleep(unsigned long milliseconds)
 // process management
 // ----------------------------------------------------------------------------
 
-int wxKill(long pid, wxSignal sig, wxKillError *rc)
+int wxKill(long pid, wxSignal sig, wxKillError *rc, int flags)
 {
-    int err = kill((pid_t)pid, (int)sig);
+    int err = kill((pid_t) (flags & wxKILL_CHILDREN) ? -pid : pid, (int)sig);
+    if ( !err )
+       *rc = wxKILL_OK;
+    else
     if ( rc )
     {
         switch ( errno )
@@ -822,11 +840,20 @@ bool wxGetUserName(wxChar *buf, int sz)
 
 wxString wxGetOsDescription()
 {
-#ifndef WXWIN_OS_DESCRIPTION
-    #error WXWIN_OS_DESCRIPTION should be defined in config.h by configure
-#else
-    return wxString::FromAscii( WXWIN_OS_DESCRIPTION );
-#endif
+    FILE *f = popen("uname -s -r -m", "r");
+    if (f)
+    {
+        char buf[256];
+        size_t c = fread(buf, 1, sizeof(buf) - 1, f);
+        pclose(f);
+        // Trim newline from output.
+        if (c && buf[c - 1] == '\n')
+            --c;
+        buf[c] = '\0';
+        return wxString::FromAscii( buf );
+    }
+    wxFAIL_MSG( _T("uname failed") );
+    return _T("");
 }
 
 #endif // !__WXMAC__
@@ -1128,7 +1155,7 @@ int wxGUIAppTraits::WaitForChild(wxExecuteData& execData)
     }
 
 
-#if defined(__DARWIN__) && defined(__WXMAC__)
+#if defined(__DARWIN__) && (defined(__WXMAC__) || defined(__WXCOCOA__))
     endProcData->tag = wxAddProcessCallbackForPid(endProcData, execData.pid);
 #else
     endProcData->tag = wxAddProcessCallback
@@ -1138,7 +1165,7 @@ int wxGUIAppTraits::WaitForChild(wxExecuteData& execData)
                 );
 
     execData.pipeEndProcDetect.Close();
-#endif // defined(__DARWIN__) && defined(__WXMAC__)
+#endif // defined(__DARWIN__) && (defined(__WXMAC__) || defined(__WXCOCOA__))
 
     if ( execData.flags & wxEXEC_SYNC )
     {
@@ -1165,10 +1192,10 @@ int wxGUIAppTraits::WaitForChild(wxExecuteData& execData)
             }
 #endif // wxUSE_STREAMS
 
-            // don't consume 100% of the CPU while we're sitting this in this
+            // don't consume 100% of the CPU while we're sitting in this
             // loop
             if ( idle )
-                wxUsleep(1);
+                wxMilliSleep(1);
 
             // give GTK+ a chance to call GTK_EndProcessDetector here and
             // also repaint the GUI