private void GeneratePlatformSpecificSolution(ProjectFileConfiguration projectConfig, bool includeTests, bool travisSolution, string solutionFileName = null)
{
// Do not generate solutions for PCL sub profiles.
if (projectConfig.IsSubProfile)
{
return;
}
var projectType = projectConfig.Name;
Console.WriteLine("...generating platform-specific solution file AWSSDK.{0}.sln", projectType);
var session = new Dictionary<string, object>();
var buildConfigurations = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
var solutionProjects = new Dictionary<string, ProjectFileCreator.ProjectConfigurationData>();
var projectTypeWildCard = string.Format("AWSSDK.*.{0}.csproj", projectType);
var sdkSourceFolder = Path.Combine(Options.SdkRootFolder, GeneratorDriver.SourceSubFoldername);
var coreProjects = new List<Project>();
var coreProjectsRoot = Path.Combine(sdkSourceFolder, GeneratorDriver.CoreSubFoldername);
foreach (var projectFile in Directory.GetFiles(coreProjectsRoot, projectTypeWildCard, SearchOption.TopDirectoryOnly))
{
coreProjects.Add(CoreProjectFromFile(projectFile));
SelectProjectAndConfigurationsForSolution(projectFile, solutionProjects, buildConfigurations);
}
var serviceSolutionFolders = new List<ServiceSolutionFolder>();
var serviceProjectsRoot = Path.Combine(sdkSourceFolder, GeneratorDriver.ServicesSubFoldername);
foreach (var servicePath in Directory.GetDirectories(serviceProjectsRoot))
{
var di = new DirectoryInfo(servicePath);
var folder = ServiceSolutionFolderFromPath(di.Name);
foreach (var projectFile in Directory.GetFiles(servicePath, projectTypeWildCard, SearchOption.TopDirectoryOnly))
{
if (travisSolution && projectFile.Contains("AWSSDK.MobileAnalytics"))
continue;
folder.Projects.Add(ServiceProjectFromFile(di.Name, projectFile));
SelectProjectAndConfigurationsForSolution(projectFile, solutionProjects, buildConfigurations);
}
serviceSolutionFolders.Add(folder);
}
var testProjects = new List<Project>();
if (includeTests)
{
var sdkTestsFolder = Path.Combine(Options.SdkRootFolder, GeneratorDriver.TestsSubFoldername);
foreach (var testFoldername in new[] { GeneratorDriver.CommonTestSubFoldername, GeneratorDriver.UnitTestsSubFoldername, GeneratorDriver.IntegrationTestsSubFolderName })
{
var testFolder = Path.Combine(sdkTestsFolder, testFoldername);
foreach (var projectFile in Directory.GetFiles(testFolder, projectTypeWildCard, SearchOption.TopDirectoryOnly))
{
testProjects.Add(TestProjectFromFile(testFoldername, projectFile));
var projectKey = Path.GetFileNameWithoutExtension(projectFile);
solutionProjects.Add(projectKey, _allProjects[projectKey]);
SelectBuildConfigurationsForProject(projectKey, buildConfigurations);
}
}
if (projectType.Equals(ProjectTypes.Net35, StringComparison.Ordinal) || projectType.Equals(ProjectTypes.Net45, StringComparison.Ordinal))
{
solutionProjects.Add(GeneratorLibProjectName, GeneratorLibProjectConfig);
testProjects.Add(GeneratorLibProject);
SelectBuildConfigurationsForProject(GeneratorLibProjectName, buildConfigurations);
}
AddExtraTestProjects(projectConfig, solutionProjects, testProjects);
}
var configurationsList = buildConfigurations.ToList();
configurationsList.Sort();
session["AllProjects"] = solutionProjects;
session["CoreProjects"] = coreProjects;
session["ServiceSolutionFolders"] = serviceSolutionFolders;
session["TestProjects"] = testProjects;
session["Configurations"] = configurationsList;
var generator = new SolutionFileGenerator { Session = session };
var content = generator.TransformText();
if (string.IsNullOrEmpty(solutionFileName))
solutionFileName = string.Format("AWSSDK.{0}.sln", projectType);
GeneratorDriver.WriteFile(Options.SdkRootFolder, null, solutionFileName, content, true, false);
}