@@ -258,7 +258,10 @@ def run(self, env):
258258 )
259259
260260 if env .variant :
261- variant_configuration_directory = package_configuration .configuration_directory + '/Variants/Active'
261+ if env .use_ue_custom_config :
262+ variant_configuration_directory = package_configuration .configuration_directory + '/Custom/' + env .variant
263+ else :
264+ variant_configuration_directory = package_configuration .configuration_directory + '/Variants/Active'
262265 if os .path .exists (variant_configuration_directory ):
263266 package_configuration .configuration_directory = variant_configuration_directory
264267 variant_resource_directory = package_configuration .resource_directory + '/Variants/' + env .variant
@@ -416,17 +419,24 @@ def _setup_default_config_file(config_file):
416419 if is_monorepo_behavior :
417420 _try_remove (active_configuration_directory , False )
418421 if should_configure_variant :
419- variant_configuration_directory = f'{ project_directory } /Config/Variants/{ env .variant } '
422+ if env .use_ue_custom_config :
423+ variant_configuration_directory = f'{ project_directory } /Config/Custom/{ env .variant } '
424+ else :
425+ variant_configuration_directory = f'{ project_directory } /Config/Variants/{ env .variant } '
420426 if not os .path .exists (variant_configuration_directory ):
421427 raise FileNotFoundError (f"Variant not found : { variant_configuration_directory } " )
422- logging .info (f'configuring variant { env .variant } in : { active_configuration_directory } ' )
423- shutil .copytree (
424- variant_configuration_directory , active_configuration_directory , copy_function = shutil .copyfile
425- )
428+ configuration_directory = variant_configuration_directory
429+ if not env .use_ue_custom_config :
430+ logging .info ('configuring variant %s in : %s' , env .variant , active_configuration_directory )
431+ shutil .copytree (
432+ variant_configuration_directory , active_configuration_directory , copy_function = shutil .copyfile
433+ )
434+ configuration_directory = active_configuration_directory
435+
426436 # necessary for shader debug info in case no defaultEngine is present
427- _setup_default_config_file (f'{ active_configuration_directory } /DefaultEngine.ini' )
428- _setup_default_config_file (f'{ active_configuration_directory } /DefaultGame.ini' )
429- Package .write_project_revisions (env , active_configuration_directory )
437+ _setup_default_config_file (f'{ configuration_directory } /DefaultEngine.ini' )
438+ _setup_default_config_file (f'{ configuration_directory } /DefaultGame.ini' )
439+ Package .write_project_revisions (env , configuration_directory )
430440 if env .unreal_platform == 'PS5' :
431441 # UE only supports a single TitleConfiguration.json describing builds of the same package.
432442 # To have DLCs in their own packages, we need to select the variant's one by copying it
@@ -457,13 +467,19 @@ def enumerate_unreal_configs(env):
457467 # order matters: from deepest ini to broadest (deep<-variant<-platform<-game)
458468 config_files_patterns = []
459469 if hasattr (env , 'variant' ) and env .variant :
460- config_files_patterns .extend (
470+ if env .use_ue_custom_config :
471+ config_files_patterns .extend ([
472+ '{uproject_dir}/Config/{cook_platform}/Custom/{variant}/{cook_platform}Game.ini' ,
473+ '{uproject_dir}/Config/Custom/{variant}/DefaultGame.ini'
474+ ])
475+ else :
476+ config_files_patterns .extend (
461477 [
462- '{uproject_dir}/Config/Variants/Active/{cook_platform}/{cook_platform}Game.ini' ,
463- '{uproject_dir}/Config/Variants/{variant}/{cook_platform}/{cook_platform}Game.ini' ,
464- '{uproject_dir}/Config/Variants/Active/DefaultGame.ini' ,
465- '{uproject_dir}/Config/Variants/{variant}/DefaultGame.ini' ,
466- ]
478+ '{uproject_dir}/Config/Variants/Active/{cook_platform}/{cook_platform}Game.ini' ,
479+ '{uproject_dir}/Config/Variants/{variant}/{cook_platform}/{cook_platform}Game.ini' ,
480+ '{uproject_dir}/Config/Variants/Active/DefaultGame.ini' ,
481+ '{uproject_dir}/Config/Variants/{variant}/DefaultGame.ini' ,
482+ ]
467483 )
468484 config_files_patterns .extend (
469485 [
@@ -784,7 +800,10 @@ def cook(env, package_configuration):
784800 cook_command += shlex .split (option )
785801
786802 # Load the active variant
787- cook_command += ['-DNEConfigVariant' ]
803+ if env .variant :
804+ if env .use_ue_custom_config :
805+ cook_command += [ f'-CustomConfig={ env .variant } ' ]
806+ cook_command += [ '-DNEConfigVariant' ]
788807
789808 if package_configuration .shader_debug_info :
790809 sdb_path = (
@@ -892,6 +911,10 @@ def stage(env, package_configuration):
892911 if env .is_dne_legacy_ue4 :
893912 stage_command += ['-SkipPak' ]
894913
914+ if env .use_ue_custom_config :
915+ if env .variant :
916+ stage_command += [ f'-CustomConfig={ env .variant } ' ]
917+
895918 stage_success = nimp .sys .process .call (stage_command , dry_run = env .dry_run , heartbeat = 60 )
896919 if stage_success != 0 :
897920 raise RuntimeError ('Stage failed' )
@@ -1505,6 +1528,10 @@ def package_with_uat(env, package_configuration):
15051528 if package_configuration .no_compile_packaging :
15061529 package_command += ['-NoCompile' ]
15071530
1531+ if env .use_ue_custom_config :
1532+ if env .variant :
1533+ package_command += [ f'-CustomConfig={ env .variant } ' ]
1534+
15081535 for option in package_configuration .extra_options :
15091536 package_command += shlex .split (option )
15101537
0 commit comments