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