public NinjaPipConstructor(FrontEndContext context, FrontEndHost frontEndHost, string frontEndName, ModuleDefinition moduleDefinition, QualifierId qualifierId, AbsolutePath projectRoot, AbsolutePath specPath, bool suppressDebugFlags, IUntrackingSettings untrackingSettings) { Contract.Requires(context != null); Contract.Requires(frontEndHost != null); Contract.Requires(moduleDefinition != null); Contract.Requires(projectRoot.IsValid); Contract.Requires(specPath.IsValid); m_context = context; m_frontEndHost = frontEndHost; m_moduleDefinition = moduleDefinition; m_projectRoot = projectRoot; m_specPath = specPath; m_suppressDebugFlags = suppressDebugFlags; m_untrackingSettings = untrackingSettings; m_pipConstructionHelper = GetPipConstructionHelperForModule(m_projectRoot, moduleDefinition, qualifierId); m_frontEndName = frontEndName; m_manuallyDroppedDependenciesPath = Lazy.Create(() => m_frontEndHost.Configuration.Layout.BuildEngineDirectory .Combine(m_context.PathTable, RelativePath.Create(m_context.StringTable, @"tools\CMakeNinjaPipEnvironment"))); // Lazy initialization of environment variables and passthroughs var allEnvironmentVariables = Lazy.Create(GetAllEnvironmentVariables); m_environmentVariables = Lazy.Create(() => allEnvironmentVariables.Value.Where(kvp => SpecialEnvironmentVariables.PassThroughPrefixes.All(prefix => !kvp.Key.StartsWith(prefix)))); m_passThroughEnvironmentVariables = Lazy.Create(() => allEnvironmentVariables.Value.Where(kvp => SpecialEnvironmentVariables.PassThroughPrefixes.Any(prefix => kvp.Key.StartsWith(prefix)))); }
public NinjaPipConstructor(FrontEndContext context, FrontEndHost frontEndHost, string frontEndName, ModuleDefinition moduleDefinition, QualifierId qualifierId, AbsolutePath projectRoot, AbsolutePath specPath, bool suppressDebugFlags, IEnumerable <KeyValuePair <string, string> > userDefinedEnvironment, IEnumerable <string> userDefinedPassthroughVariables, IUntrackingSettings untrackingSettings) { Contract.Requires(context != null); Contract.Requires(frontEndHost != null); Contract.Requires(moduleDefinition != null); Contract.Requires(projectRoot.IsValid); Contract.Requires(specPath.IsValid); m_context = context; m_frontEndHost = frontEndHost; m_moduleDefinition = moduleDefinition; m_projectRoot = projectRoot; m_specPath = specPath; m_suppressDebugFlags = suppressDebugFlags; m_untrackingSettings = untrackingSettings; m_pipConstructionHelper = GetPipConstructionHelperForModule(m_projectRoot, moduleDefinition, qualifierId); m_frontEndName = frontEndName; m_manuallyDroppedDependenciesPath = m_frontEndHost.Configuration.Layout.BuildEngineDirectory .Combine(m_context.PathTable, RelativePath.Create(m_context.StringTable, @"tools\CMakeNinjaPipEnvironment")); PrepareEnvironment(userDefinedEnvironment, userDefinedPassthroughVariables, out m_userDefinedEnvironment, out m_userDefinedPassthroughVariables); }
/// <nodoc /> public UntrackingResolverSettings(IResolverSettings template, IUntrackingSettings untrackingTemplate, PathRemapper pathRemapper) : base(template, pathRemapper) { UntrackedDirectoryScopes = untrackingTemplate.UntrackedDirectoryScopes; UntrackedFiles = untrackingTemplate.UntrackedFiles; UntrackedDirectories = untrackingTemplate.UntrackedDirectories; UntrackedGlobalDirectoryScopes = untrackingTemplate.UntrackedGlobalDirectoryScopes; ChildProcessesToBreakawayFromSandbox = untrackingTemplate.ChildProcessesToBreakawayFromSandbox; }
/// <nodoc/> public NinjaPipGraphBuilder( FrontEndContext context, FrontEndHost frontEndHost, ModuleDefinition moduleDefinition, AbsolutePath projectRoot, AbsolutePath specPath, QualifierId qualifierId, string frontEndName, bool suppressDebugFlags, IEnumerable <KeyValuePair <string, string> > userDefinedEnvironment, IEnumerable <string> userDefinedPassthroughVariables, IUntrackingSettings untrackingSettings) { Contract.Requires(context != null); Contract.Requires(frontEndHost != null); Contract.Requires(moduleDefinition != null); Contract.Requires(projectRoot.IsValid); Contract.Requires(specPath.IsValid); Contract.Requires(!string.IsNullOrEmpty(frontEndName)); m_pipConstructor = new NinjaPipConstructor(context, frontEndHost, frontEndName, moduleDefinition, qualifierId, projectRoot, specPath, suppressDebugFlags, userDefinedEnvironment, userDefinedPassthroughVariables, untrackingSettings); }
/// <nodoc/> public NinjaPipGraphBuilder( FrontEndContext context, FrontEndHost frontEndHost, ModuleDefinition moduleDefinition, AbsolutePath projectRoot, AbsolutePath specPath, QualifierId qualifierId, string frontEndName, bool suppressDebugFlags, IUntrackingSettings untrackingSettings) { Contract.Requires(context != null); Contract.Requires(frontEndHost != null); Contract.Requires(moduleDefinition != null); Contract.Requires(projectRoot.IsValid); Contract.Requires(specPath.IsValid); Contract.Requires(!string.IsNullOrEmpty(frontEndName)); m_context = context; m_frontEndHost = frontEndHost; m_pipConstructor = new NinjaPipConstructor(context, frontEndHost, frontEndName, moduleDefinition, qualifierId, projectRoot, specPath, suppressDebugFlags, untrackingSettings); }
/// <summary> /// Some FrontEnds allow configurable untracking of files, directories and directory scopes /// This method applies that configuration to the process builder /// </summary> public static void UntrackUserConfigurableArtifacts(PathTable pathTable, AbsolutePath currentProjectRoot, IEnumerable <AbsolutePath> allProjectRoots, ProcessBuilder processBuilder, IUntrackingSettings settings) { Contract.AssertNotNull(settings); Contract.Assert(currentProjectRoot.IsValid); Contract.AssertNotNull(allProjectRoots); Contract.AssertNotNull(processBuilder); Contract.AssertNotNull(settings); if (settings.UntrackedDirectoryScopes != null) { foreach (var untrackedDirectoryScopeUnion in settings.UntrackedDirectoryScopes) { DirectoryArtifact untrackedDirectoryScope = ResolveAbsoluteOrRelativeDirectory(pathTable, untrackedDirectoryScopeUnion, currentProjectRoot); if (!untrackedDirectoryScope.IsValid) { continue; } processBuilder.AddUntrackedDirectoryScope(untrackedDirectoryScope); } } if (settings.UntrackedDirectories != null) { foreach (var untrackedDirectoryUnion in settings.UntrackedDirectories) { DirectoryArtifact untrackedDirectory = ResolveAbsoluteOrRelativeDirectory(pathTable, untrackedDirectoryUnion, currentProjectRoot); if (!untrackedDirectory.IsValid) { continue; } processBuilder.AddUntrackedDirectoryScope(untrackedDirectory); } } if (settings.UntrackedFiles != null) { foreach (var untrackedFile in settings.UntrackedFiles) { if (!untrackedFile.IsValid) { continue; } processBuilder.AddUntrackedFile(untrackedFile); } } if (settings.UntrackedGlobalDirectoryScopes != null) { foreach (var relativeDirectory in settings.UntrackedGlobalDirectoryScopes) { if (!relativeDirectory.IsValid) { continue; } foreach (var projectRoot in allProjectRoots) { processBuilder.AddUntrackedDirectoryScope(DirectoryArtifact.CreateWithZeroPartialSealId(projectRoot.Combine(pathTable, relativeDirectory))); } } } if (settings.ChildProcessesToBreakawayFromSandbox != null) { processBuilder.ChildProcessesToBreakawayFromSandbox = settings.ChildProcessesToBreakawayFromSandbox.Where(processName => processName.IsValid).ToReadOnlyArray(); } }
/// <summary> /// Some FrontEnds allow configurable untracking of files, directories and directory scopes /// This method applies that configuration to the process builder /// </summary> public static void UntrackUserConfigurableArtifacts(ProcessBuilder processBuilder, IUntrackingSettings settings) { Contract.Assert(settings != null); if (settings.UntrackedDirectoryScopes != null) { foreach (var untrackedDirectoryScope in settings.UntrackedDirectoryScopes) { if (!untrackedDirectoryScope.IsValid) { continue; } processBuilder.AddUntrackedDirectoryScope(untrackedDirectoryScope); } } if (settings.UntrackedDirectories != null) { foreach (var untrackedDirectory in settings.UntrackedDirectories) { if (!untrackedDirectory.IsValid) { continue; } processBuilder.AddUntrackedDirectoryScope(untrackedDirectory); } } if (settings.UntrackedFiles != null) { foreach (var untrackedFile in settings.UntrackedFiles) { if (!untrackedFile.IsValid) { continue; } processBuilder.AddUntrackedFile(untrackedFile); } } }