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 6.7 Change-Id: Ie1382695f3f25839cb971ab4adc81984fc8c53ca Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>bb10
parent
06c724881c
commit
bf39bd8e06
|
|
@ -116,15 +116,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 = "/";
|
||||
|
|
@ -142,13 +140,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…
Reference in New Issue