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