# perl5.def OS/2
# perldll.def Windows
# perl.exp AIX
-# 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 {
++$fold;
}
}
- my @PLATFORM = qw(aix win32 os2 netware vms test);
+ my @PLATFORM = qw(aix win32 os2 vms test);
my %PLATFORM;
@PLATFORM{@PLATFORM} = ();
# Is the following guard strictly necessary? Added during refactoring
# to keep the same behaviour when merging other code into here.
process_cc_flags(@Config{qw(ccflags optimize)})
- if $ARGS{PLATFORM} ne 'win32' && $ARGS{PLATFORM} ne 'netware';
+ if $ARGS{PLATFORM} ne 'win32';
# Add the compile-time options that miniperl was built with to %define.
# On Win32 these are not the same options as perl itself will be built
}
}
-$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') {
+if ($define{USE_ITHREADS} && $ARGS{PLATFORM} ne 'win32') {
$define{USE_REENTRANT_API} = 1;
}
}
}
+# https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B#Internal_version_numbering
my $cctype = $ARGS{CCTYPE} =~ s/MSVC//r;
+if ($define{USE_ITHREADS} && ! $define{NO_LOCALE_THREADS}) {
+ $define{USE_LOCALE_THREADS} = 1;
+}
if (! $define{HAS_SETLOCALE} && $define{HAS_POSIX_2008_LOCALE}) {
$define{USE_POSIX_2008_LOCALE} = 1;
$define{USE_THREAD_SAFE_LOCALE} = 1;
}
-elsif ( ($define{USE_ITHREADS} || $define{USE_THREAD_SAFE_LOCALE})
+elsif ( ($define{USE_LOCALE_THREADS} || $define{USE_THREAD_SAFE_LOCALE})
&& ( $define{HAS_POSIX_2008_LOCALE}
|| ($ARGS{PLATFORM} eq 'win32' && ( $cctype !~ /\D/
&& $cctype >= 80)))
# 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};
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
if ($ARGS{PLATFORM} ne 'os2') {
++$skip{$_} foreach qw(
- PL_cryptseen
PL_opsave
- Perl_GetVars
Perl_dump_fds
Perl_my_bcopy
Perl_my_bzero
);
}
-if ($define{'PERL_USE_SAFE_PUTENV'}) {
- ++$skip{PL_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
-++$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
PL_regex_pad
PL_regex_padav
PL_dollarzero_mutex
+ PL_env_mutex
PL_hints_mutex
PL_locale_mutex
PL_lc_numeric_mutex
);
}
-if ( $define{NO_LOCALE}
- || (! $define{USE_ITHREADS} && ! $define{USE_THREAD_SAFE_LOCALE}))
+unless ($define{USE_POSIX_2008_LOCALE})
{
++$skip{$_} foreach qw(
PL_C_locale_obj
- PL_curlocales
+ PL_scratch_locale_obj
+ PL_underlying_numeric_obj
);
}
-
-unless ( $define{'HAS_NEWLOCALE'}
- && $define{'HAS_FREELOCALE'}
- && $define{'HAS_USELOCALE'}
- && ! $define{'NO_POSIX_2008_LOCALE'})
+unless ($define{USE_POSIX_2008_LOCALE} && ! $define{HAS_QUERY_LOCALE})
{
++$skip{$_} foreach qw(
- PL_C_locale_obj
- PL_underlying_numeric_obj
+ PL_curlocales
);
}
-unless ($define{'PERL_IMPLICIT_CONTEXT'}) {
+unless ($define{'MULTIPLICITY'}) {
++$skip{$_} foreach qw(
PL_my_cxt_index
PL_my_cxt_list
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'}) {
);
}
-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};
}
++$skip{PL_memory_debug_header};
}
+unless ($define{'PERL_MEM_LOG'}) {
+ ++$skip{$_} foreach qw(
+ PL_mem_log
+ Perl_mem_log_alloc
+ Perl_mem_log_realloc
+ Perl_mem_log_free
+ Perl_mem_log_new_sv
+ Perl_mem_log_del_sv
+ );
+}
+
unless ($define{'MULTIPLICITY'}) {
++$skip{$_} foreach qw(
PL_interp_size
);
}
-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};
}
unless ($define{USE_LOCALE_NUMERIC}) {
++$skip{$_} foreach qw(
- PL_numeric_local
- PL_numeric_name
- PL_numeric_radix_sv
- PL_numeric_standard
- PL_numeric_underlying
- PL_numeric_underlying_is_standard
PL_underlying_numeric_obj
);
}
++$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};
Perl_PerlIO_unread
Perl_PerlIO_write
);
-if ($ARGS{PLATFORM} eq 'netware') {
- push(@layer_syms,'PL_def_layerlist','PL_known_layers','PL_perlio');
-}
# Export the symbols that make up the PerlIO abstraction, regardless
# of its implementation - read from a file
++$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
{
my %seen;
my ($embed) = setup_embed($ARGS{TARG_DIR});
- my $excludedre = $define{'NO_MATHOMS'} ? qr/[emib]/ : qr/[emi]/;
+ my $excludedre = $define{'NO_MATHOMS'} ? qr/[emiIsb]/ : qr/[emiIs]/;
foreach (@$embed) {
my ($flags, $retval, $func, @args) = @$_;
# mean "don't export"
next if $seen{$func}++;
# Should we also skip adding the Perl_ prefix if $flags =~ /o/ ?
- $func = "Perl_$func" if ($flags =~ /[pX]/ && $func !~ /^Perl_/);
+ $func = "Perl_$func" if ($flags =~ /[psX]/ && $func !~ /^Perl_/);
++$export{$func} unless exists $skip{$func};
}
}
# 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
win32_get_childenv
win32_spawnvp
Perl_init_os_extras
- Perl_thread_create
Perl_win32_init
Perl_win32_term
RunPerl
win32_puts
win32_getchar
win32_putchar
+ win32_symlink
+ win32_lstat
+ win32_readlink
));
}
elsif ($ARGS{PLATFORM} eq 'vms') {
PL_do_undump
));
}
-elsif ($ARGS{PLATFORM} eq 'netware') {
- try_symbols(qw(
- Perl_init_os_extras
- Perl_thread_create
- Perl_nw5_init
- RunPerl
- AllocStdPerl
- FreeStdPerl
- do_spawn2
- do_aspawn
- nw_uname
- nw_stdin
- nw_stdout
- nw_stderr
- nw_feof
- nw_ferror
- nw_fopen
- nw_fclose
- nw_clearerr
- nw_getc
- nw_fgets
- nw_fputc
- nw_fputs
- nw_fflush
- nw_ungetc
- nw_fileno
- nw_fdopen
- nw_freopen
- nw_fread
- nw_fwrite
- nw_setbuf
- nw_setvbuf
- nw_vfprintf
- nw_ftell
- nw_fseek
- nw_rewind
- nw_tmpfile
- nw_fgetpos
- nw_fsetpos
- nw_dup
- nw_access
- nw_chmod
- nw_chsize
- nw_close
- nw_dup2
- nw_flock
- nw_isatty
- nw_link
- nw_lseek
- nw_stat
- nw_mktemp
- nw_open
- nw_read
- nw_rename
- nw_setmode
- nw_unlink
- nw_utime
- nw_write
- nw_chdir
- nw_rmdir
- nw_closedir
- nw_opendir
- nw_readdir
- nw_rewinddir
- nw_seekdir
- nw_telldir
- nw_htonl
- nw_htons
- nw_ntohl
- nw_ntohs
- nw_accept
- nw_bind
- nw_connect
- nw_endhostent
- nw_endnetent
- nw_endprotoent
- nw_endservent
- nw_gethostbyaddr
- nw_gethostbyname
- nw_gethostent
- nw_gethostname
- nw_getnetbyaddr
- nw_getnetbyname
- nw_getnetent
- nw_getpeername
- nw_getprotobyname
- nw_getprotobynumber
- nw_getprotoent
- nw_getservbyname
- nw_getservbyport
- nw_getservent
- nw_getsockname
- nw_getsockopt
- nw_inet_addr
- nw_listen
- nw_socket
- nw_recv
- nw_recvfrom
- nw_select
- nw_send
- nw_sendto
- nw_sethostent
- nw_setnetent
- nw_setprotoent
- nw_setservent
- nw_setsockopt
- nw_inet_ntoa
- nw_shutdown
- nw_crypt
- nw_execvp
- nw_kill
- nw_Popen
- nw_Pclose
- nw_Pipe
- nw_times
- nw_waitpid
- nw_getpid
- nw_spawnvp
- nw_os_id
- nw_open_osfhandle
- nw_get_osfhandle
- nw_abort
- nw_sleep
- nw_wait
- nw_dynaload
- nw_strerror
- fnFpSetMode
- fnInsertHashListAddrs
- fnGetHashListAddrs
- Perl_deb
- Perl_sv_setsv
- Perl_sv_catsv
- Perl_sv_catpvn
- Perl_sv_2pv
- nw_freeenviron
- Remove_Thread_Ctx
- ));
-}
# When added this code was only run for Win32 (and WinCE at the time)
# Currently only Win32 links static extensions into the shared library.
-# The NetWare Makefile doesn't support static extensions (and hardcodes the
-# list of dynamic extensions, and the rules to build them)
# For *nix (and presumably OS/2) with a shared libperl, Makefile.SH compiles
# static extensions with -fPIC, but links them to perl, not libperl.so
# The VMS build scripts don't yet implement static extensions at all.
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";
print "#!\n";
}
}
-elsif ($ARGS{PLATFORM} eq 'netware') {
- if ($ARGS{FILETYPE} eq 'def') {
- print "LIBRARY perl$Config{api_revision}$Config{api_version}\n";
- print "DESCRIPTION 'Perl interpreter for NetWare'\n";
- print "EXPORTS\n";
- }
-}
# Then the symbols
qq("$exportperlmalloc{$symbol}" = "$symbol"),
$ordinal{$exportperlmalloc{$symbol}} || ++$sym_ord
if $exportperlmalloc and exists $exportperlmalloc{$symbol};
- }
- elsif (PLATFORM eq 'netware') {
- print "\t$symbol,\n";
} else {
print "$symbol\n";
}