#!/bin/bash # Copyright 1999-2004 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # based on gcc-config by Martin Schlemmer source /etc/init.d/functions.sh || { echo "$0: Could not source /etc/init.d/functions.sh!" exit 1 } umask 022 PROFILE_PATH=/usr/@@LIBDIR@@/motif CONFIG_FILE=${PROFILE_PATH}/current usage() { cat << "USAGE_END" Usage: motif-config [option] [profile] Change the current motif profile, or give info about profiles. Options: -c, --get-current-profile Print current used motif profile. -l, --list-profiles Print a list of available profiles. -s, --set-profile Set the current profile. -L, --get-lib-path Print path where libraries of the given/current profile are located. -I, --get-inc-path Print path where includes of the given/current profile are located. --libs Print link flags for the given/current profile. --cflags Print compilation flags for the given/current profile. --install Install the given profile. --uninstall Uninstall the given profile. USAGE_END exit $1 } [[ $# -lt 1 ]] && usage 1 [[ $# -gt 2 ]] && usage 1 _activate_profile() { if [[ "$(id -u)" -ne 0 ]] ; then eerror "$0: Must be root." exit 1 fi new=${1} # libs for file in `ls /usr/@@LIBDIR@@/${new}/`; do ln -s /usr/@@LIBDIR@@/${new}/${file} /usr/@@LIBDIR@@/${file} done # includes for file in `ls /usr/include/${new}/`; do ln -s /usr/include/${new}/${file} /usr/include/${file} done # binaries for file in `find /usr/bin/ -name "*-${new}"`; do ln -s ${file} ${file/-${new}/} done # man pages for file in `find /usr/share/man -regex ".*-${new}\..x?.gz"`; do ln -s ${file} ${file/-${new}/} done # set new profile as default rm -f ${CONFIG_FILE} cat ${PROFILE_PATH}/${new} > ${CONFIG_FILE} } _deactivate_profile() { if [[ "$(id -u)" -ne 0 ]] ; then eerror "$0: Must be root." exit 1 fi current=`cat ${CONFIG_FILE} 2>/dev/null` if [ -z "$current" ]; then exit 0 fi # libs for file in `ls /usr/@@LIBDIR@@/${current}/`; do rm -f /usr/@@LIBDIR@@/${file} done # includes for file in `ls /usr/include/${current}/`; do rm -f /usr/include/${file} done # binaries for file in `find /usr/bin/ -name "*-${current}"`; do rm -f ${file/-${current}/} done # man pages for file in `find /usr/share/man -regex ".*-${current}\..x?.gz"`; do rm -f ${file/-${current}/} done } switch_profile() { if [[ "$(id -u)" -ne 0 ]] ; then eerror "$0: Must be root." exit 1 fi if [ -n "$1" ]; then if [ ! -e ${PROFILE_PATH}/${1} ]; then eerror "$0: no such profile ${1}" else _deactivate_profile _activate_profile $1 fi else for x in `ls ${PROFILE_PATH}`; do if [ "${x}" != "current" -a "${x}" != "removed" ]; then _deactivate_profile _activate_profile ${x} break fi done if [ -z ${x} ]; then error "$0: no profile to activate" fi fi einfo "$0: New default Profile is: `cat ${CONFIG_FILE}`" exit 0 } get_current_profile() { cat ${CONFIG_FILE} 2> /dev/null } list_profiles() { i=1 for x in `ls ${PROFILE_PATH}`; do current=`cat ${CONFIG_FILE} 2>/dev/null` if [ "${x}" != "current" -a "${x}" != "removed" ]; then output=`cat ${PROFILE_PATH}/${x}`; output="[${i}] $output"; if [ "${x}" = "${current}" ]; then output="${output} *" fi echo "$output" i=$((i + 1)) fi done exit 0 } get_lib_path() { if [ "$1" != "" ]; then profile=${1} else profile="current" fi name=`cat ${PROFILE_PATH}/${profile} 2> /dev/null` if [ $? -eq 1 ]; then eerror "$0: No such profile: $profile" else echo "/usr/@@LIBDIR@@/${name}/" exit 0 fi } get_inc_path() { if [ "$1" != "" ]; then profile=${1} else profile="current" fi name=`cat ${PROFILE_PATH}/${profile} 2> /dev/null` if [ $? -eq 1 ]; then eerror "$0: No such profile: $profile" else echo "/usr/include/${name}/" exit 0 fi } get_cflags() { if [ "$1" != "" ]; then profile=${1} else profile="current" fi name=`cat ${PROFILE_PATH}/${profile} 2> /dev/null` if [ $? -eq 1 ]; then eerror "$0: No such profile: $profile" else echo "-I/usr/include/${name}/" exit 0 fi } get_libs() { if [ "$1" != "" ]; then profile=${1} else profile="current" fi name=`cat ${PROFILE_PATH}/${profile} 2> /dev/null` if [ $? -eq 1 ]; then eerror "$0: No such profile: $profile" else echo "-L/usr/@@LIBDIR@@/${name}/" exit 0 fi } install_profile() { if [[ "$(id -u)" -ne 0 ]] ; then eerror "$0: Must be root." exit 1 fi # give info einfo "$0: Installing Profile: ${1}" # create profile echo ${1} > ${PROFILE_PATH}/${1} # make it default if no profile is activated # or if it was just removed if [ ! -e $CONFIG_FILE -o "${1}" == "`cat ${PROFILE_PATH}/removed 2>/dev/null`" ]; then rm -f ${PROFILE_PATH}/removed switch_profile ${1} fi exit 0 } uninstall_profile() { if [[ "$(id -u)" -ne 0 ]] ; then eerror "$0: Must be root." exit 1 fi # give info einfo "$0: Uninstalling Profile: ${1}" # remove profile rm -f ${PROFILE_PATH}/${1} 2> /dev/null # cache which profile was removed for upgrades # little hack, because portage has no way # to detect if a package was upgraded # activate next profile if non is activated if [ "`cat $CONFIG_FILE`" == "${1}" ]; then echo "${1}" > "${PROFILE_PATH}/removed" switch_profile fi exit 0 } for x in "$@"; do case "${x}" in -c|--get-current-profile) [[ $# -ne 1 ]] && usage 1 get_current_profile ;; -l|--list-profiles) [[ $# -ne 1 ]] && usage 1 list_profiles ;; -s|--set-profile) [[ $# -ne 2 ]] && usage 1 switch_profile $2 ;; -L|--get-lib-path) [[ $# -gt 2 ]] && usage 1 get_lib_path $2 ;; -I|--get-inc-path) [[ $# -gt 2 ]] && usage 1 get_lib_path $2 ;; --cflags) [[ $# -gt 2 ]] && usage 1 get_cflags $2 ;; --libs) [[ $# -gt 2 ]] && usage 1 get_libs $2 ;; --install) [[ $# -ne 2 ]] && usage 1 install_profile $2 ;; --uninstall) [[ $# -ne 2 ]] && usage 1 uninstall_profile $2 ;; -h|--help) usage 0 ;; -v|--version) echo "motif-config-0.1" ;; -*) usage 1 ;; *) usage 1 ;; esac done