This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Cleaning up x2p directory
[perl5.git] / makedef.pl
CommitLineData
549a6b10
JH
1#
2# Create the export list for perl.
3#
86593e8d
JH
4# Needed by WIN32 and OS/2 for creating perl.dll,
5# and by AIX for creating libperl.a when -Dusershrplib is in effect,
6# and by MacOS Classic.
549a6b10 7#
22c35a8c 8# reads global.sym, pp.sym, perlvars.h, intrpvar.h, thrdvar.h, config.h
5c728af0 9# On OS/2 reads miniperl.map and the previous version of perl5.def as well
0a753a76 10
549a6b10
JH
11my $PLATFORM;
12my $CCTYPE;
910dfcc8 13
7766f137
GS
14while (@ARGV) {
15 my $flag = shift;
5c728af0
IZ
16 if ($flag =~ s/^CC_FLAGS=/ /) {
17 for my $fflag ($flag =~ /(?:^|\s)-D(\S+)/g) {
18 $fflag .= '=1' unless $fflag =~ /^(\w+)=/;
19 $define{$1} = $2 if $fflag =~ /^(\w+)=(.+)$/;
20 }
21 next;
22 }
7766f137
GS
23 $define{$1} = 1 if ($flag =~ /^-D(\w+)$/);
24 $define{$1} = $2 if ($flag =~ /^-D(\w+)=(.+)$/);
25 $CCTYPE = $1 if ($flag =~ /^CCTYPE=(\w+)$/);
26 $PLATFORM = $1 if ($flag =~ /^PLATFORM=(\w+)$/);
18f68570
VK
27 if ($PLATFORM eq 'netware') {
28 $FILETYPE = $1 if ($flag =~ /^FILETYPE=(\w+)$/);
29 }
7766f137 30}
d55594ae 31
18f68570 32my @PLATFORM = qw(aix win32 wince os2 MacOS netware);
549a6b10
JH
33my %PLATFORM;
34@PLATFORM{@PLATFORM} = ();
35
36defined $PLATFORM || die "PLATFORM undefined, must be one of: @PLATFORM\n";
9df9a5cd 37exists $PLATFORM{$PLATFORM} || die "PLATFORM must be one of: @PLATFORM\n";
549a6b10 38
40dfc4d2 39if ($PLATFORM eq 'win32' or $PLATFORM eq "aix") {
17bdc114 40 # Add the compile-time options that miniperl was built with to %define.
dcddf0a3
SH
41 # On Win32 these are not the same options as perl itself will be built
42 # with since miniperl is built with a canned config (one of the win32/
43 # config_H.*) and none of the BUILDOPT's that are set in the makefiles,
44 # but they do include some #define's that are hard-coded in various
45 # source files and header files and don't include any BUILDOPT's that
46 # the user might have chosen to disable because the canned configs are
47 # minimal configs that don't include any of those options.
40dfc4d2 48 my $config = `$^X -Ilib -V`;
dcddf0a3
SH
49 my($options) = $config =~ /^ Compile-time options: (.*?)\n^ \S/ms;
50 $options =~ s/\s+/ /g;
40dfc4d2 51 print STDERR "Options: ($options)\n";
17bdc114
SH
52 foreach (split /\s+/, $options) {
53 $define{$_} = 1;
54 }
55}
56
c6261f3b
JH
57my %exportperlmalloc =
58 (
59 Perl_malloc => "malloc",
60 Perl_mfree => "free",
61 Perl_realloc => "realloc",
62 Perl_calloc => "calloc",
63 );
64
65my $exportperlmalloc = $PLATFORM eq 'os2';
66
549a6b10
JH
67my $config_sh = "config.sh";
68my $config_h = "config.h";
69my $thrdvar_h = "thrdvar.h";
70my $intrpvar_h = "intrpvar.h";
71my $perlvars_h = "perlvars.h";
72my $global_sym = "global.sym";
73my $pp_sym = "pp.sym";
74my $globvar_sym = "globvar.sym";
75my $perlio_sym = "perlio.sym";
d2b25974 76my $static_ext = "";
549a6b10 77
9df9a5cd 78if ($PLATFORM eq 'aix') {
549a6b10 79 # Nothing for now.
7766f137 80}
18f68570 81elsif ($PLATFORM =~ /^win(?:32|ce)$/ || $PLATFORM eq 'netware') {
549a6b10 82 $CCTYPE = "MSVC" unless defined $CCTYPE;
00b02797 83 foreach ($thrdvar_h, $intrpvar_h, $perlvars_h, $global_sym,
aadb217d 84 $pp_sym, $globvar_sym, $perlio_sym) {
549a6b10
JH
85 s!^!..\\!;
86 }
87}
084592ab
CN
88elsif ($PLATFORM eq 'MacOS') {
89 foreach ($thrdvar_h, $intrpvar_h, $perlvars_h, $global_sym,
aadb217d 90 $pp_sym, $globvar_sym, $perlio_sym) {
084592ab
CN
91 s!^!::!;
92 }
93}
549a6b10 94
18f68570 95unless ($PLATFORM eq 'win32' || $PLATFORM eq 'wince' || $PLATFORM eq 'MacOS' || $PLATFORM eq 'netware') {
549a6b10 96 open(CFG,$config_sh) || die "Cannot open $config_sh: $!\n";
7766f137 97 while (<CFG>) {
549a6b10
JH
98 if (/^(?:ccflags|optimize)='(.+)'$/) {
99 $_ = $1;
100 $define{$1} = 1 while /-D(\w+)/g;
101 }
aadb217d
JH
102 if (/^(d_(?:mmap|sigaction))='(.+)'$/) {
103 $define{$1} = $2;
104 }
3cfae81b 105 if ($PLATFORM eq 'os2') {
52e4c282
IZ
106 $CONFIG_ARGS = $1 if /^config_args='(.+)'$/;
107 $ARCHNAME = $1 if /^archname='(.+)'$/;
108 $PATCHLEVEL = $1 if /^perl_patchlevel='(.+)'$/;
3cfae81b 109 }
549a6b10
JH
110 }
111 close(CFG);
112}
d2b25974
VK
113if ($PLATFORM eq 'win32' || $PLATFORM eq 'wince') {
114 open(CFG,"<..\\$config_sh") || die "Cannot open ..\\$config_sh: $!\n";
115 if ((join '', <CFG>) =~ /^static_ext='(.*)'$/m) {
116 $static_ext = $1;
117 }
118 close(CFG);
119}
549a6b10
JH
120
121open(CFG,$config_h) || die "Cannot open $config_h: $!\n";
7766f137
GS
122while (<CFG>) {
123 $define{$1} = 1 if /^\s*#\s*define\s+(MYMALLOC)\b/;
7766f137 124 $define{$1} = 1 if /^\s*#\s*define\s+(MULTIPLICITY)\b/;
0e32cd81
JH
125 $define{$1} = 1 if /^\s*#\s*define\s+(PERL_\w+)\b/;
126 $define{$1} = 1 if /^\s*#\s*define\s+(USE_\w+)\b/;
7766f137 127}
bbc8f9de
NIS
128close(CFG);
129
18c4b137
JH
130# perl.h logic duplication begins
131
894ccb8c
JH
132if ($define{PERL_IMPLICIT_SYS}) {
133 $define{PL_OP_SLAB_ALLOC} = 1;
134}
ac6bedea 135
18c4b137 136if ($define{USE_ITHREADS}) {
acfe0abc 137 if (!$define{MULTIPLICITY}) {
18c4b137
JH
138 $define{MULTIPLICITY} = 1;
139 }
140}
141
142$define{PERL_IMPLICIT_CONTEXT} ||=
143 $define{USE_ITHREADS} ||
18c4b137
JH
144 $define{MULTIPLICITY} ;
145
10bc17b6
JH
146if ($define{USE_ITHREADS} && $PLATFORM ne 'win32' && $^O ne 'darwin') {
147 $define{USE_REENTRANT_API} = 1;
148}
149
18c4b137
JH
150# perl.h logic duplication ends
151
ac6bedea
JH
152my $sym_ord = 0;
153
dcddf0a3
SH
154print STDERR "Defines: (" . join(' ', sort keys %define) . ")\n";
155
18f68570 156if ($PLATFORM =~ /^win(?:32|ce)$/) {
78a7c709 157 ($dll = ($define{PERL_DLL} || "perl59")) =~ s/\.dll$//i;
18f68570 158 print "LIBRARY $dll\n";
dfdd1393
GS
159 print "DESCRIPTION 'Perl interpreter'\n";
160 print "EXPORTS\n";
161 if ($define{PERL_IMPLICIT_SYS}) {
549a6b10 162 output_symbol("perl_get_host_info");
7766f137 163 output_symbol("perl_alloc_override");
0295eab8 164 }
b54a2e1e 165 if ($define{USE_ITHREADS} and $define{PERL_IMPLICIT_SYS}) {
ac6bedea 166 output_symbol("perl_clone_host");
51371543 167 }
7766f137
GS
168}
169elsif ($PLATFORM eq 'os2') {
52e4c282
IZ
170 if (open my $fh, '<', 'perl5.def') {
171 while (<$fh>) {
172 last if /^\s*EXPORTS\b/;
173 }
174 while (<$fh>) {
78232bc0 175 $ordinal{$1} = $2 if /^\s*"(\w+)"\s*(?:=\s*"\w+"\s*)?\@(\d+)\s*$/;
52e4c282
IZ
176 # This allows skipping ordinals which were used in older versions
177 $sym_ord = $1 if /^\s*;\s*LAST_ORDINAL\s*=\s*(\d+)\s*$/;
178 }
179 $sym_ord < $_ and $sym_ord = $_ for values %ordinal; # Take the max
180 }
3cfae81b
IZ
181 ($v = $]) =~ s/(\d\.\d\d\d)(\d\d)$/$1_$2/;
182 $v .= '-thread' if $ARCHNAME =~ /-thread/;
3cfae81b 183 ($dll = $define{PERL_DLL}) =~ s/\.dll$//i;
52e4c282 184 $v .= "\@$PATCHLEVEL" if $PATCHLEVEL;
1102eebe
IZ
185 $d = "DESCRIPTION '\@#perl5-porters\@perl.org:$v#\@ Perl interpreter, configured as $CONFIG_ARGS'";
186 $d = substr($d, 0, 249) . "...'" if length $d > 253;
3cfae81b
IZ
187 print <<"---EOP---";
188LIBRARY '$dll' INITINSTANCE TERMINSTANCE
1102eebe 189$d
3cfae81b
IZ
190STACKSIZE 32768
191CODE LOADONCALL
192DATA LOADONCALL NONSHARED MULTIPLE
193EXPORTS
194---EOP---
7766f137
GS
195}
196elsif ($PLATFORM eq 'aix') {
61d42ce4
JH
197 $OSVER = `uname -v`;
198 chop $OSVER;
199 $OSREL = `uname -r`;
200 chop $OSREL;
201 if ($OSVER > 4 || ($OSVER == 4 && $OSREL >= 3)) {
202 print "#! ..\n";
203 } else {
204 print "#!\n";
205 }
ac4c12e7 206}
2986a63f
JH
207elsif ($PLATFORM eq 'netware') {
208 if ($FILETYPE eq 'def') {
78a7c709 209 print "LIBRARY perl59\n";
2986a63f
JH
210 print "DESCRIPTION 'Perl interpreter for NetWare'\n";
211 print "EXPORTS\n";
212 }
213 if ($define{PERL_IMPLICIT_SYS}) {
ac6bedea
JH
214 output_symbol("perl_get_host_info");
215 output_symbol("perl_alloc_override");
216 output_symbol("perl_clone_host");
2986a63f
JH
217 }
218}
bbc8f9de 219
22239a37
NIS
220my %skip;
221my %export;
222
51371543
GS
223sub skip_symbols {
224 my $list = shift;
225 foreach my $symbol (@$list) {
226 $skip{$symbol} = 1;
227 }
22239a37
NIS
228}
229
51371543
GS
230sub emit_symbols {
231 my $list = shift;
232 foreach my $symbol (@$list) {
233 my $skipsym = $symbol;
234 # XXX hack
acfe0abc 235 if ($define{MULTIPLICITY}) {
51371543
GS
236 $skipsym =~ s/^Perl_[GIT](\w+)_ptr$/PL_$1/;
237 }
238 emit_symbol($symbol) unless exists $skip{$skipsym};
239 }
22239a37
NIS
240}
241
549a6b10 242if ($PLATFORM eq 'win32') {
7766f137
GS
243 skip_symbols [qw(
244 PL_statusvalue_vms
245 PL_archpat_auto
246 PL_cryptseen
247 PL_DBcv
248 PL_generation
249 PL_lastgotoprobe
250 PL_linestart
251 PL_modcount
252 PL_pending_ident
7766f137
GS
253 PL_sublex_info
254 PL_timesbuf
255 main
256 Perl_ErrorNo
aadb217d 257 Perl_GetVars
7766f137
GS
258 Perl_do_exec3
259 Perl_do_ipcctl
260 Perl_do_ipcget
261 Perl_do_msgrcv
262 Perl_do_msgsnd
263 Perl_do_semop
264 Perl_do_shmio
265 Perl_dump_fds
266 Perl_init_thread_intern
267 Perl_my_bzero
9d50d399 268 Perl_my_bcopy
7766f137
GS
269 Perl_my_htonl
270 Perl_my_ntohl
271 Perl_my_swap
272 Perl_my_chsize
273 Perl_same_dirent
274 Perl_setenv_getix
275 Perl_unlnk
276 Perl_watch
277 Perl_safexcalloc
278 Perl_safexmalloc
279 Perl_safexfree
280 Perl_safexrealloc
281 Perl_my_memcmp
282 Perl_my_memset
283 PL_cshlen
284 PL_cshname
285 PL_opsave
286 Perl_do_exec
287 Perl_getenv_len
288 Perl_my_pclose
289 Perl_my_popen
290 )];
291}
54725af6
GS
292else {
293 skip_symbols [qw(
294 Perl_do_spawn
295 Perl_do_spawn_nowait
296 Perl_do_aspawn
297 )];
298}
299if ($PLATFORM eq 'wince') {
18f68570
VK
300 skip_symbols [qw(
301 PL_statusvalue_vms
302 PL_archpat_auto
303 PL_cryptseen
304 PL_DBcv
305 PL_generation
306 PL_lastgotoprobe
307 PL_linestart
308 PL_modcount
309 PL_pending_ident
18f68570
VK
310 PL_sublex_info
311 PL_timesbuf
312 PL_collation_ix
313 PL_collation_name
314 PL_collation_standard
315 PL_collxfrm_base
316 PL_collxfrm_mult
317 PL_numeric_compat1
318 PL_numeric_local
319 PL_numeric_name
320 PL_numeric_radix_sv
321 PL_numeric_standard
322 PL_vtbl_collxfrm
323 Perl_sv_collxfrm
324 setgid
325 setuid
18f68570
VK
326 win32_free_childdir
327 win32_free_childenv
328 win32_get_childdir
329 win32_get_childenv
330 win32_spawnvp
331 main
332 Perl_ErrorNo
aadb217d 333 Perl_GetVars
18f68570
VK
334 Perl_do_exec3
335 Perl_do_ipcctl
336 Perl_do_ipcget
337 Perl_do_msgrcv
338 Perl_do_msgsnd
339 Perl_do_semop
340 Perl_do_shmio
341 Perl_dump_fds
342 Perl_init_thread_intern
343 Perl_my_bzero
344 Perl_my_bcopy
345 Perl_my_htonl
346 Perl_my_ntohl
347 Perl_my_swap
348 Perl_my_chsize
349 Perl_same_dirent
350 Perl_setenv_getix
351 Perl_unlnk
352 Perl_watch
353 Perl_safexcalloc
354 Perl_safexmalloc
355 Perl_safexfree
356 Perl_safexrealloc
357 Perl_my_memcmp
358 Perl_my_memset
359 PL_cshlen
360 PL_cshname
361 PL_opsave
362 Perl_do_exec
363 Perl_getenv_len
364 Perl_my_pclose
365 Perl_my_popen
366 )];
367}
7766f137 368elsif ($PLATFORM eq 'aix') {
549a6b10 369 skip_symbols([qw(
7766f137
GS
370 Perl_dump_fds
371 Perl_ErrorNo
aadb217d 372 Perl_GetVars
7766f137
GS
373 Perl_my_bcopy
374 Perl_my_bzero
375 Perl_my_chsize
376 Perl_my_htonl
377 Perl_my_memcmp
378 Perl_my_memset
379 Perl_my_ntohl
380 Perl_my_swap
381 Perl_safexcalloc
382 Perl_safexfree
383 Perl_safexmalloc
384 Perl_safexrealloc
385 Perl_same_dirent
386 Perl_unlnk
6c644e78 387 Perl_sys_intern_clear
95151ede 388 Perl_sys_intern_dup
52853b95 389 Perl_sys_intern_init
7766f137
GS
390 PL_cryptseen
391 PL_opsave
392 PL_statusvalue_vms
393 PL_sys_intern
394 )]);
395}
396elsif ($PLATFORM eq 'os2') {
3cfae81b 397 emit_symbols([qw(
7766f137
GS
398 ctermid
399 get_sysinfo
400 Perl_OS2_init
764df951
IZ
401 Perl_OS2_init3
402 Perl_OS2_term
7766f137
GS
403 OS2_Perl_data
404 dlopen
405 dlsym
406 dlerror
403d6f8e 407 dlclose
59ad941d
IZ
408 dup2
409 dup
7766f137
GS
410 my_tmpfile
411 my_tmpnam
412 my_flock
9c130f5b
NIS
413 my_rmdir
414 my_mkdir
f72c975a
IZ
415 my_getpwuid
416 my_getpwnam
417 my_getpwent
418 my_setpwent
419 my_endpwent
622913ab
IZ
420 fork_with_resources
421 croak_with_os2error
f72c975a
IZ
422 setgrent
423 endgrent
424 getgrent
7766f137
GS
425 malloc_mutex
426 threads_mutex
427 nthreads
428 nthreads_cond
429 os2_cond_wait
430 os2_stat
1933e12c
IZ
431 os2_execname
432 async_mssleep
433 msCounter
434 InfoTable
7766f137
GS
435 pthread_join
436 pthread_create
437 pthread_detach
438 XS_Cwd_change_drive
439 XS_Cwd_current_drive
440 XS_Cwd_extLibpath
441 XS_Cwd_extLibpath_set
442 XS_Cwd_sys_abspath
443 XS_Cwd_sys_chdir
444 XS_Cwd_sys_cwd
445 XS_Cwd_sys_is_absolute
446 XS_Cwd_sys_is_relative
447 XS_Cwd_sys_is_rooted
448 XS_DynaLoader_mod2fname
449 XS_File__Copy_syscopy
450 Perl_Register_MQ
451 Perl_Deregister_MQ
452 Perl_Serve_Messages
453 Perl_Process_Messages
454 init_PMWIN_entries
455 PMWIN_entries
456 Perl_hab_GET
35bc1fdc
IZ
457 loadByOrdinal
458 pExtFCN
30500b05
IZ
459 os2error
460 ResetWinError
461 CroakWinError
5c728af0 462 PL_do_undump
7766f137 463 )]);
5c728af0
IZ
464 emit_symbols([qw(os2_cond_wait
465 pthread_join
466 pthread_create
467 pthread_detach
468 )])
469 if $define{'USE_5005THREADS'} or $define{'USE_ITHREADS'};
3cfae81b 470}
084592ab
CN
471elsif ($PLATFORM eq 'MacOS') {
472 skip_symbols [qw(
aadb217d 473 Perl_GetVars
084592ab
CN
474 PL_cryptseen
475 PL_cshlen
476 PL_cshname
477 PL_statusvalue_vms
478 PL_sys_intern
479 PL_opsave
480 PL_timesbuf
481 Perl_dump_fds
482 Perl_my_bcopy
483 Perl_my_bzero
484 Perl_my_chsize
485 Perl_my_htonl
486 Perl_my_memcmp
487 Perl_my_memset
488 Perl_my_ntohl
489 Perl_my_swap
490 Perl_safexcalloc
491 Perl_safexfree
492 Perl_safexmalloc
493 Perl_safexrealloc
494 Perl_unlnk
fe05f414
JH
495 Perl_sys_intern_clear
496 Perl_sys_intern_init
084592ab
CN
497 )];
498}
2986a63f
JH
499elsif ($PLATFORM eq 'netware') {
500 skip_symbols [qw(
501 PL_statusvalue_vms
502 PL_archpat_auto
503 PL_cryptseen
504 PL_DBcv
505 PL_generation
506 PL_lastgotoprobe
507 PL_linestart
508 PL_modcount
509 PL_pending_ident
2986a63f
JH
510 PL_sublex_info
511 PL_timesbuf
512 main
513 Perl_ErrorNo
aadb217d 514 Perl_GetVars
2986a63f
JH
515 Perl_do_exec3
516 Perl_do_ipcctl
517 Perl_do_ipcget
518 Perl_do_msgrcv
519 Perl_do_msgsnd
520 Perl_do_semop
521 Perl_do_shmio
522 Perl_dump_fds
523 Perl_init_thread_intern
524 Perl_my_bzero
525 Perl_my_htonl
526 Perl_my_ntohl
527 Perl_my_swap
528 Perl_my_chsize
529 Perl_same_dirent
530 Perl_setenv_getix
531 Perl_unlnk
532 Perl_watch
533 Perl_safexcalloc
534 Perl_safexmalloc
535 Perl_safexfree
536 Perl_safexrealloc
537 Perl_my_memcmp
538 Perl_my_memset
539 PL_cshlen
540 PL_cshname
541 PL_opsave
542 Perl_do_exec
543 Perl_getenv_len
544 Perl_my_pclose
545 Perl_my_popen
011f1a1a
JH
546 Perl_sys_intern_init
547 Perl_sys_intern_dup
548 Perl_sys_intern_clear
549 Perl_my_bcopy
550 Perl_PerlIO_write
551 Perl_PerlIO_unread
552 Perl_PerlIO_tell
553 Perl_PerlIO_stdout
554 Perl_PerlIO_stdin
555 Perl_PerlIO_stderr
556 Perl_PerlIO_setlinebuf
557 Perl_PerlIO_set_ptrcnt
558 Perl_PerlIO_set_cnt
559 Perl_PerlIO_seek
560 Perl_PerlIO_read
561 Perl_PerlIO_get_ptr
562 Perl_PerlIO_get_cnt
563 Perl_PerlIO_get_bufsiz
564 Perl_PerlIO_get_base
565 Perl_PerlIO_flush
566 Perl_PerlIO_fill
567 Perl_PerlIO_fileno
568 Perl_PerlIO_error
569 Perl_PerlIO_eof
570 Perl_PerlIO_close
571 Perl_PerlIO_clearerr
572 PerlIO_perlio
2986a63f
JH
573 )];
574}
3cfae81b 575
7766f137
GS
576unless ($define{'DEBUGGING'}) {
577 skip_symbols [qw(
7766f137
GS
578 Perl_deb_growlevel
579 Perl_debop
580 Perl_debprofdump
581 Perl_debstack
582 Perl_debstackptrs
7766f137
GS
583 Perl_sv_peek
584 PL_block_type
585 PL_watchaddr
586 PL_watchok
e0cde265 587 PL_watch_pvx
7766f137
GS
588 )];
589}
590
605881df
SH
591if ($define{'PERL_IMPLICIT_CONTEXT'}) {
592 skip_symbols [qw(
593 PL_sig_sv
594 )];
595}
596
7766f137
GS
597if ($define{'PERL_IMPLICIT_SYS'}) {
598 skip_symbols [qw(
599 Perl_getenv_len
600 Perl_my_popen
601 Perl_my_pclose
602 )];
603}
604else {
605 skip_symbols [qw(
606 PL_Mem
607 PL_MemShared
608 PL_MemParse
609 PL_Env
610 PL_StdIO
611 PL_LIO
612 PL_Dir
613 PL_Sock
614 PL_Proc
615 )];
616}
617
f8c7b90f 618unless ($define{'PERL_OLD_COPY_ON_WRITE'}) {
0190f6ec
AT
619 skip_symbols [qw(
620 Perl_sv_setsv_cow
2aa6a103 621 Perl_sv_release_IVX
0190f6ec
AT
622 )];
623}
624
5bcb3f6c
NIS
625unless ($define{'USE_REENTRANT_API'}) {
626 skip_symbols [qw(
627 PL_reentrant_buffer
628 )];
629}
630
7766f137
GS
631if ($define{'MYMALLOC'}) {
632 emit_symbols [qw(
633 Perl_dump_mstats
827e134a 634 Perl_get_mstats
9c130f5b
NIS
635 Perl_strdup
636 Perl_putenv
6af660ee
IZ
637 MallocCfg_ptr
638 MallocCfgP_ptr
7766f137 639 )];
3db8f154 640 if ($define{'USE_ITHREADS'}) {
1feb2720
GS
641 emit_symbols [qw(
642 PL_malloc_mutex
643 )];
644 }
80fc1a6e
GS
645 else {
646 skip_symbols [qw(
647 PL_malloc_mutex
648 )];
649 }
51371543
GS
650}
651else {
7766f137
GS
652 skip_symbols [qw(
653 PL_malloc_mutex
654 Perl_dump_mstats
6ecd3fcb 655 Perl_get_mstats
7766f137 656 Perl_malloced_size
6af660ee
IZ
657 MallocCfg_ptr
658 MallocCfgP_ptr
7766f137
GS
659 )];
660}
661
aadb217d 662unless ($define{'PERL_MALLOC_WRAP'}) {
e0cde265 663 skip_symbols [qw(
aadb217d 664 PL_memory_wrap
e0cde265
SH
665 )];
666}
667
8852afe9
MB
668if ($define{'PERL_USE_SAFE_PUTENV'}) {
669 skip_symbols [qw(
670 PL_use_safe_putenv
671 )];
672}
673
3db8f154 674unless ($define{'USE_ITHREADS'}) {
7766f137
GS
675 skip_symbols [qw(
676 PL_thr_key
f433d095
GS
677 )];
678}
679
3db8f154 680# USE_5005THREADS symbols. Kept as reference for easier removal
f433d095 681 skip_symbols [qw(
7766f137
GS
682 PL_sv_mutex
683 PL_strtab_mutex
684 PL_svref_mutex
7766f137
GS
685 PL_cred_mutex
686 PL_eval_mutex
6940069f
GS
687 PL_fdpid_mutex
688 PL_sv_lock_mutex
7766f137
GS
689 PL_eval_cond
690 PL_eval_owner
691 PL_threads_mutex
692 PL_nthreads
693 PL_nthreads_cond
694 PL_threadnum
695 PL_threadsv_names
696 PL_thrsv
697 PL_vtbl_mutex
7766f137
GS
698 Perl_condpair_magic
699 Perl_new_struct_thread
700 Perl_per_thread_magicals
701 Perl_thread_create
702 Perl_find_threadsv
703 Perl_unlock_condpair
704 Perl_magic_mutexfree
4755096e 705 Perl_sv_lock
7766f137 706 )];
7766f137
GS
707
708unless ($define{'USE_ITHREADS'}) {
709 skip_symbols [qw(
710 PL_ptr_table
6e72d904
NC
711 PL_pte_root
712 PL_pte_arenaroot
534825c4 713 PL_op_mutex
7e95b20d
JH
714 PL_regex_pad
715 PL_regex_padav
f2f7cecd
MB
716 PL_sharedsv_space
717 PL_sharedsv_space_mutex
e2975953 718 PL_dollarzero_mutex
7766f137
GS
719 Perl_dirp_dup
720 Perl_cx_dup
721 Perl_si_dup
722 Perl_any_dup
723 Perl_ss_dup
724 Perl_fp_dup
725 Perl_gp_dup
726 Perl_he_dup
727 Perl_mg_dup
728 Perl_re_dup
729 Perl_sv_dup
aeef2723 730 Perl_rvpv_dup
88daff13 731 Perl_hek_dup
7766f137 732 Perl_sys_intern_dup
86593e8d 733 Perl_ptr_table_clear
7766f137 734 Perl_ptr_table_fetch
86593e8d 735 Perl_ptr_table_free
7766f137 736 Perl_ptr_table_new
4ac9195f
MS
737 Perl_ptr_table_clear
738 Perl_ptr_table_free
7766f137
GS
739 Perl_ptr_table_split
740 Perl_ptr_table_store
741 perl_clone
742 perl_clone_using
038f0558
JH
743 Perl_sharedsv_find
744 Perl_sharedsv_init
745 Perl_sharedsv_lock
746 Perl_sharedsv_new
747 Perl_sharedsv_thrcnt_dec
748 Perl_sharedsv_thrcnt_inc
749 Perl_sharedsv_unlock
dc1061dc 750 Perl_stashpv_hvname_match
7766f137
GS
751 )];
752}
753
754unless ($define{'PERL_IMPLICIT_CONTEXT'}) {
755 skip_symbols [qw(
756 Perl_croak_nocontext
757 Perl_die_nocontext
758 Perl_deb_nocontext
759 Perl_form_nocontext
e0f4245d 760 Perl_load_module_nocontext
7766f137
GS
761 Perl_mess_nocontext
762 Perl_warn_nocontext
763 Perl_warner_nocontext
764 Perl_newSVpvf_nocontext
765 Perl_sv_catpvf_nocontext
766 Perl_sv_setpvf_nocontext
767 Perl_sv_catpvf_mg_nocontext
768 Perl_sv_setpvf_mg_nocontext
769 )];
770}
771
772unless ($define{'PERL_IMPLICIT_SYS'}) {
773 skip_symbols [qw(
774 perl_alloc_using
014822e4 775 perl_clone_using
7766f137
GS
776 )];
777}
778
779unless ($define{'FAKE_THREADS'}) {
780 skip_symbols [qw(PL_curthr)];
781}
782
aadb217d 783unless ($define{'PL_OP_SLAB_ALLOC'}) {
e0cde265 784 skip_symbols [qw(
aadb217d
JH
785 PL_OpPtr
786 PL_OpSlab
787 PL_OpSpace
788 Perl_Slab_Alloc
789 Perl_Slab_Free
790 )];
791}
792
793unless ($define{'THREADS_HAVE_PIDS'}) {
794 skip_symbols [qw(PL_ppid)];
e0cde265
SH
795}
796
aadb217d 797unless ($define{'PERL_NEED_APPCTX'}) {
e0cde265 798 skip_symbols [qw(
aadb217d 799 PL_appctx
e0cde265
SH
800 )];
801}
802
aadb217d 803unless ($define{'PERL_NEED_TIMESBASE'}) {
e0cde265 804 skip_symbols [qw(
aadb217d 805 PL_timesbase
e0cde265
SH
806 )];
807}
808
808e2276
NC
809unless ($define{'DEBUG_LEAKING_SCALARS_FORK_DUMP'}) {
810 skip_symbols [qw(
811 PL_dumper_fd
812 )];
813}
c69033f2
NC
814unless ($define{'PERL_DONT_CREATE_GVSV'}) {
815 skip_symbols [qw(
816 Perl_gv_SVadd
817 )];
818}
ce582cee
NC
819if ($define{'SPRINTF_RETURNS_STRLEN'}) {
820 skip_symbols [qw(
821 Perl_my_sprintf
822 )];
823}
ca0c25f6
NC
824unless ($define{'PERL_USES_PL_PIDSTATUS'}) {
825 skip_symbols [qw(
826 Perl_pidgone
827 PL_pidstatus
828 )];
829}
808e2276 830
aadb217d 831unless ($define{'d_mmap'}) {
ac6bedea 832 skip_symbols [qw(
aadb217d
JH
833 PL_mmap_page_size
834 )];
ac6bedea
JH
835}
836
aadb217d
JH
837if ($define{'d_sigaction'}) {
838 skip_symbols [qw(
839 PL_sig_trapped
840 )];
d97afc04
AT
841}
842
aadb217d
JH
843if ($^O ne 'vms') {
844 # VMS does its own thing for these symbols.
845 skip_symbols [qw(PL_sig_handlers_initted
846 PL_sig_ignoring
847 PL_sig_defaulting)];
848}
849
7766f137
GS
850sub readvar {
851 my $file = shift;
852 my $proc = shift || sub { "PL_$_[2]" };
853 open(VARS,$file) || die "Cannot open $file: $!\n";
854 my @syms;
855 while (<VARS>) {
856 # All symbols have a Perl_ prefix because that's what embed.h
aadb217d
JH
857 # sticks in front of them. The A?I?S?C? is strictly speaking
858 # wrong.
313fe300 859 push(@syms, &$proc($1,$2,$3)) if (/\bPERLVAR(A?I?S?C?)\(([IGT])(\w+)/);
9df9a5cd
NIS
860 }
861 close(VARS);
7766f137
GS
862 return \@syms;
863}
864
7766f137
GS
865if ($define{'PERL_GLOBAL_STRUCT'}) {
866 my $global = readvar($perlvars_h);
867 skip_symbols $global;
868 emit_symbol('Perl_GetVars');
869 emit_symbols [qw(PL_Vars PL_VarsPtr)] unless $CCTYPE eq 'GCC';
aadb217d
JH
870} else {
871 skip_symbols [qw(Perl_init_global_struct Perl_free_global_struct)];
7766f137 872}
36c15d3f 873
22c35a8c
GS
874# functions from *.sym files
875
954c1994 876my @syms = ($global_sym, $globvar_sym); # $pp_sym is not part of the API
549a6b10 877
d892637e
NIS
878# Symbols that are the public face of the PerlIO layers implementation
879# These are in _addition to_ the public face of the abstraction
880# and need to be exported to allow XS modules to implement layers
9df9a5cd 881my @layer_syms = qw(
db76e01e
JH
882 PerlIOBase_binmode
883 PerlIOBase_clearerr
884 PerlIOBase_close
885 PerlIOBase_dup
886 PerlIOBase_eof
887 PerlIOBase_error
888 PerlIOBase_fileno
889 PerlIOBase_noop_fail
890 PerlIOBase_noop_ok
891 PerlIOBase_popped
7e700b9a 892 PerlIOBase_pushed
db76e01e
JH
893 PerlIOBase_read
894 PerlIOBase_setlinebuf
895 PerlIOBase_unread
896 PerlIOBuf_bufsiz
897 PerlIOBuf_close
898 PerlIOBuf_dup
899 PerlIOBuf_fill
900 PerlIOBuf_flush
901 PerlIOBuf_get_base
902 PerlIOBuf_get_cnt
903 PerlIOBuf_get_ptr
904 PerlIOBuf_open
905 PerlIOBuf_popped
906 PerlIOBuf_pushed
907 PerlIOBuf_read
908 PerlIOBuf_seek
909 PerlIOBuf_set_ptrcnt
910 PerlIOBuf_tell
911 PerlIOBuf_unread
912 PerlIOBuf_write
913 PerlIO_allocate
8ffeedc3 914 PerlIO_apply_layera
db76e01e
JH
915 PerlIO_apply_layers
916 PerlIO_arg_fetch
917 PerlIO_debug
918 PerlIO_define_layer
51d05609 919 PerlIO_isutf8
db76e01e
JH
920 PerlIO_layer_fetch
921 PerlIO_list_free
922 PerlIO_modestr
923 PerlIO_parse_layers
924 PerlIO_pending
925 PerlIO_perlio
926 PerlIO_pop
927 PerlIO_push
928 PerlIO_sv_dup
929 Perl_PerlIO_clearerr
930 Perl_PerlIO_close
931 Perl_PerlIO_eof
932 Perl_PerlIO_error
933 Perl_PerlIO_fileno
934 Perl_PerlIO_fill
935 Perl_PerlIO_flush
936 Perl_PerlIO_get_base
937 Perl_PerlIO_get_bufsiz
938 Perl_PerlIO_get_cnt
939 Perl_PerlIO_get_ptr
940 Perl_PerlIO_read
941 Perl_PerlIO_seek
942 Perl_PerlIO_set_cnt
943 Perl_PerlIO_set_ptrcnt
944 Perl_PerlIO_setlinebuf
945 Perl_PerlIO_stderr
946 Perl_PerlIO_stdin
947 Perl_PerlIO_stdout
948 Perl_PerlIO_tell
949 Perl_PerlIO_unread
950 Perl_PerlIO_write
9df9a5cd 951);
a5564b91
JH
952if ($PLATFORM eq 'netware') {
953 push(@layer_syms,'PL_def_layerlist','PL_known_layers','PL_perlio');
954}
d892637e 955
7766f137 956if ($define{'USE_PERLIO'}) {
d892637e
NIS
957 # Export the symols that make up the PerlIO abstraction, regardless
958 # of its implementation - read from a file
084592ab 959 push @syms, $perlio_sym;
d892637e
NIS
960
961 # This part is then dependent on how the abstraction is implemented
084592ab 962 if ($define{'USE_SFIO'}) {
d892637e 963 # Old legacy non-stdio "PerlIO"
9df9a5cd 964 skip_symbols \@layer_syms;
954fb84e 965 skip_symbols [qw(perlsio_binmode)];
084592ab 966 # SFIO defines most of the PerlIO routines as macros
d892637e
NIS
967 # So undo most of what $perlio_sym has just done - d'oh !
968 # Perhaps it would be better to list the ones which do exist
969 # And emit them
084592ab
CN
970 skip_symbols [qw(
971 PerlIO_canset_cnt
972 PerlIO_clearerr
973 PerlIO_close
974 PerlIO_eof
975 PerlIO_error
976 PerlIO_exportFILE
977 PerlIO_fast_gets
978 PerlIO_fdopen
979 PerlIO_fileno
980 PerlIO_findFILE
981 PerlIO_flush
982 PerlIO_get_base
983 PerlIO_get_bufsiz
984 PerlIO_get_cnt
985 PerlIO_get_ptr
986 PerlIO_getc
987 PerlIO_getname
988 PerlIO_has_base
989 PerlIO_has_cntptr
990 PerlIO_importFILE
991 PerlIO_open
992 PerlIO_printf
993 PerlIO_putc
994 PerlIO_puts
995 PerlIO_read
996 PerlIO_releaseFILE
997 PerlIO_reopen
998 PerlIO_rewind
999 PerlIO_seek
1000 PerlIO_set_cnt
1001 PerlIO_set_ptrcnt
1002 PerlIO_setlinebuf
1003 PerlIO_sprintf
1004 PerlIO_stderr
1005 PerlIO_stdin
1006 PerlIO_stdout
1007 PerlIO_stdoutf
1008 PerlIO_tell
1009 PerlIO_ungetc
1010 PerlIO_vprintf
1011 PerlIO_write
bcdb689b
JH
1012 PerlIO_perlio
1013 Perl_PerlIO_clearerr
1014 Perl_PerlIO_close
1015 Perl_PerlIO_eof
1016 Perl_PerlIO_error
1017 Perl_PerlIO_fileno
1018 Perl_PerlIO_fill
1019 Perl_PerlIO_flush
1020 Perl_PerlIO_get_base
1021 Perl_PerlIO_get_bufsiz
1022 Perl_PerlIO_get_cnt
1023 Perl_PerlIO_get_ptr
1024 Perl_PerlIO_read
1025 Perl_PerlIO_seek
1026 Perl_PerlIO_set_cnt
1027 Perl_PerlIO_set_ptrcnt
1028 Perl_PerlIO_setlinebuf
1029 Perl_PerlIO_stderr
1030 Perl_PerlIO_stdin
1031 Perl_PerlIO_stdout
1032 Perl_PerlIO_tell
1033 Perl_PerlIO_unread
1034 Perl_PerlIO_write
ffcf5686
JH
1035 PL_def_layerlist
1036 PL_known_layers
1037 PL_perlio
084592ab
CN
1038 )];
1039 }
d892637e
NIS
1040 else {
1041 # PerlIO with layers - export implementation
1042 emit_symbols \@layer_syms;
954fb84e 1043 emit_symbols [qw(perlsio_binmode)];
d892637e 1044 }
5138f914 1045} else {
d892637e
NIS
1046 # -Uuseperlio
1047 # Skip the PerlIO layer symbols - although
aadb217d 1048 # nothing should have exported them anyway.
9df9a5cd 1049 skip_symbols \@layer_syms;
954fb84e 1050 skip_symbols [qw(perlsio_binmode)];
1e8a8f59
NIS
1051 skip_symbols [qw(PL_def_layerlist PL_known_layers PL_perlio)];
1052
d892637e
NIS
1053 # Also do NOT add abstraction symbols from $perlio_sym
1054 # abstraction is done as #define to stdio
1055 # Remaining remnants that _may_ be functions
1056 # are handled in <DATA>
9df9a5cd 1057}
7766f137
GS
1058
1059for my $syms (@syms) {
1060 open (GLOBAL, "<$syms") || die "failed to open $syms: $!\n";
1061 while (<GLOBAL>) {
1062 next if (!/^[A-Za-z]/);
1063 # Functions have a Perl_ prefix
1064 # Variables have a PL_ prefix
1065 chomp($_);
1066 my $symbol = ($syms =~ /var\.sym$/i ? "PL_" : "");
1067 $symbol .= $_;
1068 emit_symbol($symbol) unless exists $skip{$symbol};
1069 }
1070 close(GLOBAL);
1071}
0a753a76 1072
22c35a8c 1073# variables
0a753a76 1074
acfe0abc 1075if ($define{'MULTIPLICITY'}) {
1acb48c9 1076 for my $f ($perlvars_h, $intrpvar_h, $thrdvar_h) {
18c4b137
JH
1077 my $glob = readvar($f, sub { "Perl_" . $_[1] . $_[2] . "_ptr" });
1078 emit_symbols $glob;
18c4b137 1079 }
1acb48c9 1080 # XXX AIX seems to want the perlvars.h symbols, for some reason
5c728af0 1081 if ($PLATFORM eq 'aix' or $PLATFORM eq 'os2') { # OS/2 needs PL_thr_key
1acb48c9 1082 my $glob = readvar($perlvars_h);
51371543
GS
1083 emit_symbols $glob;
1084 }
1085}
1086else {
1087 unless ($define{'PERL_GLOBAL_STRUCT'}) {
549a6b10 1088 my $glob = readvar($perlvars_h);
51371543 1089 emit_symbols $glob;
9df9a5cd 1090 }
51371543 1091 unless ($define{'MULTIPLICITY'}) {
549a6b10 1092 my $glob = readvar($intrpvar_h);
51371543 1093 emit_symbols $glob;
9df9a5cd 1094 }
3db8f154 1095 unless ($define{'MULTIPLICITY'}) {
549a6b10 1096 my $glob = readvar($thrdvar_h);
51371543 1097 emit_symbols $glob;
9df9a5cd 1098 }
51371543 1099}
0a753a76 1100
549a6b10
JH
1101sub try_symbol {
1102 my $symbol = shift;
22239a37 1103
4d6b4052 1104 return if $symbol !~ /^[A-Za-z_]/;
549a6b10
JH
1105 return if $symbol =~ /^\#/;
1106 $symbol =~s/\r//g;
1107 chomp($symbol);
43cd9f80 1108 return if exists $skip{$symbol};
549a6b10 1109 emit_symbol($symbol);
3e3baf6d 1110}
0a753a76 1111
549a6b10
JH
1112while (<DATA>) {
1113 try_symbol($_);
ac4c12e7
GS
1114}
1115
18f68570 1116if ($PLATFORM =~ /^win(?:32|ce)$/) {
549a6b10 1117 foreach my $symbol (qw(
00b02797
JH
1118 setuid
1119 setgid
7766f137 1120 boot_DynaLoader
7766f137 1121 Perl_init_os_extras
c44d3fdb 1122 Perl_thread_create
7766f137 1123 Perl_win32_init
23f519f0 1124 Perl_win32_term
7766f137 1125 RunPerl
5290524f 1126 win32_async_check
7766f137
GS
1127 win32_errno
1128 win32_environ
7766f137
GS
1129 win32_abort
1130 win32_fstat
1131 win32_stat
1132 win32_pipe
1133 win32_popen
1134 win32_pclose
1135 win32_rename
1136 win32_setmode
11bb82ff 1137 win32_chsize
7766f137
GS
1138 win32_lseek
1139 win32_tell
1140 win32_dup
1141 win32_dup2
1142 win32_open
1143 win32_close
1144 win32_eof
1145 win32_read
1146 win32_write
1147 win32_spawnvp
1148 win32_mkdir
1149 win32_rmdir
1150 win32_chdir
1151 win32_flock
1152 win32_execv
1153 win32_execvp
1154 win32_htons
1155 win32_ntohs
1156 win32_htonl
1157 win32_ntohl
1158 win32_inet_addr
1159 win32_inet_ntoa
1160 win32_socket
1161 win32_bind
1162 win32_listen
1163 win32_accept
1164 win32_connect
1165 win32_send
1166 win32_sendto
1167 win32_recv
1168 win32_recvfrom
1169 win32_shutdown
1170 win32_closesocket
1171 win32_ioctlsocket
1172 win32_setsockopt
1173 win32_getsockopt
1174 win32_getpeername
1175 win32_getsockname
1176 win32_gethostname
1177 win32_gethostbyname
1178 win32_gethostbyaddr
1179 win32_getprotobyname
1180 win32_getprotobynumber
1181 win32_getservbyname
1182 win32_getservbyport
1183 win32_select
1184 win32_endhostent
1185 win32_endnetent
1186 win32_endprotoent
1187 win32_endservent
1188 win32_getnetent
1189 win32_getnetbyname
1190 win32_getnetbyaddr
1191 win32_getprotoent
1192 win32_getservent
1193 win32_sethostent
1194 win32_setnetent
1195 win32_setprotoent
1196 win32_setservent
1197 win32_getenv
1198 win32_putenv
1199 win32_perror
7766f137
GS
1200 win32_malloc
1201 win32_calloc
1202 win32_realloc
1203 win32_free
1204 win32_sleep
1205 win32_times
1206 win32_access
1207 win32_alarm
1208 win32_chmod
1209 win32_open_osfhandle
1210 win32_get_osfhandle
1211 win32_ioctl
1212 win32_link
1213 win32_unlink
1214 win32_utime
57ab3dfe 1215 win32_gettimeofday
7766f137
GS
1216 win32_uname
1217 win32_wait
1218 win32_waitpid
1219 win32_kill
1220 win32_str_os_error
1221 win32_opendir
1222 win32_readdir
1223 win32_telldir
1224 win32_seekdir
1225 win32_rewinddir
1226 win32_closedir
1227 win32_longpath
1228 win32_os_id
1229 win32_getpid
1230 win32_crypt
1231 win32_dynaload
df3728a2
JH
1232 win32_get_childenv
1233 win32_free_childenv
1234 win32_clearenv
1235 win32_get_childdir
1236 win32_free_childdir
00b02797
JH
1237 win32_stdin
1238 win32_stdout
1239 win32_stderr
1240 win32_ferror
1241 win32_feof
1242 win32_strerror
1243 win32_fprintf
1244 win32_printf
1245 win32_vfprintf
1246 win32_vprintf
1247 win32_fread
1248 win32_fwrite
1249 win32_fopen
1250 win32_fdopen
1251 win32_freopen
1252 win32_fclose
1253 win32_fputs
1254 win32_fputc
1255 win32_ungetc
1256 win32_getc
1257 win32_fileno
1258 win32_clearerr
1259 win32_fflush
1260 win32_ftell
1261 win32_fseek
1262 win32_fgetpos
1263 win32_fsetpos
1264 win32_rewind
1265 win32_tmpfile
1266 win32_setbuf
1267 win32_setvbuf
1268 win32_flushall
1269 win32_fcloseall
1270 win32_fgets
1271 win32_gets
1272 win32_fgetc
1273 win32_putc
1274 win32_puts
1275 win32_getchar
1276 win32_putchar
7766f137
GS
1277 ))
1278 {
549a6b10
JH
1279 try_symbol($symbol);
1280 }
3a00b83e
SH
1281 if ($CCTYPE eq "BORLAND") {
1282 try_symbol('_matherr');
1283 }
549a6b10 1284}
3cfae81b 1285elsif ($PLATFORM eq 'os2') {
7766f137
GS
1286 open MAP, 'miniperl.map' or die 'Cannot read miniperl.map';
1287 /^\s*[\da-f:]+\s+(\w+)/i and $mapped{$1}++ foreach <MAP>;
1288 close MAP or die 'Cannot close miniperl.map';
1289
ad6971c8 1290 @missing = grep { !exists $mapped{$_} }
7766f137 1291 keys %export;
c6261f3b 1292 @missing = grep { !exists $exportperlmalloc{$_} } @missing;
7766f137 1293 delete $export{$_} foreach @missing;
3cfae81b 1294}
084592ab
CN
1295elsif ($PLATFORM eq 'MacOS') {
1296 open MACSYMS, 'macperl.sym' or die 'Cannot read macperl.sym';
1297
1298 while (<MACSYMS>) {
1299 try_symbol($_);
1300 }
1301
1302 close MACSYMS;
1303}
2986a63f
JH
1304elsif ($PLATFORM eq 'netware') {
1305foreach my $symbol (qw(
1306 boot_DynaLoader
1307 Perl_init_os_extras
1308 Perl_thread_create
1309 Perl_nw5_init
1310 RunPerl
1311 AllocStdPerl
1312 FreeStdPerl
1313 do_spawn2
1314 do_aspawn
1315 nw_uname
1316 nw_stdin
1317 nw_stdout
1318 nw_stderr
1319 nw_feof
1320 nw_ferror
1321 nw_fopen
1322 nw_fclose
1323 nw_clearerr
1324 nw_getc
1325 nw_fgets
1326 nw_fputc
1327 nw_fputs
1328 nw_fflush
1329 nw_ungetc
1330 nw_fileno
1331 nw_fdopen
1332 nw_freopen
1333 nw_fread
1334 nw_fwrite
1335 nw_setbuf
1336 nw_setvbuf
1337 nw_vfprintf
1338 nw_ftell
1339 nw_fseek
1340 nw_rewind
1341 nw_tmpfile
1342 nw_fgetpos
1343 nw_fsetpos
1344 nw_dup
1345 nw_access
1346 nw_chmod
1347 nw_chsize
1348 nw_close
1349 nw_dup2
1350 nw_flock
1351 nw_isatty
1352 nw_link
1353 nw_lseek
1354 nw_stat
1355 nw_mktemp
1356 nw_open
1357 nw_read
1358 nw_rename
1359 nw_setmode
1360 nw_unlink
1361 nw_utime
1362 nw_write
1363 nw_chdir
1364 nw_rmdir
1365 nw_closedir
1366 nw_opendir
1367 nw_readdir
1368 nw_rewinddir
1369 nw_seekdir
1370 nw_telldir
1371 nw_htonl
1372 nw_htons
1373 nw_ntohl
1374 nw_ntohs
1375 nw_accept
1376 nw_bind
1377 nw_connect
1378 nw_endhostent
1379 nw_endnetent
1380 nw_endprotoent
1381 nw_endservent
1382 nw_gethostbyaddr
1383 nw_gethostbyname
1384 nw_gethostent
1385 nw_gethostname
1386 nw_getnetbyaddr
1387 nw_getnetbyname
1388 nw_getnetent
1389 nw_getpeername
1390 nw_getprotobyname
1391 nw_getprotobynumber
1392 nw_getprotoent
1393 nw_getservbyname
1394 nw_getservbyport
1395 nw_getservent
1396 nw_getsockname
1397 nw_getsockopt
1398 nw_inet_addr
1399 nw_listen
1400 nw_socket
1401 nw_recv
1402 nw_recvfrom
1403 nw_select
1404 nw_send
1405 nw_sendto
1406 nw_sethostent
1407 nw_setnetent
1408 nw_setprotoent
1409 nw_setservent
3a0827a6 1410 nw_setsockopt
4d76e4b4 1411 nw_inet_ntoa
2986a63f
JH
1412 nw_shutdown
1413 nw_crypt
1414 nw_execvp
1415 nw_kill
1416 nw_Popen
1417 nw_Pclose
1418 nw_Pipe
1419 nw_times
1420 nw_waitpid
1421 nw_getpid
1422 nw_spawnvp
1423 nw_os_id
1424 nw_open_osfhandle
1425 nw_get_osfhandle
1426 nw_abort
1427 nw_sleep
1428 nw_wait
1429 nw_dynaload
1430 nw_strerror
1431 fnFpSetMode
1432 fnInsertHashListAddrs
1433 fnGetHashListAddrs
1434 Perl_deb
011f1a1a
JH
1435 Perl_sv_setsv
1436 Perl_sv_catsv
1437 Perl_sv_catpvn
1438 Perl_sv_2pv
f355267c
JH
1439 nw_freeenviron
1440 Remove_Thread_Ctx
2986a63f
JH
1441 ))
1442 {
1443 try_symbol($symbol);
1444 }
1445}
22239a37 1446
d2b25974
VK
1447# records of type boot_module for statically linked modules (except Dynaloader)
1448$static_ext =~ s/\//__/g;
1449$static_ext =~ s/\bDynaLoader\b//;
1450my @stat_mods = map {"boot_$_"} grep {/\S/} split /\s+/, $static_ext;
1451foreach my $symbol (@stat_mods)
1452 {
1453 try_symbol($symbol);
1454 }
1455
549a6b10
JH
1456# Now all symbols should be defined because
1457# next we are going to output them.
1458
7766f137
GS
1459foreach my $symbol (sort keys %export) {
1460 output_symbol($symbol);
1461}
549a6b10 1462
011f1a1a 1463if ($PLATFORM eq 'os2') {
59ad941d
IZ
1464 print <<EOP;
1465 dll_perlmain=main
1933e12c
IZ
1466 fill_extLibpath
1467 dir_subst
1468 Perl_OS2_handler_install
1469
59ad941d
IZ
1470; LAST_ORDINAL=$sym_ord
1471EOP
2986a63f
JH
1472}
1473
549a6b10 1474sub emit_symbol {
7766f137 1475 my $symbol = shift;
9df9a5cd 1476 chomp($symbol);
7766f137 1477 $export{$symbol} = 1;
549a6b10
JH
1478}
1479
1480sub output_symbol {
1481 my $symbol = shift;
18f68570 1482 if ($PLATFORM =~ /^win(?:32|ce)$/) {
549a6b10 1483 $symbol = "_$symbol" if $CCTYPE eq 'BORLAND';
520c758a 1484 print "\t$symbol\n";
549a6b10
JH
1485# XXX: binary compatibility between compilers is an exercise
1486# in frustration :-(
1487# if ($CCTYPE eq "BORLAND") {
1488# # workaround Borland quirk by exporting both the straight
1489# # name and a name with leading underscore. Note the
1490# # alias *must* come after the symbol itself, if both
1491# # are to be exported. (Linker bug?)
1492# print "\t_$symbol\n";
1493# print "\t$symbol = _$symbol\n";
1494# }
1495# elsif ($CCTYPE eq 'GCC') {
1496# # Symbols have leading _ whole process is $%@"% slow
1497# # so skip aliases for now
1498# nprint "\t$symbol\n";
1499# }
1500# else {
1501# # for binary coexistence, export both the symbol and
1502# # alias with leading underscore
1503# print "\t$symbol\n";
1504# print "\t_$symbol = $symbol\n";
1505# }
7766f137
GS
1506 }
1507 elsif ($PLATFORM eq 'os2') {
52e4c282
IZ
1508 printf qq( %-31s \@%s\n),
1509 qq("$symbol"), $ordinal{$symbol} || ++$sym_ord;
78232bc0
JH
1510 printf qq( %-31s \@%s\n),
1511 qq("$exportperlmalloc{$symbol}" = "$symbol"),
1512 $ordinal{$exportperlmalloc{$symbol}} || ++$sym_ord
1513 if $exportperlmalloc and exists $exportperlmalloc{$symbol};
7766f137 1514 }
084592ab 1515 elsif ($PLATFORM eq 'aix' || $PLATFORM eq 'MacOS') {
549a6b10
JH
1516 print "$symbol\n";
1517 }
2986a63f
JH
1518 elsif ($PLATFORM eq 'netware') {
1519 print "\t$symbol,\n";
1520 }
549a6b10
JH
1521}
1522
15231;
1524__DATA__
1525# extra globals not included above.
8437356b 1526Perl_cxinc
549a6b10 1527perl_alloc
7766f137 1528perl_alloc_using
014822e4
GS
1529perl_clone
1530perl_clone_using
549a6b10
JH
1531perl_construct
1532perl_destruct
1533perl_free
1534perl_parse
1535perl_run
44798d05 1536# Oddities from PerlIO
568ad336 1537PerlIO_binmode
8437356b 1538PerlIO_getpos
568ad336 1539PerlIO_init
568ad336 1540PerlIO_setpos
568ad336 1541PerlIO_sprintf
8437356b
MB
1542PerlIO_sv_dup
1543PerlIO_tmpfile
8437356b 1544PerlIO_vsprintf