S_del_body is sufficiently small that inlining it is a space win.
[p5sagit/p5-mst-13.2.git] / cygwin / perlld.in
CommitLineData
8736538c 1#
2# Perl script being a wrapper around the gnu ld. When a dll is specified to
3# to be built, special processing is done, else the standard ld is called.
4#
5
b53432e4 6# these are pretty mandatory
8736538c 7my $CC = '@CC@';
8736538c 8my $EXPORT_ALL = @EXPORT_ALL@;
b53432e4 9
8736538c 10# if some of extensions are undefined,
11# no corresponding output will be done.
12# most probably, you'd like to have an export library
b53432e4 13# my $DEF_EXT = '@DEF_EXT@';
8736538c 14# my $EXP_EXT = '@EXP_EXT@';
15my $LIB_EXT = '@LIB_EXT@';
16
17#my $DEBUG ="perlld.out";
18my $DEBUG =undef;
19
20my $args = join(" ",@ARGV); # get args
21my $verbose =grep(/^\-(v|\-verbose)$/, @ARGV);
22
23sub shellexec;
24
25if ($DEBUG) {
26 open DEBUGFILE, ">>$DEBUG";
27 print DEBUGFILE "\n--- " .localtime() ."\nargs:\n$args\n\nenvironment:\n";
28 foreach (keys(%ENV)) { print DEBUGFILE $_, "=", $ENV{$_}, "\n"; };
29}
30
31if ($args !~ /\-o (\S+)/) {
32 print DEBUGFILE "+ no dll output -- passing to gcc\n\n" if $DEBUG;
33 shellexec("$CC $args\n");
34} else {
35 my ($path, $command, $dllname, $libname) ='';
36
37 $dllname =$1;
38 print DEBUGFILE "output file: $dllname\n" if $DEBUG;
39 # remove -o from args
40 $args =~ s/(^| )\-o \S+/$1/;
41
42 # Check for path:
43 if( $dllname =~ /.*[\/\\]/){
44 $dllname = $';
45 $path = $&;
46 $path =~ s,[/\\](\.[/\\])*,/,g;
47 }
48 if ($dllname =~ /\./) { $libname =$`; } else { $libname =$dllname; };
dfc05e5b 49 my $v_e_r_s = '@VERSION@';
50 $v_e_r_s =~ tr/./_/;
53f5e3f0 51 if ( $dllname =~ /libperl.*/) {
b53432e4 52 $dllname ="cygperl$v_e_r_s.dll";
53 } else {
53f5e3f0 54 $dllname ="$libname.dll";
b53432e4 55 }
8736538c 56 $libname ="lib$libname" unless ($libname =~ /^lib/);
57 print DEBUGFILE "dll name: $dllname\nimport library: $libname\npath: $path\n" if $DEBUG;
58
b53432e4 59 $command ="$CC -shared -o $dllname";
60# $command .=" --verbose" if $verbose;
8736538c 61
b53432e4 62 $command .=" -Wl,--output-def=$libname$DEF_EXT" if $DEF_EXT;
63 $command .=" -Wl,--output-exp=$libname$EXP_EXT" if $EXP_EXT;
64 $command .=" -Wl,--out-implib=$libname.dll$LIB_EXT" if $LIB_EXT;
65 $command .=" -Wl,--export-all-symbols" if $EXPORT_ALL;
a0457be1 66 $command .=" -Wl,--enable-auto-import -Wl,--stack,8388608"; # always
8736538c 67
68 # other args are passed through
69 shellexec("$command \\\n$args\n");
70
71 if ($path) {
72 $command ="mv $dllname";
b53432e4 73 $command .=" $libname.dll$LIB_EXT" if $LIB_EXT;
8736538c 74 shellexec("$command $path\n");
75 };
76};
77close DEBUGFILE if $DEBUG;
78
79#---------------------------------------------------------------------------
53f5e3f0 80sub shellexec {
81 my $command = shift;
82 print STDERR $command;
8736538c 83 print DEBUGFILE $command if $DEBUG;
84 system($command) == 0
85 or die "perlld: *** system() failed to execute\n$command\n";
86};
87
881;