This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[asperl] various changes to get asperl working under Borland
[perl5.git] / win32 / makedef.pl
CommitLineData
0a753a76 1#!../miniperl
2
3# Written: 10 April 1996 Gary Ng (71564.1743@compuserve.com)
4
5# Create the export list for perl.
6# Needed by WIN32 for creating perl.dll
7# based on perl_exp.SH in the main perl distribution directory
8
9# This simple program relys on 'global.sym' being up to date
10# with all of the global symbols that a dynamicly link library
11# might want to access.
12
13# There is some symbol defined in global.sym and interp.sym
14# that does not present in the WIN32 port but there is no easy
84902520 15# way to find them so I just put a exception list here
0a753a76 16
910dfcc8
GS
17my $CCTYPE = "MSVC"; # default
18
19while (@ARGV)
d55594ae
GS
20 {
21 my $flag = shift;
22 $define{$1} = 1 if ($flag =~ /^-D(\w+)$/);
910dfcc8 23 $CCTYPE = $1 if ($flag =~ /^CCTYPE=(\w+)$/);
d55594ae
GS
24 }
25
bbc8f9de
NIS
26open(CFG,'config.h') || die "Cannot open config.h:$!";
27while (<CFG>)
28 {
29 $define{$1} = 1 if /^\s*#\s*define\s+(MYMALLOC)\b/;
924b3ec4 30 $define{$1} = 1 if /^\s*#\s*define\s+(USE_THREADS)\b/;
bbc8f9de
NIS
31 }
32close(CFG);
33
d55594ae
GS
34warn join(' ',keys %define)."\n";
35
ac4c12e7
GS
36if ($define{PERL_OBJECT}) {
37 print "LIBRARY PerlCore\n";
38 print "DESCRIPTION 'Perl interpreter'\n";
39 print "EXPORTS\n";
40 output_symbol("perl_alloc");
41 exit(0);
42}
43
04dc04aa
NIS
44if ($CCTYPE ne 'GCC')
45 {
46 print "LIBRARY Perl\n";
47 print "DESCRIPTION 'Perl interpreter, export autogenerated'\n";
48 print "CODE LOADONCALL\n";
49 print "DATA LOADONCALL NONSHARED MULTIPLE\n";
50 }
22239a37
NIS
51else
52 {
53 $define{'PERL_GLOBAL_STRUCT'} = 1;
54 $define{'MULTIPLICITY'} = 1;
55 }
56
bbc8f9de
NIS
57print "EXPORTS\n";
58
22239a37
NIS
59my %skip;
60my %export;
61
62sub skip_symbols
63{
64 my $list = shift;
65 foreach my $symbol (@$list)
66 {
67 $skip{$symbol} = 1;
68 }
69}
70
71sub emit_symbols
72{
73 my $list = shift;
74 foreach my $symbol (@$list)
75 {
76 emit_symbol($symbol) unless exists $skip{$symbol};
77 }
78}
79
80skip_symbols [qw(
81Perl_statusvalue_vms
9d8a25dc 82Perl_archpat_auto
0a753a76 83Perl_block_type
9d8a25dc 84Perl_bostr
0a753a76 85Perl_additem
86Perl_cast_ulong
87Perl_check_uni
88Perl_checkcomma
89Perl_chsize
90Perl_ck_aelem
9d8a25dc
DL
91Perl_colors
92Perl_colorset
0a753a76 93Perl_cryptseen
94Perl_cx_dump
9d8a25dc 95Perl_DBcv
0a753a76 96Perl_do_ipcctl
97Perl_do_ipcget
98Perl_do_msgrcv
99Perl_do_msgsnd
100Perl_do_semop
101Perl_do_shmio
102Perl_doeval
103Perl_dofindlabel
104Perl_dopoptoeval
105Perl_dump_eval
106Perl_dump_fds
107Perl_dump_form
108Perl_dump_gv
109Perl_dump_mstats
110Perl_dump_op
111Perl_dump_packsubs
112Perl_dump_pm
113Perl_dump_sub
114Perl_expectterm
76e3520e 115Perl_error_no
9d8a25dc 116Perl_extralen
0a753a76 117Perl_fetch_gv
118Perl_fetch_io
119Perl_force_ident
120Perl_force_next
121Perl_force_word
9d8a25dc 122Perl_generation
0a753a76 123Perl_hv_stashpv
9d8a25dc
DL
124Perl_in_clean_all
125Perl_in_clean_objs
0a753a76 126Perl_intuit_more
d55594ae 127Perl_init_thread_intern
0a753a76 128Perl_know_next
9d8a25dc
DL
129Perl_lastgotoprobe
130Perl_linestart
131Perl_modcount
0a753a76 132Perl_modkids
133Perl_mstats
134Perl_my_bzero
135Perl_my_htonl
136Perl_my_ntohl
137Perl_my_swap
138Perl_my_chsize
139Perl_newXSUB
140Perl_no_fh_allowed
141Perl_no_op
142Perl_nointrp
143Perl_nomem
9d8a25dc 144Perl_pending_ident
0a753a76 145Perl_pp_cswitch
146Perl_pp_entersubr
147Perl_pp_evalonce
148Perl_pp_interp
149Perl_pp_map
150Perl_pp_nswitch
151Perl_q
d55594ae 152Perl_rcsid
0a753a76 153Perl_reall_srchlen
9d8a25dc
DL
154Perl_reg_eval_set
155Perl_reg_flags
156Perl_reg_start_tmp
157Perl_reg_start_tmpl
158Perl_regbol
159Perl_regcc
160Perl_regcode
161Perl_regdata
162Perl_regdummy
0a753a76 163Perl_regdump
164Perl_regfold
9d8a25dc
DL
165Perl_regendp
166Perl_regeol
167Perl_regflags
168Perl_regindent
169Perl_reginput
170Perl_reglastparen
0a753a76 171Perl_regmyendp
172Perl_regmyp_size
173Perl_regmystartp
174Perl_regnarrate
9d8a25dc
DL
175Perl_regnaughty
176Perl_regnpar
177Perl_regparse
178Perl_regprecomp
179Perl_regprev
180Perl_regprogram
0a753a76 181Perl_regprop
9d8a25dc
DL
182Perl_regsawback
183Perl_regseen
184Perl_regsize
185Perl_regstartp
186Perl_regtill
187Perl_regxend
188Perl_rx
0a753a76 189Perl_same_dirent
190Perl_saw_return
191Perl_scan_const
192Perl_scan_formline
193Perl_scan_heredoc
194Perl_scan_ident
195Perl_scan_inputsymbol
196Perl_scan_pat
197Perl_scan_prefix
198Perl_scan_str
199Perl_scan_subst
200Perl_scan_trans
201Perl_scan_word
9d8a25dc 202Perl_seen_zerolen
68dc0745 203Perl_setenv_getix
0a753a76 204Perl_skipspace
76e3520e 205Perl_sort_mutex
9d8a25dc 206Perl_sortcxix
0a753a76 207Perl_sublex_done
9d8a25dc 208Perl_sublex_info
0a753a76 209Perl_sublex_start
0a753a76 210Perl_sv_ref
211Perl_sv_setptrobj
212Perl_timesbuf
213Perl_too_few_arguments
214Perl_too_many_arguments
215Perl_unlnk
0a753a76 216Perl_watch
217Perl_yyname
218Perl_yyrule
219allgvs
220curblock
0a753a76 221curcsv
0a753a76 222lastretstr
223mystack_mark
224perl_init_ext
225perl_requirepv
0a753a76 226stack
ff0cee69 227statusvalue_vms
0a753a76 228Perl_safexcalloc
229Perl_safexmalloc
230Perl_safexfree
231Perl_safexrealloc
68dc0745 232Perl_my_memcmp
8b10511d 233Perl_my_memset
68dc0745 234Perl_cshlen
235Perl_cshname
0da3735a 236Perl_opsave
22239a37 237)];
0a753a76 238
c69f112c 239
bbc8f9de
NIS
240if ($define{'MYMALLOC'})
241 {
22239a37
NIS
242 skip_symbols [qw(
243 Perl_safefree
244 Perl_safemalloc
245 Perl_saferealloc
246 Perl_safecalloc)];
247 emit_symbols [qw(
248 Perl_malloc
249 Perl_free
250 Perl_realloc
251 Perl_calloc)];
bbc8f9de
NIS
252 }
253
d55594ae
GS
254unless ($define{'USE_THREADS'})
255 {
22239a37 256 skip_symbols [qw(
d55594ae
GS
257Perl_condpair_magic
258Perl_thr_key
259Perl_sv_mutex
319b3e9e 260Perl_svref_mutex
d55594ae
GS
261Perl_malloc_mutex
262Perl_eval_mutex
263Perl_eval_cond
264Perl_eval_owner
265Perl_threads_mutex
32f822de
GS
266Perl_new_struct_thread
267Perl_nthreads
d55594ae 268Perl_nthreads_cond
32f822de 269Perl_per_thread_magicals
d4cce5f1 270Perl_thread_create
93bce2dc 271Perl_threadnum
d4cce5f1
NIS
272Perl_find_threadsv
273Perl_threadsv_names
32f822de 274Perl_thrsv
d55594ae
GS
275Perl_unlock_condpair
276Perl_vtbl_mutex
277Perl_magic_mutexfree
278Perl_sv_iv
279Perl_sv_nv
280Perl_sv_true
281Perl_sv_uv
282Perl_sv_pvn
22239a37 283Perl_newRV_noinc)];
910dfcc8 284 }
d4cce5f1 285
910dfcc8
GS
286unless ($define{'FAKE_THREADS'})
287 {
288 skip_symbols [qw(Perl_curthr)];
d55594ae
GS
289 }
290
22239a37
NIS
291sub readvar
292{
293 my $file = shift;
294 open(VARS,$file) || die "Cannot open $file:$!";
295 my @syms;
296 while (<VARS>)
297 {
298 # All symbols have a Perl_ prefix because that's what embed.h
299 # sticks in front of them.
83921c94 300 push(@syms,"Perl_".$1) if (/\bPERLVARI?C?\([IGT](\w+)/);
22239a37
NIS
301 }
302 close(VARS);
303 return \@syms;
304}
305
d4cce5f1 306if ($define{'USE_THREADS'} || $define{'MULTIPLICITY'})
d55594ae 307 {
22239a37
NIS
308 my $thrd = readvar("../thrdvar.h");
309 skip_symbols $thrd;
d55594ae
GS
310 }
311
d4cce5f1 312if ($define{'MULTIPLICITY'})
d55594ae 313 {
22239a37
NIS
314 my $interp = readvar("../intrpvar.h");
315 skip_symbols $interp;
316 }
317
318if ($define{'PERL_GLOBAL_STRUCT'})
319 {
320 my $global = readvar("../perlvars.h");
321 skip_symbols $global;
d4cce5f1 322 }
d55594ae 323
36c15d3f
NIS
324unless ($define{'DEBUGGING'})
325 {
22239a37 326 skip_symbols [qw(
fea7140c
GS
327 Perl_deb
328 Perl_deb_growlevel
329 Perl_debop
330 Perl_debprofdump
331 Perl_debstack
332 Perl_debstackptrs
22239a37
NIS
333 Perl_runops_debug
334 Perl_sv_peek
335 Perl_watchaddr
336 Perl_watchok)];
36c15d3f
NIS
337 }
338
26618a56
GS
339if ($define{'HAVE_DES_FCRYPT'})
340 {
341 emit_symbols [qw(win32_crypt)];
342 }
343
0a753a76 344open (GLOBAL, "<../global.sym") || die "failed to open global.sym" . $!;
22239a37
NIS
345while (<GLOBAL>)
346 {
347 next if (!/^[A-Za-z]/);
348 next if (/_amg[ \t]*$/);
349 # All symbols have a Perl_ prefix because that's what embed.h
350 # sticks in front of them.
351 chomp($_);
352 my $symbol = "Perl_$_";
353 emit_symbol($symbol) unless exists $skip{$symbol};
354 }
0a753a76 355close(GLOBAL);
356
357# also add symbols from interp.sym
358# They are only needed if -DMULTIPLICITY is not set but it
359# doesn't hurt to include them anyway.
360# these don't have Perl prefix
361
22239a37
NIS
362if ($define{'PERL_GLOBAL_STRUCT'})
363 {
364 emit_symbol( ($CCTYPE eq 'GCC') ? 'Perl_GetVars' : 'Perl_VarsPtr')
365 }
366else
367 {
368 my $glob = readvar("../perlvars.h");
369 emit_symbols $glob;
370 }
371
372unless ($define{'MULTIPLICITY'})
373 {
374 my $glob = readvar("../intrpvar.h");
375 emit_symbols $glob;
376 }
0a753a76 377
22239a37
NIS
378unless ($define{'MULTIPLICITY'} || $define{'USE_THREADS'})
379 {
380 my $glob = readvar("../thrdvar.h");
381 emit_symbols $glob;
382 }
0a753a76 383
384while (<DATA>) {
385 my $symbol;
386 next if (!/^[A-Za-z]/);
387 next if (/^#/);
a868473f 388 s/\r//g;
22239a37 389 chomp($_);
0a753a76 390 $symbol = $_;
22239a37 391 next if exists $skip{$symbol};
3e3baf6d
TB
392 emit_symbol($symbol);
393}
394
22239a37
NIS
395foreach my $symbol (sort keys %export)
396 {
ac4c12e7 397 output_symbol($symbol);
22239a37
NIS
398 }
399
400sub emit_symbol {
401 my $symbol = shift;
402 chomp($symbol);
403 $export{$symbol} = 1;
3e3baf6d 404}
0a753a76 405
ac4c12e7
GS
406sub output_symbol {
407 my $symbol = shift;
408 if ($CCTYPE eq "BORLAND") {
409 # workaround Borland quirk by exporting both the straight
410 # name and a name with leading underscore. Note the
411 # alias *must* come after the symbol itself, if both
412 # are to be exported. (Linker bug?)
413 print "\t_$symbol\n";
414 print "\t$symbol = _$symbol\n";
415 }
416 elsif ($CCTYPE eq 'GCC') {
417 # Symbols have leading _ whole process is $%£"% slow
418 # so skip aliases for now
419 print "\t$symbol\n";
420 }
421 else {
422 # for binary coexistence, export both the symbol and
423 # alias with leading underscore
424 print "\t$symbol\n";
425 print "\t_$symbol = $symbol\n";
426 }
427}
428
0a753a76 4291;
430__DATA__
431# extra globals not included above.
432perl_init_i18nl10n
433perl_init_ext
434perl_alloc
435perl_construct
436perl_destruct
437perl_free
438perl_parse
439perl_run
440perl_get_sv
441perl_get_av
442perl_get_hv
443perl_get_cv
444perl_call_argv
445perl_call_pv
446perl_call_method
447perl_call_sv
10dd38fc
GS
448perl_require_pv
449perl_eval_pv
450perl_eval_sv
d28b3ca3 451boot_DynaLoader
d55594ae 452Perl_thread_create
68dc0745 453win32_errno
96e4d5b1 454win32_environ
68dc0745 455win32_stdin
456win32_stdout
96e4d5b1 457win32_stderr
68dc0745 458win32_ferror
459win32_feof
460win32_strerror
461win32_fprintf
462win32_printf
463win32_vfprintf
96e4d5b1 464win32_vprintf
68dc0745 465win32_fread
466win32_fwrite
467win32_fopen
468win32_fdopen
469win32_freopen
470win32_fclose
471win32_fputs
472win32_fputc
473win32_ungetc
474win32_getc
475win32_fileno
476win32_clearerr
477win32_fflush
478win32_ftell
479win32_fseek
480win32_fgetpos
481win32_fsetpos
482win32_rewind
483win32_tmpfile
484win32_abort
485win32_fstat
96e4d5b1 486win32_stat
68dc0745 487win32_pipe
488win32_popen
489win32_pclose
490win32_setmode
96e4d5b1 491win32_lseek
492win32_tell
68dc0745 493win32_dup
494win32_dup2
96e4d5b1 495win32_open
496win32_close
497win32_eof
68dc0745 498win32_read
499win32_write
3e3baf6d 500win32_spawnvp
5aabfad6 501win32_mkdir
502win32_rmdir
503win32_chdir
c90c0ff4 504win32_flock
6890e559 505win32_execvp
54310121 506win32_htons
507win32_ntohs
508win32_htonl
509win32_ntohl
510win32_inet_addr
511win32_inet_ntoa
512win32_socket
513win32_bind
514win32_listen
515win32_accept
516win32_connect
517win32_send
518win32_sendto
519win32_recv
520win32_recvfrom
521win32_shutdown
3a25acb4 522win32_closesocket
54310121 523win32_ioctlsocket
524win32_setsockopt
525win32_getsockopt
526win32_getpeername
527win32_getsockname
528win32_gethostname
529win32_gethostbyname
530win32_gethostbyaddr
531win32_getprotobyname
532win32_getprotobynumber
533win32_getservbyname
534win32_getservbyport
535win32_select
536win32_endhostent
537win32_endnetent
538win32_endprotoent
539win32_endservent
540win32_getnetent
541win32_getnetbyname
542win32_getnetbyaddr
543win32_getprotoent
544win32_getservent
545win32_sethostent
546win32_setnetent
547win32_setprotoent
548win32_setservent
ad2e33dc 549win32_getenv
84902520
TB
550win32_perror
551win32_setbuf
552win32_setvbuf
553win32_flushall
554win32_fcloseall
555win32_fgets
556win32_gets
557win32_fgetc
558win32_putc
559win32_puts
560win32_getchar
561win32_putchar
562win32_malloc
563win32_calloc
564win32_realloc
565win32_free
f3986ebb
GS
566win32_sleep
567win32_times
568win32_alarm
65e48ea9
GS
569win32_open_osfhandle
570win32_get_osfhandle
f998180f 571win32_ioctl
ad0751ec 572win32_utime
22fae026
TM
573win32_wait
574win32_str_os_error
ad2e33dc 575Perl_win32_init
f3986ebb 576Perl_init_os_extras
9811a7d7 577Perl_getTHR
0fefa03b 578Perl_setTHR
84902520 579RunPerl
22239a37 580