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