This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Move `use strict;` *out* of the BEGIN block in makedef.pl
[perl5.git] / makedef.pl
index f08a41b..caf3be1 100644 (file)
 #    perl.imp    NetWare
 #    makedef.lis VMS
 
+use strict;
+use Config;
+
 my $fold;
 my %ARGS;
 my %define;
 
 BEGIN {
-    BEGIN { unshift @INC, "lib" }
-    use Config;
-    use strict;
-
     %ARGS = (CCTYPE => 'MSVC', TARG_DIR => '');
 
     sub process_cc_flags {
@@ -117,9 +116,9 @@ if ($define{USE_ITHREADS}) {
     }
 }
 
-$define{PERL_IMPLICIT_CONTEXT} ||=
+$define{MULTIPLICITY} ||=
     $define{USE_ITHREADS} ||
-    $define{MULTIPLICITY} ;
+    $define{PERL_IMPLICIT_CONTEXT} ;
 
 if ($define{USE_ITHREADS} && $ARGS{PLATFORM} ne 'win32' && $ARGS{PLATFORM} ne 'netware') {
     $define{USE_REENTRANT_API} = 1;
@@ -140,6 +139,7 @@ if (! $define{NO_LOCALE}) {
     }
 }
 
+# https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B#Internal_version_numbering
 my $cctype = $ARGS{CCTYPE} =~ s/MSVC//r;
 if (! $define{HAS_SETLOCALE} && $define{HAS_POSIX_2008_LOCALE}) {
     $define{USE_POSIX_2008_LOCALE} = 1;
@@ -188,6 +188,10 @@ my %skip;
 # All platforms export boot_DynaLoader unconditionally.
 my %export = ( boot_DynaLoader => 1 );
 
+# d_thread_local not perl_thread_local - see hints/darwin.sh
+++$export{PL_current_context}
+    if defined $Config{d_thread_local} && $define{USE_ITHREADS};
+
 sub try_symbols {
     foreach my $symbol (@_) {
        ++$export{$symbol} unless exists $skip{$symbol};
@@ -203,7 +207,7 @@ sub readvar {
     my $file = $ARGS{TARG_DIR} . shift;
     my $hash = shift;
     my $proc = shift;
-    open my $vars, '<', $file or die die "Cannot open $file: $!\n";
+    open my $vars, '<', $file or die "Cannot open $file: $!\n";
 
     while (<$vars>) {
        # All symbols have a Perl_ prefix because that's what embed.h sticks
@@ -218,9 +222,7 @@ sub readvar {
 
 if ($ARGS{PLATFORM} ne 'os2') {
     ++$skip{$_} foreach qw(
-                    PL_cryptseen
                     PL_opsave
-                    Perl_GetVars
                     Perl_dump_fds
                     Perl_my_bcopy
                     Perl_my_bzero
@@ -362,34 +364,6 @@ unless ($define{'USE_ITHREADS'}) {
     ++$skip{PL_user_def_props_aTHX};
 }
 
-# USE_5005THREADS symbols. Kept as reference for easier removal
-++$skip{$_} foreach qw(
-                   PL_sv_mutex
-                   PL_strtab_mutex
-                   PL_svref_mutex
-                   PL_cred_mutex
-                   PL_eval_mutex
-                   PL_fdpid_mutex
-                   PL_sv_lock_mutex
-                   PL_eval_cond
-                   PL_eval_owner
-                   PL_threads_mutex
-                   PL_nthreads
-                   PL_nthreads_cond
-                   PL_threadnum
-                   PL_threadsv_names
-                   PL_thrsv
-                   PL_vtbl_mutex
-                   Perl_condpair_magic
-                   Perl_new_struct_thread
-                   Perl_per_thread_magicals
-                   Perl_thread_create
-                   Perl_find_threadsv
-                   Perl_unlock_condpair
-                   Perl_magic_mutexfree
-                   Perl_sv_lock
-                    );
-
 unless ($define{'USE_ITHREADS'}) {
     ++$skip{$_} foreach qw(
                     PL_keyword_plugin_mutex
@@ -398,6 +372,7 @@ unless ($define{'USE_ITHREADS'}) {
                    PL_regex_pad
                    PL_regex_padav
                    PL_dollarzero_mutex
+                   PL_env_mutex
                    PL_hints_mutex
                    PL_locale_mutex
                    PL_lc_numeric_mutex
@@ -455,7 +430,7 @@ unless ( $define{'HAS_NEWLOCALE'}
     );
 }
 
-unless ($define{'PERL_IMPLICIT_CONTEXT'}) {
+unless ($define{'MULTIPLICITY'}) {
     ++$skip{$_} foreach qw(
                    PL_my_cxt_index
                    PL_my_cxt_list
@@ -483,9 +458,6 @@ unless ($define{'PERL_IMPLICIT_CONTEXT'}) {
 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'}) {
@@ -497,14 +469,6 @@ unless ($define{'USE_DTRACE'}) {
                 );
 }
 
-unless ($define{'PERL_NEED_APPCTX'}) {
-    ++$skip{PL_appctx};
-}
-
-unless ($define{'PERL_NEED_TIMESBASE'}) {
-    ++$skip{PL_timesbase};
-}
-
 unless ($define{'DEBUG_LEAKING_SCALARS'}) {
     ++$skip{PL_sv_serial};
 }
@@ -525,6 +489,10 @@ unless ($define{'PERL_TRACK_MEMPOOL'}) {
     ++$skip{PL_memory_debug_header};
 }
 
+unless ($define{'PERL_MEM_LOG'}) {
+    ++$skip{PL_mem_log};
+}
+
 unless ($define{'MULTIPLICITY'}) {
     ++$skip{$_} foreach qw(
                    PL_interp_size
@@ -536,18 +504,6 @@ unless ($define{'MULTIPLICITY'}) {
                         );
 }
 
-unless ($define{'PERL_GLOBAL_STRUCT'}) {
-    ++$skip{PL_global_struct_size};
-}
-
-unless ($define{'PERL_GLOBAL_STRUCT_PRIVATE'}) {
-    ++$skip{$_} foreach qw(
-                   PL_my_cxt_keys
-                   PL_my_cxt_keys_size
-                   Perl_my_cxt_index
-                        );
-}
-
 unless ($define{HAS_MMAP}) {
     ++$skip{PL_mmap_page_size};
 }
@@ -621,18 +577,6 @@ if ($define{HAS_SIGNBIT}) {
     ++$skip{Perl_signbit};
 }
 
-if ($define{'PERL_GLOBAL_STRUCT'}) {
-    readvar('perlvars.h', \%skip);
-    # This seems like the least ugly way to cope with the fact that PL_sh_path
-    # is mentioned in perlvar.h and globvar.sym, and always exported.
-    delete $skip{PL_sh_path};
-    ++$export{Perl_GetVars};
-    try_symbols(qw(PL_Vars PL_VarsPtr))
-      unless $ARGS{CCTYPE} eq 'GCC' || $define{PERL_GLOBAL_STRUCT_PRIVATE};
-} else {
-    ++$skip{$_} foreach qw(Perl_init_global_struct Perl_free_global_struct);
-}
-
 ++$skip{PL_op_exec_cnt}
     unless $define{PERL_TRACE_OPS};
 
@@ -740,6 +684,18 @@ unless ($define{'USE_QUADMATH'}) {
   ++$skip{Perl_quadmath_format_single};
 }
 
+unless ($Config{d_mbrlen}) {
+    ++$skip{PL_mbrlen_ps};
+}
+
+unless ($Config{d_mbrtowc}) {
+    ++$skip{PL_mbrtowc_ps};
+}
+
+unless ($Config{d_wcrtomb}) {
+    ++$skip{PL_wcrtomb_ps};
+}
+
 ###############################################################################
 
 # At this point all skip lists should be completed, as we are about to test
@@ -782,20 +738,9 @@ foreach (@syms) {
 
 # variables
 
-if ($define{'MULTIPLICITY'} && $define{PERL_GLOBAL_STRUCT}) {
-    readvar('perlvars.h', \%export, sub { "Perl_" . $_[1] . $_[2] . "_ptr" });
-    # XXX AIX seems to want the perlvars.h symbols, for some reason
-    if ($ARGS{PLATFORM} eq 'aix' or $ARGS{PLATFORM} eq 'os2') {        # OS/2 needs PL_thr_key
-       readvar('perlvars.h', \%export);
-    }
-}
-else {
-    unless ($define{'PERL_GLOBAL_STRUCT'}) {
-       readvar('perlvars.h', \%export);
-    }
-    unless ($define{MULTIPLICITY}) {
-       readvar('intrpvar.h', \%export);
-    }
+readvar('perlvars.h', \%export);
+unless ($define{MULTIPLICITY}) {
+    readvar('intrpvar.h', \%export);
 }
 
 # Oddities from PerlIO
@@ -817,7 +762,6 @@ if ($ARGS{PLATFORM} eq 'win32') {
                    win32_get_childenv
                    win32_spawnvp
                    Perl_init_os_extras
-                   Perl_thread_create
                    Perl_win32_init
                    Perl_win32_term
                    RunPerl
@@ -970,6 +914,9 @@ if ($ARGS{PLATFORM} eq 'win32') {
                    win32_puts
                    win32_getchar
                    win32_putchar
+                    win32_symlink
+                    win32_lstat
+                    win32_readlink
                 ));
 }
 elsif ($ARGS{PLATFORM} eq 'vms') {
@@ -1129,7 +1076,6 @@ elsif ($ARGS{PLATFORM} eq 'os2') {
 elsif ($ARGS{PLATFORM} eq 'netware') {
     try_symbols(qw(
                        Perl_init_os_extras
-                       Perl_thread_create
                        Perl_nw5_init
                        RunPerl
                        AllocStdPerl
@@ -1306,7 +1252,7 @@ if ($ARGS{PLATFORM} eq 'win32') {
     print "LIBRARY $dll\n";
     # The DESCRIPTION module definition file statement is not supported
     # by VC7 onwards.
-    if ($ARGS{CCTYPE} =~ /^(?:MSVC60|GCC)$/) {
+    if ($ARGS{CCTYPE} eq 'GCC') {
        print "DESCRIPTION 'Perl interpreter'\n";
     }
     print "EXPORTS\n";