diff -r 09b82e3ff500 -r d78a523a8925 components/desktop/desktop-cache/files/pixbuf-loaders-installer --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/desktop/desktop-cache/files/pixbuf-loaders-installer Wed Apr 27 22:34:47 2016 -0700 @@ -0,0 +1,206 @@ +#!/bin/ksh -p +# +# Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, and/or sell copies of the Software, and to permit persons +# to whom the Software is furnished to do so, provided that the above +# copyright notice(s) and this permission notice appear in all copies of +# the Software and that both the above copyright notice(s) and this +# permission notice appear in supporting documentation. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +# OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL +# INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING +# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in this Software without prior written authorization +# of the copyright holder. +# +########################################################################### +# + +PATH=/usr/bin:/usr/sbin + +. /lib/svc/share/smf_include.sh + +USAGE="Usage: $0 { start | refresh }" +FIND_NEWER=/usr/share/desktop-cache/find_newer + +if [ $# -ne 1 ] ; then + echo $USAGE + exit 2 +fi + +# +# for each architecture +# if loader file exist +# get the list of modules newer than the loader file +# else +# make list greater than zero +# +# if list generate loader list +# + +ARCH64=`/bin/isainfo -k` + +if [[ $ARCH64 != "amd64" ]] && [[ "$ARCH64" != "sparcv9" ]]; then + ARCH64="" +fi + +start_pixbuf_loaders_installer () +{ +for DIR in "" $ARCH64; do + test -x /usr/bin/$DIR/gdk-pixbuf-query-loaders || { + echo "gdk-pixbuf-query-loaders not installed" + continue + } + test -w /etc/$DIR/gtk-2.0 || { + echo "/etc/$DIR/gtk-2.0 is not writable, skipping." + return + } + if [ -a "/etc/$DIR/gtk-2.0/gdk-pixbuf.loaders" ] && [ ! -w "/etc/$DIR/gtk-2.0/gdk-pixbuf.loaders" ]; then + echo "/etc/$DIR/gtk-2.0/gdk-pixbuf.loaders is not writable, skipping." + return + fi + if [ -a "/etc/$DIR/gtk-2.0/gdk-pixbuf.loaders" ]; then + RESULT=`${FIND_NEWER} -f -c -m --name '*.so' \ + --newer /etc/$DIR/gtk-2.0/gdk-pixbuf.loaders \ + /usr/lib/$DIR/gdk-pixbuf-2.0/*/loaders 2>/dev/null` + else + RESULT="no gdk pixbuf loaders file" + fi + + if [ -n "$RESULT" ]; then + echo "updating/creating gdk pixbuf loaders file" + /usr/bin/$DIR/gdk-pixbuf-query-loaders > /etc/$DIR/gtk-2.0/gdk-pixbuf.loaders + if [ $? -ne 0 ]; then + echo "gdk-pixbuf-query-loaders exited with an error while generating the installer file /etc/$DIR/gtk-2.0/gdk-pixbuf.loaders" + exit $SMF_EXIT_ERR_FATAL + else + echo "gdk pixbuf loaders installed in /etc/$DIR/gtk-2.0/gdk-pixbuf.loaders" + fi + fi + + test -w /usr/lib/$DIR/gdk-pixbuf-2.0/2.10.0 || { + echo "/usr/lib/$DIR/gdk-pixbuf-2.0/2.10.0 is not writable, skipping." + return + } + if [ -a "/usr/lib/$DIR/gdk-pixbuf-2.0/2.10.0/loaders.cache" ] && [ ! -w "/usr/lib/$DIR/gdk-pixbuf-2.0/2.10.0/loaders.cache" ]; then + echo "/usr/lib/$DIR/gdk-pixbuf-2.0/2.10.0/loaders.cache is not writable, skipping." + return + fi + if [ -a "/usr/lib/$DIR/gdk-pixbuf-2.0/2.10.0/loaders.cache" ]; then + RESULT=`${FIND_NEWER} -f -c -m --name '*.so' \ + --newer /usr/lib/$DIR/gdk-pixbuf-2.0/2.10.0/loaders.cache \ + /usr/lib/$DIR/gdk-pixbuf-2.0/*/loaders 2>/dev/null` + else + RESULT="no loaders cache file" + fi + + if [ -n "$RESULT" ]; then + echo "updating/creating loaders cache file" + /usr/bin/$DIR/gdk-pixbuf-query-loaders > /usr/lib/$DIR/gdk-pixbuf-2.0/2.10.0/loaders.cache + if [ $? -ne 0 ]; then + echo "gdk-pixbuf-query-loaders exited with an error while generating the installer file /usr/lib/$DIR/gdk-pixbuf-2.0/2.10.0/loaders.cache" + exit $SMF_EXIT_ERR_FATAL + else + echo "loaders cache installed in /usr/lib/$DIR/gdk-pixbuf-2.0/2.10.0/loaders.cache" + fi + fi +done +} + +refresh_pixbuf_loaders_installer () +{ +for DIR in "" $ARCH64; do + test -x /usr/bin/$DIR/gdk-pixbuf-query-loaders || { + echo "gdk-pixbuf-query-loaders not installed" + continue + } + test -w /etc/$DIR/gtk-2.0 || { + echo "/etc/$DIR/gtk-2.0 is not writable, skipping." + return + } + if [ -a "/etc/$DIR/gtk-2.0/gdk-pixbuf.loaders" ] && [ ! -w "/etc/$DIR/gtk-2.0/gdk-pixbuf.loaders" ]; then + echo "/etc/$DIR/gtk-2.0/gdk-pixbuf.loaders is not writable, skipping." + return + fi + if [ -a "/etc/$DIR/gtk-2.0/gdk-pixbuf.loaders" ]; then + RESULT=`/usr/bin/find /usr/lib/$DIR/gdk-pixbuf-2.0/*/loaders/*.so ! -type d \ + -follow -print 2>/dev/null` + else + RESULT="no gdk pixbuf loaders file" + fi + + if [ -n "$RESULT" ]; then + echo "updating/creating gdk pixbuf loaders file" + /usr/bin/$DIR/gdk-pixbuf-query-loaders > /etc/$DIR/gtk-2.0/gdk-pixbuf.loaders + if [ $? -ne 0 ]; then + echo "gdk-pixbuf-query-loaders exited with an error while generating the installer file /etc/$DIR/gtk-2.0/gdk-pixbuf.loaders" + exit $SMF_EXIT_ERR_FATAL + else + echo "gdk pixbuf loaders installed in /etc/$DIR/gtk-2.0/gdk-pixbuf.loaders" + fi + fi + + test -w /usr/lib/$DIR/gdk-pixbuf-2.0/2.10.0 || { + echo "/usr/lib/$DIR/gdk-pixbuf-2.0/2.10.0 is not writable, skipping." + return + } + if [ -a "/usr/lib/$DIR/gdk-pixbuf-2.0/2.10.0/loaders.cache" ] && [ ! -w "/usr/lib/$DIR/gdk-pixbuf-2.0/2.10.0/loaders.cache" ]; then + echo "/usr/lib/$DIR/gdk-pixbuf-2.0/2.10.0/loaders.cache is not writable, skipping." + return + fi + if [ -a "/usr/lib/$DIR/gdk-pixbuf-2.0/2.10.0/loaders.cache" ]; then + RESULT=`/usr/bin/find /usr/lib/$DIR/gdk-pixbuf-2.0/*/loaders/*.so ! -type d \ + -follow -print 2>/dev/null` + else + RESULT="no loaders cache file" + fi + + if [ -n "$RESULT" ]; then + echo "updating/creating loaders cache file" + /usr/bin/$DIR/gdk-pixbuf-query-loaders > /usr/lib/$DIR/gdk-pixbuf-2.0/2.10.0/loaders.cache + if [ $? -ne 0 ]; then + echo "gdk-pixbuf-query-loaders exited with an error while generating the installer file /usr/lib/$DIR/gdk-pixbuf-2.0/2.10.0/loaders.cache" + exit $SMF_EXIT_ERR_FATAL + else + echo "loaders cache installed in /usr/lib/$DIR/gdk-pixbuf-2.0/2.10.0/loaders.cache" + fi + fi +done +} + +METHOD=$1 + +case "$METHOD" in + 'start') + # Continue with rest of script + ;; + 'refresh') + # Continue with rest of script + ;; + -*) + echo $USAGE + exit 2 + ;; + *) + echo "Invalid method $METHOD" + exit 2 + ;; +esac + +${METHOD}_pixbuf_loaders_installer + +exit $SMF_EXIT_OK