This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add PL_ to merged file
[perl5.git] / README.threads
index 69bddca..e9f6966 100644 (file)
@@ -1,47 +1,86 @@
 Building
 
 If you want to build with multi-threading support and you are
-running Linux 2.x (with the LinuxThreads library installed:
-that's the linuxthreads and linuxthreads-devel RPMs for RedHat)
-or Digital UNIX 4.x or Solaris 2.x for recentish x (2.5 is OK)
+running one of the following:
+
+  * Linux 2.x (with the LinuxThreads library installed: that's
+    the linuxthreads and linuxthreads-devel RPMs for RedHat)
+
+  * Digital UNIX 4.x
+
+  * Solaris 2.x for recentish x (2.5 is OK)
+
+  * IRIX 6.2 or newer. 6.2 will require a few os patches.
+    IMPORTANT: Without patch 2401, a kernel bug in IRIX 6.2 will
+    cause your machine to panic and crash when running threaded perl.
+    IRIX 6.3 and up should be OK. See lower down for patch details.
+
 then you should be able to use
-    ./Configure -Dusethreads -Doptimize=-g -ders
+
+    ./Configure -Dusethreads -des
     make
+
 and ignore the rest of this "Building" section. If it doesn't
 work or you are using another platform which you believe supports
-POSIX.1c threads then read on.
-
-Omit the -e from your ./Configure arguments. For example, use
-    ./Configure -drs
-When it offers to let you change config.sh, do so. If you already
-have a config.sh then you can edit it and do
-    ./Configure -S
-to propagate the required changes.
-In ccflags, insert -DUSE_THREADS (and probably -DDEBUGGING since
-that's what I've been building with). Also insert any other
-arguments in there that your compiler needs to use POSIX threads.
-Change optimize to -g to give you better debugging information.
-Include any necessary explicit libraries in libs and change
-ldflags if you need any linker flags instead or as well.
-
-More explicitly, for Linux (when using the standard kernel-threads
-based LinuxThreads library):
-    Add -DUSE_THREADS -D_REENTRANT -DDEBUGGING to ccflags and cppflags
-    Add -lpthread to libs
-    Change optimize to -g
+POSIX.1c threads then read on.  Additional information may be in
+a platform-specific "hints" file in the hints/ subdirectory.
+
+Omit the -d from your ./Configure arguments. For example, use
+
+    ./Configure -Dusethreads
+
+When Configure prompts you for ccflags, insert any other arguments in
+there that your compiler needs to use POSIX threads. When Configure
+prompts you for linking flags, include any flags required for
+threading (usually nothing special is required here).  Finally, when
+COnfigure prompts you for libraries, include any necessary libraries
+(e.g. -lpthread).  Pay attention to the order of libraries.  It is
+probably necessary to specify your threading library *before* your
+standard C library, e.g.  it might be necessary to have -lpthread -lc,
+instead of -lc -lpthread.
+
+Once you have specified all your compiler flags, you can have Configure
+accept all the defaults for the remainder of the session by typing  &-d
+at any Configure prompt.
+
+Some additional notes (some of these may be obsolete now, other items
+may be handled automatically):
+
 For Digital Unix 4.x:
-    Add -pthread -DUSE_THREADS -DDEBUGGING to ccflags
-    Add -DUSE_THREADS -DDEBUGGING to cppflags
+    Add -pthread to ccflags
     Add -pthread to ldflags
-    Change optimize to -g
     Add -lpthread -lc_r to lddlflags
+
     For some reason, the extra includes for pthreads make Digital UNIX
     complain fatally about the sbrk() delcaration in perl's malloc.c
-    so use the native malloc as follows:
-    Change usemymalloc to n
-    Zap mallocobj and mallocsrc (foo='')
-    Change d_mymalloc to undef
-For Solaris, do the same as for Linux above.
+    so use the native malloc, e.g.  sh Configure -Uusemymalloc, or
+    manually edit your config.sh as follows:
+       Change usemymalloc to n
+       Zap mallocobj and mallocsrc (foo='')
+       Change d_mymalloc to undef
+
+For IRIX:
+    (This should all be done automatically by the hint file).
+    Add -lpthread to libs
+    For IRIX 6.2, you have to have the following patches installed:
+       1404 Irix 6.2 Posix 1003.1b man pages
+       1645 IRIX 6.2 & 6.3 POSIX header file updates
+       2000 Irix 6.2 Posix 1003.1b support modules
+       2254 Pthread library fixes
+       2401 6.2 all platform kernel rollup
+    IMPORTANT: Without patch 2401, a kernel bug in IRIX 6.2 will
+    cause your machine to panic and crash when running threaded perl.
+    IRIX 6.3 and up should be OK.
+
+    For IRIX 6.3 and 6.4 the pthreads should work out of the box.
+    Thanks to Hannu Napari <Hannu.Napari@hut.fi> for the IRIX
+    pthreads patches information.
+For AIX:
+    (This should all be done automatically by the hint file).
+    Change cc to xlc_r or cc_r.
+    Add -DNEED_PTHREAD_INIT to ccflags and cppflags
+    Add -lc_r to libswanted
+    Change -lc in lddflags to be -lpthread -lc_r -lc
 
 Now you can do a
     make
@@ -49,14 +88,11 @@ Now you can do a
 
 O/S specific bugs
 
-Solaris qsort uses a hidden mutex for synchronisation. If you die()
-while doing a sort() then the resulting longjmp() leaves the mutex
-locked so you get a deadlock the next time you try to sort().
+Irix 6.2:  See the Irix warning above.
 
 LinuxThreads 0.5 has a bug which can cause file descriptor 0 to be
-closed after a fork() leading to many strange symptoms. The
-development version of LinuxThreads has this fixed but the following
-patch can be applied to 0.5 for now:
+closed after a fork() leading to many strange symptoms. Version 0.6
+has this fixed but the following patch can be applied to 0.5 for now:
 
 ----------------------------- cut here -----------------------------
 --- linuxthreads-0.5/pthread.c.ORI     Mon Oct  6 13:55:50 1997
@@ -85,28 +121,21 @@ the list of extensions automatically.
 
 You can try some of the tests with
     cd ext/Thread
-    perl -Mblib create.t
-    perl -Mblib join.t
-    perl -Mblib lock.t
-    perl -Mblib unsync.t
-    perl -Mblib unsync2.t
-    perl -Mblib unsync3.t
-    perl -Mblib io.t
-    perl -Mblib queue.t
+    perl create.t
+    perl join.t
+    perl lock.t
+    perl io.t
+etc.
 The io one leaves a thread reading from the keyboard on stdin so
 as the ping messages appear you can type lines and see them echoed.
 
 Try running the main perl test suite too. There are known
-failures for op/misc test 45 (tries to do local(@_) but @_ is
-now lexical) and for some of the DBM/DB extensions (if there
-underlying libraries were not compiled to be thread-aware).
-may or may not work.
+failures for some of the DBM/DB extensions (if their underlying
+libraries were not compiled to be thread-aware).
 
 
 Bugs
 
-* cond.t hasn't been redone since condition variable changed.
-
 * FAKE_THREADS should produce a working perl but the Thread
 extension won't build with it yet.
 
@@ -118,8 +147,6 @@ haven't tracked down yet) and there are very probably others too.
 
 * Need to document "lock", Thread.pm, Queue.pm, ...
 
-* Plenty of others
-
 
 Debugging
 
@@ -234,4 +261,7 @@ ZOMBIE ----------------------------> DEAD
 
 Malcolm Beattie
 mbeattie@sable.ox.ac.uk
-6 November 1997
+Last updated: 27 November 1997
+
+Configure-related info updated 16 July 1998 by
+Andy Dougherty <doughera@lafayette.edu>