r18222: filter out double entries from CFLAGS
authorStefan Metzmacher <metze@samba.org>
Thu, 7 Sep 2006 14:00:40 +0000 (14:00 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:17:52 +0000 (14:17 -0500)
metze

source/build/smb_build/cflags.pm
source/build/smb_build/config_mk.pm
source/build/smb_build/input.pm
source/build/smb_build/output.pm

index 6dfe4fe94e3c6b96cc5d2205fa179de1f5a08fa4..71898a582b2080efeda62857f719665e63798ec2 100755 (executable)
@@ -14,15 +14,18 @@ sub create_cflags($$)
 
        foreach my $key (values %{$CTX}) {
                next unless defined ($key->{OBJ_LIST});
-               next unless defined ($key->{CFLAGS});
-               next if ($key->{CFLAGS} eq "");
+
+               next unless defined ($key->{FINAL_CFLAGS});
+               next unless ($#{$key->{FINAL_CFLAGS}} >= 0);
+
+               my $cflags = join(' ', @{$key->{FINAL_CFLAGS}});
 
                foreach (@{$key->{OBJ_LIST}}) {
                        my $ofile = $_;
                        my $dfile = $_;
                        $dfile =~ s/\.o$/.d/;
                        $dfile =~ s/\.ho$/.d/;
-                       print CFLAGS_TXT "$ofile $dfile: CFLAGS+=$key->{CFLAGS}\n";
+                       print CFLAGS_TXT "$ofile $dfile: CFLAGS+= $cflags\n";
                }
        }
        close(CFLAGS_TXT);
index 65f873f5005342412ded8137a06dccf415b593ef..4b2a3ff8c70b998aa52f69abed22e1e71d48037d 100644 (file)
@@ -15,7 +15,7 @@ use strict;
 my $section_types = {
        "EXT_LIB" => {
                "LIBS"                  => "list",
-               "CFLAGS"                => "string",
+               "CFLAGS"                => "list",
                "CPPFLAGS"              => "list",
                "LDFLAGS"               => "list",
                },
@@ -34,7 +34,7 @@ my $section_types = {
 
                "PUBLIC_HEADERS"        => "list",
 
-               "CFLAGS"                => "string",
+               "CFLAGS"                => "list",
                "LDFLAGS"               => "list",
                "STANDARD_VISIBILITY"   => "string"
                },
@@ -60,7 +60,7 @@ my $section_types = {
 
                "PUBLIC_HEADERS"        => "list",
 
-               "CFLAGS"                => "string"
+               "CFLAGS"                => "list"
                },
        "BINARY" => {
                "OBJ_FILES"             => "list",
@@ -75,7 +75,7 @@ my $section_types = {
                "PUBLIC_PROTO_HEADER"   => "string",
                "PUBLIC_HEADERS"        => "list", 
 
-               "CFLAGS"                => "string",
+               "CFLAGS"                => "list",
                "STANDARD_VISIBILITY"   => "string",
 
                "USE_HOSTCC"            => "bool"
@@ -103,7 +103,7 @@ my $section_types = {
                "PUBLIC_PROTO_HEADER"   => "string",
                "PRIVATE_PROTO_HEADER"  => "string",
 
-               "CFLAGS"                => "string",
+               "CFLAGS"                => "list",
                "LDFLAGS"               => "list",
                "STANDARD_VISIBILITY"   => "string"
                }
index 227b47c0c71a4fcfd3bc03b7110009daf81de93b..23f25a585463afb1aa1169aa0166d51eaba9b6b4 100644 (file)
@@ -198,10 +198,6 @@ sub check($$$$$)
                        }
                }
 
-               unless (defined($part->{CFLAGS})) {
-                       $part->{CFLAGS} = "";
-               }
-
                unless (defined($part->{PUBLIC_HEADERS})) {
                        $part->{PUBLIC_HEADERS} = [];
                }
index 92531835fabb3f5fdf7a2e6935ed0f9c8064f5a1..9196f20636ac42b712e8b7b1b14bf517c4714502 100644 (file)
@@ -107,6 +107,21 @@ sub generate_binary($)
        $bin->{BINARY} = $bin->{NAME};
 }
 
+sub merge_array($$)
+{
+       # $dest is a reference to an array
+       # $src is an array
+       my ($dest, $src) = @_;
+
+       return unless defined($src);
+       return unless ($#{$src} >= 0);
+
+       foreach my $line (@{$src}) {
+               next if (grep /^$line$/, @{$$dest});
+               push(@{$$dest}, $line);
+       }
+}
+
 
 sub create_output($$)
 {
@@ -128,21 +143,18 @@ sub create_output($$)
        foreach $part (values %{$depend}) {
                next if not defined($part->{OUTPUT_TYPE});
 
+               merge_array(\$part->{FINAL_CFLAGS}, $part->{CPPFLAGS});
+               merge_array(\$part->{FINAL_CFLAGS}, $part->{CFLAGS});
+
                foreach (@{$part->{UNIQUE_DEPENDENCIES_ALL}}) {
                        my $elem = $depend->{$_};
                        next if $elem == $part;
 
-                       push(@{$part->{PUBLIC_CFLAGS}}, @{$elem->{CPPFLAGS}}) if (defined(@{$elem->{CPPFLAGS}}))
-                                                                             and ($#{$elem->{CPPFLAGS}} >= 0);
-
-                       next if not defined($elem->{CFLAGS});
-                       next if $elem->{CFLAGS} eq "";
-                       next if (grep /^$elem->{CFLAGS}$/, @{$part->{PUBLIC_CFLAGS}});
-                       push(@{$part->{PUBLIC_CFLAGS}}, $elem->{CFLAGS});
+                       merge_array(\$part->{FINAL_CFLAGS}, $elem->{CPPFLAGS});
+                       merge_array(\$part->{FINAL_CFLAGS}, $elem->{CFLAGS});
                }
 
-
-               # Always import the CFLAGS and CPPFLAGS of the unique dependencies
+               # Always import the link options of the unique dependencies
                foreach (@{$part->{UNIQUE_DEPENDENCIES}}) {
                        my $elem = $depend->{$_};
                        next if $elem == $part;
@@ -155,15 +167,12 @@ sub create_output($$)
        }
 
        foreach $part (values %{$depend}) {
-               $part->{CFLAGS} .= " " . join(' ', @{$part->{PUBLIC_CFLAGS}}) if defined($part->{PUBLIC_CFLAGS});
-               $part->{CFLAGS} .= " " . join(' ', @{$part->{CPPFLAGS}}) if defined($part->{CPPFLAGS});
                if (($part->{STANDARD_VISIBILITY} ne "default") and 
                        ($config->{visibility_attribute} eq "yes")) {
-                       $part->{CFLAGS} .=  " -fvisibility=$part->{STANDARD_VISIBILITY}";
+                       push(@{$part->{FINAL_CFLAGS}}, "-fvisibility=$part->{STANDARD_VISIBILITY}");
                }
        }
 
-
        return $depend;
 }