As suggested by Arthur: the threads and threads::shared
Jarkko Hietaniemi [Wed, 17 Apr 2002 14:31:42 +0000 (14:31 +0000)]
modules are always present.  This tries to preempt two
kinds of bug reports: (1) "the Perl 5.8.0 was supposed
to have this new fancy threads implementation but my Perl
doesn't seem to have it" (2) someone attempting to install
threads using CPAN.pm and CPAN.pm helpfully starting to
install perl 5.8.0 (which they might already have installed).

p4raw-id: //depot/perl@15972

Configure
ext/threads/Makefile.PL
ext/threads/shared/Makefile.PL
ext/threads/shared/shared.pm
ext/threads/shared/shared.xs
ext/threads/threads.pm
ext/threads/threads.xs

index 57e166c..7225e61 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -20,7 +20,7 @@
 
 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
 #
-# Generated on Wed Apr 17 02:10:04 EET DST 2002 [metaconfig 3.0 PL70]
+# Generated on Wed Apr 17 17:49:13 EET DST 2002 [metaconfig 3.0 PL70]
 # (with additional metaconfig patches by perlbug@perl.org)
 
 cat >c1$$ <<EOF
@@ -19327,12 +19327,18 @@ for xxx in $known_extensions ; do
                esac
                ;;
        threads|threads/shared)
-                case "$usethreads" in
-                true|$define|y)
-                        case "$useithreads" in
-                        $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
-                        esac
-               esac
+               # threads and threads::shared are special cases.
+               # To stop people from asking "Perl 5.8.0 was supposed
+               # to have this new fancy threads implementation but my
+               # perl doesn't have it" and from people trying to
+               # (re)install the threads module using CPAN.pm and
+               # CPAN.pm then offering to reinstall Perl 5.8.0,
+               # the threads.pm and threads/shared.pm will always be
+               # there, croaking informatively ("you need to rebuild
+               # all of Perl with threads, sorry") when threads haven't
+               # been compiled in.
+               # --jhi
+               avail_ext="$avail_ext $xxx"
                ;;
        IPC/SysV|ipc/sysv)
                : XXX Do we need a useipcsysv variable here
index e2bf177..fce2119 100755 (executable)
@@ -2,14 +2,6 @@ use ExtUtils::MakeMaker;
 # See lib/ExtUtils/MakeMaker.pm for details of how to influence
 # the contents of the Makefile that is written.
 
-use Config;
-
-
-unless($Config{'useithreads'} eq 'define') {
-    die "We need a perl that is built with USEITHREADS!\n";
-}
-
-
 WriteMakefile(
     'NAME'             => 'threads',
     'VERSION_FROM'     => 'threads.pm', # finds $VERSION
index 3a4c6e3..046e6e4 100755 (executable)
@@ -2,13 +2,6 @@ use ExtUtils::MakeMaker;
 # See lib/ExtUtils/MakeMaker.pm for details of how to influence
 # the contents of the Makefile that is written.
 
-use Config;
-
-
-unless($Config{'useithreads'} eq 'define') {
-    die "We need a perl that is built with USEITHREAD!\n";
-}
-
 WriteMakefile(
     'NAME'             => 'threads::shared',
     'VERSION_FROM'     => 'shared.pm', # finds $VERSION
index 83bd92c..03949cb 100644 (file)
@@ -1,8 +1,32 @@
 package threads::shared;
+
+use 5.007_003;
 use strict;
 use warnings;
 use Config;
 
+BEGIN {
+    unless ($Config{useithreads}) {
+       my @caller = caller(2);
+        die <<EOF;
+$caller[1] line $caller[2]:
+
+This Perl hasn't been configured and built properly for the threads
+module to work.  (The 'useithreads' configuration option hasn't been used.)
+
+Having threads support requires all of Perl and all of the modules in
+the Perl installation to be rebuilt, it is not just a question of adding
+the threads module.  (In other words, threaded and non-threaded Perls
+are binary incompatible.)
+
+If you want to the use the threads module, please contact the people
+who built your Perl.
+
+Cannot continue, aborting.
+EOF
+    }
+}
+
 require Exporter;
 our @ISA = qw(Exporter);
 our @EXPORT = qw(share cond_wait cond_broadcast cond_signal _refcnt _id _thrcnt);
@@ -53,6 +77,7 @@ threads::shared - Perl extension for sharing data structures between threads
 
 =head1 SYNOPSIS
 
+  use threads;
   use threads::shared;
 
   my($foo, @foo, %foo);
index 3ee7542..2680bbf 100644 (file)
@@ -18,6 +18,8 @@
 #include "perl.h"
 #include "XSUB.h"
 
+#ifdef USE_ITHREADS
+
 #define SHAREDSvPTR(a)      ((a)->sv)
 
 /*
@@ -749,10 +751,13 @@ Perl_sharedsv_init(pTHX)
   PL_sharehook = &Perl_sharedsv_share;
 }
 
+#endif /* USE_ITHREADS */
+
 MODULE = threads::shared       PACKAGE = threads::shared::tie
 
 PROTOTYPES: DISABLE
 
+#ifdef USE_ITHREADS
 
 void
 PUSH(shared_sv *shared, ...)
@@ -1005,7 +1010,14 @@ cond_broadcast_enabled(SV *ref)
            croak("cond_broadcast can only be used on shared values");
        COND_BROADCAST(&shared->user_cond);
 
+#endif /* USE_ITHREADS */
+
 BOOT:
 {
+#ifdef USE_ITHREADS
      Perl_sharedsv_init(aTHX);
+#endif /* USE_ITHREADS */
 }
+
+
+
index 12a9afa..11878eb 100755 (executable)
@@ -1,8 +1,31 @@
 package threads;
 
-use 5.007_002;
+use 5.007_003;
 use strict;
 use warnings;
+use Config;
+
+BEGIN {
+    unless ($Config{useithreads}) {
+       my @caller = caller(2);
+        die <<EOF;
+$caller[1] line $caller[2]:
+
+This Perl hasn't been configured and built properly for the threads
+module to work.  (The 'useithreads' configuration option hasn't been used.)
+
+Having threads support requires all of Perl and all of the modules in
+the Perl installation to be rebuilt, it is not just a question of adding
+the threads module.  (In other words, threaded and non-threaded Perls
+are binary incompatible.)
+
+If you want to the use the threads module, please contact the people
+who built your Perl.
+
+Cannot continue, aborting.
+EOF
+    }
+}
 
 use overload
     '==' => \&equal,
index 891fdb0..db76082 100755 (executable)
@@ -3,6 +3,8 @@
 #include "perl.h"
 #include "XSUB.h"
 
+#ifdef USE_ITHREADS
+
 #ifdef WIN32
 #include <windows.h>
 #include <win32thread.h>
@@ -516,11 +518,13 @@ Perl_ithread_DESTROY(pTHX_ SV *sv)
     sv_unmagic(SvRV(sv),PERL_MAGIC_shared_scalar);
 }
 
-
+#endif /* USE_ITHREADS */
 
 MODULE = threads               PACKAGE = threads       PREFIX = ithread_
 PROTOTYPES: DISABLE
 
+#ifdef USE_ITHREADS
+
 void
 ithread_new (classname, function_to_call, ...)
 char * classname
@@ -569,8 +573,11 @@ ithread_detach(ithread *thread)
 void
 ithread_DESTROY(SV *thread)
 
+#endif /* USE_ITHREADS */
+
 BOOT:
 {
+#ifdef USE_ITHREADS
        ithread* thread;
        PL_perl_destruct_level = 2;
        PERL_THREAD_ALLOC_SPECIFIC(self_key);
@@ -598,5 +605,6 @@ BOOT:
 
        PERL_THREAD_SETSPECIFIC(self_key,thread);
        MUTEX_UNLOCK(&create_destruct_mutex);
+#endif /* USE_ITHREADS */
 }