aboutsummaryrefslogtreecommitdiff
path: root/pixmaps/icon-theme-installer
blob: 7c8f5a3f796c541dfc8555e72e28da2a1521ec36 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#!/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)
# -b <dir>   : Theme installation dest directory [x$(DESTDIR)] - Always 
#              prefix
#              this argument with x; it will be stripped but will act as 
#              placeholder for zero $DESTDIRs (only set by packagers)
# -d <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 [-d \$(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;
	else
		size=${size}x${size};
	fi
	
	
install_dir=${INSTALL_DEST_DIR}${INSTALL_BASE_DIR}/$size/$category
	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

if test "x$INSTALL" = "xyes"; then
	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 install, run 
this:"
		echo "***   $gtk_update_icon_cache"
	fi
fi