@bobfrankston/cmsgbox
Version:
Cross-platform dialog utility for Node.js using Python and tkinter
90 lines (73 loc) ⢠2.84 kB
JavaScript
const { execSync } = require('child_process');
const os = require('os');
const fs = require('fs');
function isWSL() {
try {
const release = fs.readFileSync('/proc/version', 'utf8');
return release.toLowerCase().includes('microsoft');
} catch {
return false;
}
}
function isWindows() {
return os.platform() === 'win32' && !isWSL();
}
function runCommand(cmd, description) {
console.log(`\nš¦ ${description}...`);
try {
execSync(cmd, { stdio: 'inherit', env: { ...process.env, NODE_OPTIONS: '--no-deprecation' } });
console.log(`ā
${description} completed`);
} catch (error) {
console.error(`ā ${description} failed:`, error.message);
process.exit(1);
}
}
function main() {
console.log('š Starting cross-platform prebuild...');
if (isWindows()) {
console.log('š Running on Windows');
// Build Windows binary natively
runCommand('npm run prebuild:win32:x64', 'Building Windows x64 binary');
// Build Linux binaries using WSL
console.log('\nš§ Switching to WSL for Linux builds...');
runCommand('wsl npm run prebuild:linux:x64', 'Building Linux x64 binary in WSL');
runCommand('wsl npm run prebuild:linux:arm64', 'Building Linux ARM64 binary in WSL');
} else if (isWSL()) {
console.log('š Running on WSL');
// Build Linux binaries natively
runCommand('npm run prebuild:linux:x64', 'Building Linux x64 binary');
runCommand('npm run prebuild:linux:arm64', 'Building Linux ARM64 binary');
// Build Windows binary using Windows cmd
console.log('\nšŖ Switching to Windows for Windows build...');
runCommand('cmd.exe /c "npm run prebuild:win32:x64"', 'Building Windows x64 binary in cmd');
} else {
console.log('š Running on Linux/macOS');
console.log('ā ļø Can only build native binaries. Cross-compilation to Windows not supported.');
// Build what we can natively
if (os.arch() === 'x64') {
runCommand('npm run prebuild:linux:x64', 'Building Linux x64 binary');
}
if (os.arch() === 'arm64') {
runCommand('npm run prebuild:linux:arm64', 'Building Linux ARM64 binary');
}
}
console.log('\nš Prebuild process completed!');
// List what was built
console.log('\nš Built binaries:');
try {
const prebuildsDir = './prebuilds';
const platforms = fs.readdirSync(prebuildsDir, { withFileTypes: true })
.filter(dirent => dirent.isDirectory())
.map(dirent => dirent.name);
for (const platform of platforms) {
const files = fs.readdirSync(`${prebuildsDir}/${platform}`);
if (files.length > 0) {
console.log(` ā
${platform}: ${files[0]}`);
}
}
} catch (error) {
console.log(' (Could not list prebuilds directory)');
}
}
main();