public override SolutionBuilder.BuildResult ProcessBuildResult(VariableSet variables, Configuration configuration, SolutionBuilder.BuildResult buildResult) { CopiedOutputGatherer.GatherFromProjectFiles( variables, configuration, buildResult ); return(base.ProcessBuildResult(variables, configuration, buildResult)); }
static void Main(string[] arguments) { SolutionBuilder.SolutionBuilder.HandleCommandLine(); var buildGroups = new List <BuildGroup>(); var profiles = new Dictionary <string, IProfile>(); var analyzers = new Dictionary <string, IAnalyzer>(); var manifest = new AssemblyManifest(); var assemblyCache = new AssemblyCache(); var processedAssemblies = new HashSet <string>(); var commandLineConfiguration = ParseCommandLine(arguments, buildGroups, profiles, analyzers, assemblyCache); if ((buildGroups.Count < 1) || (commandLineConfiguration == null)) { Console.Error.WriteLine("// No assemblies specified to translate. Exiting."); } int totalFailureCount = 0; foreach (var buildGroup in buildGroups) { var config = buildGroup.BaseConfiguration; var variables = buildGroup.BaseVariables; foreach (var filename in buildGroup.FilesToBuild) { if (config.Assemblies.Ignored.Any( (ignoreRegex) => Regex.IsMatch(filename, ignoreRegex, RegexOptions.IgnoreCase)) ) { Console.Error.WriteLine("// Ignoring build result '{0}' based on configuration.", Path.GetFileName(filename)); continue; } string fileConfigPath; var fileConfigSearchDir = Path.GetDirectoryName(filename); var separators = new char[] { '/', '\\' }; do { fileConfigPath = Path.Combine( fileConfigSearchDir, String.Format("{0}.jsilconfig", Path.GetFileName(filename)) ); if (!File.Exists(fileConfigPath)) { fileConfigSearchDir = Path.GetFullPath(Path.Combine(fileConfigSearchDir, "..")); } else { break; } } while (fileConfigSearchDir.IndexOfAny(separators, 3) > 0); var fileConfig = File.Exists(fileConfigPath) ? new Configuration[] { LoadConfiguration(fileConfigPath), commandLineConfiguration } : new Configuration[] { commandLineConfiguration }; var localConfig = MergeConfigurations(config, fileConfig); var localProfile = buildGroup.Profile; if (localConfig.Profile != null) { if (profiles.ContainsKey(localConfig.Profile)) { localProfile = profiles[localConfig.Profile]; } else { throw new Exception(String.Format( "No profile named '{0}' was found. Did you load the correct profile assembly?", localConfig.Profile )); } } localConfig = localProfile.GetConfiguration(localConfig); var localVariables = localConfig.ApplyTo(variables); localVariables.SetAssemblyPath(filename); var newProxies = (from p in localConfig.Assemblies.Proxies let newP = MapPath(p, localVariables, true, true) where newP != null select newP).ToArray(); localConfig.Assemblies.Proxies.Clear(); localConfig.Assemblies.Proxies.AddRange(newProxies); foreach (var analyzer in analyzers.Values) { analyzer.SetConfiguration(localConfig); } using (var translator = CreateTranslator(localConfig, manifest, assemblyCache)) { var ignoredMethods = new List <KeyValuePair <string, string[]> >(); translator.IgnoredMethod += (methodName, variableNames) => ignoredMethods.Add(new KeyValuePair <string, string[]>(methodName, variableNames)); translator.AssembliesLoaded += definitions => { foreach (var analyzer in analyzers.Values) { analyzer.AddAssemblies(definitions); } }; translator.AnalyzeStarted += () => { foreach (var analyzer in analyzers.Values) { analyzer.Analyze(translator._TypeInfoProvider); } }; translator.MemberCanBeSkipped += member => { foreach (var analyzer in analyzers.Values) { if (analyzer.MemberCanBeSkipped(member)) { return(true); } } return(false); }; var outputs = buildGroup.Profile.Translate(localVariables, translator, localConfig, filename, localConfig.UseLocalProxies.GetValueOrDefault(true)); if (localConfig.OutputDirectory == null) { throw new Exception("No output directory was specified!"); } if (buildGroup.SkippedAssemblies != null) { foreach (var sa in buildGroup.SkippedAssemblies) { if (processedAssemblies.Contains(sa)) { continue; } Console.Error.WriteLine("// Processing '{0}'", Path.GetFileName(sa)); processedAssemblies.Add(sa); buildGroup.Profile.ProcessSkippedAssembly( localConfig, sa, outputs ); } } var outputDir = MapPath(localConfig.OutputDirectory, localVariables, false); CopiedOutputGatherer.EnsureDirectoryExists(outputDir); Console.Error.WriteLine("// Saving output to '{0}'.", ShortenPath(outputDir) + Path.DirectorySeparatorChar); // Ensures that the log file contains the name of the profile that was actually used. localConfig.Profile = localProfile.GetType().Name; if (ignoredMethods.Count > 0) { Console.Error.WriteLine("// {0} method(s) were ignored during translation. See the log for a list.", ignoredMethods.Count); } EmitLog(outputDir, localConfig, filename, outputs, ignoredMethods); buildGroup.Profile.WriteOutputs(localVariables, outputs, outputDir, Path.GetFileName(filename) + "."); totalFailureCount += translator.Failures.Count; } } } if (Environment.UserInteractive && Debugger.IsAttached) { Console.Error.WriteLine("// Press the any key to continue."); Console.ReadKey(); } Environment.ExitCode = totalFailureCount; }