Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Download and use MSYS/make locally for Windows postinstall #792

Merged
merged 24 commits into from
Feb 17, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 34 additions & 12 deletions npm-scripts.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ const MAKE = process.env.MAKE || (isFreeBSD ? 'gmake' : 'make');
// eslint-disable-next-line no-console
console.log(`npm-scripts.js [INFO] running task "${task}"`);

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

switch (task)
{
case 'typescript:build':
Expand Down Expand Up @@ -122,18 +127,8 @@ switch (task)
{
if (isWindows)
nazar-pc marked this conversation as resolved.
Show resolved Hide resolved
{
var res = spawnSync('where', [ 'python3.exe' ]);
if (res.status !== 0)
{
res = spawnSync('where', [ 'python.exe' ]);
if (res.status !== 0)
{
console.log('Cannot find Python executable.');
process.exit(1);
}
}
execute(String(res.stdout).trim() + ' worker\\scripts\\getmake.py');
process.env['PATH'] = process.cwd() + '\\worker\\out\\msys\\bin;' + process.env['PATH'];
installMsysMake();
addMsysMakePath();
}

execute('node npm-scripts.js worker:build');
Expand Down Expand Up @@ -173,6 +168,13 @@ switch (task)
break;
}

case 'install-msys-make':
{
installMsysMake();

break;
}

default:
{
throw new TypeError(`unknown task "${task}"`);
Expand Down Expand Up @@ -211,3 +213,23 @@ function execute(command)
process.exit(1);
}
}

function installMsysMake()
{
var res = spawnSync('where', [ 'python3.exe' ]);
if (res.status !== 0)
{
res = spawnSync('where', [ 'python.exe' ]);
if (res.status !== 0)
ibc marked this conversation as resolved.
Show resolved Hide resolved
{
console.log('Cannot find Python executable.');
process.exit(1);
}
}
execute(String(res.stdout).trim() + ' worker\\scripts\\getmake.py');
}

function addMsysToPath()
{
process.env['PATH'] = process.cwd() + '\\worker\\out\\msys\\bin;' + process.env['PATH'];
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

process.cwd() is probably not a good idea, since it can be called from anywhere. __dirname should be a better alternative

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But the paths in all commands are relative to the cwd.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm... yes, other paths are implicitly relative to cwd, but that isn't necessarily what they should be.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yet this is what they are. 🙂 Currently it looks like the script (with package.json) can be anywhere, but everything else should be in the current directory, rather than vice versa.

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

def get(url, sha1):
def get(url, digest):
data = urllib.request.urlopen(url).read()
assert hashlib.sha1(data).hexdigest() == sha1
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', '9200450ad3df8c83be323c9b14ae344d5c1ca784')
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', '056d16bfb7a91c3e3b1acf8adb20edea6fceecdd')
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', '4000b935a5bc30b4c757fde69d27716fa3c2c269')
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', '54ac256a8f0c6a89f1b3c7758f3703b4e56382be')
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', 'd95faa144cf06625b3932a8e84ed1a6ab6bbe644')
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', 'e4273ccfde8ecf3a7631446fb2b01971a24ff9f7')
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', 'b6ef3399b8d76b5fbbd0a88774ebc2a90e8af13a')
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', 'c7264eb13b05cf2e1a982a3c2619837b96203a27')
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')