]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - make/unit-cc.pl
Use unit-cc for all compile and and link tasks
[user/henk/code/inspircd.git] / make / unit-cc.pl
1 #!/usr/bin/env perl
2 use strict;
3 use warnings;
4 BEGIN { push @INC, $ENV{SOURCEPATH}; }
5 use make::configure;
6
7 chdir $ENV{BUILDPATH};
8
9 my $type = shift;
10 my $out = shift;
11 my $verbose = ($type =~ s/-v$//);
12
13 if ($type eq 'gen-ld') {
14         do_static_find(@ARGV);
15 } elsif ($type eq 'static-ld') {
16         do_static_link(@ARGV);
17 } elsif ($type eq 'core-ld') {
18         do_core_link(@ARGV);
19 } elsif ($type eq 'link-dir') {
20         do_link_dir(@ARGV);
21 } elsif ($type eq 'gen-o') {
22         do_compile(1, 0, @ARGV);
23 } elsif ($type eq 'gen-so') {
24         do_compile(1, 1, @ARGV);
25 } elsif ($type eq 'link-so') {
26         do_compile(0, 1, @ARGV);
27 } else {
28         print STDERR "Unknown unit-cc subcommand $type!\n";
29 }
30 exit 1;
31
32 sub do_static_find {
33         my @flags;
34         for my $file (@ARGV) {
35                 push @flags, getlinkerflags($file);
36         }
37         open F, '>', $out;
38         print F join ' ', @flags;
39         close F;
40         exit 0;
41 }
42
43 sub do_static_link {
44         my $execstr = "$ENV{RUNLD} -o $out $ENV{CORELDFLAGS} $ENV{LDLIBS}";
45         for (@ARGV) {
46                 if (/\.cmd$/) {
47                         open F, '<', $_;
48                         my $libs = <F>;
49                         chomp $libs;
50                         $execstr .= ' '.$libs;
51                         close F;
52                 } else {
53                         $execstr .= ' '.$_;
54                 }
55         }
56         print "$execstr\n" if $verbose;
57         exec $execstr;
58 }
59
60 sub do_core_link {
61         my $execstr = "$ENV{RUNLD} -o $out $ENV{CORELDFLAGS} $ENV{LDLIBS} @_";
62         print "$execstr\n" if $verbose;
63         exec $execstr;
64 }
65
66 sub do_link_dir {
67         my $execstr = "$ENV{RUNLD} -o $out $ENV{PICLDFLAGS} @_";
68         print "$execstr\n" if $verbose;
69         exec $execstr;
70 }
71
72 sub do_compile {
73         my ($do_compile, $do_link, $file) = @_;
74
75         my $flags = '';
76         my $binary = $ENV{RUNCC};
77         if ($do_compile) {
78                 $flags = $ENV{CXXFLAGS};
79                 $flags =~ s/ -pedantic// if nopedantic($file);
80                 $flags .= ' ' . getcompilerflags($file);
81
82                 if ($file =~ m#(?:^|/)((?:m|cmd)_[^/. ]+)(?:\.cpp|/.*\.cpp)$#) {
83                         $flags .= ' -DMODNAME='.$1.'.so';
84                 }
85         } else {
86                 $binary = $ENV{RUNLD};
87         }
88
89         if ($do_link) {
90                 $flags = join ' ', $flags, $ENV{PICLDFLAGS}, getlinkerflags($file);
91         } else {
92                 $flags .= ' -c';
93         }
94
95         my $execstr = "$binary -o $out $flags $file";
96         print "$execstr\n" if $verbose;
97         exec $execstr;
98 }