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