Files

59 lines
2.1 KiB
Bash
Executable File

#!/bin/sh
# Regenerate the application icons from the project logo.
#
# Source of truth: emacs-gpu.svg (this directory). Run this script from
# anywhere after changing the logo, or after a rebase onto a new Emacs
# tag if an icon file conflicted (resolution rule: ours, i.e. re-run
# this script).
#
# Outputs:
# etc/images/icons/hicolor/{24x24,32x32,48x48,128x128}/apps/emacs.png
# etc/images/icons/hicolor/scalable/apps/emacs.svg
# nextstep/Cocoa/Emacs.base/Contents/Resources/Emacs.icns (macOS only)
#
# The 16x16 hicolor PNG is left untouched (upstream's own render) and
# the 16pt icns slot renders from the unmodified upstream icon
# (emacs-official.svg): at that size the chip pins and the motion trail
# degrade into noise, legibility wins.
#
# Requires rsvg-convert (librsvg); the .icns step also needs iconutil
# and therefore macOS.
set -e
here=$(cd "$(dirname "$0")" && pwd)
root=$(cd "$here/../../.." && pwd)
logo="$here/emacs-gpu.svg"
official="$here/emacs-official.svg"
command -v rsvg-convert >/dev/null || {
echo "rsvg-convert not found (install librsvg)" >&2; exit 1;
}
# Freedesktop hicolor theme (GNU/Linux window/menu icon).
for s in 24 32 48 128; do
rsvg-convert -w $s -h $s "$logo" \
-o "$root/etc/images/icons/hicolor/${s}x${s}/apps/emacs.png"
done
cp "$logo" "$root/etc/images/icons/hicolor/scalable/apps/emacs.svg"
echo "hicolor icons regenerated"
# macOS application icon.
if command -v iconutil >/dev/null; then
set=$(mktemp -d)/Emacs.iconset
mkdir -p "$set"
rsvg-convert -w 16 -h 16 "$official" -o "$set/icon_16x16.png"
for spec in "16x16@2x 32" "32x32 32" "32x32@2x 64" "128x128 128" \
"128x128@2x 256" "256x256 256" "256x256@2x 512" \
"512x512 512" "512x512@2x 1024"; do
name=${spec% *}; px=${spec#* }
rsvg-convert -w "$px" -h "$px" "$logo" -o "$set/icon_$name.png"
done
iconutil -c icns "$set" \
-o "$root/nextstep/Cocoa/Emacs.base/Contents/Resources/Emacs.icns"
rm -rf "$(dirname "$set")"
echo "Emacs.icns regenerated"
else
echo "iconutil not found: skipping Emacs.icns (macOS only)"
fi