]> git.vpit.fr Git - perl/modules/autovivification.git/commitdiff
Introduce A_THREADSAFE and A_FORKSAFE
authorVincent Pit <vince@profvince.com>
Sat, 24 Apr 2010 14:27:22 +0000 (16:27 +0200)
committerVincent Pit <vince@profvince.com>
Sat, 24 Apr 2010 14:27:22 +0000 (16:27 +0200)
Makefile.PL
autovivification.xs
lib/autovivification.pm

index 01f62934a7f22953ed2a952f86565c557a742711..e33c81c55d79b81760efe42406dc6be098536061 100644 (file)
@@ -4,6 +4,20 @@ use strict;
 use warnings;
 use ExtUtils::MakeMaker;
 
+my @DEFINES;
+
+# Threads, Windows and 5.8.x don't seem to be best friends
+if ($^O eq 'MSWin32' && $^V lt v5.9.0) {
+ push @DEFINES, '-DA_MULTIPLICITY=0';
+}
+
+# Fork emulation got "fixed" in 5.10.1
+if ($^O eq 'MSWin32' && $^V lt v5.10.1) {
+ push @DEFINES, '-DA_FORKSAFE=0';
+}
+
+@DEFINES = (DEFINE => join ' ', @DEFINES) if @DEFINES;
+
 my $dist = 'autovivification';
 
 (my $name = $dist) =~ s{-}{::}g;
@@ -24,7 +38,7 @@ my %META = (
   'Test::More'          => 0,
   %PREREQ_PM,
  },
- dynamic_config => 0,
+ dynamic_config => 1,
  resources => {
   bugtracker => "http://rt.cpan.org/NoAuth/ReportBug.html?Queue=$dist",
   homepage   => "http://search.cpan.org/dist/$dist/",
@@ -40,6 +54,7 @@ WriteMakefile(
  VERSION_FROM     => $file,
  ABSTRACT_FROM    => $file,
  PL_FILES         => {},
+ @DEFINES,
  PREREQ_PM        => \%PREREQ_PM,
  MIN_PERL_VERSION => 5.008,
  META_MERGE       => \%META,
index d078674ce8b6a0901bb9f4489b30d6749f0f503d..b4c76a1cb02c5ee8961394aaf027d290499a2029 100644 (file)
 
 /* ... Thread safety and multiplicity ...................................... */
 
+/* Always safe when the workaround isn't needed */
+#if !A_WORKAROUND_REQUIRE_PROPAGATION
+# undef A_FORKSAFE
+# define A_FORKSAFE 1
+/* Otherwise, safe unless Makefile.PL says it's Win32 */
+#elif !defined(A_FORKSAFE)
+# define A_FORKSAFE 1
+#endif
+
 #ifndef A_MULTIPLICITY
 # if defined(MULTIPLICITY) || defined(PERL_IMPLICIT_CONTEXT)
 #  define A_MULTIPLICITY 1
@@ -1026,6 +1035,8 @@ BOOT:
   newCONSTSUB(stash, "A_HINT_EXISTS", newSVuv(A_HINT_EXISTS));
   newCONSTSUB(stash, "A_HINT_DELETE", newSVuv(A_HINT_DELETE));
   newCONSTSUB(stash, "A_HINT_MASK",   newSVuv(A_HINT_MASK));
+  newCONSTSUB(stash, "A_THREADSAFE",  newSVuv(A_THREADSAFE));
+  newCONSTSUB(stash, "A_FORKSAFE",    newSVuv(A_FORKSAFE));
  }
 }
 
index 8d56b08e1bd03c7e030f2816fe5cb90185232dab..ad2e47e9dbadf02f2dd9f86cd5a8978550ae61ac 100644 (file)
@@ -151,6 +151,17 @@ sub import {
  ();
 }
 
+=head1 CONSTANTS
+
+=head2 C<A_THREADSAFE>
+
+True iff the module could have been built with thread-safety features enabled.
+
+=head2 C<A_FORKSAFE>
+
+True iff this module could have been built with fork-safety features enabled.
+This will always be true except on Windows where it's false for perl 5.10.0 and below .
+
 =head1 CAVEATS
 
 The pragma doesn't apply when one dereferences the returned value of an array or hash slice, as in C<< @array[$id]->{member} >> or C<< @hash{$key}->{member} >>.