# -*-eselect-*- vim: ft=eselect # Copyright 1999-2016 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 DESCRIPTION="Manage the XvMC implementation used by your system" MAINTAINER="{cardoe,junghans}@gentoo.org" VERSION="0.4" init_XVMC_vars() { get_libname() { case ${OSTYPE} in darwin*) echo ${1:+.}${1}.dylib ;; *) echo .so${1:+.}${1} ;; esac } XVMCLIBS=( "libXvMCNVIDIA_dynamic$(get_libname 1)" "libXvMC$(get_libname 1)" "libviaXvMC$(get_libname 1)" "libviaXvMCPro$(get_libname 1)" "libchromeXvMC$(get_libname 1)" "libchromeXvMCPro$(get_libname 1)" "libXvMCVIA$(get_libname)" "libXvMCVIAPro$(get_libname)" "libI810XvMC$(get_libname 1)" "/usr/lib/libIntelXvMC$(get_libname)" "libAMDXvBA$(get_libname 1)" ) XVMCPRETTY=( "nvidia" "xorg-x11" "via" "via-pro" "openchrome" "openchrome-pro" "unichrome" "unichrome-pro" "intel-i810" "intel-i915/i965" "ati" ) } get_implementation_indices() { local ret n for (( n = 0; n < ${#XVMCLIBS[@]}; ++n )); do [[ -e "${EROOT}/usr/lib/${XVMCLIBS[n]##*/}" ]] && ret+=($n) done echo ${ret[@]} } get_current_implementation_index() { local n if [[ -f "${EROOT}/etc/X11/XvMCConfig" ]]; then local current=$(< "${EROOT}/etc/X11/XvMCConfig") for (( n = 0; n < ${#XVMCLIBS[@]}; ++n )); do if [[ "${XVMCLIBS[n]}" = "${current}" ]]; then echo "${n}" return fi done fi echo "-1" } set_new_implementation() { echo -n "Switching to ${XVMCPRETTY[$1]} XvMC implementation..." touch "${EROOT}/etc/X11/XvMCConfig" 2>&1 > /dev/null if [[ $? -eq 0 ]]; then echo "${XVMCLIBS[$1]}" > "${EROOT}/etc/X11/XvMCConfig" chmod 644 "${EROOT}/etc/X11/XvMCConfig" [[ ${EROOT} == "/" ]] && chown 0:0 "${EROOT}/etc/X11/XvMCConfig" echo " done" else echo " failed!" echo "Insufficient privileges" fi } ### list action ## {{{ list stuff describe_list() { echo "List Available XvMC implementations" } do_list() { local output n init_XVMC_vars local avail=( $(get_implementation_indices) ) local current=$(get_current_implementation_index) write_list_start \ "Available XvMC implementations ($(highlight '*') is current):" for n in "${avail[@]}"; do output[n]=${XVMCPRETTY[n]} [[ ${current} -eq ${n} ]] \ && output[n]=$(highlight_marker "${output[n]}") done write_numbered_list -m "(none found)" "${output[@]}" return 0 } ## }}} ### show action ## {{{ show stuff describe_show() { echo "Print the current XvMC implementation." } do_show() { init_XVMC_vars local current=$(get_current_implementation_index) write_list_start "Current XvMC implementation:" if [[ ${current} -ne -1 ]]; then echo "${XVMCPRETTY[current]}" return 0 else echo "(none)" return 2 fi } ## }}} ### set action ## {{{ set stuff describe_set() { echo "Select the XvMC implementation" } describe_set_parameters() { echo "" } describe_set_options() { echo " : XvMC implementation to activate" echo "--use-old : If an implementation is already set, use that one instead" } do_set() { init_XVMC_vars local current=$(get_current_implementation_index) local avail=( $(get_implementation_indices) ) local n new action while [[ ${#@} -gt 0 ]]; do local opt=${1} shift case ${opt} in --use-old) if [[ ${current} -gt -1 ]]; then (( ${current} < ${#XVMCPRETTY[@]} )) && action="old-implementation" fi ;; *) [[ -z ${action} ]] && action="set-implementation" if is_number ${opt} ; then new=${avail[opt - 1]} if [[ -z ${new} ]]; then die -q "Unrecognized option: ${opt}" fi elif has ${opt} ${XVMCPRETTY[@]}; then for (( n = 0; n < ${#XVMCPRETTY[@]}; ++n )); do [[ "${XVMCPRETTY[n]}" = "${opt}" ]] && new=${n} done else die -q "Unrecognized option: ${opt}" fi ;; esac done case ${action} in old-implementation) set_new_implementation ${current} return $? ;; set-implementation) if [[ -n ${new} ]]; then set_new_implementation ${new} return $? else die -q "Please specify an implementation to set" fi ;; *) die -q "Invalid usage of set action." esac }