From a19291f546ef84cd05de464eb77624dcde1de905 Mon Sep 17 00:00:00 2001 From: hensm Date: Wed, 1 May 2019 23:59:06 +0100 Subject: [PATCH] Limit macOS builds to macOS hosts --- app/bin/build.js | 40 ++++++++++++++++++++++++++++++++-------- ext/src/main.ts | 10 +++++----- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/app/bin/build.js b/app/bin/build.js index e7ff86c..30d6be8 100644 --- a/app/bin/build.js +++ b/app/bin/build.js @@ -79,6 +79,9 @@ const spawnOptions = { , stdio: [ process.stdin, process.stdout, process.stderr ] }; +const isBuildingForMac = argv.platform === "darwin"; +const isBuildingForMacOnMac = isBuildingForMac && process.platform === "darwin"; + /** * Shouldn't exist, but cleanup and re-create any existing * build directories, just in case. @@ -90,6 +93,18 @@ fs.ensureDirSync(DIST_PATH, { recursive: true }); async function build () { + /** + * Because the native receiver selector can only be built on + * systems with the capacity to link to the native AppKit + * libraries, and the pkg installer can only be built on + * platforms with the requisite pkgbuild/productbuild binaries, + * there's no point in trying to build from other platforms. + */ + if (isBuildingForMac && !isBuildingForMacOnMac) { + console.error("macOS version must be built on macOS"); + process.exit(1); + } + // Run tsc spawnSync(`tsc --project ${ROOT_PATH} \ --outDir ${BUILD_PATH}` @@ -167,7 +182,7 @@ async function build () { ]); // Build NativeMacReceiverSelector - if (argv.platform === "darwin") { + if (isBuildingForMacOnMac) { const sourceFiles = glob.sync("*.swift", { cwd: path.join(__dirname, "../NativeMacReceiverSelector") , absolute: true @@ -177,9 +192,16 @@ async function build () { .map(fileName => `"${fileName}"`) .join(" "); - spawnSync(`swiftc -o "${path.join(BUILD_PATH, selectorExecutableName)}" \ - ${formattedSourceFiles}` - , spawnOptions); + const buildCommand = ` + swiftc -o "${path.join(BUILD_PATH, selectorExecutableName)}" \ + ${formattedSourceFiles}`; + + // Build with optimizations if packaging + if (argv.package) { + buildCommand += " -0size"; + } + + spawnSync(buildCommand, spawnOptions); } @@ -210,7 +232,7 @@ async function build () { , path.join(DIST_PATH, builtExecutableName) , { overwrite: true }); - if (argv.platform === "darwin") { + if (isBuildingForMacOnMac) { fs.moveSync( path.join(BUILD_PATH, selectorExecutableName) , path.join(DIST_PATH, selectorExecutableName) @@ -235,10 +257,10 @@ function packageApp (platform, arch) { ]; switch (platform) { - case "win32": return packageWin32(...packageFunctionArgs); + case "win32": return packageWin32(...packageFunctionArgs); case "darwin": return packageDarwin(...packageFunctionArgs); - case "linux": + case "linux": { /** * Get manifest path from package type sub key for Linux * platforms. @@ -252,11 +274,13 @@ function packageApp (platform, arch) { } break; + } - default: + default: { console.error("Unsupported target platform"); process.exit(1); + } } } diff --git a/ext/src/main.ts b/ext/src/main.ts index 0879aac..0be8fa2 100755 --- a/ext/src/main.ts +++ b/ext/src/main.ts @@ -510,16 +510,16 @@ async function onConnectShim (port: browser.runtime.Port) { } case "main:/sessionCreated": { - NativeMacReceiverSelectorManager.close(); + PopupReceiverSelectorManager.close(); break; } case "main:/selectReceiverBegin": { - NativeMacReceiverSelectorManager.open( + PopupReceiverSelectorManager.open( Array.from(statusBridgeReceivers.values()) , message.data.defaultMediaType); - NativeMacReceiverSelectorManager.addEventListener("selected" + PopupReceiverSelectorManager.addEventListener("selected" , (ev: ReceiverSelectorSelectedEvent) => { port.postMessage({ @@ -530,13 +530,13 @@ async function onConnectShim (port: browser.runtime.Port) { }); }); - NativeMacReceiverSelectorManager.addEventListener("cancelled", () => { + PopupReceiverSelectorManager.addEventListener("cancelled", () => { port.postMessage({ subject: "shim:/selectReceiverCancelled" }); }); - NativeMacReceiverSelectorManager.addEventListener("error", () => { + PopupReceiverSelectorManager.addEventListener("error", () => { // TODO: Report errors properly port.postMessage({ subject: "shim:/selectReceiverCancelled"