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. 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> (cherry picked from commit e76a04d26c95c5c2486cdbfe81681f5dfc3ea5c3)
This commit is contained in:
parent
87c81931b9
commit
783f7edf4c
@ -121,15 +121,13 @@ async function qtLoad(config)
|
||||
}
|
||||
}
|
||||
|
||||
const originalPreRun = config.preRun;
|
||||
config.preRun = instance =>
|
||||
{
|
||||
originalPreRun?.();
|
||||
|
||||
const qtPreRun = (instance) => {
|
||||
// Copy qt.environment to instance.ENV
|
||||
throwIfEnvUsedButNotExported(instance, config);
|
||||
for (const [name, value] of Object.entries(config.qt.environment ?? {}))
|
||||
instance.ENV[name] = value;
|
||||
|
||||
// Copy self.preloadData to MEMFS
|
||||
const makeDirs = (FS, filePath) => {
|
||||
const parts = filePath.split("/");
|
||||
let path = "/";
|
||||
@ -147,13 +145,16 @@ async function qtLoad(config)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throwIfFsUsedButNotExported(instance, config);
|
||||
for ({destination, data} of self.preloadData) {
|
||||
makeDirs(instance.FS, destination);
|
||||
instance.FS.writeFile(destination, new Uint8Array(data));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
if (!config.preRun)
|
||||
config.preRun = [];
|
||||
config.preRun.push(qtPreRun);
|
||||
|
||||
config.onRuntimeInitialized = () => config.qt.onLoaded?.();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user