示例#1
0
        public ProjectValidationMessages Validate()
        {
            var messages = new ProjectValidationMessages();

            if (TestFolder.IsEmpty())
            {
                messages.Messages.Add("Test Folder must be specified");
            }
            else if (!Directory.Exists(GetTestFolder()))
            {
                messages.Messages.Add("Test Folder '{0}' does not exist".ToFormat(GetTestFolder()));
            }

            if (BinaryFolder.IsEmpty())
            {
                messages.Messages.Add("Binary Folder must be specified");
            }
            else if (!Directory.Exists(GetBinaryFolder()))
            {
                messages.Messages.Add("Binary Folder '{0}' does not exist".ToFormat(GetBinaryFolder()));
            }

            if (FixtureAssembly.IsEmpty() && SystemTypeName.IsEmpty())
            {
                messages.Messages.Add("Either Fixture Assembly or System Type Name needs to be specified");
            }

            if (Name.IsEmpty())
            {
                messages.Messages.Add("Name is required");
            }

            if (FileName.IsEmpty())
            {
                messages.Messages.Add("File Name is required");
            }

            return(messages);
        }
        /// <summary>
        /// Checks whether the binary output paths are appropriate for the distribution
        /// level of its direct module dependencies
        /// </summary>
        public bool CheckRestrictedFolders(List <DirectoryReference> RootDirectories, Dictionary <UEBuildModule, Dictionary <RestrictedFolder, DirectoryReference> > ModuleRestrictedFolderCache)
        {
            // Find all the modules we depend on
            Dictionary <UEBuildModule, UEBuildModule> ModuleReferencedBy = new Dictionary <UEBuildModule, UEBuildModule>();

            FindModuleReferences(ModuleReferencedBy);

            // Loop through each of the output binaries and check them separately
            bool bResult = true;

            foreach (FileReference OutputFilePath in OutputFilePaths)
            {
                // Find the base directory for this binary
                DirectoryReference BaseDir = RootDirectories.FirstOrDefault(x => OutputFilePath.IsUnderDirectory(x));
                if (BaseDir == null)
                {
                    continue;
                }

                // Find the permitted restricted folder references under the base directory
                List <RestrictedFolder> BinaryFolders = RestrictedFolders.FindPermittedRestrictedFolderReferences(BaseDir, OutputFilePath.Directory);

                List <RestrictedFolder> AliasedBinaryFolders = new List <RestrictedFolder>();
                foreach (RestrictedFolder BinaryFolder in BinaryFolders)
                {
                    string Alias;
                    if (PrimaryModule.AliasRestrictedFolders.TryGetValue(BinaryFolder.ToString(), out Alias))
                    {
                        foreach (RestrictedFolder Folder in RestrictedFolder.GetValues())
                        {
                            if (Folder.ToString().Equals(Alias))
                            {
                                AliasedBinaryFolders.Add(Folder);
                            }
                        }
                    }
                }
                BinaryFolders.AddRange(AliasedBinaryFolders);

                // Check all the dependent modules
                foreach (UEBuildModule Module in ModuleReferencedBy.Keys)
                {
                    // Find the restricted folders for this module
                    Dictionary <RestrictedFolder, DirectoryReference> ModuleRestrictedFolders;
                    if (!ModuleRestrictedFolderCache.TryGetValue(Module, out ModuleRestrictedFolders))
                    {
                        ModuleRestrictedFolders = Module.FindRestrictedFolderReferences(RootDirectories);
                        ModuleRestrictedFolderCache.Add(Module, ModuleRestrictedFolders);
                    }

                    // Write errors for any missing paths in the output files
                    foreach (KeyValuePair <RestrictedFolder, DirectoryReference> Pair in ModuleRestrictedFolders)
                    {
                        if (!BinaryFolders.Contains(Pair.Key))
                        {
                            List <string> ReferenceChain = new List <string>();
                            for (UEBuildModule ReferencedModule = Module; ReferencedModule != null; ReferencedModule = ModuleReferencedBy[ReferencedModule])
                            {
                                ReferenceChain.Insert(0, ReferencedModule.Name);
                            }
                            Log.TraceError("Output binary \"{0}\" is not in a {1} folder, but references \"{2}\" via {3}.", OutputFilePath, Pair.Key.ToString(), Pair.Value, String.Join(" -> ", ReferenceChain));
                            bResult = false;
                        }
                    }
                }
            }
            return(bResult);
        }