IExternalSourceGeneratorPolicy.GenerateSource( ExternalSourceGenerator sender, Bam.Core.ExecutionContext context, Bam.Core.TokenizedString executable, Bam.Core.TokenizedStringArray arguments, Bam.Core.TokenizedString output_directory, System.Collections.Generic.IReadOnlyDictionary <string, Bam.Core.TokenizedString> expected_output_files, System.Collections.Generic.IReadOnlyDictionary <string, Bam.Core.TokenizedString> input_files ) { Bam.Core.IOWrapper.CreateDirectoryIfNotExists(output_directory.ToString()); var program = executable.ToStringQuoteIfNecessary(); var linearised_args = arguments.ToString(' '); Bam.Core.Log.Info("Running: {0} {1}", program, linearised_args); Bam.Core.OSUtilities.RunExecutable(program, linearised_args); foreach (var expected_file in expected_output_files) { if (!System.IO.File.Exists(expected_file.Value.ToString())) { throw new Bam.Core.Exception( "Expected '{0}' to exist (key={1}), but it does not", expected_file.Value.ToString(), expected_file.Key ); } } }
IExternalSourceGeneratorPolicy.GenerateSource( ExternalSourceGenerator sender, Bam.Core.ExecutionContext context, Bam.Core.TokenizedString executable, Bam.Core.TokenizedStringArray arguments, Bam.Core.TokenizedString output_directory, System.Collections.Generic.IReadOnlyDictionary <string, Bam.Core.TokenizedString> expected_output_files, System.Collections.Generic.IReadOnlyDictionary <string, Bam.Core.TokenizedString> input_files ) { var encapsulating = sender.GetEncapsulatingReferencedModule(); var solution = Bam.Core.Graph.Instance.MetaData as VSSolutionBuilder.VSSolution; var project = solution.EnsureProjectExists(encapsulating); var config = project.GetConfiguration(encapsulating); var args = new Bam.Core.StringArray(); args.Add(System.String.Format("{0} {1}", executable.ToStringQuoteIfNecessary(), arguments.ToString(' '))); foreach (var input in input_files.Values) { config.AddOtherFile(input); var customBuild = config.GetSettingsGroup( VSSolutionBuilder.VSSettingsGroup.ESettingsGroup.CustomBuild, include: input, uniqueToProject: true ); customBuild.AddSetting("Command", args.ToString(' '), condition: config.ConditionText); customBuild.AddSetting("Message", System.String.Format("Generating outputs from {0}", input.ToString()), condition: config.ConditionText); customBuild.AddSetting("Outputs", expected_output_files.Values, condition: config.ConditionText); customBuild.AddSetting("AdditionalInputs", input_files.Values, condition: config.ConditionText); } }