198 lines
4.1 KiB
Text
198 lines
4.1 KiB
Text
# -*-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
|
|
}
|