From 5bbce91e5163f1c697857f2faa66c70abb020b29 Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 6 Jul 2021 19:01:34 +0100 Subject: [PATCH] Check target with rustc directly To avoid depending on rustup (at least when not cross-compiling) --- hak/matrix-seshat/check.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/hak/matrix-seshat/check.js b/hak/matrix-seshat/check.js index 4554f5f..5acdf89 100644 --- a/hak/matrix-seshat/check.js +++ b/hak/matrix-seshat/check.js @@ -15,6 +15,7 @@ limitations under the License. */ const childProcess = require('child_process'); +const fsProm = require('fs').promises; module.exports = async function(hakEnv, moduleInfo) { // of course tcl doesn't have a --version @@ -61,17 +62,15 @@ module.exports = async function(hakEnv, moduleInfo) { }); } - // Ensure Rust target exists + // Ensure Rust target exists (nb. we avoid depending on rustup) await new Promise((resolve, reject) => { - childProcess.execFile('rustup', ['target', 'list', '--installed'], (err, out) => { + const rustc = childProcess.execFile('rustc', ['--target', hakEnv.getTargetId(), '-o', 'tmp', '-'], (err, out) => { if (err) { - reject("Can't find rustup"); + reject("rustc can't build for target " + hakEnv.getTargetId() + ": ensure the correct toolchain is installed"); } - const target = hakEnv.getTargetId(); - if (!out.includes(target)) { - reject(`Rust target ${target} not installed`); - } - resolve(); + fsProm.unlink('tmp').then(resolve); }); + rustc.stdin.write('fn main() {}'); + rustc.stdin.end(); }); };