From 1213838db67ec555aecd13e5799bb3106e29497f Mon Sep 17 00:00:00 2001
From: David Rowley <dgrowley@gmail.com>
Date: Tue, 27 Jul 2021 22:21:08 +1200
Subject: [PATCH v10 2/4] Make the includes field an array in MSVC build
 scripts

Previously the 'includes' field was a string.  It's slightly nicer to
manage this when it's defined as an array instead.
---
 src/tools/msvc/MSBuildProject.pm |  7 ++-----
 src/tools/msvc/Mkvcbuild.pm      |  4 ++--
 src/tools/msvc/Project.pm        | 12 +++++++-----
 3 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/src/tools/msvc/MSBuildProject.pm b/src/tools/msvc/MSBuildProject.pm
index ebe6530ba5..fdd22e89eb 100644
--- a/src/tools/msvc/MSBuildProject.pm
+++ b/src/tools/msvc/MSBuildProject.pm
@@ -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>
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index fd9b93b4de..06b8525218 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -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);
diff --git a/src/tools/msvc/Project.pm b/src/tools/msvc/Project.pm
index e1a5d139d3..a6c3aa0d68 100644
--- a/src/tools/msvc/Project.pm
+++ b/src/tools/msvc/Project.pm
@@ -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;
 }
 
-- 
2.21.0.windows.1

