Ejemplo n.º 1
0
        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))));
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 /// <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;
 }
Ejemplo n.º 4
0
 /// <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);
 }
Ejemplo n.º 5
0
        /// <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);
        }
Ejemplo n.º 6
0
        /// <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();
            }
        }
Ejemplo n.º 7
0
        /// <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);
                }
            }
        }