123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352 |
- This file describes how to make a threaded X11R6.
- You need the source-code of XFree-3.2. I used the sources of X11R6.1
- (files: xc-1.tar.gz xc-2.tar.gz xc-3.tar.gz) and the patches to
- XFree-3.2 (files: README.X11.patch R6.1pl1-3.2.diff.gz cfont32.tgz).
- Untar the xc-?.tar.gz files in a directory called XF3.2 and apply
- the XFree-3.2 patches as described in README.X11.patch or use the
- whole XFree86 source.
- Now apply the thread patch with
- patch -p0 < XF3.2.xc.diff
- Go to the XF3.2/xc directory and make the whole thing:
- nice make World >& world.log &
- tail -f world.log
- Wait a few hours or interrupt the process after the shared libs
- are made. The shared libs are:
- XF3.2/xc/lib/ICE/libICE.so.6.0*
- XF3.2/xc/lib/PEX5/libPEX5.so.6.0*
- XF3.2/xc/lib/SM/libSM.so.6.0*
- XF3.2/xc/lib/X11/libX11.so.6.1*
- XF3.2/xc/lib/XIE/libXIE.so.6.0*
- XF3.2/xc/lib/XThrStub/libXThrStub.so.6.0*
- XF3.2/xc/lib/Xaw/libXaw.so.6.1*
- XF3.2/xc/lib/Xext/libXext.so.6.1*
- XF3.2/xc/lib/Xi/libXi.so.6.0*
- XF3.2/xc/lib/Xmu/libXmu.so.6.0*
- XF3.2/xc/lib/Xt/libXt.so.6.0*
- XF3.2/xc/lib/Xtst/libXtst.so.6.1*
- (The Program dga didn't compile, but I have not check out why.)
- Now you can copy the resulting libs
- cp XF3.2/xc/lib/*/*.so.?.? /usr/X11R6/lib/
- and create some links
- cd /usr/X11R6/lib/
- ln -s libXThrStub.so.6.0 libXThrStub.so.6
- ln -s libXThrStub.so.6 libXThrStub.so
- or use make install (not tested, and needs new configuration).
- It is possible with the libXThrSub to compile X11 programs without linking
- libpthread to them and not necessary to recompile already installed
- unthreaded X11 programs, because libXThrSub keeps the dynamic linker quit.
- On the other hand you can link libpthread to a X11 program to use threads.
- I used linux 2.0.23 and libc 5.4.7 .
- Hans-Helmut Bühmann hans@expmech.ing.tu-bs.de
- ----------------------------------------------------------------------------
- XF3.2.xc.diff:
- -----------------------------------------------------------------------------
- diff -u --recursive XF3.2.orig/xc/config/cf/linux.cf XF3.2/xc/config/cf/linux.cf
- --- XF3.2.orig/xc/config/cf/linux.cf Sun Nov 10 17:05:30 1996
- +++ XF3.2/xc/config/cf/linux.cf Sun Nov 10 16:30:55 1996
- @@ -61,6 +61,14 @@
- #define HasSnprintf YES
- #endif
-
- +#define HasPosixThreads YES
- +#define ThreadedX YES
- +#define BuildThreadStubLibrary YES
- +#define NeedUIThrStubs YES
- +#define HasThreadSafeAPI NO
- +#define SystemMTDefines -D_REENTRANT
- +#define ThreadsLibraries -lpthread
- +
- #define AvoidNullMakeCommand YES
- #define StripInstalledPrograms YES
- #define CompressAllFonts YES
- @@ -158,7 +166,7 @@
- #define LdPostLib /* Never needed */
-
- #ifdef i386Architecture
- -#define OptimizedCDebugFlags DefaultGcc2i386Opt -m486
- +#define OptimizedCDebugFlags DefaultGcc2i386Opt -m486 -pipe
- #define StandardDefines -Dlinux -D__i386__ -D_POSIX_SOURCE \
- -D_BSD_SOURCE -D_SVID_SOURCE -DX_LOCALE
- #define XawI18nDefines -DUSE_XWCHAR_STRING -DUSE_XMBTOWC
- diff -u --recursive XF3.2.orig/xc/config/cf/lnxLib.tmpl XF3.2/xc/config/cf/lnxLib.tmpl
- --- XF3.2.orig/xc/config/cf/lnxLib.tmpl Sun Nov 10 17:05:30 1996
- +++ XF3.2/xc/config/cf/lnxLib.tmpl Sat Nov 9 14:52:39 1996
- @@ -19,7 +19,7 @@
-
- #define CplusplusLibC
-
- -#define SharedX11Reqs
- +#define SharedX11Reqs -L$(BUILDLIBDIR) -lXThrStub
- #define SharedOldXReqs $(LDPRELIB) $(XLIBONLY)
- #define SharedXtReqs $(LDPRELIB) $(XLIBONLY) $(SMLIB) $(ICELIB)
- #define SharedXawReqs $(LDPRELIB) $(XMULIB) $(XTOOLLIB) $(XLIB)
- diff -u --recursive XF3.2.orig/xc/include/Xthreads.h XF3.2/xc/include/Xthreads.h
- --- XF3.2.orig/xc/include/Xthreads.h Thu Dec 7 02:19:09 1995
- +++ XF3.2/xc/include/Xthreads.h Sat Nov 9 01:04:55 1996
- @@ -229,12 +229,12 @@
- #define xcondition_wait(c,m) pthread_cond_wait(c,m)
- #define xcondition_signal(c) pthread_cond_signal(c)
- #define xcondition_broadcast(c) pthread_cond_broadcast(c)
- -#ifdef _DECTHREADS_
- +#if defined(_DECTHREADS_) || defined(linux)
- static xthread_t _X_no_thread_id;
- #define xthread_have_id(id) !pthread_equal(id, _X_no_thread_id)
- #define xthread_clear_id(id) id = _X_no_thread_id
- #define xthread_equal(id1,id2) pthread_equal(id1, id2)
- -#endif /* _DECTHREADS_ */
- +#endif /* _DECTHREADS_ || linux */
- #if _CMA_VENDOR_ == _CMA__IBM
- #ifdef DEBUG /* too much of a hack to enable normally */
- /* see also cma__obj_set_name() */
- diff -u --recursive XF3.2.orig/xc/lib/X11/util/makekeys.c XF3.2/xc/lib/X11/util/makekeys.c
- --- XF3.2.orig/xc/lib/X11/util/makekeys.c Mon Apr 18 02:22:22 1994
- +++ XF3.2/xc/lib/X11/util/makekeys.c Sat Nov 9 00:44:14 1996
- @@ -73,7 +73,7 @@
- register char c;
- int first;
- int best_max_rehash;
- - int best_z;
- + int best_z = 0;
- int num_found;
- KeySym val;
-
- diff -u --recursive XF3.2.orig/xc/lib/XThrStub/Imakefile XF3.2/xc/lib/XThrStub/Imakefile
- --- XF3.2.orig/xc/lib/XThrStub/Imakefile Sun Nov 10 17:08:12 1996
- +++ XF3.2/xc/lib/XThrStub/Imakefile Sat Nov 9 19:04:51 1996
- @@ -25,7 +25,7 @@
- DEFINES = $(ALLOC_DEFINES)
- INCLUDES =
- SRCS = $(STUBSRCS)
- - OBJS = $(STUBOBJS
- + OBJS = $(STUBOBJS)
- LINTLIBS = $(LINTXLIB)
-
- #include <Library.tmpl>
- diff -u --recursive XF3.2.orig/xc/lib/XThrStub/UIThrStubs.c XF3.2/xc/lib/XThrStub/UIThrStubs.c
- --- XF3.2.orig/xc/lib/XThrStub/UIThrStubs.c Sun Nov 10 17:08:12 1996
- +++ XF3.2/xc/lib/XThrStub/UIThrStubs.c Sun Nov 10 15:14:55 1996
- @@ -37,16 +37,43 @@
- * specificies the thread library on the link line.
- */
-
- +#if defined(linux)
- +#include <pthread.h>
- +#else
- #include <thread.h>
- #include <synch.h>
- +#endif
-
- +#if defined(linux)
- +static pthread_t no_thread_id;
- +#endif /* defined(linux) */
- +
- +#if defined(linux)
- +#pragma weak pthread_self = _Xthr_self_stub_
- +pthread_t
- +_Xthr_self_stub_()
- +{
- + return(no_thread_id);
- +}
- +#else /* defined(linux) */
- #pragma weak thr_self = _Xthr_self_stub_
- thread_t
- _Xthr_self_stub_()
- {
- return((thread_t)0);
- }
- +#endif /* defined(linux) */
-
- +#if defined(linux)
- +#pragma weak pthread_mutex_init = _Xmutex_init_stub_
- +int
- +_Xmutex_init_stub_(m, a)
- + pthread_mutex_t *m;
- + __const pthread_mutexattr_t *a;
- +{
- + return(0);
- +}
- +#else /* defined(linux) */
- #pragma weak mutex_init = _Xmutex_init_stub_
- int
- _Xmutex_init_stub_(m, t, a)
- @@ -56,7 +83,17 @@
- {
- return(0);
- }
- +#endif /* defined(linux) */
-
- +#if defined(linux)
- +#pragma weak pthread_mutex_destroy = _Xmutex_destroy_stub_
- +int
- +_Xmutex_destroy_stub_(m)
- + pthread_mutex_t *m;
- +{
- + return(0);
- +}
- +#else /* defined(linux) */
- #pragma weak mutex_destroy = _Xmutex_destroy_stub_
- int
- _Xmutex_destroy_stub_(m)
- @@ -64,7 +101,17 @@
- {
- return(0);
- }
- +#endif /* defined(linux) */
-
- +#if defined(linux)
- +#pragma weak pthread_mutex_lock = _Xmutex_lock_stub_
- +int
- +_Xmutex_lock_stub_(m)
- + pthread_mutex_t *m;
- +{
- + return(0);
- +}
- +#else /* defined(linux) */
- #pragma weak mutex_lock = _Xmutex_lock_stub_
- int
- _Xmutex_lock_stub_(m)
- @@ -72,7 +119,17 @@
- {
- return(0);
- }
- +#endif /* defined(linux) */
-
- +#if defined(linux)
- +#pragma weak pthread_mutex_unlock = _Xmutex_unlock_stub_
- +int
- +_Xmutex_unlock_stub_(m)
- + pthread_mutex_t *m;
- +{
- + return(0);
- +}
- +#else /* defined(linux) */
- #pragma weak mutex_unlock = _Xmutex_unlock_stub_
- int
- _Xmutex_unlock_stub_(m)
- @@ -80,7 +137,18 @@
- {
- return(0);
- }
- +#endif /* defined(linux) */
-
- +#if defined(linux)
- +#pragma weak pthread_cond_init = _Xcond_init_stub_
- +int
- +_Xcond_init_stub_(c, a)
- + pthread_cond_t *c;
- + __const pthread_condattr_t *a;
- +{
- + return(0);
- +}
- +#else /* defined(linux) */
- #pragma weak cond_init = _Xcond_init_stub_
- int
- _Xcond_init_stub_(c, t, a)
- @@ -90,7 +158,17 @@
- {
- return(0);
- }
- +#endif /* defined(linux) */
-
- +#if defined(linux)
- +#pragma weak pthread_cond_destroy = _Xcond_destroy_stub_
- +int
- +_Xcond_destroy_stub_(c)
- + pthread_cond_t *c;
- +{
- + return(0);
- +}
- +#else /* defined(linux) */
- #pragma weak cond_destroy = _Xcond_destroy_stub_
- int
- _Xcond_destroy_stub_(c)
- @@ -98,7 +176,18 @@
- {
- return(0);
- }
- +#endif /* defined(linux) */
-
- +#if defined(linux)
- +#pragma weak pthread_cond_wait = _Xcond_wait_stub_
- +int
- +_Xcond_wait_stub_(c,m)
- + pthread_cond_t *c;
- + pthread_mutex_t *m;
- +{
- + return(0);
- +}
- +#else /* defined(linux) */
- #pragma weak cond_wait = _Xcond_wait_stub_
- int
- _Xcond_wait_stub_(c,m)
- @@ -107,7 +196,17 @@
- {
- return(0);
- }
- +#endif /* defined(linux) */
-
- +#if defined(linux)
- +#pragma weak pthread_cond_signal = _Xcond_signal_stub_
- +int
- +_Xcond_signal_stub_(c)
- + pthread_cond_t *c;
- +{
- + return(0);
- +}
- +#else /* defined(linux) */
- #pragma weak cond_signal = _Xcond_signal_stub_
- int
- _Xcond_signal_stub_(c)
- @@ -115,7 +214,17 @@
- {
- return(0);
- }
- +#endif /* defined(linux) */
-
- +#if defined(linux)
- +#pragma weak pthread_cond_broadcast = _Xcond_broadcast_stub_
- +int
- +_Xcond_broadcast_stub_(c)
- + pthread_cond_t *c;
- +{
- + return(0);
- +}
- +#else /* defined(linux) */
- #pragma weak cond_broadcast = _Xcond_broadcast_stub_
- int
- _Xcond_broadcast_stub_(c)
- @@ -123,3 +232,15 @@
- {
- return(0);
- }
- +#endif /* defined(linux) */
- +
- +#if defined(linux)
- +#pragma weak pthread_equal = _Xthr_equal_stub_
- +int
- +_Xthr_equal_stub_(t1, t2)
- + pthread_t t1;
- + pthread_t t2;
- +{
- + return(1);
- +}
- +#endif /* defined(linux) */
- -------------------------------------------------------------------------
|