Improve Emscripten linker version detection
@@ -985,12 +985,15 @@ class Environment:
if 'Emscripten' in out:
cls = EmscriptenCCompiler if lang == 'c' else EmscriptenCPPCompiler
self.coredata.add_lang_args(cls.language, cls, for_machine, self)
- # emcc cannot be queried to get the version out of it (it
- # ignores -Wl,--version and doesn't have an alternative).
- # Further, wasm-id *is* lld and will return `LLD X.Y.Z` if you
- # call `wasm-ld --version`, but a special version of lld that
- # takes different options.
- p, o, _ = Popen_safe(['wasm-ld', '--version'])
+
+ # emcc requires a file input in order to pass arguments to the
+ # linker. It'll exit with an error code, but still print the
+ # linker version. Old emcc versions ignore -Wl,--version completely,
+ # however. We'll report "unknown version" in that case.
+ with tempfile.NamedTemporaryFile(suffix='.c') as f:
+ cmd = compiler + [cls.LINKER_PREFIX + "--version", f.name]
+ _, o, _ = Popen_safe(cmd)
+
linker = WASMDynamicLinker(
compiler, for_machine, cls.LINKER_PREFIX,
[], version=search_version(o))
