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