This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Backport rsync_locale, switch_to_global_locale
authorKarl Williamson <khw@cpan.org>
Fri, 12 Jul 2019 18:51:32 +0000 (12:51 -0600)
committerNicolas R <atoomic@cpan.org>
Fri, 27 Sep 2019 22:51:29 +0000 (16:51 -0600)
Before these existed, they should be no-ops

(cherry picked from commit fbde8074e56bf0da478eb424c4bc9329ee48210b)
Signed-off-by: Nicolas R <atoomic@cpan.org>
dist/Devel-PPPort/PPPort_pm.PL
dist/Devel-PPPort/parts/inc/locale [new file with mode: 0644]
dist/Devel-PPPort/t/locale.t [new file with mode: 0644]

index abb2cbd..ba9c50a 100644 (file)
@@ -854,6 +854,8 @@ __DATA__
 
 %include pv_tools
 
+%include locale
+
 #endif /* _P_P_PORTABILITY_H_ */
 
 /* End of File ppport.h */
diff --git a/dist/Devel-PPPort/parts/inc/locale b/dist/Devel-PPPort/parts/inc/locale
new file mode 100644 (file)
index 0000000..f8ad196
--- /dev/null
@@ -0,0 +1,53 @@
+=provides
+
+__UNDEFINED__
+
+=implementation
+
+
+/* If this doesn't exist, it's not needed, so noop */
+__UNDEFINED__  switch_to_global_locale()
+
+/* Originally, this didn't return a value, but in perls like that, the value
+ * should always be TRUE.  Add a return to Perl_sync_locale() when it's
+ * available.  And actually do a sync when its not, if locales are available on
+ * this system. */
+#ifdef sync_locale
+#  if { VERSION < 5.27.9 }
+#    if { VERSION >= 5.21.3 }
+#      undef sync_locale
+#      define sync_locale() (Perl_sync_locale(aTHX), 1)
+#    elif defined(new_ctype) && defined(LC_CTYPE)
+#      define sync_locale() (new_ctype(setlocale(LC_CTYPE, NULL)), 1)
+#    else
+#      undef sync_locale
+#    endif
+#  endif
+#endif
+
+__UNDEFINED__ sync_locale() 1
+
+=xsubs
+
+bool
+sync_locale()
+        CODE:
+            RETVAL = sync_locale();
+        OUTPUT:
+            RETVAL
+
+
+=tests plan => 1
+
+use Config;
+
+  # We don't know for sure that we are in the global locale for testing.  But
+  # if this is unthreaded, it almost certainly is.  But Configure can be called
+  # to force POSIX locales on unthreaded systems.  If this becomes a problem
+  # this check could be beefed up.
+  if ($Config{usethreads}) {
+    ok(1);
+}
+else {
+    ok(&Devel::PPPort::sync_locale());
+}
diff --git a/dist/Devel-PPPort/t/locale.t b/dist/Devel-PPPort/t/locale.t
new file mode 100644 (file)
index 0000000..c103ef7
--- /dev/null
@@ -0,0 +1,63 @@
+################################################################################
+#
+#            !!!!!   Do NOT edit this file directly!   !!!!!
+#
+#            Edit mktests.PL and/or parts/inc/locale instead.
+#
+#  This file was automatically generated from the definition files in the
+#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+#  works, please read the F<HACKERS> file that came with this distribution.
+#
+################################################################################
+
+BEGIN {
+  if ($ENV{'PERL_CORE'}) {
+    chdir 't' if -d 't';
+    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    require Config; import Config;
+    use vars '%Config';
+    if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
+      print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
+      exit 0;
+    }
+  }
+  else {
+    unshift @INC, 't';
+  }
+
+  sub load {
+    eval "use Test";
+    require 'testutil.pl' if $@;
+  }
+
+  if (1) {
+    load();
+    plan(tests => 1);
+  }
+}
+
+use Devel::PPPort;
+use strict;
+BEGIN { $^W = 1; }
+
+package Devel::PPPort;
+use vars '@ISA';
+require DynaLoader;
+@ISA = qw(DynaLoader);
+bootstrap Devel::PPPort;
+
+package main;
+
+use Config;
+
+  # We don't know for sure that we are in the global locale for testing.  But
+  # if this is unthreaded, it almost certainly is.  But Configure can be called
+  # to force POSIX locales on unthreaded systems.  If this becomes a problem
+  # this check could be beefed up.
+  if ($Config{usethreads}) {
+    ok(1);
+}
+else {
+    ok(&Devel::PPPort::sync_locale());
+}
+