187 lines
5.5 KiB
Bash
Executable file
187 lines
5.5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
# icon-theme-installer
|
|
# Copyright (C) 2006 Novell, Inc.
|
|
# Written by Aaron Bockover <abock@gnome.org>
|
|
# Licensed under the MIT/X11 license
|
|
#
|
|
# This script is meant to be invoked from within a Makefile/Makefile.am
|
|
# in the install-data-local and uninstall-data sections. It handles the
|
|
# task of properly installing icons into the icon theme. It requires a
|
|
# few arguments to set up its environment, and a list of files to be
|
|
# installed. The format of the file list is critical:
|
|
#
|
|
# <category>,<local-src-file-name>
|
|
#
|
|
# apps,music-player-banshee.svg
|
|
# apps,music-player-banshee-16.png
|
|
# apps,music-player-banshee-22.png
|
|
#
|
|
# <category> is the icon theme category, for instance, apps, devices,
|
|
# actions, emblems...
|
|
#
|
|
# <local-src-file-name> must have a basename in the form of:
|
|
#
|
|
# proper-theme-name[-<SIZE>].<EXTENSION>
|
|
#
|
|
# Where <SIZE> should be either nothing, which will default to scalable
|
|
# or \-[0-9]{2}, which will expand to <SIZE>x<SIZE>. For example:
|
|
#
|
|
# music-player-banshee-16.png
|
|
#
|
|
# The <SIZE> here is -16 and will expand to 16x16 per the icon theme spec
|
|
#
|
|
# What follows is an example Makefile.am for icon theme installation:
|
|
#
|
|
# ---------------
|
|
# theme=hicolor
|
|
# themedir=$(datadir)/icons/$(theme)
|
|
# theme_icons = \
|
|
# apps,music-player-banshee.svg \
|
|
# apps,music-player-banshee-16.png \
|
|
# apps,music-player-banshee-22.png \
|
|
# apps,music-player-banshee-24.png \
|
|
# apps,music-player-banshee-32.png
|
|
#
|
|
# install_icon_exec = $(top_srcdir)/build/icon-theme-installer -t $(theme) -s $(srcdir) -d "x$(DESTDIR)" -b $(themedir) -m "$(mkinstalldirs)" -x "$(INSTALL_DATA)"
|
|
# install-data-local:
|
|
# $(install_icon_exec) -i $(theme_icons)
|
|
#
|
|
# uninstall-hook:
|
|
# $(install_icon_exec) -u $(theme_icons)
|
|
#
|
|
# MAINTAINERCLEANFILES = Makefile.in
|
|
# EXTRA_DIST = $(wildcard *.svg *.png)
|
|
# ---------------
|
|
#
|
|
# Arguments to this program:
|
|
#
|
|
# -i : Install
|
|
# -u : Uninstall
|
|
# -t <theme> : Theme name (hicolor)
|
|
# -d <dir> : Theme installation dest directory [x$(DESTDIR)] - Always prefix
|
|
# this argument with x; it will be stripped but will act as a
|
|
# placeholder for zero $DESTDIRs (only set by packagers)
|
|
# -b <dir> : Theme installation directory [$(hicolordir)]
|
|
# -s <dir> : Source directory [$(srcdir)]
|
|
# -m <exec> : Command to exec for directory creation [$(mkinstalldirs)]
|
|
# -x <exec> : Command to exec for single file installation [$(INSTALL_DATA)]
|
|
# <remainging> : All remainging should be category,filename pairs
|
|
|
|
while getopts "iut:b:d:s:m:x:" flag; do
|
|
case "$flag" in
|
|
i) INSTALL=yes ;;
|
|
u) UNINSTALL=yes ;;
|
|
t) THEME_NAME=$OPTARG ;;
|
|
d) INSTALL_DEST_DIR=${OPTARG##x} ;;
|
|
b) INSTALL_BASE_DIR=$OPTARG ;;
|
|
s) SRC_DIR=$OPTARG ;;
|
|
m) MKINSTALLDIRS_EXEC=$OPTARG ;;
|
|
x) INSTALL_DATA_EXEC=$OPTARG ;;
|
|
esac
|
|
done
|
|
|
|
shift $(($OPTIND - 1))
|
|
|
|
if test "x$INSTALL" = "xyes" -a "x$UNINSTALL" = "xyes"; then
|
|
echo "Cannot pass both -i and -u"
|
|
exit 1
|
|
elif test "x$INSTALL" = "x" -a "x$UNINSTALL" = "x"; then
|
|
echo "Must path either -i or -u"
|
|
exit 1
|
|
fi
|
|
|
|
if test -z "$THEME_NAME"; then
|
|
echo "Theme name required (-t hicolor)"
|
|
exit 1
|
|
fi
|
|
|
|
if test -z "$INSTALL_BASE_DIR"; then
|
|
echo "Base theme directory required [-b \$(hicolordir)]"
|
|
exit 1
|
|
fi
|
|
|
|
if test ! -x $(echo "$MKINSTALLDIRS_EXEC" | cut -f1 -d' '); then
|
|
echo "Cannot find '$MKINSTALLDIRS_EXEC'; You probably want to pass -m \$(mkinstalldirs)"
|
|
exit 1
|
|
fi
|
|
|
|
if test ! -x $(echo "$INSTALL_DATA_EXEC" | cut -f1 -d' '); then
|
|
echo "Cannot find '$INSTALL_DATA_EXEC'; You probably want to pass -x \$(INSTALL_DATA)"
|
|
exit 1
|
|
fi
|
|
|
|
if test -z "$SRC_DIR"; then
|
|
SRC_DIR=.
|
|
fi
|
|
|
|
for icon in $@; do
|
|
size=$(echo $icon | sed s/[^0-9]*//g)
|
|
category=$(echo $icon | cut -d, -f1)
|
|
build_name=$(echo $icon | cut -d, -f2)
|
|
install_name=$(echo $build_name | sed "s/[0-9]//g; s/-\././")
|
|
install_name=$(basename $install_name)
|
|
|
|
if test -z $size; then
|
|
size=scalable;
|
|
|
|
if [[ "${INSTALL_BASE_DIR}" == *ubuntu-mono-* ]]; then
|
|
install_dir=${INSTALL_DEST_DIR}${INSTALL_BASE_DIR}/$category/$size
|
|
else
|
|
install_dir=${INSTALL_DEST_DIR}${INSTALL_BASE_DIR}/$size/$category
|
|
fi
|
|
else
|
|
if [[ "${INSTALL_BASE_DIR}" == *ubuntu-mono-* ]]; then
|
|
install_dir=${INSTALL_DEST_DIR}${INSTALL_BASE_DIR}/$category/$size
|
|
else
|
|
size=${size}x${size};
|
|
install_dir=${INSTALL_DEST_DIR}${INSTALL_BASE_DIR}/$size/$category
|
|
fi
|
|
fi
|
|
|
|
install_path=$install_dir/$install_name
|
|
|
|
if test "x$INSTALL" = "xyes"; then
|
|
echo "Installing $size $install_name into $THEME_NAME icon theme"
|
|
|
|
$($MKINSTALLDIRS_EXEC $install_dir) || {
|
|
echo "Failed to create directory $install_dir"
|
|
exit 1
|
|
}
|
|
|
|
$($INSTALL_DATA_EXEC $SRC_DIR/$build_name $install_path) || {
|
|
echo "Failed to install $SRC_DIR/$build_name into $install_path"
|
|
exit 1
|
|
}
|
|
|
|
if test ! -e $install_path; then
|
|
echo "Failed to install $SRC_DIR/$build_name into $install_path"
|
|
exit 1
|
|
fi
|
|
else
|
|
if test -e $install_path; then
|
|
echo "Removing $size $install_name from $THEME_NAME icon theme"
|
|
|
|
rm $install_path || {
|
|
echo "Failed to remove $install_path"
|
|
exit 1
|
|
}
|
|
fi
|
|
fi
|
|
done
|
|
|
|
gtk_update_icon_cache_bin="$((which gtk-update-icon-cache || echo /opt/gnome/bin/gtk-update-icon-cache)2>/dev/null)"
|
|
gtk_update_icon_cache="$gtk_update_icon_cache_bin -f -t $INSTALL_BASE_DIR"
|
|
|
|
if test -z "$INSTALL_DEST_DIR"; then
|
|
if test -x $gtk_update_icon_cache_bin; then
|
|
echo "Updating GTK icon cache"
|
|
$gtk_update_icon_cache
|
|
else
|
|
echo "*** Icon cache not updated. Could not execute $gtk_update_icon_cache_bin"
|
|
fi
|
|
else
|
|
echo "*** Icon cache not updated. After (un)install, run this:"
|
|
echo "*** $gtk_update_icon_cache"
|
|
fi
|
|
|