diff --git a/nimp/base_commands/package.py b/nimp/base_commands/package.py index 940810af..108be451 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 @@ -408,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') @@ -416,13 +420,14 @@ 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}' + 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}") - logging.info(f'configuring variant {env.variant} in : {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'{active_configuration_directory}/DefaultEngine.ini') _setup_default_config_file(f'{active_configuration_directory}/DefaultGame.ini') @@ -457,13 +462,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 +795,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 +906,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 +1523,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)