Skip to content

Commit

Permalink
Download and use MSYS/make locally for Windows postinstall (#792)
Browse files Browse the repository at this point in the history
  • Loading branch information
snnz authored Feb 17, 2023
1 parent 8c847d1 commit 890a259
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 3 deletions.
44 changes: 43 additions & 1 deletion npm-scripts.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
const process = require('process');
const os = require('os');
const fs = require('fs');
const { execSync } = require('child_process');
const { execSync, spawnSync } = require('child_process');
const { version } = require('./package.json');

const isFreeBSD = os.platform() === 'freebsd';
Expand Down Expand Up @@ -227,6 +227,21 @@ function buildWorker()
{
console.log('npm-scripts.js [INFO] buildWorker()');

if (isWindows)
{
if (!fs.existsSync('worker/out/msys/bin/make.exe'))
{
installMsysMake();
}

const msysPath = `${process.cwd()}\\worker\\out\\msys\\bin`;

if (!process.env['PATH'].includes(msysPath))
{
process.env['PATH'] = `${msysPath};${process.env['PATH']}`;
}
}

executeCmd(`${MAKE} -C worker`);
}

Expand All @@ -240,6 +255,11 @@ function cleanWorker()
executeCmd(`${MAKE} clean-subprojects -C worker`);
// Clean PIP/Meson/Ninja.
executeCmd(`${MAKE} clean-pip -C worker`);

if (isWindows)
{
executeCmd('rd /s /q worker\\out\\msys');
}
}

function lintNode()
Expand Down Expand Up @@ -323,3 +343,25 @@ function executeCmd(command, exitOnError = true)
}
}
}

function installMsysMake()
{
console.log('npm-scripts.js [INFO] installMsysMake()');

let res = spawnSync('where', [ 'python3.exe' ]);

if (res.status !== 0)
{
res = spawnSync('where', [ 'python.exe' ]);

if (res.status !== 0)
{
// eslint-disable-next-line no-console
console.error('`npm-scripts.js [ERROR] installMsysMake() cannot find Python executable');

process.exit(1);
}
}

executeCmd(`${String(res.stdout).trim()} worker\\scripts\\getmake.py`);
}
35 changes: 34 additions & 1 deletion worker/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,40 @@ fn main() {
}
#[cfg(target_os = "windows")]
{
// Nothing special is needed so far
if !std::path::Path::new("worker/out/msys/bin/make.exe").exists() {
let python = if Command::new("where")
.arg("python3.exe")
.status()
.expect("Failed to start")
.success()
{
"python3"
} else {
"python"
};

if !Command::new(python)
.arg("scripts\\getmake.py")
.status()
.expect("Failed to start")
.success()
{
panic!("Failed to install MSYS/make")
}
}

env::set_var(
"PATH",
format!(
"{}\\worker\\out\\msys\\bin;{}",
env::current_dir()
.unwrap()
.into_os_string()
.into_string()
.unwrap(),
env::var("PATH").unwrap()
),
);
}

// Build
Expand Down
3 changes: 2 additions & 1 deletion worker/scripts/cpu_cores.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@ OS="$(uname -s)"
NUM_CORES=

case "${OS}" in
Linux*|MINGW*) NUM_CORES=$(nproc);;
Linux*) NUM_CORES=$(nproc);;
Darwin*|FreeBSD) NUM_CORES=$(sysctl -n hw.ncpu);;
MINGW*) NUM_CORES=$NUMBER_OF_PROCESSORS;;
*) NUM_CORES=1;;
esac

Expand Down
17 changes: 17 additions & 0 deletions worker/scripts/getmake.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import io, hashlib, tarfile, urllib.request

def get(url, digest):
data = urllib.request.urlopen(url).read()
assert hashlib.sha256(data).hexdigest() == digest
tar = tarfile.open(fileobj=io.BytesIO(data))
tar.extractall('worker/out/msys')
tar.close()

get('https://sourceforge.net/projects/mingw/files/MSYS/Base/msys-core/msys-1.0.19-1/msysCORE-1.0.19-1-msys-1.0.19-bin.tar.xz/download', '8c4157d739a460f85563bc4451e9f1bbd42b13c4f63770d43b9f45a781f07858')
get('https://sourceforge.net/projects/mingw/files/MSYS/Base/libiconv/libiconv-1.14-1/libiconv-1.14-1-msys-1.0.17-dll-2.tar.lzma/download', '196921e8c232259c8e6a6852b9ee8d9ab2d29a91419f0c8dc27ba6f034231683')
get('https://sourceforge.net/projects/mingw/files/MSYS/Base/gettext/gettext-0.18.1.1-1/libintl-0.18.1.1-1-msys-1.0.17-dll-8.tar.lzma/download', '29db8c969661c511fbe2a341ab25c993c5f9c555842a75d6ddbcfa70dec16910')
get('https://sourceforge.net/projects/mingw/files/MSYS/Base/coreutils/coreutils-5.97-3/coreutils-5.97-3-msys-1.0.13-bin.tar.lzma/download', 'f8c7990416ea16a74ac336dcfe0f596bc46b8724b2d58cf8a3509414220b2366')
get('https://sourceforge.net/projects/mingw/files/MSYS/Base/regex/regex-1.20090805-2/libregex-1.20090805-2-msys-1.0.13-dll-1.tar.lzma/download', '85dd8c1e27a90675c5f867be57ba7ae2bb55dde8cd2d19f284c896be134bd3d1')
get('https://sourceforge.net/projects/mingw/files/MSYS/Base/termcap/termcap-0.20050421_1-2/libtermcap-0.20050421_1-2-msys-1.0.13-dll-0.tar.lzma/download', '62b58fe0880f0972fcc84a819265989b02439c1c5185870227bd25f870f7adb6')
get('https://sourceforge.net/projects/mingw/files/MSYS/Base/bash/bash-3.1.23-1/bash-3.1.23-1-msys-1.0.18-bin.tar.xz/download', '38da5419969ab883058a96322bb0f51434dd4e9f71de09cd4f75b96750944533')
get('https://sourceforge.net/projects/mingw/files/MSYS/Base/make/make-3.81-3/make-3.81-3-msys-1.0.13-bin.tar.lzma/download', '847f0cbbf07135801c8e67bf692d29b1821e816ad828753c997fa869a9b89988')

0 comments on commit 890a259

Please sign in to comment.