Commit | Line | Data |
---|---|---|
8736538c AS |
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 | ||
6 | # theese are pretty mandatory | |
7 | my $CC = '@CC@'; | |
8 | my $DLLWRAP = '@DLLWRAP@'; | |
9 | ||
10 | # following are optional. | |
11 | my $WRAPDRIVER = '@WRAPDRIVER@'; | |
12 | my $AS = '@AS@'; | |
13 | my $DLLTOOL = '@DLLTOOL@'; | |
14 | my $EXPORT_ALL = @EXPORT_ALL@; | |
15 | # if some of extensions are undefined, | |
16 | # no corresponding output will be done. | |
17 | # most probably, you'd like to have an export library | |
18 | my $DEF_EXT = '@DEF_EXT@'; | |
19 | # my $EXP_EXT = '@EXP_EXT@'; | |
20 | my $LIB_EXT = '@LIB_EXT@'; | |
21 | ||
22 | #my $DEBUG ="perlld.out"; | |
23 | my $DEBUG =undef; | |
24 | ||
25 | my $args = join(" ",@ARGV); # get args | |
26 | my $verbose =grep(/^\-(v|\-verbose)$/, @ARGV); | |
27 | ||
28 | sub shellexec; | |
29 | ||
30 | if ($DEBUG) { | |
31 | open DEBUGFILE, ">>$DEBUG"; | |
32 | print DEBUGFILE "\n--- " .localtime() ."\nargs:\n$args\n\nenvironment:\n"; | |
33 | foreach (keys(%ENV)) { print DEBUGFILE $_, "=", $ENV{$_}, "\n"; }; | |
34 | } | |
35 | ||
36 | if ($args !~ /\-o (\S+)/) { | |
37 | print DEBUGFILE "+ no dll output -- passing to gcc\n\n" if $DEBUG; | |
38 | shellexec("$CC $args\n"); | |
39 | } else { | |
40 | my ($path, $command, $dllname, $libname) =''; | |
41 | ||
42 | $dllname =$1; | |
43 | print DEBUGFILE "output file: $dllname\n" if $DEBUG; | |
44 | # remove -o from args | |
45 | $args =~ s/(^| )\-o \S+/$1/; | |
46 | ||
47 | # Check for path: | |
48 | if( $dllname =~ /.*[\/\\]/){ | |
49 | $dllname = $'; | |
50 | $path = $&; | |
51 | $path =~ s,[/\\](\.[/\\])*,/,g; | |
52 | } | |
53 | if ($dllname =~ /\./) { $libname =$`; } else { $libname =$dllname; }; | |
54 | $dllname ="$libname.dll"; | |
55 | $libname ="lib$libname" unless ($libname =~ /^lib/); | |
56 | print DEBUGFILE "dll name: $dllname\nimport library: $libname\npath: $path\n" if $DEBUG; | |
57 | ||
f89d6eaa | 58 | $command ="$DLLWRAP --dllname $dllname"; |
8736538c AS |
59 | $command .=" --driver-name $WRAPDRIVER" if $WRAPDRIVER; |
60 | $command .=" --dlltool $DLLTOOL" if $DLLTOOL; | |
61 | $command .=" --export-all-symbols" if $EXPORT_ALL; | |
62 | $command .=" --as $AS" if $AS; | |
63 | $command .=" --verbose" if $verbose; | |
64 | ||
65 | $command .=" --output-def $libname$DEF_EXT" if $DEF_EXT; | |
66 | $command .=" --output-exp $libname$EXP_EXT" if $EXP_EXT; | |
67 | $command .=" --output-lib $libname$LIB_EXT" if $LIB_EXT; | |
68 | ||
69 | # other args are passed through | |
70 | shellexec("$command \\\n$args\n"); | |
71 | ||
72 | if ($path) { | |
73 | $command ="mv $dllname"; | |
74 | $command .=" $libname$LIB_EXT" if $LIB_EXT; | |
75 | shellexec("$command $path\n"); | |
76 | }; | |
77 | }; | |
78 | close DEBUGFILE if $DEBUG; | |
79 | ||
80 | #--------------------------------------------------------------------------- | |
81 | sub shellexec{ | |
82 | my $command =shift; | |
83 | print $command; | |
84 | print DEBUGFILE $command if $DEBUG; | |
85 | system($command) == 0 | |
86 | or die "perlld: *** system() failed to execute\n$command\n"; | |
87 | }; | |
88 | ||
89 | 1; |