wasm: fix qtloader.js preRun usage
Emscripten documents that preRun should be an array of functions, but also accepts setting it to a single function. qtloader.js was accidentally using this feature, which works as long as qtloader is the single user, but breaks if other code expects an array. A typical error in this case is: "Module.preRun.push is not a function" Fix this by creating and maintaining preRun as an array. Pick-to: 6.6 Change-Id: Ie1382695f3f25839cb971ab4adc81984fc8c53ca Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io> (cherry picked from commit bf39bd8e06e9d66bfb9f01e83c743420e812b630) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
41c9754b4c
commit
e76a04d26c
@ -116,15 +116,13 @@ async function qtLoad(config)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const originalPreRun = config.preRun;
|
const qtPreRun = (instance) => {
|
||||||
config.preRun = instance =>
|
// Copy qt.environment to instance.ENV
|
||||||
{
|
|
||||||
originalPreRun?.();
|
|
||||||
|
|
||||||
throwIfEnvUsedButNotExported(instance, config);
|
throwIfEnvUsedButNotExported(instance, config);
|
||||||
for (const [name, value] of Object.entries(config.qt.environment ?? {}))
|
for (const [name, value] of Object.entries(config.qt.environment ?? {}))
|
||||||
instance.ENV[name] = value;
|
instance.ENV[name] = value;
|
||||||
|
|
||||||
|
// Copy self.preloadData to MEMFS
|
||||||
const makeDirs = (FS, filePath) => {
|
const makeDirs = (FS, filePath) => {
|
||||||
const parts = filePath.split("/");
|
const parts = filePath.split("/");
|
||||||
let path = "/";
|
let path = "/";
|
||||||
@ -142,13 +140,16 @@ async function qtLoad(config)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
throwIfFsUsedButNotExported(instance, config);
|
throwIfFsUsedButNotExported(instance, config);
|
||||||
for ({destination, data} of self.preloadData) {
|
for ({destination, data} of self.preloadData) {
|
||||||
makeDirs(instance.FS, destination);
|
makeDirs(instance.FS, destination);
|
||||||
instance.FS.writeFile(destination, new Uint8Array(data));
|
instance.FS.writeFile(destination, new Uint8Array(data));
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
|
if (!config.preRun)
|
||||||
|
config.preRun = [];
|
||||||
|
config.preRun.push(qtPreRun);
|
||||||
|
|
||||||
config.onRuntimeInitialized = () => config.qt.onLoaded?.();
|
config.onRuntimeInitialized = () => config.qt.onLoaded?.();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user