summaryrefslogtreecommitdiff
path: root/source4/build/smb_build/makefile.pm
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2008-02-25 18:29:04 +0100
committerJelmer Vernooij <jelmer@samba.org>2008-02-29 15:00:55 +0100
commit4453348aed08e9d164454a8660081b5c177cd44b (patch)
tree27aca9ee02383714021b861df4dadaead3944888 /source4/build/smb_build/makefile.pm
parent3017c49fb3feedf8bb147247d5410ceb70a04f4e (diff)
downloadsamba-4453348aed08e9d164454a8660081b5c177cd44b.tar.gz
Include CFLAGS overrides in make file.
(This used to be commit 2ead1523608d9cd9a58cf55bcee2c8a39b6895e0)
Diffstat (limited to 'source4/build/smb_build/makefile.pm')
-rw-r--r--source4/build/smb_build/makefile.pm53
1 files changed, 53 insertions, 0 deletions
diff --git a/source4/build/smb_build/makefile.pm b/source4/build/smb_build/makefile.pm
index 9e728fa1622..902e8f7f424 100644
--- a/source4/build/smb_build/makefile.pm
+++ b/source4/build/smb_build/makefile.pm
@@ -398,4 +398,57 @@ endif
print __FILE__.": creating $file\n";
}
+my $sort_available = eval "use sort 'stable'; return 1;";
+$sort_available = 0 unless defined($sort_available);
+
+sub by_path {
+ return 1 if($a =~ m#^\-I/#);
+ return -1 if($b =~ m#^\-I/#);
+ return 0;
+}
+
+sub CFlags($$)
+{
+ my ($self, $key) = @_;
+
+ my $srcdir = $self->{config}->{srcdir};
+ my $builddir = $self->{config}->{builddir};
+
+ my $src_ne_build = ($srcdir ne $builddir) ? 1 : 0;
+
+ return unless defined ($key->{OBJ_LIST});
+ return unless defined ($key->{FINAL_CFLAGS});
+ return unless (@{$key->{FINAL_CFLAGS}} > 0);
+
+ my @sorted_cflags = @{$key->{FINAL_CFLAGS}};
+ if ($sort_available) {
+ @sorted_cflags = sort by_path @{$key->{FINAL_CFLAGS}};
+ }
+
+ # Rewrite CFLAGS so that both the source and the build
+ # directories are in the path.
+ my @cflags = ();
+ foreach my $flag (@sorted_cflags) {
+ if($src_ne_build) {
+ if($flag =~ m#^-I([^/].*$)#) {
+ my $dir = $1;
+ $dir =~ s#^\$\((?:src|build)dir\)/?##;
+ push(@cflags, "-I$builddir/$dir", "-I$srcdir/$dir");
+ next;
+ }
+ }
+ push(@cflags, $flag);
+ }
+
+ my $cflags = join(' ', @cflags);
+
+ foreach (@{$key->{OBJ_LIST}}) {
+ my $ofile = $_;
+ my $dfile = $_;
+ $dfile =~ s/\.o$/.d/;
+ $dfile =~ s/\.ho$/.d/;
+ $self->output("$ofile $dfile: CFLAGS+= $cflags\n");
+ }
+}
+
1;