///|
fn windows_runtime_binary_files() -> Array[String] {
[
"chrome_elf.dll", "d3dcompiler_47.dll", "dxcompiler.dll", "dxil.dll", "libcef.dll",
"libEGL.dll", "libGLESv2.dll", "v8_context_snapshot.bin", "vk_swiftshader.dll",
"vk_swiftshader_icd.json", "vulkan-1.dll",
]
}
///|
fn windows_runtime_resource_files() -> Array[String] {
[
"chrome_100_percent.pak", "chrome_200_percent.pak", "icudtl.dat", "resources.pak",
]
}
///|
fn windows_runtime_root_data_files() -> Array[String] {
windows_runtime_resource_files()
}
///|
fn windows_runtime_required_paths(runtime : String) -> Array[String] {
let paths : Array[String] = []
for name in windows_runtime_binary_files() {
paths.push(resolve_path(runtime, "bin/" + name))
}
for name in windows_runtime_root_data_files() {
paths.push(resolve_path(runtime, "bin/" + name))
}
for name in windows_runtime_resource_files() {
paths.push(resolve_path(runtime, "Resources/" + name))
}
paths.push(resolve_path(runtime, "Resources/locales/en-US.pak"))
paths
}
///|
async fn require_windows_runtime_layout(runtime : String) -> Unit {
let missing : Array[String] = []
for path in windows_runtime_required_paths(runtime) {
if !path_is_file(path) {
missing.push(path)
}
}
let locales = resolve_path(runtime, "Resources/locales")
if !path_is_dir(locales) {
missing.push(locales)
}
guard missing.length() == 0 else {
raise WindowsBundleError::InvalidRuntime(
detail="active Windows Proton runtime is incomplete; missing:\n" +
missing.join("\n"),
)
}
}
///|
async fn validate_windows_portable_layout(
output : String,
executable : String,
) -> Unit {
let required : Array[String] = [
executable,
resolve_path(output, "cef_process.exe"),
resolve_path(output, "proton-package.json"),
]
for name in windows_runtime_binary_files() {
required.push(resolve_path(output, name))
}
for name in windows_runtime_root_data_files() {
required.push(resolve_path(output, name))
}
for name in windows_runtime_resource_files() {
required.push(resolve_path(output, "Resources/" + name))
}
required.push(resolve_path(output, "Resources/locales/en-US.pak"))
let missing : Array[String] = []
for path in required {
if !path_is_file(path) {
missing.push(path)
}
}
let locales = resolve_path(output, "Resources/locales")
if !path_is_dir(locales) {
missing.push(locales)
}
guard missing.length() == 0 else {
raise WindowsBundleError::InvalidLayout(
detail="staged portable layout is incomplete; missing:\n" +
missing.join("\n"),
)
}
for
forbidden in [
"proton.lib", "libcef.lib", "bootstrap.exe", "bootstrapc.exe", "bin",
] {
let path = resolve_path(output, forbidden)
guard !path_exists(path) else {
raise WindowsBundleError::InvalidLayout(
detail="staged portable layout contains a build-only or sample artifact: " +
path,
)
}
}
}