Make the includes field an array in MSVC build scripts
authorDavid Rowley <drowley@postgresql.org>
Wed, 28 Jul 2021 22:14:25 +0000 (10:14 +1200)
committerDavid Rowley <drowley@postgresql.org>
Wed, 28 Jul 2021 22:14:25 +0000 (10:14 +1200)
Previously the 'includes' field was a string.  It's slightly nicer to
manage this when it's defined as an array instead. This allows us to
more easily detect and eliminate duplicates.

Reviewed-by: Álvaro Herrera, Andrew Dunstan, Dagfinn Ilmari Mannsåker
Discussion: https://postgr.es/m/CAApHDvpo6g5csCTjc_0C7DMvgFPomVb0Rh-AcW5afd=Ya=LRuw@mail.gmail.com

src/tools/msvc/MSBuildProject.pm
src/tools/msvc/Mkvcbuild.pm
src/tools/msvc/Project.pm

index ebe6530ba58abf384f98f42d4d35f8b255361b71..fdd22e89eb2addb6408e1ec74317b27494e9f62c 100644 (file)
@@ -313,11 +313,8 @@ sub WriteItemDefinitionGroup
        my $targetmachine =
          $self->{platform} eq 'Win32' ? 'MachineX86' : 'MachineX64';
 
-       my $includes = $self->{includes};
-       unless ($includes eq '' or $includes =~ /;$/)
-       {
-               $includes .= ';';
-       }
+       my $includes = join ';', @{$self->{includes}}, "";
+
        print $f <<EOF;
   <ItemDefinitionGroup Condition="'\$(Configuration)|\$(Platform)'=='$cfgname|$self->{platform}'">
     <ClCompile>
index 4c36e482fbfbc23fb24c28c35f80cd5e14fb29c9..803d9cf30cbb61e2d2e383cd9accce47a2571cd3 100644 (file)
@@ -937,7 +937,7 @@ sub AddTransformModule
        # Add PL dependencies
        $p->AddIncludeDir($pl_src);
        $p->AddReference($pl_proj);
-       $p->AddIncludeDir($pl_proj->{includes});
+       $p->AddIncludeDir($_) for @{$pl_proj->{includes}};
        foreach my $pl_lib (@{ $pl_proj->{libraries} })
        {
                $p->AddLibrary($pl_lib);
@@ -947,7 +947,7 @@ sub AddTransformModule
        if ($type_proj)
        {
                $p->AddIncludeDir($type_src);
-               $p->AddIncludeDir($type_proj->{includes});
+               $p->AddIncludeDir($_) for @{$type_proj->{includes}};
                foreach my $type_lib (@{ $type_proj->{libraries} })
                {
                        $p->AddLibrary($type_lib);
index e1a5d139d3c7fb91b52ca241c11d76b60c283d5d..a6c3aa0d6871d1991e5f36f8bcb201257300ed46 100644 (file)
@@ -30,7 +30,7 @@ sub _new
                references            => [],
                libraries             => [],
                suffixlib             => [],
-               includes              => '',
+               includes              => [],
                prefixincludes        => '',
                defines               => ';',
                solution              => $solution,
@@ -151,13 +151,15 @@ sub AddLibrary
 
 sub AddIncludeDir
 {
-       my ($self, $inc) = @_;
+       my ($self, $incstr) = @_;
 
-       if ($self->{includes} ne '')
+       foreach my $inc (split(/;/, $incstr))
        {
-               $self->{includes} .= ';';
+               if (! grep { $_ eq $inc} @{ $self->{includes} })
+               {
+                       push @{ $self->{includes} }, $inc;
+               }
        }
-       $self->{includes} .= $inc;
        return;
 }