tog-pegasus/pegasus_arch_alternatives
2023-07-24 14:02:26 +02:00

159 lines
4.6 KiB
Bash
Executable File

#!/bin/bash
#
# Script to manage tog-pegasus alternatives for multi-lib platforms
#
# Jason Vas Dias<jvdias@redhat.com>, Red Hat, Inc. June 2006
#
# Usage:
# pegasus_arch_alternatives
# ( --list [pfx] |
# ( [ devel | test ] [ -64 ] [ -32 ] [ --remove ] [ --display ] )
# )
# no args : set up library and binary 'pegasus' alternatives
# --list : list 64/32-bit alternatives, with optional prefix pfx
# devel : set up the 'pegasus-devel' alternative
# test : set up the 'pegasus-test' alternative
# -64 : select 64-bit alternatives
# -32 : select 32-bit alternatives
# --remove : remove all pegasus alternatives
# --display: display the pegasus alternatives
#
ALT='pegasus'
LINK=/usr/sbin/cimserver
SLAVES=(/usr/{bin/{cimmof,cimmofl,cimprovider,osinfo,wbemexec},sbin/{cimauth,cimconfig,cimprovagt,cimsub,cimuser,repupgrade}})
DEVEL_LINK=/usr/share/Pegasus/samples/mak/config.mak
TEST_LINK=/usr/share/Pegasus/test/Makefile
#
# Handle listing arg:
#
if [ "$1" = '--list' ]; then
pfx='';
if [ $# -gt 1 ]; then
pfx=$2' ';
fi;
for f in $LINK ${SLAVES[@]} $DEVEL_LINK $TEST_LINK; do
echo ${pfx}$f;
done;
exit 0;
fi
#
# Ensure that files and alternatives are correctly in-sync for architecture:
#
ARCH=`/bin/uname -i`
case $ARCH in
# return for arches that have no alternatives
ia64 )
# nothing to be done - shipped without binary suffix
exit 0;
;;
i386 | ppc | s390 | sparc )
# shipped with -32 suffix, but no alternatives possible - move:
for f in $LINK ${SLAVES[@]} $DEVEL_LINK $TEST_LINK;
do
if [ -f ${f}-32 ] ; then
/bin/mv -f ${f}-32 $f;
fi;
done;
exit 0;
;;
x86_64 | ppc64 | ppc64le | s390x | sparc64 )
# continue
;;
*)
# unhandled architecture
exit 1;
;;
esac;
if [ "$1" = 'devel' ] || [ "$1" = 'test' ]; then
ALT='pegasus-'$1;
shift;
SLAVES=();
if [ "$ALT" = 'pegasus-devel' ]; then
LINK=$DEVEL_LINK;
else
LINK=$TEST_LINK;
fi;
fi;
#
# Ensure that whatever alternatives can be installed, are installed,
# and those that can't be installed are removed:
#
alternatives="`/usr/sbin/alternatives --display $ALT 2>/dev/null`";
slaves64=''
slaves32=''
installed64=1;
installed32=1;
for f in $LINK ${SLAVES[@]}; do
if [ $installed64 -eq 1 ] && [ -f ${f}-64 ]; then
slaves64=${slaves64}'--slave '$f' '${f##*/}' '${f}-64' ';
else
installed64=0;
continue;
fi;
if [ $installed32 -eq 1 ] && [ -f ${f}-32 ]; then
slaves32=${slaves32}'--slave '$f' '${f##*/}' '${f}-32' ';
else
installed32=0;
continue;
fi;
if [ -e $f ] && [ ! -L $f ]; then
/bin/rm -f $f;
fi;
done
if [ $installed64 -eq 0 ]; then
/usr/sbin/alternatives --remove $ALT ${LINK}-64 >/dev/null 2>&1 || :;
elif ! echo "$alternatives" | /bin/egrep -q "^${LINK}-64"; then
/usr/sbin/alternatives --install $LINK $ALT ${LINK}-64 50 $slaves64;
fi;
if [ $installed32 -eq 0 ]; then
/usr/sbin/alternatives --remove $ALT ${LINK}-32 >/dev/null 2>&1 || :;
elif ! echo "$alternatives" | /bin/egrep -q "^${LINK}-32"; then
/usr/sbin/alternatives --install $LINK $ALT ${LINK}-32 50 $slaves32;
fi;
#
# Handle optional user args
#
if [ -n "$1" ]; then
case $1 in
-64 )
if [ $installed64 -eq 1 ]; then
/usr/sbin/alternatives --set $ALT ${LINK}-64;
if [ "$ALT" = 'pegasus' ]; then
/usr/sbin/alternatives --set pegasus-devel ${DEVEL_LINK}-64 >/dev/null 2>&1;
/usr/sbin/alternatives --set pegasus-test ${TEST_LINK}-64 >/dev/null 2>&1;
fi;
fi
;;
-32 )
if [ $installed32 -eq 1 ]; then
/usr/sbin/alternatives --set $ALT ${LINK}-32;
if [ "$ALT" = 'pegasus' ]; then
/usr/sbin/alternatives --set pegasus-devel ${DEVEL_LINK}-32 >/dev/null 2>&1;
/usr/sbin/alternatives --set pegasus-test ${TEST_LINK}-32 >/dev/null 2>&1;
fi;
fi
;;
--remove )
/usr/sbin/alternatives --remove $ALT ${LINK}-32 >/dev/null 2>&1;
/usr/sbin/alternatives --remove $ALT ${LINK}-64 >/dev/null 2>&1;
if [ "$ALT" = 'pegasus' ]; then
/usr/sbin/alternatives --remove pegasus-devel ${DEVEL_LINK}-32 >/dev/null 2>&1;
/usr/sbin/alternatives --remove pegasus-devel ${DEVEL_LINK}-64 >/dev/null 2>&1;
/usr/sbin/alternatives --remove pegasus-test ${TEST_LINK}-32 >/dev/null 2>&1;
/usr/sbin/alternatives --remove pegasus-test ${TEST_LINK}-64 >/dev/null 2>&1;
fi;
;;
--display )
/usr/sbin/alternatives --display $ALT;
if [ "$ALT" = 'pegasus' ]; then
/usr/sbin/alternatives --display pegasus-devel;
/usr/sbin/alternatives --display pegasus-test;
fi
;;
*)
exit 1;
;;
esac;
fi;
exit 0;