Watcom compiler notes ===================== Status ------ Not yet usable. Although the library builds under Watcom it substantially fails the test suite. There is a working Wmakefile for wmake for the library build. invoke as any of: wmake -f Wmakefile clean WC wmake -f Wmakefile clean WC-inlined wmake -f Wmakefile clean WCE wmake -f Wmakefile clean WCE-inlined These build pthreadWC.dll and pthreadWCE.dll. There is a working Wmakefile for wmake for the test suite. invoke as any of: wmake -f Wmakefile clean WC wmake -f Wmakefile clean WCX wmake -f Wmakefile clean WCE wmake -f Wmakefile clean WC-bench wmake -f Wmakefile clean WCX-bench wmake -f Wmakefile clean WCE-bench Current known problems ---------------------- Library build: The Watcom compiler uses a different default call convention to MS C or GNU C and so applications are not compatible with pthreadVC.dll etc using pre 2003-10-14 versions of pthread.h, sched.h, or semaphore.h. The cdecl attribute can be used on exposed function prototypes to force compatibility with MS C built DLLs. However, there appear to be other incompatibilities. Errno.h, for example, defines different values for the standard C and POSIX errors to those defined by the MS C errno.h. It may be that references to Watcom's threads compatible 'errno' do set and return translated numbers consistently, but I have not verified this. Watcom defines errno as a dereferenced pointer returned by the function _get_errno_ptr(). This is similar to both the MS and GNU C environments for multithreaded use. However, the Watcom version appears to have a number of problems: - different threads return the same pointer value. Compare with the MS and GNU C versions which correctly return different values (since each thread must maintain a thread specific errno value). - an errno value set within the DLL appears as zero in the application even though both share the same thread. Therefore applications built using the Watcom compiler may need to use a Watcom built version of the library (pthreadWC.dll). If this is the case, then the cdecl function attribute should not be required. Application builds: The test suite fails with the Watcom compiler. Test semaphore1.c fails for pthreadWC.dll because errno returns 0 instead of EAGAIN.