From 1ad417f91f0d0f6ad4f6aa23f54861744bfd1278 Mon Sep 17 00:00:00 2001 From: develar Date: Mon, 19 Sep 2016 10:35:53 +0200 Subject: [PATCH] feat: use iconutil on macOS to convert icns to iconset `libicns` is not required anymore on macOS. --- .idea/dictionaries/develar.xml | 2 + .travis.yml | 9 ++-- docs/Multi Platform Build.md | 2 +- src/targets/LinuxTargetHelper.ts | 72 +++++++++++++++++++++++--------- test/create-bottle.sh | 2 +- 5 files changed, 59 insertions(+), 28 deletions(-) diff --git a/.idea/dictionaries/develar.xml b/.idea/dictionaries/develar.xml index 5450db6c8fe..d37f80f30aa 100644 --- a/.idea/dictionaries/develar.xml +++ b/.idea/dictionaries/develar.xml @@ -46,6 +46,8 @@ hicolor hrtime icnsutils + iconset + iconutil idms inno insertmacro diff --git a/.travis.yml b/.travis.yml index 30acce1e711..51e76327d68 100755 --- a/.travis.yml +++ b/.travis.yml @@ -22,12 +22,9 @@ before_install: - curl -L https://dl.bintray.com/develar/bin/7za -o /tmp/7za - chmod +x /tmp/7za - curl -L https://dl.bintray.com/develar/bin/wine.7z -o /tmp/wine.7z - - brew unlink libpng - # https://github.com/Homebrew/homebrew-core/issues/2987 - - brew prune - - rm -rf /usr/local/Cellar/libpng - - /tmp/7za x -aoa /tmp/wine.7z -o/usr/local/Cellar -y - - brew link --overwrite fontconfig libpng freetype gd gnutls jasper libgphoto2 libicns libtasn1 libusb libusb-compat little-cms2 nettle sane-backends webp wine git-lfs gnu-tar dpkg graphicsmagick xz + - /tmp/7za x -o/usr/local/Cellar -y /tmp/wine.7z + - brew link --overwrite fontconfig gd gnutls jasper libgphoto2 libicns libtasn1 libusb libusb-compat little-cms2 nettle openssl sane-backends webp wine git-lfs gnu-tar dpkg xz + - brew install freetype graphicsmagick - git-lfs pull install: diff --git a/docs/Multi Platform Build.md b/docs/Multi Platform Build.md index e637ec32d4f..0644223118c 100755 --- a/docs/Multi Platform Build.md +++ b/docs/Multi Platform Build.md @@ -32,7 +32,7 @@ brew install mono ### To build app for Linux on MacOS: ``` -brew install gnu-tar libicns graphicsmagick xz +brew install gnu-tar graphicsmagick xz ``` To build rpm: `brew install rpm`. diff --git a/src/targets/LinuxTargetHelper.ts b/src/targets/LinuxTargetHelper.ts index fa95a46dce5..84b313f8392 100644 --- a/src/targets/LinuxTargetHelper.ts +++ b/src/targets/LinuxTargetHelper.ts @@ -26,7 +26,7 @@ export class LinuxTargetHelper { return this.iconsFromDir(path.join(this.packager.buildResourcesDir, "icons")) } else { - return this.createFromIcns(await this.packager.getTempFile("electron-builder-linux").then(it => ensureDir(it).thenReturn(it))) + return this.createFromIcns(await this.packager.getTempFile("electron-builder-linux.iconset").then(it => ensureDir(it).thenReturn(it))) } } @@ -103,39 +103,71 @@ export class LinuxTargetHelper { return this.iconsFromDir(path.join(__dirname, "..", "..", "templates", "linux", "electron-icons")) } - const output = await exec("icns2png", ["-x", "-o", tempDir, iconPath]) - debug(output) + if (process.platform === "darwin") { + await exec("iconutil", ["--convert", "iconset", "--output", tempDir, iconPath]) + const iconFiles = await readdir(tempDir) + const imagePath = iconFiles.includes("icon_512x512.png") ? path.join(tempDir, "icon_512x512.png") : path.join(tempDir, "icon_256x256.png") + this.maxIconPath = imagePath - //noinspection UnnecessaryLocalVariableJS - const imagePath = path.join(tempDir, "icon_256x256x32.png") + function resize(size: number): BluebirdPromise { + const filename = `icon_${size}x${size}.png` - this.maxIconPath = imagePath + if (iconFiles.includes(filename)) { + return BluebirdPromise.resolve() + } - function resize(size: number): BluebirdPromise { - const sizeArg = `${size}x${size}` - return exec("gm", ["convert", "-size", sizeArg, imagePath, "-resize", sizeArg, path.join(tempDir, `icon_${size}x${size}x32.png`)]) - } + const sizeArg = `${size}x${size}` + return exec("gm", ["convert", "-size", sizeArg, imagePath, "-resize", sizeArg, path.join(tempDir, filename)]) + } - const promises: Array> = [resize(24), resize(96)] - if (!output.includes("is32")) { + const promises: Array> = [resize(24), resize(96)] promises.push(resize(16)) - } - if (!output.includes("ih32")) { promises.push(resize(48)) - } - if (!output.toString().includes("icp6")) { promises.push(resize(64)) - } - if (!output.includes("it32")) { promises.push(resize(128)) + await BluebirdPromise.all(promises) + + return this.createMappings(tempDir) } + else { + const output = await exec("icns2png", ["-x", "-o", tempDir, iconPath]) + debug(output) + + //noinspection UnnecessaryLocalVariableJS + const imagePath = path.join(tempDir, "icon_256x256x32.png") + + this.maxIconPath = imagePath - await BluebirdPromise.all(promises) + function resize(size: number): BluebirdPromise { + const sizeArg = `${size}x${size}` + return exec("gm", ["convert", "-size", sizeArg, imagePath, "-resize", sizeArg, path.join(tempDir, `icon_${size}x${size}x32.png`)]) + } + + const promises: Array> = [resize(24), resize(96)] + if (!output.includes("is32")) { + promises.push(resize(16)) + } + if (!output.includes("ih32")) { + promises.push(resize(48)) + } + if (!output.toString().includes("icp6")) { + promises.push(resize(64)) + } + if (!output.includes("it32")) { + promises.push(resize(128)) + } + + await BluebirdPromise.all(promises) + + return this.createMappings(tempDir) + } + } + private createMappings(tempDir: string) { const appName = this.packager.appInfo.name function createMapping(size: string) { - return [`${tempDir}/icon_${size}x${size}x32.png`, `${size}x${size}/apps/${appName}.png`] + return [process.platform === "darwin" ? `${tempDir}/icon_${size}x${size}.png` : `${tempDir}/icon_${size}x${size}x32.png`, `${size}x${size}/apps/${appName}.png`] } return [ diff --git a/test/create-bottle.sh b/test/create-bottle.sh index a9045e71839..393742624ef 100755 --- a/test/create-bottle.sh +++ b/test/create-bottle.sh @@ -5,7 +5,7 @@ cd /usr/local/Cellar brew cleanup brew prune rm -f ~/wine.7z -7za a -m0=lzma2 -mx=9 -mfb=64 -md=64m -ms=on -xr!man -xr!doc ~/wine.7z libpng fontconfig freetype gd gnutls jasper libgphoto2 libicns libtasn1 libusb libusb-compat little-cms2 nettle openssl sane-backends webp wine git-lfs gnu-tar dpkg graphicsmagick xz +7za a -m0=lzma2 -mx=9 -mfb=64 -md=64m -ms=on -xr!man -xr!doc ~/wine.7z fontconfig gd gnutls jasper libgphoto2 libicns libtasn1 libusb libusb-compat little-cms2 nettle openssl sane-backends webp wine git-lfs gnu-tar dpkg xz SEC=`security find-generic-password -l BINTRAY_API_KEY -g 2>&1` ACCOUNT=`echo "$SEC" | grep "acct" | cut -d \" -f 4`