| # -*-eselect-*- vim: ft=eselect |
| # Copyright 1999-2015 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| DESCRIPTION="Manage the XvMC implementation used by your system" |
| MAINTAINER="{cardoe,ottxor}@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 "<target>" |
| } |
| |
| describe_set_options() { |
| echo "<target> : 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 |
| } |