This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
fix thread issue with PERL_GLOBAL_STRUCT
[perl5.git] / makedef.pl
index 2af197f..dbb7f7d 100644 (file)
@@ -108,7 +108,6 @@ my $config_h = 'config.h';
 open(CFG, '<', $config_h) || die "Cannot open $config_h: $!\n";
 while (<CFG>) {
     $define{$1} = 1 if /^\s*\#\s*define\s+(MYMALLOC|MULTIPLICITY
-                                           |SPRINTF_RETURNS_STRLEN
                                            |KILL_BY_SIGPRC
                                            |(?:PERL|USE|HAS)_\w+)\b/x;
 }
@@ -126,10 +125,36 @@ $define{PERL_IMPLICIT_CONTEXT} ||=
     $define{USE_ITHREADS} ||
     $define{MULTIPLICITY} ;
 
-if ($define{USE_ITHREADS} && $ARGS{PLATFORM} ne 'win32' && $^O ne 'darwin') {
+if ($define{USE_ITHREADS} && $ARGS{PLATFORM} ne 'win32' && $ARGS{PLATFORM} ne 'netware') {
     $define{USE_REENTRANT_API} = 1;
 }
 
+if (    ($define{USE_ITHREADS} || $define{USE_THREAD_SAFE_LOCALE})
+    &&   $define{HAS_SETLOCALE}
+    && ! $define{NO_LOCALE}
+    && ! $define{NO_POSIX_2008_LOCALE})
+{
+    $define{HAS_POSIX_2008_LOCALE} = 1 if $define{HAS_NEWLOCALE}
+                                       && $define{HAS_FREELOCALE}
+                                       && $define{HAS_USELOCALE};
+    my $cctype = $ARGS{CCTYPE} =~ s/MSVC//r;
+    if (    ! $define{NO_THREAD_SAFE_LOCALE}
+        && (  $define{HAS_POSIX_2008_LOCALE}
+            || ($ARGS{PLATFORM} eq 'win32' && (   $cctype !~ /\D/
+                                               && $cctype >= 80))))
+    {
+        $define{USE_THREAD_SAFE_LOCALE} = 1;
+        $define{USE_POSIX_2008_LOCALE} = 1 if $define{HAS_POSIX_2008_LOCALE};
+    }
+
+    if (   $ARGS{PLATFORM} eq 'win32'
+        && $define{USE_THREAD_SAFE_LOCALE}
+        && $cctype < 140)
+    {
+        $define{TS_W32_BROKEN_LOCALECONV} = 1;
+    }
+}
+
 # perl.h logic duplication ends
 
 print STDERR "Defines: (" . join(' ', sort keys %define) . ")\n"
@@ -327,6 +352,8 @@ if ($define{'PERL_USE_SAFE_PUTENV'}) {
 
 unless ($define{'USE_ITHREADS'}) {
     ++$skip{PL_thr_key};
+    ++$skip{PL_user_prop_mutex};
+    ++$skip{PL_user_def_props_aTHX};
 }
 
 # USE_5005THREADS symbols. Kept as reference for easier removal
@@ -359,6 +386,7 @@ unless ($define{'USE_ITHREADS'}) {
 
 unless ($define{'USE_ITHREADS'}) {
     ++$skip{$_} foreach qw(
+                    PL_keyword_plugin_mutex
                    PL_check_mutex
                    PL_op_mutex
                    PL_regex_pad
@@ -366,6 +394,8 @@ unless ($define{'USE_ITHREADS'}) {
                    PL_dollarzero_mutex
                    PL_hints_mutex
                    PL_locale_mutex
+                   PL_lc_numeric_mutex
+                   PL_lc_numeric_mutex_depth
                    PL_my_ctx_mutex
                    PL_perlio_mutex
                    PL_stashpad
@@ -399,10 +429,23 @@ unless ($define{'USE_ITHREADS'}) {
                         );
 }
 
-unless ($define{'HAS_NEWLOCALE'} && ! $define{'NO_POSIX_2008_LOCALE'})
+if (      $define{NO_LOCALE}
+    || (! $define{USE_ITHREADS} && ! $define{USE_THREAD_SAFE_LOCALE}))
+{
+    ++$skip{$_} foreach qw(
+        PL_C_locale_obj
+        PL_curlocales
+    );
+}
+
+unless ( $define{'HAS_NEWLOCALE'}
+    &&   $define{'HAS_FREELOCALE'}
+    &&   $define{'HAS_USELOCALE'}
+    && ! $define{'NO_POSIX_2008_LOCALE'})
 {
     ++$skip{$_} foreach qw(
         PL_C_locale_obj
+        PL_underlying_numeric_obj
     );
 }
 
@@ -412,6 +455,7 @@ unless ($define{'PERL_IMPLICIT_CONTEXT'}) {
                    PL_my_cxt_list
                    PL_my_cxt_size
                    PL_my_cxt_keys
+                   PL_my_cxt_keys_size
                    Perl_croak_nocontext
                    Perl_die_nocontext
                    Perl_deb_nocontext
@@ -430,10 +474,12 @@ unless ($define{'PERL_IMPLICIT_CONTEXT'}) {
                         );
 }
 
-unless ($define{'PERL_OP_PARENT'}) {
-    ++$skip{$_} foreach qw(
-                   Perl_op_parent
-                );
+if ($define{USE_THREAD_SAFE_LOCALE}) {
+    ++$skip{PL_lc_numeric_mutex};
+    ++$skip{PL_lc_numeric_mutex_depth};
+    if (! $define{TS_W32_BROKEN_LOCALECONV}) {
+        ++$skip{PL_locale_mutex};
+    }
 }
 
 unless ($define{'USE_DTRACE'}) {
@@ -465,10 +511,6 @@ unless ($define{'PERL_DONT_CREATE_GVSV'}) {
     ++$skip{Perl_gv_SVadd};
 }
 
-if ($define{'SPRINTF_RETURNS_STRLEN'}) {
-    ++$skip{Perl_my_sprintf};
-}
-
 unless ($define{'PERL_USES_PL_PIDSTATUS'}) {
     ++$skip{PL_pidstatus};
 }
@@ -495,6 +537,7 @@ unless ($define{'PERL_GLOBAL_STRUCT'}) {
 unless ($define{'PERL_GLOBAL_STRUCT_PRIVATE'}) {
     ++$skip{$_} foreach qw(
                    PL_my_cxt_keys
+                   PL_my_cxt_keys_size
                    Perl_my_cxt_index
                         );
 }
@@ -522,6 +565,11 @@ if ($ARGS{PLATFORM} eq 'vms' && !$define{KILL_BY_SIGPRC}) {
     ++$skip{PL_sig_handlers_initted} unless !$define{HAS_SIGACTION};
 }
 
+if ($define{'HAS_STRNLEN'})
+{
+    ++$skip{Perl_my_strnlen};
+}
+
 unless ($define{USE_LOCALE_COLLATE}) {
     ++$skip{$_} foreach qw(
                    PL_collation_ix
@@ -531,6 +579,9 @@ unless ($define{USE_LOCALE_COLLATE}) {
                    PL_collxfrm_mult
                    Perl_sv_collxfrm
                    Perl_sv_collxfrm_flags
+                    PL_strxfrm_NUL_replacement
+                    PL_strxfrm_is_behaved
+                    PL_strxfrm_max_cp
                         );
 }
 
@@ -540,6 +591,9 @@ unless ($define{USE_LOCALE_NUMERIC}) {
                    PL_numeric_name
                    PL_numeric_radix_sv
                    PL_numeric_standard
+                    PL_numeric_underlying
+                    PL_numeric_underlying_is_standard
+                    PL_underlying_numeric_obj
                         );
 }
 
@@ -688,12 +742,13 @@ unless ($define{'USE_QUADMATH'}) {
 {
     my %seen;
     my ($embed) = setup_embed($ARGS{TARG_DIR});
+    my $excludedre = $define{'NO_MATHOMS'} ? qr/[xmib]/ : qr/[xmi]/;
 
     foreach (@$embed) {
        my ($flags, $retval, $func, @args) = @$_;
        next unless $func;
-       if (   ($flags =~ /[AX]/ && $flags !~ /[xmi]/)
-            || ($flags =~ /b/ && ! $define{'NO_MATHOMS'}))
+       if (($flags =~ /[AX]/ && $flags !~ $excludedre)
+            || (!$define{'NO_MATHOMS'} && $flags =~ /b/))
         {
            # public API, so export
 
@@ -848,6 +903,7 @@ if ($ARGS{PLATFORM} =~ /^win(?:32|ce)$/) {
                            win32_realloc
                            win32_free
                            win32_sleep
+                           win32_pause
                            win32_times
                            win32_access
                            win32_alarm