PATCH: util.c and util.h function declarations do not match
[p5sagit/p5-mst-13.2.git] / cygwin32 / perlgcc
1 #
2
3 # Perl script be a wrapper around the gnu gcc. the exportable perl.exe
4 #   is built, special processing is done.
5 # This script is caled by the gcc2 shell script when the flag
6 #   -buildperl is passed to gcc2
7
8 print "perlgcc: building exportable perl...\n";
9
10 # get all libs:
11 my @libobs;
12 my @obs;
13 my @libFlags;
14 my $libstring;
15 foreach (@ARGV){
16         if( /\.[a]$/){
17                 push @libobs,$_;
18         }
19         elsif(/^\-l/){
20                 push @libFlags,$_;
21         }
22         if( /\.[o]$/){
23                 push @obs,$_;
24         }
25 }
26 $libstring = join(" ",@libobs); 
27 $obsString = join(" ",@obs);
28 $libflagString = join(" ",@libFlags);
29
30 # make exports file
31 my $command = "echo EXPORTS > perl.def";
32 print "$command\n";
33 system($command) == 0 or die "system() failed.\n";
34
35 $command ="nm $libstring | grep '^........ [TCD] _'| grep -v _impure_ptr | sed 's/[^_]*_//' >> perl.def";
36 print "$command\n";
37 system($command) == 0 or die "system() failed.\n";
38
39 # Build the perl.a lib to link to:
40 $command ="dlltool --as=as --dllname perl.exe --def perl.def --output-lib perl.a";
41 print "$command\n";
42 system($command) == 0 or die "system() failed.\n";
43
44 # change name of export lib to libperlexp so that is can be understood by ld2/perlld
45 $command ="mv perl.a libperlexp.a";  
46 print "$command\n";
47 system($command) == 0 or die "system() failed.\n";
48
49 # get the full path name of a few libs:
50 my $crt0 = `gcc -print-file-name=crt0.o`;
51 chomp $crt0;
52 my $libdir = `gcc -print-file-name=libcygwin.a`;
53 chomp $libdir;
54 $libdir =~ s/libcygwin\.a//g;
55
56 # when $crt0 and $libdir get used in the system calls below, the \'s
57 # from the gcc -print-file-name get used to create special characters,
58 # such as \n, \t.  Replace the \'s with /'s so that this does not
59 # happen:
60 $crt0   =~ s:\\:/:g;
61 $libdir =~  s:\\:/:g;
62
63 # when $crt0 and $libdir get used in the system calls below, the \'s
64 # from the gcc -print-file-name get used to create special characters,
65 # such as \n, \t.  Replace the \'s with /'s so that this does not
66 # happen:
67 $crt0   =~ s:\\:/:g;
68 $libdir =~ s:\\:/:g;
69
70 # Link exe:
71 $command = "ld --base-file perl.base -o perl.exe $crt0 $obsString $libstring -L$libdir $libflagString";
72 print "$command\n";
73 system($command) == 0 or die "system() failed.\n";
74
75 $command = "dlltool --as=as --dllname perl.exe --def perl.def --base-file perl.base --output-exp perl.exp";
76 print "$command\n";
77 system($command) == 0 or die "system() failed.\n";
78
79 $command = "ld --base-file perl.base perl.exp -o perl.exe $crt0 $obsString $libstring -L$libdir $libflagString";
80 print "$command\n";
81 system($command) == 0 or die "system() failed.\n";
82
83 $command = "dlltool --as=as --dllname perl.exe --def perl.def --base-file perl.base --output-exp perl.exp";
84 print "$command\n";
85 system($command) == 0 or die "system() failed.\n";
86
87 $command = "ld perl.exp -o perl.exe $crt0 $obsString $libstring -L$libdir $libflagString";
88 print "$command\n";
89 system($command) == 0 or die "system() failed.\n";
90
91 print "perlgcc: Completed\n";