private void RunWithProjects(CommandTarget target, bool dumpMode, bool dumpDepsMode)
{
log.InfoFormat("Building...");
var context = buildContextFactory.CreateBuildContext();
var projects = target.Projects.ToList();
IBuilder rootBuilder = coreBuilderFactory.Merge(
projectBuilders
.Select(pb => pb.Create(projects))
.Where(b => b != null).ToArray(),
new ProjectBuilderTag("Top level project builders", projects));
if (rootBuilder != null)
{
context.AddBuilder(rootBuilder);
var productTarget = target as ProductTarget;
if (productTarget != null)
{
rootBuilder = AddProductBuildStep(context, productTarget.Product, rootBuilder);
}
if (dumpMode)
{
context.Dump(name => targetRoot.CreateBinaryFile("builders." + name + ".dot"), rootBuilder);
}
else if (dumpDepsMode)
{
context.DumpDependencies(rootBuilder, output);
}
else
{
var result = context.Run(rootBuilder);
if (result.Count > 0)
{
var outputs = context.GetResults(rootBuilder);
foreach (var outputPath in outputs)
log.DebugFormat("Generated output for build: {0}", outputPath);
}
else
{
log.Warn("Build produced no results");
}
}
}
output.Message("Build completed.");
}