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.

344 lines
8.7 KiB

# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
DESCRIPTION="Firmware files needed for operation of some dvb-devices"
HOMEPAGE="http://www.linuxtv.org"
LICENSE="freedist ISC all-rights-reserved"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE=""
RESTRICT="mirror bindist"
DEPEND=""
RDEPEND=""
S="${WORKDIR}"
# Files which can be fetched from linuxtv.org
PACKET_NAME=dvb-firmwares-1.tar.bz2
PACKET_SRC_URI="http://www.linuxtv.org/downloads/firmware/${PACKET_NAME}"
get_dvb_firmware="${FILESDIR}/get_dvb_firmware-${PV}"
# from https://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6-stable.git;a=history;f=Documentation/dvb/get_dvb_firmware
FW_USE_FLAGS=(
# packet
"usb-a800"
"dibusb-usb2"
"usb-dtt200u"
"usb-umt"
"usb-vp702x"
"usb-vp7045"
"usb-wt220u"
"dibusb-usb1"
"or51211"
"or51132"
"or51132"
# own URL
"ttpci"
"bcm3510"
"usb-wt220u"
"usb-wt220u"
"usb-dib0700"
"usb-af9015"
"sp887x"
"af9005"
"cx231xx"
"cx18"
"cx18"
"cx18"
"cx23885"
"cx23885"
"pvrusb2"
"usb-bluebird"
"tda10045"
# get_dvb_firmware
"sp8870"
"tda10046"
"tda10046lifeview"
"ttusb-dec"
"ttusb-dec"
"ttusb-dec"
"opera1"
"opera1"
"vp7041"
"nxt200x"
"mpc718"
)
FW_FILES=(
# packet
"dvb-usb-avertv-a800-02.fw"
"dvb-usb-dibusb-6.0.0.8.fw"
"dvb-usb-dtt200u-01.fw"
"dvb-usb-umt-010-02.fw"
"dvb-usb-vp702x-01.fw"
"dvb-usb-vp7045-01.fw"
"dvb-usb-wt220u-01.fw"
"dvb-usb-dibusb-5.0.0.11.fw"
"dvb-fe-or51211.fw"
"dvb-fe-or51132-qam.fw"
"dvb-fe-or51132-vsb.fw"
# own URL
"dvb-ttpci-01.fw"
"dvb-fe-bcm3510-01.fw"
"dvb-usb-wt220u-02.fw"
"dvb-usb-wt220u-fc03.fw"
"dvb-usb-dib0700-1.20.fw"
"dvb-usb-af9015.fw"
"dvb-fe-sp887x.fw"
"af9005.fw"
"v4l-cx231xx-avcore-01.fw"
"v4l-cx23418-apu.fw"
"v4l-cx23418-cpu.fw"
"v4l-cx23418-dig.fw"
"v4l-cx23885-avcore-01.fw"
"v4l-cx23885-enc.fw"
"v4l-cx25840.fw"
"dvb-usb-bluebird-01.fw"
"dvb-fe-tda10045.fw"
# get_dvb_firmware
"dvb-fe-sp8870.fw"
"dvb-fe-tda10046.fw"
"dvb-fe-tda10046.fw"
"dvb-ttusb-dec-2000t.fw"
"dvb-ttusb-dec-2540t.fw"
"dvb-ttusb-dec-3000s.fw"
"dvb-usb-opera1-fpga-01.fw"
"dvb-usb-opera-01.fw"
"dvb-vp7041-2.422.fw"
"dvb-fe-nxt2004.fw"
"dvb-cx18-mpc718-mt352.fw"
)
FW_GET_PARAMETER=(
# packet
"-"
"-"
"-"
"-"
"-"
"-"
"-"
"-"
"-"
"-"
"-"
# own URL
"-"
"-"
"-"
"-"
"-"
"-"
"-"
"-"
"-"
"-"
"-"
"-"
"-"
"-"
"-"
"-"
"-"
# get_dvb_firmware
"sp8870"
"tda10046"
"tda10046lifeview"
"dec2000t"
"dec2540t"
"dec3000s"
"opera1"
"-"
"vp7041"
"nxt2004"
"mpc718"
)
FW_URLS=(
# packet
"${PACKET_SRC_URI}"
"${PACKET_SRC_URI}"
"${PACKET_SRC_URI}"
"${PACKET_SRC_URI}"
"${PACKET_SRC_URI}"
"${PACKET_SRC_URI}"
"${PACKET_SRC_URI}"
"${PACKET_SRC_URI}"
"${PACKET_SRC_URI}"
"${PACKET_SRC_URI}"
"${PACKET_SRC_URI}"
# own URL
"http://www.escape-edv.de/endriss/firmware/dvb-ttpci-01.fw-fc2624"
"http://www.linuxtv.org/downloads/firmware/dvb-fe-bcm3510-01.fw"
"http://www.linuxtv.org/downloads/firmware/dvb-usb-wt220u-02.fw"
"http://home.arcor.de/efocht/dvb-usb-wt220u-fc03.fw"
"http://www.wi-bw.tfh-wildau.de/~pboettch/home/files/dvb-usb-dib0700-1.20.fw"
"http://www.otit.fi/~crope/v4l-dvb/af9015/af9015_firmware_cutter/firmware_files/4.95.0/dvb-usb-af9015.fw"
"http://peterdamen.com/dvb-fe-sp887x.fw"
"http://ventoso.org/luca/af9005/af9005.fw"
"http://linuxtv.org/downloads/firmware/v4l-cx231xx-avcore-01.fw"
"http://linuxtv.org/downloads/firmware/v4l-cx23418-apu.fw"
"http://linuxtv.org/downloads/firmware/v4l-cx23418-cpu.fw"
"http://linuxtv.org/downloads/firmware/v4l-cx23418-dig.fw"
"http://linuxtv.org/downloads/firmware/v4l-cx23885-avcore-01.fw"
"http://linuxtv.org/downloads/firmware/v4l-cx23885-enc.fw"
"http://linuxtv.org/downloads/firmware/v4l-cx25840.fw"
"http://linuxtv.org/downloads/firmware/dvb-usb-bluebird-01.fw"
"http://www.fireburn.co.uk/dvb-fe-tda10045.fw"
# get_dvb_firmware
"http://2.download.softwarepatch.pl/1619edb0dcb493dd5337b94a1f79c3f6/tt_Premium_217g.zip"
"http://www.tt-download.com/download/updates/219/TT_PCI_2.19h_28_11_2006.zip"
"http://www.lifeview.hk/dbimages/document/7%5Cdrv_2.11.02.zip"
"http://hauppauge.lightpath.net/de/dec217g.exe"
"http://hauppauge.lightpath.net/de/dec217g.exe"
"http://hauppauge.lightpath.net/de/dec217g.exe"
"http://www.informatik.uni-leipzig.de/~hlawit/dvb/2830SCap2.sys"
"http://www.informatik.uni-leipzig.de/~hlawit/dvb/2830SLoad2.sys"
"http://www.twinhan.com/files/AW/Software/TwinhanDTV2.608a.zip"
"http://www.avermedia-usa.com/support/Drivers/AVerTVHD_MCE_A180_Drv_v1.2.2.16.zip"
"ftp://ftp.work.acer-euro.com/desktop/aspire_idea510/vista/Drivers/Yuan%20MPC718%20TV%20Tuner%20Card%202.13.10.1016.zip"
)
SRC_URI=""
NEGATIVE_USE_FLAGS=""
NEGATIVE_END_BRACKETS=""
ALL_URLS=""
for ((CARD=0; CARD < ${#FW_USE_FLAGS[*]}; CARD++)) do
URL="${FW_URLS[CARD]}"
if [[ -z ${URL} ]]; then
echo "missing url for ${FW_USE_FLAGS[CARD]}"
continue
fi
SRC_URI="${SRC_URI} dvb_cards_${FW_USE_FLAGS[CARD]}? ( ${URL} )"
IUSE="${IUSE} dvb_cards_${FW_USE_FLAGS[CARD]}"
NEGATIVE_USE_FLAGS="${NEGATIVE_USE_FLAGS} !dvb_cards_${FW_USE_FLAGS[CARD]}? ( "
NEGATIVE_END_BRACKETS="${NEGATIVE_END_BRACKETS} )"
ALL_URLS="${ALL_URLS} ${URL}"
GET_PARAM="${FW_GET_PARAMETER[CARD]}"
if [[ ${GET_PARAM} != "-" ]]; then
# all firmwares extracted by get_dvb_firmware need unzip
DEPEND="${DEPEND} dvb_cards_${FW_USE_FLAGS[CARD]}? ( app-arch/unzip )"
fi
done
SRC_URI="${SRC_URI} ${NEGATIVE_USE_FLAGS} ${ALL_URLS} ${NEGATIVE_END_BRACKETS}"
DEPEND="${DEPEND}
${NEGATIVE_USE_FLAGS}
app-arch/unzip
${NEGATIVE_END_BRACKETS}"
install_dvb_card() {
if [[ -z ${DVB_CARDS} ]]; then
# install (almost) all firmware files
# do not install this one due to conflicting filenames
[[ "${1}" != "tda10046lifeview" ]]
else
# Check if this flag is set
use dvb_cards_${1}
fi
}
pkg_setup() {
#echo SRC_URI=${SRC_URI}
#echo DEPEND=${DEPEND}
if has tda1004x ${DVB_CARDS}; then
eerror
eerror "DVB_CARDS flag tda1004x has been split into"
eerror "tda10045, tda10046 and tda10046lifeview".
eerror
eerror "But beware that you cannot enable tda10046 and"
eerror "tda10046lifeview at the same time."
fi
if [[ -z ${DVB_CARDS} ]]; then
elog
elog "DVB_CARDS is not set, installing all available firmware files."
elog "To save bandwidth please consider setting the DVB_CARDS variable"
elog "in ${ROOT%/}/etc/make.conf. This way only the firmwares you own"
elog "the hardware will be installed."
fi
# according to https://devmanual.gentoo.org/general-concepts/use-flags/index.html
# we should not die here. However, there is no sensible fallback choice to make
# because the user may have either the one or the other. WYGIWYG
if use dvb_cards_tda10046 && use dvb_cards_tda10046lifeview; then
eerror
eerror "You cannot have both tda10046 and tda10046lifeview in DVB_CARDS"
eerror "because of colliding firmware filenames (dvb-fe-tda10046.fw)."
eerror "Sorry."
die "Conflicting values for DVB_CARDS set."
fi
elog
elog "List of possible card-names to use for DVB_CARDS:"
echo ${FW_USE_FLAGS[*]}| tr ' ' '\n' | sort | uniq | fmt \
| while read line; do
elog " ${line}"
done
elog
elog "If you need another firmware file and want it included create a bug"
elog "at bugs.gentoo.org."
elog "In case some firmware sources are not fetchable please try again at"
elog "a later time and if it still does not fetch report a bug. If there"
elog "is no alternative source or an update to the firmware available we"
elog "have to remove it from the ebuild and you are on your own."
}
src_unpack() {
local distfile
# link all downloaded files to ${S}
for distfile in ${A}; do
[[ -L ${distfile} ]] || ln -s ${DISTDIR}/${distfile} ${distfile}
done
# unpack firmware-packet
if has ${PACKET_NAME} ${A}; then
unpack ${PACKET_NAME}
fi
if [[ -z ${DVB_CARDS} ]] || use dvb_cards_mpc718 ; then
mv Yuan%20MPC718%20TV%20Tuner%20Card%202.13.10.1016.zip "Yuan MPC718 TV Tuner Card 2.13.10.1016.zip"
fi
if [[ -z ${DVB_CARDS} ]] || use dvb_cards_ttpci ; then
mv dvb-ttpci-01.fw-fc2624 dvb-ttpci-01.fw
fi
local script_v=${PV}
# Adjust temp-dir of get_dvb_firmware
sed "${FILESDIR}"/get_dvb_firmware-${script_v} \
-e "s#/tmp#${T}#g" > get_dvb_firmware
chmod a+x get_dvb_firmware
# extract the firmware-files
for ((CARD=0; CARD < ${#FW_USE_FLAGS[*]}; CARD++)) do
install_dvb_card ${FW_USE_FLAGS[CARD]} || continue
GET_PARAM=${FW_GET_PARAMETER[CARD]}
if [[ ${GET_PARAM} != "-" ]]; then
[[ -f ${FW_FILES[CARD]} ]] && ewarn "Already existing: ${FW_FILES[CARD]}"
elog "Extracting ${FW_FILES[CARD]}"
./get_dvb_firmware ${GET_PARAM}
fi
done
}
src_install() {
insinto /lib/firmware
for ((CARD=0; CARD < ${#FW_USE_FLAGS[*]}; CARD++)) do
if install_dvb_card ${FW_USE_FLAGS[CARD]}; then
local file=${FW_FILES[CARD]}
[[ -f ${file} ]] || die "File ${file} does not exist!"
doins ${file}
fi
done
}