| Index: third_party/xdg-utils/scripts/xdg-icon-resource.in
|
| ===================================================================
|
| --- third_party/xdg-utils/scripts/xdg-icon-resource.in (revision 0)
|
| +++ third_party/xdg-utils/scripts/xdg-icon-resource.in (revision 0)
|
| @@ -0,0 +1,447 @@
|
| +#!/bin/sh
|
| +#---------------------------------------------
|
| +# xdg-icon-resource
|
| +#
|
| +# Utility script to install icons on a Linux desktop.
|
| +#
|
| +# Refer to the usage() function below for usage.
|
| +#
|
| +# Copyright 2006, Kevin Krammer <kevin.krammer@gmx.at>
|
| +# Copyright 2006, Jeremy White <jwhite@codeweavers.com>
|
| +#
|
| +# LICENSE:
|
| +#
|
| +#---------------------------------------------
|
| +
|
| +manualpage()
|
| +{
|
| +cat << _MANUALPAGE
|
| +_MANUALPAGE
|
| +}
|
| +
|
| +usage()
|
| +{
|
| +cat << _USAGE
|
| +_USAGE
|
| +}
|
| +
|
| +#@xdg-utils-common@
|
| +
|
| +# Set GTK_UPDATE_ICON_CACHE to gtk-update-icon-cache executable path or
|
| +# to "-" if not found.
|
| +GTK_UPDATE_ICON_CACHE=
|
| +find_gtk_update_icon_cache()
|
| +{
|
| + [ -n "$GTK_UPDATE_ICON_CACHE" ] && return;
|
| +
|
| + GTK_UPDATE_ICON_CACHE="-"
|
| + for x in `echo "$PATH:/opt/gnome/bin" | sed 's/:/ /g'`; do
|
| + DEBUG 3 "Checking $x for gtk-update-icon-cache"
|
| + if [ -x "$x/gtk-update-icon-cache" ] ; then
|
| + DEBUG 1 "Found $x/gtk-update-icon-cache"
|
| + GTK_UPDATE_ICON_CACHE="$x/gtk-update-icon-cache"
|
| + return
|
| + fi
|
| + done
|
| +}
|
| +
|
| +# Start GNOME legacy workaround section
|
| +need_dot_icon_path()
|
| +{
|
| + # GTK < 2.6 uses ~/.icons but not XDG_DATA_HOME/icons
|
| + # The availability of gtk-update-icon-cache is used as indication
|
| + # of whether the system is using GTK 2.6 or later
|
| + find_gtk_update_icon_cache
|
| + [ "$GTK_UPDATE_ICON_CACHE" != "-" ] && return 1;
|
| + return 0;
|
| +}
|
| +
|
| +update_icon_database()
|
| +{
|
| + # Touch me, I'm dirty
|
| + touch "$1/.@NAME@-dummy"
|
| + rm -f "$1/.@NAME@-dummy"
|
| +
|
| + # Don't create a cache if there wan't one already
|
| + if [ -f "$1/icon-theme.cache" ] ; then
|
| + find_gtk_update_icon_cache
|
| + if [ "$GTK_UPDATE_ICON_CACHE" != "-" ] ; then
|
| + DEBUG 1 "Running $GTK_UPDATE_ICON_CACHE -f -t \"$1\""
|
| + eval '$GTK_UPDATE_ICON_CACHE -f -t "$1"'$xdg_redirect_output
|
| + return
|
| + fi
|
| + fi
|
| +}
|
| +
|
| +[ x"$1" != x"" ] || exit_failure_syntax
|
| +
|
| +mode=
|
| +action=
|
| +update=yes
|
| +size=
|
| +theme=hicolor
|
| +context=apps
|
| +icon_file=
|
| +icon_name=
|
| +
|
| +case $1 in
|
| + install)
|
| + action=install
|
| + ;;
|
| +
|
| + uninstall)
|
| + action=uninstall
|
| + ;;
|
| +
|
| + forceupdate)
|
| + action=forceupdate
|
| + ;;
|
| +
|
| + *)
|
| + exit_failure_syntax "unknown command '$1'"
|
| + ;;
|
| +esac
|
| +
|
| +shift
|
| +
|
| +vendor=true
|
| +while [ $# -gt 0 ] ; do
|
| + parm="$1"
|
| + shift
|
| +
|
| + case $parm in
|
| + --noupdate)
|
| + update=no
|
| + ;;
|
| +
|
| + --mode)
|
| + if [ -z "$1" ] ; then
|
| + exit_failure_syntax "mode argument missing for --mode"
|
| + fi
|
| + case "$1" in
|
| + user)
|
| + mode="user"
|
| + ;;
|
| +
|
| + system)
|
| + mode="system"
|
| + ;;
|
| +
|
| + *)
|
| + exit_failure_syntax "unknown mode '$1'"
|
| + ;;
|
| + esac
|
| + shift
|
| + ;;
|
| +
|
| + --theme)
|
| + if [ -z "$1" ] ; then
|
| + exit_failure_syntax "theme argument missing for --theme"
|
| + fi
|
| + theme="$1"
|
| + shift
|
| + ;;
|
| +
|
| + --size)
|
| + if [ -z "$1" ] ; then
|
| + exit_failure_syntax "size argument missing for --size"
|
| + fi
|
| + if echo "$1" | grep '[^0-9]' > /dev/null 2> /dev/null; then
|
| + exit_failure_syntax "size argument must be numeric"
|
| + fi
|
| + size="$1"
|
| + shift
|
| + ;;
|
| +
|
| + --context)
|
| + if [ -z "$1" ] ; then
|
| + exit_failure_syntax "context argument missing for --context"
|
| + fi
|
| + context="$1"
|
| + shift
|
| + ;;
|
| +
|
| + --novendor)
|
| + vendor=false
|
| + ;;
|
| +
|
| + -*)
|
| + exit_failure_syntax "unexpected option '$parm'"
|
| + ;;
|
| +
|
| + *)
|
| + if [ -n "$icon_name" ] ; then
|
| + exit_failure_syntax "unexpected argument '$parm'"
|
| + elif [ -n "$icon_file" ] ; then
|
| + icon_name="$parm"
|
| + else
|
| + if [ "$action" = "install" ] ; then
|
| + check_input_file "$parm"
|
| + fi
|
| + icon_file="$parm"
|
| + fi
|
| + ;;
|
| + esac
|
| +done
|
| +
|
| +# Shouldn't happen
|
| +if [ -z "$action" ] ; then
|
| + exit_failure_syntax "command argument missing"
|
| +fi
|
| +
|
| +# Shouldn't happen
|
| +if [ -z "$context" ] ; then
|
| + exit_failure_syntax "context argument missing"
|
| +fi
|
| +
|
| +if [ -n "$XDG_UTILS_INSTALL_MODE" ] ; then
|
| + if [ "$XDG_UTILS_INSTALL_MODE" = "system" ] ; then
|
| + mode="system"
|
| + elif [ "$XDG_UTILS_INSTALL_MODE" = "user" ] ; then
|
| + mode="user"
|
| + fi
|
| +fi
|
| +
|
| +if [ -z "$mode" ] ; then
|
| + if [ `whoami` = "root" ] ; then
|
| + mode="system"
|
| + else
|
| + mode="user"
|
| + fi
|
| +fi
|
| +
|
| +xdg_dir_name="icons/$theme"
|
| +
|
| +xdg_user_dir="$XDG_DATA_HOME"
|
| +[ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share"
|
| +xdg_user_prefix="$xdg_user_dir/icons"
|
| +xdg_user_dir="$xdg_user_dir/$xdg_dir_name"
|
| +
|
| +xdg_global_dir=
|
| +xdg_global_prefix=
|
| +xdg_system_dirs="$XDG_DATA_DIRS"
|
| +[ -n "$xdg_system_dirs" ] || xdg_system_dirs="/usr/local/share/:/usr/share/"
|
| +for x in `echo "$xdg_system_dirs" | sed 's/:/ /g'`; do
|
| + if [ -w $x/$xdg_dir_name ] ; then
|
| + xdg_global_prefix="$x/icons"
|
| + xdg_global_dir="$x/$xdg_dir_name"
|
| + break
|
| + fi
|
| +done
|
| +[ -w $xdg_global_dir ] || xdg_global_dir=
|
| +
|
| +dot_icon_dir=
|
| +dot_base_dir=
|
| +if [ x"$mode" = x"user" ] ; then
|
| + xdg_base_dir="$xdg_user_dir"
|
| + #Gnome 2.8 supports ~/.icons but not XDG_DATA_HOME
|
| + if need_dot_icon_path ; then
|
| + dot_icon_dir="$HOME/.icons"
|
| + dot_base_dir="$dot_icon_dir/$theme"
|
| + fi
|
| +else
|
| + xdg_base_dir="$xdg_global_dir"
|
| + if [ -z "$xdg_base_dir" ] ; then
|
| + exit_failure_operation_impossible "No writable system icon directory found."
|
| + fi
|
| +fi
|
| +
|
| +if [ x"$action" = x"forceupdate" ] ; then
|
| + if [ -n "$icon_file" ] ; then
|
| + exit_failure_syntax "unexpected argument '$icon_file'"
|
| + fi
|
| + update_icon_database $xdg_base_dir
|
| + if [ -n "$dot_icon_dir" ] ; then
|
| + if [ -d "$dot_icon_dir/" -a ! -L "$dot_icon_dir" ] ; then
|
| + update_icon_database $dot_base_dir
|
| + fi
|
| + fi
|
| + exit_success
|
| +fi
|
| +
|
| +if [ -z "$icon_file" ] ; then
|
| + if [ x"$action" = x"install" ] ; then
|
| + exit_failure_syntax "icon-file argument missing"
|
| + else
|
| + exit_failure_syntax "icon-name argument missing"
|
| + fi
|
| +fi
|
| +
|
| +xdg_size_name=
|
| +extension=
|
| +
|
| +if [ -z "$size" ] ; then
|
| + exit_failure_syntax "the icon size must be specified with --size"
|
| +fi
|
| +xdg_size_name="${size}x${size}"
|
| +
|
| +if [ x"$action" = x"install" ] ; then
|
| + case $icon_file in
|
| + *.xpm)
|
| + extension="xpm"
|
| + ;;
|
| + *.png)
|
| + extension="png"
|
| + ;;
|
| + *)
|
| + exit_failure_syntax "icon file to install must be a *.png or *.xpm file"
|
| + ;;
|
| + esac
|
| +fi
|
| +
|
| +if [ -n "$icon_name" ] ; then
|
| + case $icon_name in
|
| + *.png)
|
| + exit_failure_syntax "icon name should not include an extension"
|
| + ;;
|
| + *.xpm)
|
| + exit_failure_syntax "icon name should not include an extension"
|
| + ;;
|
| + esac
|
| +fi
|
| +
|
| +# Start KDE legacy workaround section
|
| +need_kde_icon_path()
|
| +{
|
| + local path
|
| + path=`readlink -f "$1" 2> /dev/null` # Normalize path
|
| + DEBUG 2 "need_kde_icon_path $path"
|
| + if [ -z "$path" ] ; then
|
| + DEBUG 2 "need_kde_icon_path RETURN 1 (not needed, no xdg icon dir)"
|
| + return 1; # Not needed
|
| + fi
|
| +
|
| + # if kde-config not found... return 0
|
| + kde_icon_dirs=`kde${KDE_SESSION_VERSION}-config --path icon 2> /dev/null |sed 's/:/ /g'`
|
| + DEBUG 3 "kde_icon_dirs: $kde_icon_dirs"
|
| + if [ -z "$kde_icon_dirs" ] ; then
|
| + DEBUG 3 "no result from kde${KDE_SESSION_VERSION}-config --path icon"
|
| + DEBUG 2 "need_kde_icon_path RETURN 1 (not needed, no kde icon path)"
|
| + return 1; # Not needed
|
| + fi
|
| + needed=0 # Needed
|
| + for y in $kde_icon_dirs ; do
|
| + x=`readlink -f "$y"` # Normalize path
|
| + DEBUG 3 "Normalize $y --> $x"
|
| + if [ -n "$x" ] ; then
|
| + if [ "$x" = "$path" ] ; then
|
| + needed=1 # Not needed
|
| + fi
|
| + if [ -w "$x" ] ; then
|
| + kde_global_prefix="$x"
|
| + # Take last writable dir
|
| + fi
|
| + fi
|
| + done
|
| + DEBUG 2 "kde_global_prefix: $kde_global_prefix"
|
| + [ $needed -eq "1" ] && DEBUG 2 "need_kde_icon_path RETURN $needed (not needed)"
|
| + [ $needed -eq "0" ] && DEBUG 2 "need_kde_icon_path RETURN $needed (needed)"
|
| + return $needed
|
| +}
|
| +
|
| +kde_dir=
|
| +if [ x"$mode" = x"user" ] ; then
|
| + xdg_dir="$xdg_base_dir/$xdg_size_name/$context"
|
| + #KDE 3.x doesn't support XDG_DATA_HOME for icons
|
| + #Check if xdg_dir prefix is listed by kde-config --path icon
|
| + #If not, install additional symlink to kdedir
|
| + if need_kde_icon_path "$xdg_user_prefix" ; then
|
| + kde_user_dir="$HOME/.kde/share/icons/$theme"
|
| + kde_dir="$kde_user_dir/$xdg_size_name/$context"
|
| + fi
|
| + #Gnome 2.8 supports ~/.icons but not XDG_DATA_HOME
|
| + if [ -n "$dot_icon_dir" ] ; then
|
| + if [ -L "$dot_icon_dir" ] ; then
|
| + # Don't do anything
|
| + dot_icon_dir=
|
| + elif [ ! -d "$dot_icon_dir/" ] ; then
|
| + # Symlink if it doesn't exist
|
| + eval 'ln -s ".local/share/icons" "$dot_icon_dir"'$xdg_redirect_output
|
| + dot_icon_dir=
|
| + else
|
| + dot_icon_dir="$dot_icon_dir/$theme/$xdg_size_name/$context"
|
| + fi
|
| + fi
|
| + my_umask=077
|
| +else
|
| + xdg_dir="$xdg_base_dir/$xdg_size_name/$context"
|
| + #KDE 3.x doesn't support XDG_DATA_DIRS for icons
|
| + #Check if xdg_dir prefix is listed by kde-config --path icon
|
| + #If not, install additional symlink to kdedir
|
| + if need_kde_icon_path "$xdg_global_prefix" ; then
|
| + kde_global_dir="$kde_global_prefix/$theme"
|
| + kde_dir="$kde_global_dir/$xdg_size_name/$context"
|
| + fi
|
| + my_umask=022
|
| +fi
|
| +# End KDE legacy workaround section
|
| +
|
| +# Start GNOME legacy workaround section
|
| +need_gnome_mime=
|
| +[ $context = "mimetypes" ] && need_gnome_mime=true
|
| +# End GNOME legacy workaround section
|
| +
|
| +[ -n "$icon_name" ] || icon_name=`basename $icon_file | sed 's/\.[a-z][a-z][a-z]$//'`
|
| +
|
| +if [ "$vendor" = "true" -a "$action" = "install" -a "$context" = "apps" ] ; then
|
| + check_vendor_prefix "$icon_name" "icon name"
|
| +fi
|
| +
|
| +icon_icon_file=`echo "$icon_file" | sed 's/\.[a-z][a-z][a-z]$/.icon/'`
|
| +icon_icon_name="$icon_name.icon"
|
| +
|
| +DEBUG 1 "$action icon in $xdg_dir"
|
| +[ $action = "install" -a -f $icon_icon_file ] && DEBUG 1 "install $icon_icon_name meta file in $xdg_dir"
|
| +[ -n "$kde_dir" ] && DEBUG 1 "$action symlink in $kde_dir (KDE 3.x support)"
|
| +[ -n "$need_gnome_mime" ] && DEBUG 1 "$action gnome-mime-$icon_name symlink (GNOME 2.x support)"
|
| +[ $action = "install" -a -n "$dot_icon_dir" ] && DEBUG 1 "$action ~/.icons symlink (GNOME 2.8 support)"
|
| +
|
| +case $action in
|
| + install)
|
| + save_umask=`umask`
|
| + umask $my_umask
|
| +
|
| + for icon_dir in $xdg_dir $dot_icon_dir; do
|
| + mkdir -p $icon_dir
|
| + eval 'cp "$icon_file" "$icon_dir/$icon_name.$extension"'$xdg_redirect_output
|
| + if [ -f "$icon_icon_file" ] ; then
|
| + eval 'cp "$icon_icon_file" "$icon_dir/$icon_icon_name"'$xdg_redirect_output
|
| + fi
|
| + if [ -n "$need_gnome_mime" ] ; then
|
| + eval 'ln -s "$icon_name.$extension" "$icon_dir/gnome-mime-$icon_name.$extension"'$xdg_redirect_output
|
| + fi
|
| + done
|
| + if [ -n "$kde_dir" ] ; then
|
| + mkdir -p $kde_dir
|
| + eval 'ln -s "$xdg_dir/$icon_name.$extension" "$kde_dir/$icon_name.$extension"'$xdg_redirect_output
|
| + fi
|
| +
|
| + umask $save_umask
|
| + ;;
|
| +
|
| + uninstall)
|
| + for icon_dir in $xdg_dir $dot_icon_dir; do
|
| + rm -f "$icon_dir/$icon_name.xpm" "$icon_dir/$icon_name.png"
|
| + rm -f "$icon_dir/$icon_icon_name"
|
| + if [ -n "$need_gnome_mime" ] ; then
|
| + rm -f "$icon_dir/gnome-mime-$icon_name.xpm"
|
| + rm -f "$icon_dir/gnome-mime-$icon_name.png"
|
| + fi
|
| + done
|
| + if [ -n "$kde_dir" ] ; then
|
| + rm -f "$kde_dir/$icon_name.xpm" "$kde_dir/$icon_name.png"
|
| + fi
|
| +
|
| + ;;
|
| +esac
|
| +
|
| +if [ x"$update" = x"yes" ] ; then
|
| + update_icon_database "$xdg_base_dir"
|
| + if [ -n "$dot_icon_dir" ] ; then
|
| + if [ -d "$dot_icon_dir/" -a ! -L "$dot_icon_dir" ] ; then
|
| + update_icon_database $dot_base_dir
|
| + fi
|
| + fi
|
| +fi
|
| +
|
| +exit_success
|
|
|