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