You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/app-admin/eselect-xvmc/files/eselect-xvmc-0.4.eselect

199 lines
4.1 KiB

# -*-eselect-*- vim: ft=eselect
# Copyright 1999-2013 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
}