示例#1
0
        /// <summary>
        /// Return the data driven info for the given platform name
        /// </summary>
        /// <param name="PlatformName"></param>
        /// <returns></returns>
        public static ConfigDataDrivenPlatformInfo GetDataDrivenInfoForPlatform(string PlatformName)
        {
            // need to init?
            if (PlatformInfos == null)
            {
                PlatformInfos = new Dictionary <string, ConfigDataDrivenPlatformInfo>();

                // look through all config dirs looking for the data driven ini file
                foreach (string FilePath in Directory.EnumerateFiles(Path.Combine(UnrealBuildTool.EngineDirectory.FullName, "Config"), "DataDrivenPlatformInfo.ini", SearchOption.AllDirectories))
                {
                    // get the platform name from the path (Foo/Engine/Config/<Platform>/DataDrivenPlatformInfo.ini);
                    string IniPlatformName = Path.GetFileName(Path.GetDirectoryName(FilePath));

                    // load the DataDrivenPlatformInfo from the path
                    ConfigFile Config = new ConfigFile(new FileReference(FilePath));
                    ConfigDataDrivenPlatformInfo NewInfo = new ConfigDataDrivenPlatformInfo();

                    // create the object using the config, and cache it
                    if (NewInfo.InitFromConfig(Config))
                    {
                        PlatformInfos[IniPlatformName] = NewInfo;
                    }
                }
            }

            // lookup the platform name (which is not guaranteed to be there)
            ConfigDataDrivenPlatformInfo Info = null;

            PlatformInfos.TryGetValue(PlatformName, out Info);

            // return what we found of null if nothing
            return(Info);
        }
示例#2
0
        /// <summary>
        /// Return the data driven info for the given platform name
        /// </summary>
        /// <param name="PlatformName"></param>
        /// <returns></returns>
        public static ConfigDataDrivenPlatformInfo GetDataDrivenInfoForPlatform(string PlatformName)
        {
            // lookup the platform name (which is not guaranteed to be there)
            ConfigDataDrivenPlatformInfo Info = null;

            GetAllPlatformInfos().TryGetValue(PlatformName, out Info);

            // return what we found of null if nothing
            return(Info);
        }
示例#3
0
        /// <summary>
        /// Return all data driven infos found
        /// </summary>
        /// <returns></returns>
        public static Dictionary <string, ConfigDataDrivenPlatformInfo> GetAllPlatformInfos()
        {
            // need to init?
            if (PlatformInfos == null)
            {
                PlatformInfos = new Dictionary <string, ConfigDataDrivenPlatformInfo>();
                Dictionary <string, string> IniParents = new Dictionary <string, string>();

                foreach (DirectoryReference EngineConfigDir in UnrealBuildTool.GetAllEngineDirectories("Config"))
                {
                    // look through all config dirs looking for the data driven ini file
                    foreach (string FilePath in Directory.EnumerateFiles(EngineConfigDir.FullName, "DataDrivenPlatformInfo.ini", SearchOption.AllDirectories))
                    {
                        FileReference FileRef = new FileReference(FilePath);

                        // get the platform name from the path
                        string IniPlatformName;
                        if (FileRef.IsUnderDirectory(DirectoryReference.Combine(UnrealBuildTool.EngineDirectory, "Config")))
                        {
                            // Foo/Engine/Config/<Platform>/DataDrivenPlatformInfo.ini
                            IniPlatformName = Path.GetFileName(Path.GetDirectoryName(FilePath));
                        }
                        else
                        {
                            // Foo/Engine/Platforms/<Platform>/Config/DataDrivenPlatformInfo.ini
                            IniPlatformName = Path.GetFileName(Path.GetDirectoryName(Path.GetDirectoryName(FilePath)));
                        }

                        // load the DataDrivenPlatformInfo from the path
                        ConfigFile Config = new ConfigFile(FileRef);
                        ConfigDataDrivenPlatformInfo NewInfo = new ConfigDataDrivenPlatformInfo();


                        // we must have the key section
                        ConfigFileSection Section = null;
                        if (Config.TryGetSection("DataDrivenPlatformInfo", out Section))
                        {
                            ConfigHierarchySection ParsedSection = new ConfigHierarchySection(new List <ConfigFileSection>()
                            {
                                Section
                            });

                            // get string values
                            string IniParent;
                            if (ParsedSection.TryGetValue("IniParent", out IniParent))
                            {
                                IniParents[IniPlatformName] = IniParent;
                            }

                            // slightly nasty bool parsing for bool values
                            string Temp;
                            if (ParsedSection.TryGetValue("bIsConfidential", out Temp) == false || ConfigHierarchy.TryParse(Temp, out NewInfo.bIsConfidential) == false)
                            {
                                NewInfo.bIsConfidential = false;
                            }

                            // get a list of additional restricted folders
                            IReadOnlyList <string> AdditionalRestrictedFolders;
                            if (ParsedSection.TryGetValues("AdditionalRestrictedFolders", out AdditionalRestrictedFolders) && AdditionalRestrictedFolders.Count > 0)
                            {
                                NewInfo.AdditionalRestrictedFolders = AdditionalRestrictedFolders.Select(x => x.Trim()).Where(x => x.Length > 0).ToArray();
                            }

                            // create cache it
                            PlatformInfos[IniPlatformName] = NewInfo;
                        }
                    }
                }

                // now that all are read in, calculate the ini parent chain, starting with parent-most
                foreach (KeyValuePair <string, ConfigDataDrivenPlatformInfo> Pair in PlatformInfos)
                {
                    string CurrentPlatform;

                    // walk up the chain and build up the ini chain
                    List <string> Chain = new List <string>();
                    if (IniParents.TryGetValue(Pair.Key, out CurrentPlatform))
                    {
                        while (!string.IsNullOrEmpty(CurrentPlatform))
                        {
                            // insert at 0 to reverse the order
                            Chain.Insert(0, CurrentPlatform);
                            if (IniParents.TryGetValue(CurrentPlatform, out CurrentPlatform) == false)
                            {
                                break;
                            }
                        }
                    }

                    // bake it into the info
                    if (Chain.Count > 0)
                    {
                        Pair.Value.IniParentChain = Chain.ToArray();
                    }
                }
            }

            return(PlatformInfos);
        }