Merge branch 'v4-0-test' into v4-0-gmake3
[kamenim/samba.git] / source4 / build / smb_build / makefile.pm
index 9aa4e409bd6fcdfe0d6b4fc8060998267de02f57..b223f53bb2c8c76712af8b3e3db960b13c5cbe57 100644 (file)
@@ -56,6 +56,29 @@ sub _set_config($$)
        }
 }
 
+sub _set_config($$)
+{
+       my ($self, $config) = @_;
+
+       $self->{config} = $config;
+
+       if (not defined($self->{config}->{srcdir})) {
+               $self->{config}->{srcdir} = '.';
+       }
+
+       if (not defined($self->{config}->{builddir})) {
+               $self->{config}->{builddir}  = '.';
+       }
+
+       if ($self->{config}->{prefix} eq "NONE") {
+               $self->{config}->{prefix} = $self->{config}->{ac_default_prefix};
+       }
+
+       if ($self->{config}->{exec_prefix} eq "NONE") {
+               $self->{config}->{exec_prefix} = $self->{config}->{prefix};
+       }
+}
+
 sub output($$)
 {
        my ($self, $text) = @_;
@@ -354,4 +377,57 @@ sub CFlags($$)
        $self->output("\$($key->{NAME}_OBJ_LIST) \$(patsubst %.ho,%.d,\$($key->{NAME}_OBJ_LIST:.o=.d)): CFLAGS+=$cflags\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;