UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ConfigContext.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
6#include "Containers/Map.h"
7#include "Containers/Set.h"
10#include "CoreGlobals.h"
11#include "CoreTypes.h"
12#include "Misc/ConfigTypes.h"
13// @todo mvoe types into ConfigTypes.h so we don't need to include the monster here
14#include "Misc/ConfigCacheIni.h"
15
16
17#ifndef CUSTOM_CONFIG
18#define CUSTOM_CONFIG ""
19#endif
20
21#ifndef DISABLE_GENERATED_INI_WHEN_COOKED
22#define DISABLE_GENERATED_INI_WHEN_COOKED 0
23#endif
24
25
26class FConfigCacheIni;
27class FConfigFile;
28class FConfigBranch;
29
31{
32public:
33
39 {
40 return FConfigContext(nullptr, true, Platform, &DestConfigFile);
41 }
42
47 {
48 return FConfigContext(nullptr, false, Platform, &DestConfigFile);
49 }
50
55 {
56 return FConfigContext(GConfig, true, FString());
57 }
58
63 {
64 FConfigContext Context(GConfig, true, FString());
65 Context.bForceReload = true;
66 return Context;
67 }
68
73 {
74 return FConfigContext(GConfig, false, FString());
75 }
76
84
92
97 {
99 Context.bIsForPlugin = true;
100 Context.PluginRootDir = PluginRootDir;
101 Context.ChildPluginBaseDirs = ChildPluginsBaseDirs;
102
103
104 // plugins are read in parallel, so we are reading into a file, but not touching GConfig, so bWriteDest would be false, but we
105 // want to write them out as if we had been using GConfig
106 // @todo: honestly, that's just to keep same behavior, but i am not sure it is correct behavior! actually why would reading in ever need to write out?
107 Context.bWriteDestIni = true;
108
109 return Context;
110 }
111
116 {
117 FConfigContext Context(ConfigSystem, true, FString());
118 Context.bIsForPlugin = true;
119 Context.PluginRootDir = PluginRootDir;
120 Context.ChildPluginBaseDirs = ChildPluginsBaseDirs;
121 Context.ConfigFileTag = PluginName;
122
123 return Context;
124 }
125
130 {
131 FConfigContext Context(ConfigSystem, true, FString());
132 Context.bIsForPlugin = true;
133 Context.bIsForPluginModification = true;
134 Context.PluginRootDir = PluginRootDir;
135 Context.ChildPluginBaseDirs = ChildPluginsBaseDirs;
136 Context.ConfigFileTag = PluginName;
137 Context.ChangeTracker = ChangeTracker;
138 Context.PluginModificationPriority = Priority;
139
140 return Context;
141 }
142
148 {
150 Context.StartSkippingAtFilename = StartSkippingAtFilename;
151 return Context;
152 }
153
159 {
160 FConfigContext Context(GConfig, true, FString());
161 Context.bIsFixingUpAfterBinaryConfig = true;
162 Context.bForceReload = true;
163 return Context;
164 }
165
166
167
172
175
177 void CORE_API VisualizeHierarchy(FOutputDevice& Ar, const TCHAR* IniName);
178
183 CORE_API bool Load(const TCHAR* IniName);
184
189 CORE_API bool Load(const TCHAR* IniName, FString& OutFilename);
190
191
192 // because the hierarchy can jump between platforms, we cache off some directories per chained-platform
202 CORE_API const FPerPlatformDirs& GetPerPlatformDirs(const FString& PlatformName);
203
205
206
207 // @todo make these private and friend the FCOnfigCacheIni and FConfigFile once everything is a member function!!!!
209
213
215 FString Platform;
218 FString BaseIniName;
220
228
230
231 // useful strings that are used alot when walking the hierarchy
236
237 // allow a custom set of layers
239
240 bool bUseHierarchyCache = false;
242 bool bForceReload = false;
243 bool bAllowRemoteConfig = false;
245 bool bWriteDestIni = false;
247 bool bIsForPlugin = false;
249 // GameFeaturePlugins have WindowsFooGame.ini, not WindowsGame.ini
253
255
256 // if this is non-null, it contains a set of pre-scanned ini files to use to find files, instead of looking on disk
257 const TSet<FString>* IniCacheSet = nullptr;
260
262
263protected:
264
266 bool bCacheOnNextLoad = true;
267
269
270private:
271
272 FConfigContext& ResetBaseIni(const TCHAR* InBaseIniName);
273 void CachePaths();
274
275 bool PrepareForLoad(bool& bPerformLoad);
276 bool PerformLoad();
277 bool PerformSingleFileLoad();
278
279 void AddStaticLayersToHierarchy(TArray<FString>* GatheredLayerFilenames=nullptr, bool bIsForLogging=false);
280 bool LoadIniFileHierarchy();
281 bool GenerateDestIniFile();
282
283 FString PerformFinalExpansions(const FString& InString, const FString& Platform);
284
285 void LogVariables(const TCHAR* InBaseIniName, const FString& Platform);
286};
287
288bool DoesConfigFileExistWrapper(const TCHAR* IniFile, const TSet<FString>* IniCacheSet=nullptr, const TSet<FString>* PrimaryConfigFileCache = nullptr, const TSet<FString>* SecondaryConfigFileCache = nullptr);
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
DynamicLayerPriority
Definition ConfigCacheIni.h:1090
bool DoesConfigFileExistWrapper(const TCHAR *IniFile, const TSet< FString > *IniCacheSet=nullptr, const TSet< FString > *PrimaryConfigFileCache=nullptr, const TSet< FString > *SecondaryConfigFileCache=nullptr)
Definition ConfigCacheIni.cpp:318
FConfigCacheIni * GConfig
Definition CoreGlobals.cpp:54
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition ConfigCacheIni.h:1100
Definition ConfigCacheIni.h:1240
Definition ConfigContext.h:31
bool bIsHierarchicalConfig
Definition ConfigContext.h:244
static FConfigContext ReadPluginIntoConfigSystem(FConfigCacheIni *ConfigSystem, FName PluginName, const FString &PluginRootDir, const TArray< FString > &ChildPluginsBaseDirs)
Definition ConfigContext.h:115
FString EngineRootDir
Definition ConfigContext.h:222
FConfigBranch * TemporaryBranch
Definition ConfigContext.h:212
TMap< FString, FPerPlatformDirs > PerPlatformDirs
Definition ConfigContext.h:235
static FConfigContext ReadIntoPluginFile(FConfigFile &DestConfigFile, const FString &PluginRootDir, const TArray< FString > &ChildPluginsBaseDirs, const FString &Platform=FString())
Definition ConfigContext.h:96
FString StartSkippingAtFilename
Definition ConfigContext.h:219
FConfigFile * ExistingFile
Definition ConfigContext.h:210
FString ProjectNotForLicenseesDir
Definition ConfigContext.h:233
FString Platform
Definition ConfigContext.h:215
bool bIsForPlugin
Definition ConfigContext.h:247
bool bDefaultEngineRequired
Definition ConfigContext.h:246
bool bIsForPluginModification
Definition ConfigContext.h:248
FName ConfigFileTag
Definition ConfigContext.h:229
CORE_API const FPerPlatformDirs & GetPerPlatformDirs(const FString &PlatformName)
Definition ConfigContext.cpp:162
bool bUseHierarchyCache
Definition ConfigContext.h:240
FString DestIniFilename
Definition ConfigContext.h:214
static FConfigContext ReadSingleIntoConfigSystem(FConfigCacheIni *ConfigSystem, const FString &Platform)
Definition ConfigContext.h:88
TArray< FString > ChildPluginBaseDirs
Definition ConfigContext.h:226
FString GeneratedConfigDir
Definition ConfigContext.h:217
static FConfigContext ForceReloadIntoGConfig()
Definition ConfigContext.h:62
bool bDoNotResetConfigFile
Definition ConfigContext.h:265
static FConfigContext ReadSingleIntoGConfig()
Definition ConfigContext.h:72
bool bIsFixingUpAfterBinaryConfig
Definition ConfigContext.h:252
FString BaseIniName
Definition ConfigContext.h:218
FString ProjectNoRedistDir
Definition ConfigContext.h:234
TArray< FConfigLayer > OverrideLayers
Definition ConfigContext.h:238
FConfigModificationTracker * ChangeTracker
Definition ConfigContext.h:227
bool bCacheOnNextLoad
Definition ConfigContext.h:266
DynamicLayerPriority PluginModificationPriority
Definition ConfigContext.h:254
static FConfigContext ReadIntoLocalFile(FConfigFile &DestConfigFile, const FString &Platform=FString())
Definition ConfigContext.h:38
FString PluginRootDir
Definition ConfigContext.h:225
static FConfigContext ReadUpToBeforeFile(FConfigFile &DestConfigFile, const FString &Platform, const FString &StartSkippingAtFilename)
Definition ConfigContext.h:147
FConfigCacheIni * ConfigSystem
Definition ConfigContext.h:208
FString ProjectConfigDir
Definition ConfigContext.h:223
static FConfigContext ReadPluginToModifyConfigSystem(FConfigCacheIni *ConfigSystem, DynamicLayerPriority Priority, FName PluginName, const FString &PluginRootDir, const TArray< FString > &ChildPluginsBaseDirs, FConfigModificationTracker *ChangeTracker=nullptr)
Definition ConfigContext.h:129
FConfigBranch * Branch
Definition ConfigContext.h:211
TFunction< void(const TArray< FDynamicLayerInfo > &)> HandleLayersFunction
Definition ConfigContext.h:261
bool bIsMakingBinaryConfig
Definition ConfigContext.h:251
FString ProjectRootDir
Definition ConfigContext.h:224
FString SavePlatform
Definition ConfigContext.h:216
FString EngineConfigDir
Definition ConfigContext.h:221
static FConfigContext ReadSingleIntoLocalFile(FConfigFile &DestConfigFile, const FString &Platform=FString())
Definition ConfigContext.h:46
static CORE_API void VisualizeHierarchy(FOutputDevice &Ar, const TCHAR *IniName, const TCHAR *OverridePlatform, const TCHAR *OverrideProjectOrProgramDataDir, const TCHAR *OverridePluginDir=nullptr, const TArray< FString > *ChildPluginBaseDirs=nullptr)
Definition ConfigContext.cpp:1297
const TSet< FString > * StagedGlobalConfigCache
Definition ConfigContext.h:258
bool bForceReload
Definition ConfigContext.h:242
static FConfigContext ReadIntoGConfig()
Definition ConfigContext.h:54
bool bAllowRemoteConfig
Definition ConfigContext.h:243
bool bWriteDestIni
Definition ConfigContext.h:245
bool bIncludeTagNameInBranchName
Definition ConfigContext.h:250
static CORE_API void EnsureRequiredGlobalPathsHaveBeenInitialized()
Definition ConfigContext.cpp:1291
FString ProjectLimitedAccessDir
Definition ConfigContext.h:232
const TSet< FString > * StagedPluginConfigCache
Definition ConfigContext.h:259
CORE_API ~FConfigContext()
Definition ConfigContext.cpp:85
bool bAllowGeneratedIniWhenCooked
Definition ConfigContext.h:241
static FConfigContext ReadIntoConfigSystem(FConfigCacheIni *ConfigSystem, const FString &Platform)
Definition ConfigContext.h:80
static FConfigContext FixupBranchAfterBinaryConfig()
Definition ConfigContext.h:158
const TSet< FString > * IniCacheSet
Definition ConfigContext.h:257
Definition ConfigCacheIni.h:566
Definition ConfigCacheIni.h:499
Definition NameTypes.h:617
Definition OutputDevice.h:133
Definition Array.h:670
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
Definition ConfigContext.h:194
FString PlatformExtensionProjectDir
Definition ConfigContext.h:196
FString PlatformExtensionPluginDir
Definition ConfigContext.h:197
FString PlatformExtensionEngineDir
Definition ConfigContext.h:195