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