Integrate from ansi branch to mainline.
[p5sagit/p5-mst-13.2.git] / win32 / makedef.pl
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
15 # way to find them so I just put a exception list here
16
17 while (@ARGV && $ARGV[0] =~ /^-/)
18  {
19   my $flag = shift;
20   $define{$1} = 1 if ($flag =~ /^-D(\w+)$/);
21  } 
22
23 open(CFG,'config.h') || die "Cannot open config.h:$!";
24 while (<CFG>)
25  {
26   $define{$1} = 1 if /^\s*#\s*define\s+(MYMALLOC)\b/;
27  }
28 close(CFG);
29
30 warn join(' ',keys %define)."\n";
31
32 my $CCTYPE = shift || "MSVC";
33
34 print "LIBRARY Perl\n";
35 print "DESCRIPTION 'Perl interpreter, export autogenerated'\n";
36 print "CODE LOADONCALL\n";
37 print "DATA LOADONCALL NONSHARED MULTIPLE\n";
38 print "EXPORTS\n";
39
40 $skip_sym=<<'!END!OF!SKIP!';
41 Perl_block_type
42 Perl_additem
43 Perl_cast_ulong
44 Perl_check_uni
45 Perl_checkcomma
46 Perl_chsize
47 Perl_ck_aelem
48 Perl_cryptseen
49 Perl_cx_dump
50 Perl_deb
51 Perl_deb_growlevel
52 Perl_debop
53 Perl_debprofdump
54 Perl_debstack
55 Perl_debstackptrs
56 Perl_do_ipcctl
57 Perl_do_ipcget
58 Perl_do_msgrcv
59 Perl_do_msgsnd
60 Perl_do_semop
61 Perl_do_shmio
62 Perl_doeval
63 Perl_dofindlabel
64 Perl_dopoptoeval
65 Perl_dump_eval
66 Perl_dump_fds
67 Perl_dump_form
68 Perl_dump_gv
69 Perl_dump_mstats
70 Perl_dump_op
71 Perl_dump_packsubs
72 Perl_dump_pm
73 Perl_dump_sub
74 Perl_expectterm
75 Perl_fetch_gv
76 Perl_fetch_io
77 Perl_force_ident
78 Perl_force_next
79 Perl_force_word
80 Perl_hv_stashpv
81 Perl_intuit_more
82 Perl_init_thread_intern
83 Perl_know_next
84 Perl_modkids
85 Perl_mstats
86 Perl_my_bzero
87 Perl_my_htonl
88 Perl_my_ntohl
89 Perl_my_swap
90 Perl_my_chsize
91 Perl_newXSUB
92 Perl_no_fh_allowed
93 Perl_no_op
94 Perl_nointrp
95 Perl_nomem
96 Perl_pp_cswitch
97 Perl_pp_entersubr
98 Perl_pp_evalonce
99 Perl_pp_interp
100 Perl_pp_map
101 Perl_pp_nswitch
102 Perl_q
103 Perl_rcsid
104 Perl_reall_srchlen
105 Perl_regdump
106 Perl_regfold
107 Perl_regmyendp
108 Perl_regmyp_size
109 Perl_regmystartp
110 Perl_regnarrate
111 Perl_regprop
112 Perl_same_dirent
113 Perl_saw_return
114 Perl_scan_const
115 Perl_scan_formline
116 Perl_scan_heredoc
117 Perl_scan_ident
118 Perl_scan_inputsymbol
119 Perl_scan_pat
120 Perl_scan_prefix
121 Perl_scan_str
122 Perl_scan_subst
123 Perl_scan_trans
124 Perl_scan_word
125 Perl_setenv_getix
126 Perl_skipspace
127 Perl_sublex_done
128 Perl_sublex_start
129 Perl_sv_ref
130 Perl_sv_setptrobj
131 Perl_timesbuf
132 Perl_too_few_arguments
133 Perl_too_many_arguments
134 Perl_unlnk
135 Perl_wait4pid
136 Perl_watch
137 Perl_yyname
138 Perl_yyrule
139 allgvs
140 curblock
141 curcsv
142 lastretstr
143 mystack_mark
144 perl_init_ext
145 perl_requirepv
146 stack
147 statusvalue_vms
148 Perl_safexcalloc
149 Perl_safexmalloc
150 Perl_safexfree
151 Perl_safexrealloc
152 Perl_my_memcmp
153 Perl_my_memset
154 Perl_cshlen
155 Perl_cshname
156 Perl_opsave
157 !END!OF!SKIP!
158
159 if ($define{'MYMALLOC'})
160  {
161   $skip_sym .= <<'!END!OF!SKIP!';
162 Perl_safefree
163 Perl_safemalloc
164 Perl_saferealloc
165 Perl_safecalloc
166 !END!OF!SKIP!
167   emit_symbol('Perl_malloc');
168   emit_symbol('Perl_free');
169   emit_symbol('Perl_realloc');
170   emit_symbol('Perl_calloc');
171  }
172
173 unless ($define{'USE_THREADS'})
174  {
175   $skip_sym .= <<'!END!OF!SKIP!';
176 Perl_condpair_magic
177 Perl_thr_key
178 Perl_sv_mutex
179 Perl_malloc_mutex
180 Perl_eval_mutex
181 Perl_eval_cond
182 Perl_eval_owner
183 Perl_threads_mutex
184 Perl_new_struct_thread
185 Perl_nthreads
186 Perl_nthreads_cond
187 Perl_per_thread_magicals
188 Perl_thrsv
189 Perl_unlock_condpair
190 Perl_vtbl_mutex
191 Perl_magic_mutexfree
192 Perl_sv_iv
193 Perl_sv_nv
194 Perl_sv_true
195 Perl_sv_uv
196 Perl_sv_pvn
197 Perl_newRV_noinc
198 !END!OF!SKIP!
199  }
200
201 if ($define{'USE_THISPTR'} || $define{'USE_THREADS'})
202  {
203   open(THREAD,"<../thread.sym") || die "Cannot open thread.sym:$!";
204   while (<THREAD>)
205    {
206     next if (!/^[A-Za-z]/);
207     next if (/_amg[ \t]*$/);
208     $skip_sym .= "Perl_".$_;
209    } 
210   close(THREAD); 
211   $skip_sym .= "Perl_op\n";
212  } 
213
214 unless ($define{'USE_THREADS'})
215  {
216   $skip_sym .= "Perl_thread_create\n";
217  }
218
219 # All symbols have a Perl_ prefix because that's what embed.h
220 # sticks in front of them.
221
222
223 open (GLOBAL, "<../global.sym") || die "failed to open global.sym" . $!;
224 while (<GLOBAL>) {
225         my $symbol;
226         next if (!/^[A-Za-z]/);
227         next if (/_amg[ \t]*$/);
228         $symbol = "Perl_$_";
229         next if ($skip_sym =~ m/$symbol/m);
230         emit_symbol($symbol);
231 }
232 close(GLOBAL);
233
234 # also add symbols from interp.sym
235 # They are only needed if -DMULTIPLICITY is not set but it
236 # doesn't hurt to include them anyway.
237 # these don't have Perl prefix
238
239 open (INTERP, "<../interp.sym") || die "failed to open interp.sym" . $!;
240 while (<INTERP>) {
241         my $symbol;
242         next if (!/^[A-Za-z]/);
243         next if (/_amg[ \t]*$/);
244         $symbol = $_;
245         next if ($skip_sym =~ m/$symbol/m);
246         #print "\t$symbol";
247         emit_symbol("Perl_" . $symbol);
248 }
249
250 #close(INTERP);
251
252 while (<DATA>) {
253         my $symbol;
254         next if (!/^[A-Za-z]/);
255         next if (/^#/);
256         s/\r//g;
257         $symbol = $_;
258         next if ($skip_sym =~ m/^$symbol/m);
259         $symbol = "Perl_".$symbol if ($define{'USE_THISPTR'} 
260                                       && $symbol =~ /^perl/);
261         emit_symbol($symbol);
262 }
263
264 sub emit_symbol {
265         my $symbol = shift;
266         chomp $symbol;
267         if ($CCTYPE eq "BORLAND") {
268                 # workaround Borland quirk by exporting both the straight
269                 # name and a name with leading underscore.  Note the
270                 # alias *must* come after the symbol itself, if both
271                 # are to be exported. (Linker bug?)
272                 print "\t_$symbol\n";
273                 print "\t$symbol = _$symbol\n";
274         }
275         else {
276                 # for binary coexistence, export both the symbol and
277                 # alias with leading underscore
278                 print "\t$symbol\n";
279                 print "\t_$symbol = $symbol\n";
280         }
281 }
282
283 1;
284 __DATA__
285 # extra globals not included above.
286 perl_init_i18nl10n
287 perl_init_ext
288 perl_alloc
289 perl_construct
290 perl_destruct
291 perl_free
292 perl_parse
293 perl_run
294 perl_get_sv
295 perl_get_av
296 perl_get_hv
297 perl_get_cv
298 perl_call_argv
299 perl_call_pv
300 perl_call_method
301 perl_call_sv
302 perl_require_pv
303 perl_eval_pv
304 perl_eval_sv
305 boot_DynaLoader
306 Perl_thread_create
307 win32_errno
308 win32_environ
309 win32_stdin
310 win32_stdout
311 win32_stderr
312 win32_ferror
313 win32_feof
314 win32_strerror
315 win32_fprintf
316 win32_printf
317 win32_vfprintf
318 win32_vprintf
319 win32_fread
320 win32_fwrite
321 win32_fopen
322 win32_fdopen
323 win32_freopen
324 win32_fclose
325 win32_fputs
326 win32_fputc
327 win32_ungetc
328 win32_getc
329 win32_fileno
330 win32_clearerr
331 win32_fflush
332 win32_ftell
333 win32_fseek
334 win32_fgetpos
335 win32_fsetpos
336 win32_rewind
337 win32_tmpfile
338 win32_abort
339 win32_fstat
340 win32_stat
341 win32_pipe
342 win32_popen
343 win32_pclose
344 win32_setmode
345 win32_lseek
346 win32_tell
347 win32_dup
348 win32_dup2
349 win32_open
350 win32_close
351 win32_eof
352 win32_read
353 win32_write
354 win32_spawnvp
355 win32_mkdir
356 win32_rmdir
357 win32_chdir
358 win32_flock
359 win32_execvp
360 win32_htons
361 win32_ntohs
362 win32_htonl
363 win32_ntohl
364 win32_inet_addr
365 win32_inet_ntoa
366 win32_socket
367 win32_bind
368 win32_listen
369 win32_accept
370 win32_connect
371 win32_send
372 win32_sendto
373 win32_recv
374 win32_recvfrom
375 win32_shutdown
376 win32_closesocket
377 win32_ioctlsocket
378 win32_setsockopt
379 win32_getsockopt
380 win32_getpeername
381 win32_getsockname
382 win32_gethostname
383 win32_gethostbyname
384 win32_gethostbyaddr
385 win32_getprotobyname
386 win32_getprotobynumber
387 win32_getservbyname
388 win32_getservbyport
389 win32_select
390 win32_endhostent
391 win32_endnetent
392 win32_endprotoent
393 win32_endservent
394 win32_getnetent
395 win32_getnetbyname
396 win32_getnetbyaddr
397 win32_getprotoent
398 win32_getservent
399 win32_sethostent
400 win32_setnetent
401 win32_setprotoent
402 win32_setservent
403 win32_getenv
404 win32_perror
405 win32_setbuf
406 win32_setvbuf
407 win32_flushall
408 win32_fcloseall
409 win32_fgets
410 win32_gets
411 win32_fgetc
412 win32_putc
413 win32_puts
414 win32_getchar
415 win32_putchar
416 win32_malloc
417 win32_calloc
418 win32_realloc
419 win32_free
420 win32_sleep
421 win32_times
422 win32_alarm
423 win32_open_osfhandle
424 win32_get_osfhandle
425 Perl_win32_init
426 Perl_init_os_extras
427 Perl_getTHR
428 Perl_setTHR
429 RunPerl