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