diff -ruN qt-all-commercial-src-4.5.2.orig/mkspecs/sco-cc/qmake.conf qt-all-commercial-src-4.5.2/mkspecs/sco-cc/qmake.conf
--- qt-all-commercial-src-4.5.2.orig/mkspecs/sco-cc/qmake.conf	2009-06-20 01:01:52.000000000 -0400
+++ qt-all-commercial-src-4.5.2/mkspecs/sco-cc/qmake.conf	2009-06-25 17:51:36.000000000 -0400
@@ -24,10 +24,10 @@
 QMAKE_CFLAGS_DEBUG	= -g
 QMAKE_CFLAGS_SHLIB	= -KPIC
 QMAKE_CFLAGS_STATIC_LIB	= $$QMAKE_CFLAGS_SHLIB
-QMAKE_CFLAGS_YACC	= -Wf,--diag_suppress,111 -Wf,--diag_suppress,177
+QMAKE_CFLAGS_YACC	= -Wf,--diag_suppress -Wf,111 -Wf,--diag_suppress -Wf,177
 
 QMAKE_CXX		= CC
-QMAKE_CXXFLAGS		= $$QMAKE_CFLAGS -Wf,--display_error_number -Wf,--diag_suppress,838
+QMAKE_CXXFLAGS		= $$QMAKE_CFLAGS -Wf,--display_error_number -Wf,--diag_suppress -Wf,838
 QMAKE_CXXFLAGS_WARN_ON	= $$QMAKE_CFLAGS_WARN_ON
 QMAKE_CXXFLAGS_WARN_OFF	= $$QMAKE_CFLAGS_WARN_OFF
 QMAKE_CXXFLAGS_RELEASE	= $$QMAKE_CFLAGS_RELEASE -Tused
@@ -39,7 +39,7 @@
 QMAKE_INCDIR		=
 QMAKE_LIBDIR		=
 QMAKE_INCDIR_X11	=
-QMAKE_LIBDIR_X11	= /usr/X/lib
+QMAKE_LIBDIR_X11	= /usr/X11R6/lib
 QMAKE_INCDIR_QT		= $$[QT_INSTALL_HEADERS]
 QMAKE_LIBDIR_QT		= $$[QT_INSTALL_LIBS]
 QMAKE_INCDIR_OPENGL	=
@@ -47,18 +47,19 @@
 
 QMAKE_LINK		= CC
 QMAKE_LINK_SHLIB	= CC
-QMAKE_LFLAGS		=
+QMAKE_LFLAGS		= -Wl,-z -Wl,multidefs -lm
 QMAKE_LFLAGS_RELEASE	=
 QMAKE_LFLAGS_DEBUG	=
 QMAKE_LFLAGS_SHLIB	= -G
 QMAKE_LFLAGS_PLUGIN	= $$QMAKE_LFLAGS_SHLIB
 QMAKE_LFLAGS_SONAME	= -h$$LITERAL_WHITESPACE
 
-QMAKE_LIBS		=
+QMAKE_LIBS		= -lm
 QMAKE_LIBS_DYNLOAD	= -ldl
 QMAKE_LIBS_X11		= -lXext -lX11 -lresolv -lsocket -lnsl -lm
 QMAKE_LIBS_X11SM	= -lSM -lICE
 
+QMAKE_LIBS_THREAD	= -lpthread
 QMAKE_LIBS_OPENGL	= -lGLU -lGL -lXt
 QMAKE_LIBS_OPENGL_QT	= -lGL
 
diff -ruN qt-all-commercial-src-4.5.2.orig/mkspecs/sco-g++/qmake.conf qt-all-commercial-src-4.5.2/mkspecs/sco-g++/qmake.conf
--- qt-all-commercial-src-4.5.2.orig/mkspecs/sco-g++/qmake.conf	2009-06-20 01:01:52.000000000 -0400
+++ qt-all-commercial-src-4.5.2/mkspecs/sco-g++/qmake.conf	2009-06-25 17:51:36.000000000 -0400
@@ -62,6 +62,7 @@
 
 QMAKE_LIBS_OPENGL	= -lGLU -lGL
 QMAKE_LIBS_OPENGL_QT	= -lGL
+QMAKE_LIBS_THREAD	= -lgthreads -lmalloc
 
 QMAKE_MOC		= $$[QT_INSTALL_BINS]/moc
 QMAKE_UIC		= $$[QT_INSTALL_BINS]/uic
diff -ruN qt-all-commercial-src-4.5.2.orig/mkspecs/sco-g++/qplatformdefs.h qt-all-commercial-src-4.5.2/mkspecs/sco-g++/qplatformdefs.h
--- qt-all-commercial-src-4.5.2.orig/mkspecs/sco-g++/qplatformdefs.h	2009-06-20 01:01:52.000000000 -0400
+++ qt-all-commercial-src-4.5.2/mkspecs/sco-g++/qplatformdefs.h	2009-06-25 17:51:36.000000000 -0400
@@ -58,7 +58,20 @@
 
 // We are hot - unistd.h should have turned on the specific APIs we requested
 
-
+/* SCO OpenServer 5.0.6 does not have native threads,
+ * we use the LGPL'd FSUPthreads 3.5 library which is on
+ * most systems, and is the same library MySQL uses
+ * to acheive threading. It's not 100% POSIX conformant
+ * so we need to define this to work-around some minor
+ * issues */
+#define QT_FSU_PTHREADS                1
+/* This define prevents FSU pthreads from re-defining struct timespec
+ * which is defined in sched.h */
+#define TIMEVAL_TO_TIMESPEC
+/* __thread is a reserved keyword, redefine it for compiling against FSU Pthreads */
+#define __thread thread
+/* This must be included before pthread.h to define struct timespec */
+#include <sched.h>
 #include <pthread.h>
 #include <dirent.h>
 #include <fcntl.h>
@@ -81,8 +94,8 @@
 #endif
 
 #define QT_FOPEN                ::fopen
-#define QT_FSEEK                ::fseeko
-#define QT_FTELL                ::ftello
+#define QT_FSEEK                ::fseek
+#define QT_FTELL                ::ftell
 #define QT_FGETPOS              ::fgetpos
 #define QT_FSETPOS              ::fsetpos
 #define QT_FPOS_T               fpos_t
diff -ruN qt-all-commercial-src-4.5.2.orig/qmake/generators/win32/msvc_objectmodel.cpp qt-all-commercial-src-4.5.2/qmake/generators/win32/msvc_objectmodel.cpp
--- qt-all-commercial-src-4.5.2.orig/qmake/generators/win32/msvc_objectmodel.cpp	2009-06-20 01:01:52.000000000 -0400
+++ qt-all-commercial-src-4.5.2/qmake/generators/win32/msvc_objectmodel.cpp	2009-06-25 17:51:36.000000000 -0400
@@ -43,6 +43,9 @@
 #include "msvc_vcproj.h"
 #include <qstringlist.h>
 #include <qfileinfo.h>
+#if defined(Q_OS_UNIXWARE) || defined(Q_OS_SCO)
+#include <strings.h>
+#endif
 
 QT_BEGIN_NAMESPACE
 
diff -ruN qt-all-commercial-src-4.5.2.orig/src/3rdparty/clucene/src/CLucene/StdHeader.cpp qt-all-commercial-src-4.5.2/src/3rdparty/clucene/src/CLucene/StdHeader.cpp
--- qt-all-commercial-src-4.5.2.orig/src/3rdparty/clucene/src/CLucene/StdHeader.cpp	2009-06-20 01:01:52.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/3rdparty/clucene/src/CLucene/StdHeader.cpp	2009-06-25 17:51:36.000000000 -0400
@@ -53,7 +53,7 @@
 #    if defined(_LUCENE_PRAGMA_WARNINGS)
 #        pragma message ("==================Hashing not available or is disabled! CLucene may run slower than optimal ==================")
 #    else
-#        if !defined(Q_OS_SOLARIS)
+#        if !defined(Q_OS_SOLARIS) && !defined(Q_OS_UNIXWARE)
 #            warning "==================Hashing not available or is disabled! CLucene may run slower than optimal =================="
 #        endif
 #    endif
diff -ruN qt-all-commercial-src-4.5.2.orig/src/3rdparty/clucene/src/CLucene/config/compiler.h qt-all-commercial-src-4.5.2/src/3rdparty/clucene/src/CLucene/config/compiler.h
--- qt-all-commercial-src-4.5.2.orig/src/3rdparty/clucene/src/CLucene/config/compiler.h	2009-06-20 01:01:52.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/3rdparty/clucene/src/CLucene/config/compiler.h	2009-06-25 17:51:36.000000000 -0400
@@ -36,7 +36,7 @@
 #define _CLCOMPILER_MSVC _MSC_VER
 #endif
 
-#if defined(__GNUC__) || defined(__SUNPRO_CC) || defined(__xlC__) || defined(__sgi) && defined(__EDG__)
+#if defined(__GNUC__) || defined(__SUNPRO_CC) || defined(__xlC__) || defined(__sgi) && defined(__EDG__) || defined (__SCO_VERSION__)
 #include "CLucene/config/CompilerGcc.h"
 
 #elif defined(_CLCOMPILER_MSVC)
@@ -65,7 +65,7 @@
 ////////////////////////////////////////////////////////////////////
 
 /* Operating system recognition (basic) */
-#if defined (__unix) || defined (__linux__) || defined (__QNX__) || defined (_AIX) || defined (__NetBSD__) || defined (__OpenBSD__) || defined (__Lynx__) || defined(hpux) || defined(__hpux)
+#if defined (__unix) || defined (__linux__) || defined (__QNX__) || defined (_AIX) || defined (__NetBSD__) || defined (__OpenBSD__) || defined (__Lynx__) || defined(hpux) || defined(__hpux) || defined(__SCO_VERSION__)
 #undef  _UNIX
 #define _UNIX 1
 #include "CLucene/config/PlatformUnix.h"
@@ -182,7 +182,7 @@
 //here we include the compiler header again, this gives the header a
 //second chance at including stuff, after the main inclusions are complete
 
-#if defined (__GNUC__) || defined(__SUNPRO_CC) || defined(__xlC__) || defined(__sgi)  && defined(__EDG__)
+#if defined (__GNUC__) || defined(__SUNPRO_CC) || defined(__xlC__) || defined(__sgi)  && defined(__EDG__) || defined(__SCO_VERSION__)
 #include "CLucene/config/CompilerGcc.h"
     
 #elif defined(_CLCOMPILER_MSVC)
@@ -235,7 +235,7 @@
 //here we include the compiler header again, this gives the header a
 //third chance at including stuff, after the main inclusions are complete
  
-#if defined (__GNUC__ ) || defined(__SUNPRO_CC) || defined(__xlC__) || defined(__sgi) && defined(__EDG__)
+#if defined (__GNUC__ ) || defined(__SUNPRO_CC) || defined(__xlC__) || defined(__sgi) && defined(__EDG__) || defined(__SCO_VERSION__)
 #include "CLucene/config/CompilerGcc.h"
     
 #elif defined(_CLCOMPILER_MSVC)
diff -ruN qt-all-commercial-src-4.5.2.orig/src/3rdparty/clucene/src/CLucene/config/gunichartables.cpp qt-all-commercial-src-4.5.2/src/3rdparty/clucene/src/CLucene/config/gunichartables.cpp
--- qt-all-commercial-src-4.5.2.orig/src/3rdparty/clucene/src/CLucene/config/gunichartables.cpp	2009-06-20 01:01:52.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/3rdparty/clucene/src/CLucene/config/gunichartables.cpp	2009-06-25 17:51:36.000000000 -0400
@@ -135,7 +135,10 @@
  #pragma message ("===== Using internal character function =====")
 #else
 #if !(defined(Q_OS_SOLARIS) || defined(Q_CC_MIPS))
-#warning "===== Using internal character function ====="
+   /* #warning is not standardized, SCO's CC doesn't support it */
+#  if !defined(__SCO_VERSION__)
+#    warning "===== Using internal character function ====="
+#  endif
 #endif
 #endif
 
diff -ruN qt-all-commercial-src-4.5.2.orig/src/corelib/arch/i386/arch.pri qt-all-commercial-src-4.5.2/src/corelib/arch/i386/arch.pri
--- qt-all-commercial-src-4.5.2.orig/src/corelib/arch/i386/arch.pri	2009-06-20 01:01:55.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/corelib/arch/i386/arch.pri	2009-06-25 17:51:36.000000000 -0400
@@ -1,4 +1,6 @@
 # 
 # i386 architecture
 #
-!*-g++*:!*-icc*:SOURCES += $$QT_ARCH_CPP/qatomic_i386.s
+!*-g++*:!*-icc*:!*sco-cc*:SOURCES += $$QT_ARCH_CPP/qatomic_i386.s
+
+*sco-cc*:SOURCES += $$QT_ARCH_CPP/qatomics.S
diff -ruN qt-all-commercial-src-4.5.2.orig/src/corelib/arch/i386/qatomics.S qt-all-commercial-src-4.5.2/src/corelib/arch/i386/qatomics.S
--- qt-all-commercial-src-4.5.2.orig/src/corelib/arch/i386/qatomics.S	1969-12-31 19:00:00.000000000 -0500
+++ qt-all-commercial-src-4.5.2/src/corelib/arch/i386/qatomics.S	2009-06-25 17:51:36.000000000 -0400
@@ -0,0 +1,112 @@
+#if defined(__SCO_VERSION__) && defined(__USLC__)
+/* SCO's gives 'maximum fill size for .align out of range: 0x90'
+ * error otherwise */
+#define __ALIGN__ .align 4
+#else
+#define __ALIGN__ .align 4,0x90
+#endif
+
+	.text
+
+	__ALIGN__
+
+	.globl q_atomic_test_and_set_int
+q_atomic_test_and_set_int:
+	movl		 4(%esp),%ecx
+	movl		 8(%esp),%eax
+	movl		12(%esp),%edx
+	lock
+	cmpxchgl	%edx,(%ecx)
+	mov		$0,%eax
+ 	sete		%al
+	ret
+	__ALIGN__
+	.type q_atomic_test_and_set_int,@function
+	.size q_atomic_test_and_set_int,.-q_atomic_test_and_set_int
+
+	__ALIGN__
+	.globl q_atomic_test_and_set_ptr
+q_atomic_test_and_set_ptr:
+	movl		 4(%esp),%ecx
+	movl		 8(%esp),%eax
+	movl		12(%esp),%edx
+	lock 
+	cmpxchgl	%edx,(%ecx)
+	mov		$0,%eax
+	sete		%al
+	ret
+	__ALIGN__
+	.type	q_atomic_test_and_set_ptr,@function
+	.size	q_atomic_test_and_set_ptr,.-q_atomic_test_and_set_ptr
+
+	__ALIGN__
+	.globl q_atomic_increment
+q_atomic_increment:
+	movl 4(%esp), %ecx
+	lock 
+	incl (%ecx)
+	mov $0,%eax
+	setne %al
+	ret
+	__ALIGN__
+	.type q_atomic_increment,@function
+	.size	q_atomic_increment,.-q_atomic_increment
+
+	__ALIGN__
+	.globl q_atomic_decrement
+q_atomic_decrement:
+	movl 4(%esp), %ecx
+	lock 
+	decl (%ecx)
+	mov $0,%eax
+	setne %al
+	ret
+	__ALIGN__
+	.type q_atomic_decrement,@function
+	.size	q_atomic_decrement,.-q_atomic_decrement
+
+	__ALIGN__
+	.globl q_atomic_set_int
+q_atomic_set_int:
+	mov 4(%esp),%ecx
+	mov 8(%esp),%eax
+	xchgl %eax,(%ecx)
+	ret	
+	__ALIGN__
+	.type q_atomic_set_int,@function
+	.size	q_atomic_set_int,.-q_atomic_set_int
+
+	__ALIGN__
+	.globl q_atomic_set_ptr
+q_atomic_set_ptr:
+	mov 4(%esp),%ecx
+	mov 8(%esp),%eax
+	xchgl %eax,(%ecx)
+	ret	
+	__ALIGN__
+	.type q_atomic_set_ptr,@function
+	.size	q_atomic_set_ptr,.-q_atomic_set_ptr
+
+        __ALIGN__
+        .globl q_atomic_fetch_and_add_int
+q_atomic_fetch_and_add_int:
+        mov 4(%esp),%ecx
+        mov 8(%esp),%eax
+        lock
+        xadd %eax,(%ecx)
+        ret
+        __ALIGN__
+        .type q_atomic_fetch_and_add_int,@function
+        .size q_atomic_fetch_and_add_int,.-q_atomic_fetch_and_add_int
+
+        __ALIGN__
+        .globl q_atomic_fetch_and_add_ptr
+q_atomic_fetch_and_add_ptr:
+        mov 4(%esp),%ecx
+        mov 8(%esp),%eax
+        lock
+        xadd %eax,(%ecx)
+        ret
+        __ALIGN__
+        .type q_atomic_fetch_and_add_ptr,@function
+        .size q_atomic_fetch_and_add_ptr,.-q_atomic_fetch_and_add_ptr
diff -ruN qt-all-commercial-src-4.5.2.orig/src/corelib/concurrent/qtconcurrentiteratekernel.cpp qt-all-commercial-src-4.5.2/src/corelib/concurrent/qtconcurrentiteratekernel.cpp
--- qt-all-commercial-src-4.5.2.orig/src/corelib/concurrent/qtconcurrentiteratekernel.cpp	2009-06-20 01:01:55.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/corelib/concurrent/qtconcurrentiteratekernel.cpp	2009-06-25 17:51:36.000000000 -0400
@@ -75,8 +75,14 @@
     return mach_absolute_time();
 }
 
-#elif defined(Q_OS_UNIX)
+#elif defined(Q_OS_UNIXWARE) || defined(Q_OS_SCO)
+
+static qint64 getticks()
+{
+	return (clock() * 1000000000 / CLOCKS_PER_SEC);
+}
 
+#elif defined(Q_OS_UNIX)
 
 static qint64 getticks()
 {
diff -ruN qt-all-commercial-src-4.5.2.orig/src/corelib/global/qglobal.h qt-all-commercial-src-4.5.2/src/corelib/global/qglobal.h
--- qt-all-commercial-src-4.5.2.orig/src/corelib/global/qglobal.h	2009-06-20 01:01:55.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/corelib/global/qglobal.h	2009-06-25 17:51:36.000000000 -0400
@@ -564,7 +564,7 @@
    __EDG documented by SGI, observed on MIPSpro 7.3.1.1 and KAI C++ 4.0b
    __EDG__ documented in EDG online docs, observed on Compaq C++ V6.3-002
    and PGI C++ 5.2-4 */
-#elif !defined(Q_OS_HPUX) && (defined(__EDG) || defined(__EDG__))
+#elif !defined(Q_OS_HPUX) && (defined(__EDG) || defined(__EDG__) || defined(__SCO_VERSION__))
 #  define Q_CC_EDG
 /* From the EDG documentation (does not seem to apply to Compaq C++):
    _BOOL
@@ -598,14 +598,18 @@
 #  elif defined(__ghs)
 #    define Q_CC_GHS
 
-/* The UnixWare 7 UDK compiler is based on EDG and does define __EDG__ */
+/* The UnixWare 7 UDK/SCO OpenServer 6 compiler is based on EDG and does define __EDG__ */
 #  elif defined(__USLC__) && defined(__SCO_VERSION__)
 #    define Q_CC_USLC
 /* The latest UDK 7.1.1b does not need this, but previous versions do */
 #    if !defined(__SCO_VERSION__) || (__SCO_VERSION__ < 302200010)
 #      define Q_OUTOFLINE_TEMPLATE inline
 #    endif
-#    define Q_NO_USING_KEYWORD /* ### check "using" status */
+#    if !defined(_BOOL) && !defined(__BOOL_DEFINED)
+#      define Q_NO_BOOL_TYPE
+#    endif
+#    define Q_NO_USING_KEYWORD
+#    define Q_NO_TEMPLATE_FRIENDS
 
 /* Never tested! */
 #  elif defined(CENTERLINE_CLPP) || defined(OBJECTCENTER)
@@ -684,6 +688,12 @@
 #  endif
 #  define Q_NO_USING_KEYWORD /* ### check "using" status */
 
+#elif defined(__SCO_VERSION__)
+/* SCO OpenServer. This only needed when compiling C code as __EDG__
+ * is not defined (such as the tiff imageformat plugin).
+ * No definitions needed.
+ */
+
 #else
 #  error "Qt has not been tested with this compiler - talk to qt-bugs@trolltech.com"
 #endif
@@ -1531,7 +1541,7 @@
 #      define Q_FUNC_INFO __FUNCSIG__
 #  endif
 #else
-#   if defined(Q_OS_SOLARIS) || defined(Q_CC_XLC)
+#   if defined(Q_OS_SOLARIS) || defined(Q_CC_XLC) || defined(Q_OS_UNIXWARE)
 #      define Q_FUNC_INFO __FILE__ "(line number unavailable)"
 #   else
         /* These two macros makes it possible to turn the builtin line expander into a
diff -ruN qt-all-commercial-src-4.5.2.orig/src/corelib/io/qfsfileengine_unix.cpp qt-all-commercial-src-4.5.2/src/corelib/io/qfsfileengine_unix.cpp
--- qt-all-commercial-src-4.5.2.orig/src/corelib/io/qfsfileengine_unix.cpp	2009-06-20 01:01:55.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/corelib/io/qfsfileengine_unix.cpp	2009-06-25 17:51:36.000000000 -0400
@@ -850,8 +850,11 @@
 QString QFSFileEngine::owner(FileOwner own) const
 {
 #if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD)
-    int size_max = sysconf(_SC_GETPW_R_SIZE_MAX);
+    int size_max;
+#ifdef _SC_GETPW_R_SIZE_MAX
+    size_max = sysconf(_SC_GETPW_R_SIZE_MAX);
     if (size_max == -1)
+#endif
         size_max = 1024;
     QVarLengthArray<char, 1024> buf(size_max);
 #endif
@@ -869,8 +872,10 @@
     } else if (own == OwnerGroup) {
         struct group *gr = 0;
 #if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD)
+#ifdef _SC_GETGR_R_SIZE_MAX
         size_max = sysconf(_SC_GETGR_R_SIZE_MAX);
         if (size_max == -1)
+#endif
             size_max = 1024;
         buf.resize(size_max);
         struct group entry;
diff -ruN qt-all-commercial-src-4.5.2.orig/src/corelib/kernel/qabstractitemmodel.h qt-all-commercial-src-4.5.2/src/corelib/kernel/qabstractitemmodel.h
--- qt-all-commercial-src-4.5.2.orig/src/corelib/kernel/qabstractitemmodel.h	2009-06-20 01:01:55.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/corelib/kernel/qabstractitemmodel.h	2009-06-25 17:51:36.000000000 -0400
@@ -168,6 +168,9 @@
     virtual ~QAbstractItemModel();
 
     bool hasIndex(int row, int column, const QModelIndex &parent = QModelIndex()) const;
+#if defined(Q_OS_UNIXWARE) && defined(index)
+#undef index
+#endif
     virtual QModelIndex index(int row, int column,
                               const QModelIndex &parent = QModelIndex()) const = 0;
     virtual QModelIndex parent(const QModelIndex &child) const = 0;
diff -ruN qt-all-commercial-src-4.5.2.orig/src/corelib/kernel/qsharedmemory_p.h qt-all-commercial-src-4.5.2/src/corelib/kernel/qsharedmemory_p.h
--- qt-all-commercial-src-4.5.2.orig/src/corelib/kernel/qsharedmemory_p.h	2009-06-20 01:01:56.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/corelib/kernel/qsharedmemory_p.h	2009-06-25 17:51:36.000000000 -0400
@@ -53,6 +53,8 @@
 // We mean it.
 //
 
+#include <time.h>
+
 #include "qsharedmemory.h"
 
 #ifdef QT_NO_SHAREDMEMORY
diff -ruN qt-all-commercial-src-4.5.2.orig/src/corelib/plugin/qlibrary_unix.cpp qt-all-commercial-src-4.5.2/src/corelib/plugin/qlibrary_unix.cpp
--- qt-all-commercial-src-4.5.2.orig/src/corelib/plugin/qlibrary_unix.cpp	2009-06-20 01:01:56.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/corelib/plugin/qlibrary_unix.cpp	2009-06-25 17:51:36.000000000 -0400
@@ -154,7 +154,9 @@
 #if defined(Q_OS_MAC)
         if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_4)
 #endif        
+#ifdef RTLD_LOCAL
         dlFlags |= RTLD_LOCAL;
+#endif
     }
 #endif
 #if defined(Q_OS_AIX)	// Not sure if any other platform actually support this thing.
diff -ruN qt-all-commercial-src-4.5.2.orig/src/corelib/thread/qthread_unix.cpp qt-all-commercial-src-4.5.2/src/corelib/thread/qthread_unix.cpp
--- qt-all-commercial-src-4.5.2.orig/src/corelib/thread/qthread_unix.cpp	2009-06-20 01:01:56.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/corelib/thread/qthread_unix.cpp	2009-06-25 17:51:36.000000000 -0400
@@ -80,6 +80,24 @@
 
 #ifndef QT_NO_THREAD
 
+#ifdef QT_FSU_PTHREADS
+#  ifdef PTHREAD_ONCE_INIT
+#    undef PTHREAD_ONCE_INIT
+#  endif
+#  define PTHREAD_QUEUE_INIT { NULL, NULL }
+#  ifdef _POSIX_THREADS_PRIO_PROTECT
+#    define PTHREAD_MUTEX_INIT { PTHREAD_QUEUE_INIT, 0, NULL, 0, 0, 0, 0 }
+#  else
+#    define PTHREAD_MUTEX_INIT { PTHREAD_QUEUE_INIT, 0, NULL, 0 }
+#  endif
+#  define PTHREAD_ONCE_INIT { 0, 0, PTHREAD_MUTEX_INIT }
+#  define PTHREAD_CANCEL_DISABLE 0
+#  define PTHREAD_CREATE_DETACHED 1
+#  define PTHREAD_EXPLICIT_SCHED PTHREAD_INHERIT_SCHED
+#  define pthread_setcancelstate(a,b) do { } while(0);
+#  define pthread_testcancel() do { } while(0);
+#endif
+
 static pthread_once_t current_thread_data_once = PTHREAD_ONCE_INIT;
 static pthread_key_t current_thread_data_key;
 
@@ -96,16 +114,31 @@
     pthread_setspecific(current_thread_data_key, 0);
 }
 
+#ifdef QT_FSU_PTHREADS
+static void create_current_thread_data_key(void *arg)
+{
+    (void)arg;
+    pthread_key_create(&current_thread_data_key, NULL);
+}
+#else
 static void create_current_thread_data_key()
 {
     pthread_key_create(&current_thread_data_key, destroy_current_thread_data);
 }
+#endif
 
 QThreadData *QThreadData::current()
 {
     pthread_once(&current_thread_data_once, create_current_thread_data_key);
 
-    QThreadData *data = reinterpret_cast<QThreadData *>(pthread_getspecific(current_thread_data_key));
+    QThreadData *data;
+#ifdef QT_FSU_PTHREADS
+    void *tempvar = NULL;
+    pthread_getspecific(current_thread_data_key, &tempvar);
+    data = reinterpret_cast<QThreadData *>(tempvar);
+#else
+    data = reinterpret_cast<QThreadData *>(pthread_getspecific(current_thread_data_key));
+#endif
     if (!data) {
         void *a;
         if (QInternal::activateCallbacks(QInternal::AdoptCurrentThread, &a)) {
@@ -266,6 +299,8 @@
 #elif defined(Q_OS_IRIX)
     // IRIX
     cores = (int)sysconf(_SC_NPROC_ONLN);
+#elif defined(Q_OS_SCO)
+    cores = 1;
 #elif defined(Q_OS_INTEGRITY)
     // ### TODO - how to get the amound of CPUs on INTEGRITY?
 #else
@@ -348,11 +383,16 @@
 
     pthread_attr_t attr;
     pthread_attr_init(&attr);
+#ifdef QT_FSU_PTHREADS
+    int detachstate = PTHREAD_CREATE_DETACHED;
+    pthread_attr_setdetachstate(&attr, &detachstate);
+#else
     pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+#endif
 
     d->priority = priority;
 
-#if defined(Q_OS_DARWIN) || !defined(Q_OS_OPENBSD) && defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING-0 >= 0)
+#if defined(Q_OS_DARWIN) || !defined(Q_OS_OPENBSD) && !defined(QT_FSU_PTHREADS) && defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING-0 >= 0)
     switch (priority) {
     case InheritPriority:
         {
@@ -363,12 +403,16 @@
     default:
         {
             int sched_policy;
+#ifdef QT_FSU_PTHREADS
+	    sched_policy = pthread_attr_getsched(&attr);
+#else
             if (pthread_attr_getschedpolicy(&attr, &sched_policy) != 0) {
                 // failed to get the scheduling policy, don't bother
                 // setting the priority
                 qWarning("QThread::start: Cannot determine default scheduler policy");
                 break;
             }
+#endif
 
             int prio_min = sched_get_priority_min(sched_policy);
             int prio_max = sched_get_priority_max(sched_policy);
@@ -509,7 +553,7 @@
 
     // copied from start() with a few modifications:
 
-#if defined(Q_OS_DARWIN) || !defined(Q_OS_OPENBSD) && defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING-0 >= 0)
+#if defined(Q_OS_DARWIN) || !defined(Q_OS_OPENBSD) && !defined(QT_FSU_PTHREADS) && defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING-0 >= 0)
     int sched_policy;
     sched_param param;
 
@@ -550,9 +594,13 @@
         break;
     }
 
+#ifdef QT_FSU_PTHREADS
+    pthread_attr_setsched(&attr, prio);
+#else
     param.sched_priority = prio;
     pthread_setschedparam(d->thread_id, sched_policy, &param);
 #endif
+#endif
 }
 
 #endif // QT_NO_THREAD
diff -ruN qt-all-commercial-src-4.5.2.orig/src/gui/kernel/qapplication_x11.cpp qt-all-commercial-src-4.5.2/src/gui/kernel/qapplication_x11.cpp
--- qt-all-commercial-src-4.5.2.orig/src/gui/kernel/qapplication_x11.cpp	2009-06-20 01:01:56.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/gui/kernel/qapplication_x11.cpp	2009-06-25 17:51:36.000000000 -0400
@@ -1165,10 +1165,14 @@
                 if (!font && key == QLatin1String("font"))
                     resFont = value;
                 else if (!fg && !paletteAlreadySet) {
+#ifndef Q_OS_UNIXWARE
                     if (key == QLatin1String("foreground"))
                         resFG = value;
                     else if (!bg && key == QLatin1String("background"))
                         resBG = value;
+#else 
+		    if (0) { }
+#endif
                     else if (!bg && !button && key == QLatin1String("button.background"))
                         resButton = value;
                     else if (key == QLatin1String("text.selectbackground")) {
@@ -5566,7 +5570,11 @@
     // tell the session manager about our user as well.
     struct passwd *entryPtr = 0;
 #if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD)
+#ifndef _SC_GETPW_R_SIZE_MAX
+    QVarLengthArray<char, 1024> buf(1024);
+#else
     QVarLengthArray<char, 1024> buf(sysconf(_SC_GETPW_R_SIZE_MAX));
+#endif
     struct passwd entry;
     getpwuid_r(geteuid(), &entry, buf.data(), buf.size(), &entryPtr);
 #else
diff -ruN qt-all-commercial-src-4.5.2.orig/src/gui/kernel/qkeymapper_x11.cpp qt-all-commercial-src-4.5.2/src/gui/kernel/qkeymapper_x11.cpp
--- qt-all-commercial-src-4.5.2.orig/src/gui/kernel/qkeymapper_x11.cpp	2009-06-20 01:01:56.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/gui/kernel/qkeymapper_x11.cpp	2009-06-25 17:51:36.000000000 -0400
@@ -155,6 +155,16 @@
         }                                                               \
     } while(false)
 
+#ifdef Q_OS_SCO
+static void XConvertCase(KeySym sym, KeySym *lower_return, KeySym *upper_return)
+{
+	if (lower_return != NULL)
+		*lower_return = tolower((unsigned char)(sym & 0x00ff));
+	if (upper_return != NULL)
+		*upper_return = toupper((unsigned char)(sym & 0x00ff));
+}
+#endif
+
 // qt_XTranslateKey() is based on _XTranslateKey() taken from:
 
 /* $Xorg: KeyBind.c,v 1.4 2001/02/09 02:03:34 xorgcvs Exp $ */
@@ -213,7 +223,11 @@
 	per -= 2;
     }
     if ((modifiers & dpy->num_lock) &&
-	(per > 1 && (IsKeypadKey(syms[1]) || IsPrivateKeypadKey(syms[1])))) {
+	(per > 1 && (IsKeypadKey(syms[1])
+#ifndef Q_OS_SCO
+		|| IsPrivateKeypadKey(syms[1])
+#endif
+		))) {
 	if ((modifiers & ShiftMask) ||
 	    ((modifiers & LockMask) && (dpy->lock_meaning == XK_Shift_Lock)))
 	    *keysym_return = syms[0];
@@ -605,7 +619,11 @@
                 for (i = 0; i < map->max_keypermod; ++i) {
                     for (int x = 0; x < coreDesc.keysyms_per_keycode; ++x) {
                         KeySym sym = XKeycodeToKeysym(X11->display, map->modifiermap[LockMapIndex], x);
-                        if (sym == XK_Caps_Lock || sym == XK_ISO_Lock) {
+                        if (sym == XK_Caps_Lock
+#ifdef XK_ISO_Lock
+				|| sym == XK_ISO_Lock
+#endif
+				) {
                             coreDesc.lock_meaning = XK_Caps_Lock;
                             break;
                         } else if (sym == XK_Shift_Lock) {
@@ -859,12 +877,20 @@
     // International input method support keys
 
     // International & multi-key character composition
+#ifdef XK_ISO_Level3_Shift
     XK_ISO_Level3_Shift,        Qt::Key_AltGr,
+#endif
     XK_Multi_key,		Qt::Key_Multi_key,
     XK_Codeinput,		Qt::Key_Codeinput,
+#ifdef XK_SingleCandidate
     XK_SingleCandidate,		Qt::Key_SingleCandidate,
+#endif
+#ifdef XK_MultipleCandidate
     XK_MultipleCandidate,	Qt::Key_MultipleCandidate,
+#endif
+#ifdef XK_PreviousCandidate
     XK_PreviousCandidate,	Qt::Key_PreviousCandidate,
+#endif
 
     // Misc Functions
     XK_Mode_switch,		Qt::Key_Mode_switch,
@@ -893,10 +919,13 @@
     //XK_Zen_Koho,		Qt::Key_Zen_Koho,
     //XK_Mae_Koho,		Qt::Key_Mae_Koho,
     XK_Kanji_Bangou,		Qt::Key_Codeinput,
+#ifndef Q_OS_SCO
     XK_Zen_Koho,		Qt::Key_MultipleCandidate,
     XK_Mae_Koho,		Qt::Key_PreviousCandidate,
+#endif
 
 #ifdef XK_KOREAN
+#ifndef Q_OS_SCO
     // Korean keyboard support
     XK_Hangul,			Qt::Key_Hangul,
     XK_Hangul_Start,		Qt::Key_Hangul_Start,
@@ -919,9 +948,11 @@
     XK_Hangul_Special,		Qt::Key_Hangul_Special,
     //XK_Hangul_switch,		Qt::Key_Hangul_switch,
     XK_Hangul_switch,		Qt::Key_Mode_switch,
+#endif
 #endif  // XK_KOREAN
 
     // dead keys
+#ifndef Q_OS_SCO
     XK_dead_grave,              Qt::Key_Dead_Grave,
     XK_dead_acute,              Qt::Key_Dead_Acute,
     XK_dead_circumflex,         Qt::Key_Dead_Circumflex,
@@ -939,6 +970,7 @@
     XK_dead_voiced_sound,       Qt::Key_Dead_Voiced_Sound,
     XK_dead_semivoiced_sound,   Qt::Key_Dead_Semivoiced_Sound,
     XK_dead_belowdot,           Qt::Key_Dead_Belowdot,
+#endif
     XK_dead_hook,               Qt::Key_Dead_Hook,
     XK_dead_horn,               Qt::Key_Dead_Horn,
 
@@ -1293,7 +1325,11 @@
             code = translateKeySym(keysym);
         }
         modifiers |= Qt::KeypadModifier;
-    } else if (text.length() == 1 && text.unicode()->unicode() > 0x1f && text.unicode()->unicode() != 0x7f && !(keysym >= XK_dead_grave && keysym <= XK_dead_horn)) {
+    } else if (text.length() == 1 && text.unicode()->unicode() > 0x1f && text.unicode()->unicode() != 0x7f
+#ifndef Q_OS_SCO
+		&& !(keysym >= XK_dead_grave && keysym <= XK_dead_horn)
+#endif
+		) {
         code = text.unicode()->toUpper().unicode();
     } else {
         // any other keys
diff -ruN qt-all-commercial-src-4.5.2.orig/src/gui/kernel/qlayout.h qt-all-commercial-src-4.5.2/src/gui/kernel/qlayout.h
--- qt-all-commercial-src-4.5.2.orig/src/gui/kernel/qlayout.h	2009-06-20 01:01:56.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/gui/kernel/qlayout.h	2009-06-25 17:51:36.000000000 -0400
@@ -62,6 +62,9 @@
 class Q_GUI_EXPORT QLayoutIterator
 {
 public:
+#if defined(Q_OS_UNIXWARE) && defined(index)
+#undef index
+#endif
     inline QT3_SUPPORT_CONSTRUCTOR QLayoutIterator(QLayout *i) : layout(i), index(0) {}
     inline QLayoutIterator(const QLayoutIterator &i)
         : layout(i.layout), index(i.index) {}
diff -ruN qt-all-commercial-src-4.5.2.orig/src/gui/kernel/qwidget.h qt-all-commercial-src-4.5.2/src/gui/kernel/qwidget.h
--- qt-all-commercial-src-4.5.2.orig/src/gui/kernel/qwidget.h	2009-06-20 01:01:56.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/gui/kernel/qwidget.h	2009-06-25 17:51:36.000000000 -0400
@@ -483,6 +483,11 @@
     void showNormal();
 
     bool close();
+#ifdef Q_OS_SCO
+#  ifdef raise
+#    undef raise
+#  endif
+#endif
     void raise();
     void lower();
 
diff -ruN qt-all-commercial-src-4.5.2.orig/src/gui/text/qfontengine_p.h qt-all-commercial-src-4.5.2/src/gui/text/qfontengine_p.h
--- qt-all-commercial-src-4.5.2.orig/src/gui/text/qfontengine_p.h	2009-06-20 01:01:56.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/gui/text/qfontengine_p.h	2009-06-25 17:51:36.000000000 -0400
@@ -139,6 +139,9 @@
     virtual bool getSfntTableData(uint /*tag*/, uchar * /*buffer*/, uint * /*length*/) const { return false; }
 
     struct FaceId {
+#if defined(Q_OS_UNIXWARE) && defined(index)
+#undef index
+#endif
         FaceId() : index(0), encoding(0) {}
         QByteArray filename;
         int index;
diff -ruN qt-all-commercial-src-4.5.2.orig/src/gui/widgets/qmainwindowlayout.cpp qt-all-commercial-src-4.5.2/src/gui/widgets/qmainwindowlayout.cpp
--- qt-all-commercial-src-4.5.2.orig/src/gui/widgets/qmainwindowlayout.cpp	2009-06-20 01:01:56.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/gui/widgets/qmainwindowlayout.cpp	2009-06-25 17:51:36.000000000 -0400
@@ -1281,6 +1281,11 @@
         return;
     info->apply(false);
 
+#ifdef Q_OS_SCO
+#  ifdef raise
+#    undef raise
+#  endif
+#endif
     if (QWidget *w = centralWidget())
         w->raise();
 }
diff -ruN qt-all-commercial-src-4.5.2.orig/src/network/kernel/qhostinfo_unix.cpp qt-all-commercial-src-4.5.2/src/network/kernel/qhostinfo_unix.cpp
--- qt-all-commercial-src-4.5.2.orig/src/network/kernel/qhostinfo_unix.cpp	2009-06-20 01:01:56.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/network/kernel/qhostinfo_unix.cpp	2009-06-25 17:51:36.000000000 -0400
@@ -57,6 +57,9 @@
 #include <sys/types.h>
 #include <netdb.h>
 #include <arpa/inet.h>
+#ifdef Q_OS_UNIXWARE
+#  include <arpa/nameser.h>
+#endif
 #include <resolv.h>
 }
 
@@ -67,6 +70,10 @@
 QT_END_NAMESPACE
 #endif
 
+#ifdef Q_OS_SCO
+typedef long in_addr_t;
+#endif
+
 QT_BEGIN_NAMESPACE
 
 // Almost always the same. If not, specify in qplatformdefs.h.
diff -ruN qt-all-commercial-src-4.5.2.orig/src/network/kernel/qnetworkinterface_unix.cpp qt-all-commercial-src-4.5.2/src/network/kernel/qnetworkinterface_unix.cpp
--- qt-all-commercial-src-4.5.2.orig/src/network/kernel/qnetworkinterface_unix.cpp	2009-06-20 01:01:56.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/network/kernel/qnetworkinterface_unix.cpp	2009-06-25 17:51:36.000000000 -0400
@@ -51,7 +51,7 @@
 #include <sys/types.h>
 #include <sys/socket.h>
 
-#ifdef Q_OS_SOLARIS
+#if defined(Q_OS_SOLARIS) || defined(Q_OS_UNIXWARE)
 # include <sys/sockio.h>
 #endif
 #include <net/if.h>
diff -ruN qt-all-commercial-src-4.5.2.orig/src/plugins/imageformats/jpeg/qjpeghandler.cpp qt-all-commercial-src-4.5.2/src/plugins/imageformats/jpeg/qjpeghandler.cpp
--- qt-all-commercial-src-4.5.2.orig/src/plugins/imageformats/jpeg/qjpeghandler.cpp	2009-06-20 01:01:56.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/plugins/imageformats/jpeg/qjpeghandler.cpp	2009-06-25 17:51:36.000000000 -0400
@@ -65,9 +65,11 @@
 #endif
 
 #define XMD_H           // shut JPEGlib up
+#if 0
 #if defined(Q_OS_UNIXWARE)
 #  define HAVE_BOOLEAN  // libjpeg under Unixware seems to need this
 #endif
+#endif
 #include <jpeglib.h>
 #ifdef const
 #  undef const          // remove crazy C hackery in jconfig.h
diff -ruN qt-all-commercial-src-4.5.2.orig/src/testlib/qtestcase.cpp qt-all-commercial-src-4.5.2/src/testlib/qtestcase.cpp
--- qt-all-commercial-src-4.5.2.orig/src/testlib/qtestcase.cpp	2009-06-20 01:01:57.000000000 -0400
+++ qt-all-commercial-src-4.5.2/src/testlib/qtestcase.cpp	2009-06-25 17:51:36.000000000 -0400
@@ -66,6 +66,9 @@
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
+#if defined(Q_OS_UNIXWARE) || defined(Q_OS_SCO)
+#include <unistd.h>
+#endif
 
 #ifdef Q_OS_WIN
 #include <windows.h> // for Sleep
@@ -1723,6 +1726,8 @@
 
 #ifdef Q_OS_WIN
     Sleep(uint(ms));
+#elif defined(Q_OS_UNIXWARE) || defined(Q_OS_SCO)
+    usleep(uint(ms) * 1000);
 #else
     struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 };
     nanosleep(&ts, NULL);

