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