From 3b70f4b0f18fcdf8f09417d7b5d81cafb67b4e21 Mon Sep 17 00:00:00 2001 From: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com> Date: Mon, 6 Dec 2021 19:05:26 +0100 Subject: [PATCH] Install cross-platform deps before packaging --- package.json | 6 +++++- scripts/install-cross-deps.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 scripts/install-cross-deps.js diff --git a/package.json b/package.json index 8dcd0af92..a9ac17371 100644 --- a/package.json +++ b/package.json @@ -397,6 +397,7 @@ "signalcaptcha" ] }, + "beforeBuild": "scripts/install-cross-deps.js", "asarUnpack": [ "ts/workers/heicConverter.bundle.js", "ts/sql/mainWorker.bundle.js", @@ -453,7 +454,10 @@ "node_modules/socks/build/client/*.js", "node_modules/smart-buffer/build/*.js", "node_modules/sharp/build/**/*${arch}*.node", - "!node_modules/sharp/{install,src,vendor/include,vendor/*/include}", + "!node_modules/sharp/{install,src,vendor}", + "!node_modules/sharp/vendor", + "node_modules/sharp/vendor/*/*${arch}*/**", + "!node_modules/sharp/vendor/*/*${arch}*/**/include/**", "!node_modules/better-sqlite3/deps/*", "!node_modules/better-sqlite3/src/*", "node_modules/better-sqlite3/build/Release/better_sqlite3.node", diff --git a/scripts/install-cross-deps.js b/scripts/install-cross-deps.js new file mode 100644 index 000000000..6a470fa98 --- /dev/null +++ b/scripts/install-cross-deps.js @@ -0,0 +1,30 @@ +// Copyright 2021 Signal Messenger, LLC +// SPDX-License-Identifier: AGPL-3.0-only +/* eslint-disable no-console */ + +const path = require('path'); +const { execSync } = require('child_process'); + +exports.beforeBuild = async () => { + if (process.platform !== 'darwin') { + return true; + } + + const nonNativeArchs = ['arm64', 'x64'].filter(arch => arch !== process.arch); + + for (const arch of nonNativeArchs) { + console.log("Installing sharp's dependencies for", arch); + execSync('yarn run install', { + cwd: path.join(__dirname, '..', 'node_modules', 'sharp'), + env: { + ...process.env, + npm_config_arch: arch, + }, + }); + } + + // Let electron-builder handle dependencies + return true; +}; + +exports.beforeBuild();