From e1a8656d4d39201aa5d4e7e7d93332a3e4aa0283 Mon Sep 17 00:00:00 2001 From: Nicolas Phister Date: Tue, 9 Jan 2024 09:09:49 +0100 Subject: [PATCH 1/2] package: use CustomConfig instead of DNEConfigVariant Co-authored-by: Thomas Desveaux --- nimp/base_commands/package.py | 59 +++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 16 deletions(-) diff --git a/nimp/base_commands/package.py b/nimp/base_commands/package.py index 940810af..5ef10158 100644 --- a/nimp/base_commands/package.py +++ b/nimp/base_commands/package.py @@ -258,7 +258,10 @@ def run(self, env): ) if env.variant: - variant_configuration_directory = package_configuration.configuration_directory + '/Variants/Active' + if env.use_ue_custom_config: + variant_configuration_directory = package_configuration.configuration_directory + '/Custom/' + env.variant + else: + variant_configuration_directory = package_configuration.configuration_directory + '/Variants/Active' if os.path.exists(variant_configuration_directory): package_configuration.configuration_directory = variant_configuration_directory variant_resource_directory = package_configuration.resource_directory + '/Variants/' + env.variant @@ -416,17 +419,24 @@ def _setup_default_config_file(config_file): if is_monorepo_behavior: _try_remove(active_configuration_directory, False) if should_configure_variant: - variant_configuration_directory = f'{project_directory}/Config/Variants/{env.variant}' + if env.use_ue_custom_config: + variant_configuration_directory = f'{project_directory}/Config/Custom/{env.variant}' + else: + variant_configuration_directory = f'{project_directory}/Config/Variants/{env.variant}' if not os.path.exists(variant_configuration_directory): raise FileNotFoundError(f"Variant not found : {variant_configuration_directory}") - logging.info(f'configuring variant {env.variant} in : {active_configuration_directory}') - shutil.copytree( - variant_configuration_directory, active_configuration_directory, copy_function=shutil.copyfile - ) + configuration_directory = variant_configuration_directory + if not env.use_ue_custom_config: + logging.info('configuring variant %s in : %s', env.variant, active_configuration_directory) + shutil.copytree( + variant_configuration_directory, active_configuration_directory, copy_function=shutil.copyfile + ) + configuration_directory = active_configuration_directory + # necessary for shader debug info in case no defaultEngine is present - _setup_default_config_file(f'{active_configuration_directory}/DefaultEngine.ini') - _setup_default_config_file(f'{active_configuration_directory}/DefaultGame.ini') - Package.write_project_revisions(env, active_configuration_directory) + _setup_default_config_file(f'{configuration_directory}/DefaultEngine.ini') + _setup_default_config_file(f'{configuration_directory}/DefaultGame.ini') + Package.write_project_revisions(env, configuration_directory) if env.unreal_platform == 'PS5': # UE only supports a single TitleConfiguration.json describing builds of the same package. # 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): # order matters: from deepest ini to broadest (deep<-variant<-platform<-game) config_files_patterns = [] if hasattr(env, 'variant') and env.variant: - config_files_patterns.extend( + if env.use_ue_custom_config: + config_files_patterns.extend([ + '{uproject_dir}/Config/{cook_platform}/Custom/{variant}/{cook_platform}Game.ini', + '{uproject_dir}/Config/Custom/{variant}/DefaultGame.ini' + ]) + else: + config_files_patterns.extend( [ - '{uproject_dir}/Config/Variants/Active/{cook_platform}/{cook_platform}Game.ini', - '{uproject_dir}/Config/Variants/{variant}/{cook_platform}/{cook_platform}Game.ini', - '{uproject_dir}/Config/Variants/Active/DefaultGame.ini', - '{uproject_dir}/Config/Variants/{variant}/DefaultGame.ini', - ] + '{uproject_dir}/Config/Variants/Active/{cook_platform}/{cook_platform}Game.ini', + '{uproject_dir}/Config/Variants/{variant}/{cook_platform}/{cook_platform}Game.ini', + '{uproject_dir}/Config/Variants/Active/DefaultGame.ini', + '{uproject_dir}/Config/Variants/{variant}/DefaultGame.ini', + ] ) config_files_patterns.extend( [ @@ -784,7 +800,10 @@ def cook(env, package_configuration): cook_command += shlex.split(option) # Load the active variant - cook_command += ['-DNEConfigVariant'] + if env.variant: + if env.use_ue_custom_config: + cook_command += [ f'-CustomConfig={env.variant}' ] + cook_command += [ '-DNEConfigVariant' ] if package_configuration.shader_debug_info: sdb_path = ( @@ -892,6 +911,10 @@ def stage(env, package_configuration): if env.is_dne_legacy_ue4: stage_command += ['-SkipPak'] + if env.use_ue_custom_config: + if env.variant: + stage_command += [ f'-CustomConfig={env.variant}' ] + stage_success = nimp.sys.process.call(stage_command, dry_run=env.dry_run, heartbeat=60) if stage_success != 0: raise RuntimeError('Stage failed') @@ -1505,6 +1528,10 @@ def package_with_uat(env, package_configuration): if package_configuration.no_compile_packaging: package_command += ['-NoCompile'] + if env.use_ue_custom_config: + if env.variant: + package_command += [ f'-CustomConfig={env.variant}' ] + for option in package_configuration.extra_options: package_command += shlex.split(option) From 83ca0f17e44855083d66ffe00a4ce55e8892f666 Mon Sep 17 00:00:00 2001 From: Nicolas Phister Date: Mon, 27 Oct 2025 16:23:23 +0100 Subject: [PATCH 2/2] package: use an "Active" directory for CustomConfig as well --- nimp/base_commands/package.py | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/nimp/base_commands/package.py b/nimp/base_commands/package.py index 5ef10158..108be451 100644 --- a/nimp/base_commands/package.py +++ b/nimp/base_commands/package.py @@ -411,7 +411,8 @@ def _setup_default_config_file(config_file): is_monorepo_behavior = env.unreal_version > 4.24 should_configure_variant = is_monorepo_behavior and env.variant is not None - active_configuration_directory = f'{project_directory}/Config/Variants/Active' + variants_directory = 'Custom' if env.use_ue_custom_config else 'Variants' + active_configuration_directory = f'{project_directory}/Config/{variants_directory}/Active' if env.unreal_platform == 'PS5': dst_title_conf = env.format('{uproject_dir}/Platforms/PS5/Build/TitleConfiguration.json') @@ -419,24 +420,18 @@ def _setup_default_config_file(config_file): if is_monorepo_behavior: _try_remove(active_configuration_directory, False) if should_configure_variant: - if env.use_ue_custom_config: - variant_configuration_directory = f'{project_directory}/Config/Custom/{env.variant}' - else: - variant_configuration_directory = f'{project_directory}/Config/Variants/{env.variant}' + variant_configuration_directory = f'{project_directory}/Config/{variants_directory}/{env.variant}' if not os.path.exists(variant_configuration_directory): raise FileNotFoundError(f"Variant not found : {variant_configuration_directory}") - configuration_directory = variant_configuration_directory - if not env.use_ue_custom_config: - logging.info('configuring variant %s in : %s', env.variant, active_configuration_directory) - shutil.copytree( - variant_configuration_directory, active_configuration_directory, copy_function=shutil.copyfile - ) - configuration_directory = active_configuration_directory + logging.info('configuring variant %s in : %s', env.variant, active_configuration_directory) + shutil.copytree( + variant_configuration_directory, active_configuration_directory, copy_function=shutil.copyfile + ) # necessary for shader debug info in case no defaultEngine is present - _setup_default_config_file(f'{configuration_directory}/DefaultEngine.ini') - _setup_default_config_file(f'{configuration_directory}/DefaultGame.ini') - Package.write_project_revisions(env, configuration_directory) + _setup_default_config_file(f'{active_configuration_directory}/DefaultEngine.ini') + _setup_default_config_file(f'{active_configuration_directory}/DefaultGame.ini') + Package.write_project_revisions(env, active_configuration_directory) if env.unreal_platform == 'PS5': # UE only supports a single TitleConfiguration.json describing builds of the same package. # To have DLCs in their own packages, we need to select the variant's one by copying it