3 # Written: 10 April 1996 Gary Ng (71564.1743@compuserve.com)
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
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.
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
17 while (@ARGV && $ARGV[0] =~ /^-/)
20 $define{$1} = 1 if ($flag =~ /^-D(\w+)$/);
23 open(CFG,'config.h') || die "Cannot open config.h:$!";
26 $define{$1} = 1 if /^\s*#\s*define\s+(MYMALLOC)\b/;
30 warn join(' ',keys %define)."\n";
32 my $CCTYPE = shift || "MSVC";
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";
43 $define{'PERL_GLOBAL_STRUCT'} = 1;
44 $define{'MULTIPLICITY'} = 1;
55 foreach my $symbol (@$list)
64 foreach my $symbol (@$list)
66 emit_symbol($symbol) unless exists $skip{$symbol};
113 Perl_init_thread_intern
149 Perl_scan_inputsymbol
163 Perl_too_few_arguments
164 Perl_too_many_arguments
191 if ($define{'MYMALLOC'})
205 unless ($define{'USE_THREADS'})
216 Perl_new_struct_thread
219 Perl_per_thread_magicals
239 open(VARS,$file) || die "Cannot open $file:$!";
243 # All symbols have a Perl_ prefix because that's what embed.h
244 # sticks in front of them.
245 push(@syms,"Perl_".$1) if (/\bPERLVARI?\([IGT](\w+)/);
251 if ($define{'USE_THREADS'} || $define{'MULTIPLICITY'})
253 my $thrd = readvar("../thrdvar.h");
257 if ($define{'MULTIPLICITY'})
259 my $interp = readvar("../intrpvar.h");
260 skip_symbols $interp;
263 if ($define{'PERL_GLOBAL_STRUCT'})
265 my $global = readvar("../perlvars.h");
266 skip_symbols $global;
269 unless ($define{'DEBUGGING'})
278 open (GLOBAL, "<../global.sym") || die "failed to open global.sym" . $!;
281 next if (!/^[A-Za-z]/);
282 next if (/_amg[ \t]*$/);
283 # All symbols have a Perl_ prefix because that's what embed.h
284 # sticks in front of them.
286 my $symbol = "Perl_$_";
287 emit_symbol($symbol) unless exists $skip{$symbol};
291 # also add symbols from interp.sym
292 # They are only needed if -DMULTIPLICITY is not set but it
293 # doesn't hurt to include them anyway.
294 # these don't have Perl prefix
296 if ($define{'PERL_GLOBAL_STRUCT'})
298 emit_symbol( ($CCTYPE eq 'GCC') ? 'Perl_GetVars' : 'Perl_VarsPtr')
302 my $glob = readvar("../perlvars.h");
306 unless ($define{'MULTIPLICITY'})
308 my $glob = readvar("../intrpvar.h");
312 unless ($define{'MULTIPLICITY'} || $define{'USE_THREADS'})
314 my $glob = readvar("../thrdvar.h");
320 next if (!/^[A-Za-z]/);
325 next if exists $skip{$symbol};
326 emit_symbol($symbol);
329 foreach my $symbol (sort keys %export)
331 if ($CCTYPE eq "BORLAND") {
332 # workaround Borland quirk by exporting both the straight
333 # name and a name with leading underscore. Note the
334 # alias *must* come after the symbol itself, if both
335 # are to be exported. (Linker bug?)
336 print "\t_$symbol\n";
337 print "\t$symbol = _$symbol\n";
339 elsif ($CCTYPE eq 'GCC') {
340 # Symbols have leading _ whole process is $%£"% slow
341 # so skip aliases for now
345 # for binary coexistence, export both the symbol and
346 # alias with leading underscore
348 print "\t_$symbol = $symbol\n";
355 $export{$symbol} = 1;
360 # extra globals not included above.
461 win32_getprotobynumber