Files
UnrealEngine/Engine/Extras/Containers/Dockerfiles/linux/dev-slim/split-components.py
2025-05-18 13:04:45 +08:00

71 lines
2.4 KiB
Python

#!/usr/bin/env python3
import glob, os, shutil, sys
from os.path import basename, dirname, exists, join
# Logs a message to stderr
def log(message):
print(message, file=sys.stderr)
sys.stderr.flush()
# Extracts the files and directories for the specified component and moves them to a separate output directory
def extractComponent(inputDir, outputDir, component, description, items):
# Print progress output
log("\nExtracting {}...".format(description))
# Create the output directory for the component if it doesn't already exist
componentDir = join(outputDir, component)
os.makedirs(outputDir, exist_ok=True)
# Move each file and directory for the component to the output directory
for item in items:
# Verify that the item exists
if not exists(item):
log("Skipping non-existent item: {}".format(item))
continue
# Print progress output
log("Moving: {}".format(item))
# Ensure the parent directory for the item exists in the output directory
parent = dirname(item).replace(inputDir, componentDir)
os.makedirs(parent, exist_ok=True)
# Perform the move
shutil.move(item, join(parent, basename(item)))
# Retrieve the path to the root directory of the Installed Build
rootDir = sys.argv[1]
# Retrieve the path to the root output directory for extracted components and ensure it exists
outputDir = sys.argv[2]
os.makedirs(outputDir, exist_ok=True)
# Extract the DDC
ddc = [join(rootDir, "Engine", "DerivedDataCache", "Compressed.ddp")]
extractComponent(rootDir, outputDir, "DDC", "Derived Data Cache (DDC)", ddc)
# Extract debug symbols
symbolFiles = glob.glob(join(rootDir, "**", "*.debug"), recursive=True) + glob.glob(
join(rootDir, "**", "*.sym"), recursive=True
)
extractComponent(rootDir, outputDir, "DebugSymbols", "debug symbols", symbolFiles)
# Extract template projects and samples
subdirs = [join(rootDir, subdir) for subdir in ["FeaturePacks", "Samples", "Templates"]]
extractComponent(
rootDir, outputDir, "TemplatesAndSamples", "template projects and samples", subdirs
)
# Extract the larger non-optional subdirectories of the Engine directory
for subdir in ["Binaries", "Content", "Extras", "Intermediate", "Plugins", "Source"]:
extractComponent(
rootDir,
outputDir,
subdir,
f"{subdir} subdirectory",
[join(rootDir, "Engine", subdir)],
)