71 lines
2.4 KiB
Python
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)],
|
|
)
|