From: Samuli Suominen Date: Thu, 6 Oct 2011 13:04:36 +0000 (+0000) Subject: Fix security bug (SAMI Subtitle Parsing Buffer Overflow) #379297 by Agostino Sarubbo X-Git-Url: http://git.tremily.us/gitweb.cgi?a=commitdiff_plain;h=f9c416517ed9a96a096edbb738318fa995554cab;p=gentoo.git Fix security bug (SAMI Subtitle Parsing Buffer Overflow) #379297 by Agostino Sarubbo Package-Manager: portage-2.2.0_alpha61/cvs/Linux x86_64 --- diff --git a/media-video/mplayer/ChangeLog b/media-video/mplayer/ChangeLog index a4b9a9a09978..771d3b6290d7 100644 --- a/media-video/mplayer/ChangeLog +++ b/media-video/mplayer/ChangeLog @@ -1,6 +1,14 @@ # ChangeLog for media-video/mplayer # Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/media-video/mplayer/ChangeLog,v 1.799 2011/09/24 14:24:42 mattst88 Exp $ +# $Header: /var/cvsroot/gentoo-x86/media-video/mplayer/ChangeLog,v 1.800 2011/10/06 13:04:36 ssuominen Exp $ + +*mplayer-1.0_rc4_p20110322-r1 (06 Oct 2011) + + 06 Oct 2011; Samuli Suominen + +mplayer-1.0_rc4_p20110322-r1.ebuild, + +files/mplayer-1.0_rc4_p20110322-sami_subtitle_parsing.patch: + Fix security bug (SAMI Subtitle Parsing Buffer Overflow) #379297 by Agostino + Sarubbo 24 Sep 2011; Matt Turner mplayer-1.0_rc4_p20110322.ebuild, diff --git a/media-video/mplayer/Manifest b/media-video/mplayer/Manifest index 2b8de74220bb..49657f7e1494 100644 --- a/media-video/mplayer/Manifest +++ b/media-video/mplayer/Manifest @@ -3,6 +3,7 @@ Hash: SHA1 AUX dump_ffmpeg.sh 2497 RMD160 4eba5e45cfe9e1b28ee4cbde337adf5faf89c52e SHA1 fc173a448b1763197337b79c871b05ec7cc1fe5d SHA256 630327b7a6156aa1081c6abb3d3a0501507f26346baefd5832f3ceb8789c7477 AUX mplayer-1.0_rc4_p20110322-gcc46.patch 657 RMD160 a327aa565f55102be2d6f73f12e08862418023e9 SHA1 560e41e7c5c147e8656ec0216f4272e1421e887c SHA256 4c57d5c4c79db87796b6b1b4a485f4d0a8ed95f3ae71040592a0bd5f3dc070b2 +AUX mplayer-1.0_rc4_p20110322-sami_subtitle_parsing.patch 417 RMD160 d72bf30164ed6acfac7113ac4c78ff36ebce884e SHA1 4bb165cf52e176201dad512dd4a50cd04a08b228 SHA256 413876d32509c5e09df58b6f833036cb16d1073fcfecb17e0be9dc355d0e7160 AUX prepare_mplayer.sh 711 RMD160 6a5271c822795f88b86caf0f716f9336528b17c4 SHA1 e2a75ad0fe9caebef8f0eb63f6160b78669e6b12 SHA256 4141c88e9942d7332fb0ed25d26c0c9d1cbe9e6d9d0f3a2d178f263699b1fd42 DIST font-arial-cp1250.tar.bz2 249705 RMD160 a2fc7ae07b0d80936ea58e168e1047efccb9eb91 SHA1 ccf11dce5d0fb72fd3af97f788b7471cd0cd0b68 SHA256 423a07e780bb130cd8e4730715545c5d919c248dda595aab7a0a01de3c83fd12 DIST font-arial-iso-8859-1.tar.bz2 234242 RMD160 666697cd5efd9387057a898c714175e7c2aacbcd SHA1 152c40bf20de34aa8802d7f80d34d673b0b67212 SHA256 9730f481764f367c9089d0166fb6ccf9148808ffbbfeca635cf0e6db75765d29 @@ -10,14 +11,19 @@ DIST font-arial-iso-8859-2.tar.bz2 222208 RMD160 562d4d92c4f5f3d537340fde3ad8d14 DIST mplayer-1.0_rc4_p20101114.tar.xz 8515160 RMD160 73aec83d64abaadf9c6b6110f5d42e6bfae1ca87 SHA1 b6cfd5e05ef5a48a9d3d2f272f6f629461de8474 SHA256 02d6a259e063304cbf2ebb89fcb89d5133383d514264df9a423872684eb36c2d DIST mplayer-1.0_rc4_p20110322.tar.xz 8323532 RMD160 7082c95fa20cb7e3d491546ae08a4dfafdc17d09 SHA1 3f60cf0ce8c910e3628e425167cb6a46bb4a29a3 SHA256 addaae78cfd7f8cb950370b3b43d82c2f8170830ccc1046b98726d34f3958bf5 EBUILD mplayer-1.0_rc4_p20101114.ebuild 20160 RMD160 fb0bc873bbbfd3fcad0c1102efce5937450e8e1c SHA1 a42383b74a43dd39814d7c07dbc52b82f38b0cb4 SHA256 9a4c7304ddc806d7bdb07245c6a68cecbf2f55c8d0fb08647d0a3df53a1ecf0a +EBUILD mplayer-1.0_rc4_p20110322-r1.ebuild 20418 RMD160 b57c302c8e751622ebccb2e446bc702b4732ee4d SHA1 a909581746bb459fe19d6037ae69e6e6a3a71642 SHA256 587191cf77a1e61a0614dbed3335a09d638eceb298a6feacaf7486edb03fced7 EBUILD mplayer-1.0_rc4_p20110322.ebuild 20366 RMD160 a8fa264e61d927affcdc541a367f6d6438c1d714 SHA1 ed667010ab8b74fb374e298d2e1d808ebbcffc9c SHA256 651c8fb06dbdbb1d6d059cc552689390078119dbe79110058721e0a73b6d5511 EBUILD mplayer-9999.ebuild 19577 RMD160 aa5eeca6fe6c6be7707e59591338810b1dd5d622 SHA1 3f9ac208b68638834ec49379bf028741e030567f SHA256 d0dea15e0279de7f47a6418fb05b3f595bef36b78f51b302c4a596397dc0e702 -MISC ChangeLog 140206 RMD160 dc07248c9b1af4a05fec8f6f4c327adce438158a SHA1 9bf84766fbb8c9f3b7f2b5149ca7e9bb5d6357c2 SHA256 47bff5fda25360dccbc5704508e82b4be0290d834a32a06dabefcb3a63ad5b82 +MISC ChangeLog 140500 RMD160 fb656ea6f7ee24bbc168d6e086d07a9b41d9b0d4 SHA1 98dc09daf40818c07b5f28e47d3b58655142554c SHA256 85040721a3f9cf120ebb4109a507c2799c6be2d9ad50c023a75ecfc25df63576 MISC metadata.xml 3737 RMD160 7e18b891f225227f4ecad678e423777f5dd908a7 SHA1 daf40e426abbf0306e2ebeca72ebe54546d81e46 SHA256 dd83a6946f62cbeb84b0e65d2ba6289638d632b80a690714595a44aa3cf86c1a -----BEGIN PGP SIGNATURE----- -Version: GnuPG v2.0.17 (GNU/Linux) +Version: GnuPG v2.0.18 (GNU/Linux) -iEYEARECAAYFAk596DUACgkQTVUdg23rv51OCgCfeoA3fIEz3Z6WasfEKZ4CoSmJ -+Z8AnjWvKrG6iof/AfAZqrNCx6KZ599+ -=ZV+e +iQEcBAEBAgAGBQJOjaeGAAoJEEdUh39IaPFNsggH/iLdXwf6p+O5cxa5FFVMi5JB +OFV6fxRuQiSf3LvYldycwLDlNqTLv7ta9TPPeA715Wzyfmdwo4mF73QfHBDBpS/b +RkBjM/49xmNDpFL3byltU8nYqzGPeDSUKr7gu3FIz4N37o0O5vFzqydhEOiwqI00 +IAuioP4cV11SAj/key/H4fplg2zO2lN5WAdfQmMtCktTx57v1D2CIWnompwVF+1x +GT2Ux2pmxW5MYJk4Al0NAIj02XL2wPOnwNEljkUaSlWGoAmcnNFTQtIQbCaXwKw3 +HK55p8ZX740FeRbVL+V8+fSOse+weNjY/HfIl6K9amLTejtKw9QNTPmc3J6pjmQ= +=AA/p -----END PGP SIGNATURE----- diff --git a/media-video/mplayer/files/mplayer-1.0_rc4_p20110322-sami_subtitle_parsing.patch b/media-video/mplayer/files/mplayer-1.0_rc4_p20110322-sami_subtitle_parsing.patch new file mode 100644 index 000000000000..edecce0a6821 --- /dev/null +++ b/media-video/mplayer/files/mplayer-1.0_rc4_p20110322-sami_subtitle_parsing.patch @@ -0,0 +1,14 @@ +http://bugs.gentoo.org/379297 +http://mplayerhq.hu/pipermail/mplayer-cvslog/2011-May/042075.html + +--- sub/subreader.c ++++ sub/subreader.c +@@ -173,6 +173,8 @@ + break; + + case 3: /* get all text until '<' appears */ ++ if (p - text >= LINE_LEN) ++ sami_add_line(current, text, &p); + if (*s == '\0') break; + else if (!strncasecmp (s, "
", 4)) { + sami_add_line(current, text, &p); diff --git a/media-video/mplayer/mplayer-1.0_rc4_p20110322-r1.ebuild b/media-video/mplayer/mplayer-1.0_rc4_p20110322-r1.ebuild new file mode 100644 index 000000000000..2fa552243438 --- /dev/null +++ b/media-video/mplayer/mplayer-1.0_rc4_p20110322-r1.ebuild @@ -0,0 +1,748 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/media-video/mplayer/mplayer-1.0_rc4_p20110322-r1.ebuild,v 1.1 2011/10/06 13:04:36 ssuominen Exp $ + +EAPI=4 + +EGIT_REPO_URI="git://git.libav.org/libav.git" +EGIT_PROJECT="ffmpeg" +ESVN_REPO_URI="svn://svn.mplayerhq.hu/mplayer/trunk" +[[ ${PV} = *9999* ]] && SVN_ECLASS="subversion git" || SVN_ECLASS="" + +inherit toolchain-funcs eutils flag-o-matic multilib base ${SVN_ECLASS} + +# BUMP ME PLZ, NO COOKIES OTHERWISE +[[ ${PV} != *9999* ]] && MPLAYER_REVISION=SVN-r33094 + +IUSE="3dnow 3dnowext +a52 aalib +alsa altivec aqua +ass bidi bindist bl bluray +bs2b cddb +cdio cdparanoia cpudetection custom-cpuopts debug dga +dirac +directfb doc +dts +dv dvb +dvd +dvdnav dxr3 +enca +encode esd +faac +faad fbcon +ftp gif ggi gsm +iconv ipv6 jack joystick jpeg jpeg2k kernel_linux ladspa +libcaca libmpeg2 lirc +live lzo mad md5sum +mmx mmxext mng +mp3 mpg123 nas ++network nut openal amr +opengl +osdmenu oss png pnm pulseaudio pvr +quicktime +radio +rar +real +rtc rtmp samba +shm +schroedinger sdl +speex sse sse2 ssse3 +tga +theora +tremor +truetype +toolame +twolame +unicode v4l v4l2 vdpau vidix ++vorbis vpx win32codecs +X +x264 xanim xinerama +xscreensaver +xv +xvid xvmc +zoran" +[[ ${PV} == *9999* ]] && IUSE+=" external-ffmpeg" + +VIDEO_CARDS="s3virge mga tdfx vesa" +for x in ${VIDEO_CARDS}; do + IUSE+=" video_cards_${x}" +done + +FONT_URI=" + mirror://mplayer/releases/fonts/font-arial-iso-8859-1.tar.bz2 + mirror://mplayer/releases/fonts/font-arial-iso-8859-2.tar.bz2 + mirror://mplayer/releases/fonts/font-arial-cp1250.tar.bz2 +" +if [[ ${PV} == *9999* ]]; then + RELEASE_URI="" +else + RELEASE_URI="http://dev.gentoo.org/~scarabeus/${P}.tar.xz + mirror://gentoo/${P}.tar.xz" +fi +SRC_URI="${RELEASE_URI} + !truetype? ( ${FONT_URI} )" + +DESCRIPTION="Media Player for Linux" +HOMEPAGE="http://www.mplayerhq.hu/" + +FONT_RDEPS=" + virtual/ttf-fonts + media-libs/fontconfig + >=media-libs/freetype-2.2.1:2 +" +X_RDEPS=" + x11-libs/libXext + x11-libs/libXxf86vm +" +[[ ${PV} == *9999* ]] && RDEPEND+=" external-ffmpeg? ( media-video/ffmpeg )" +# Rar: althrought -gpl version is nice, it cant do most functions normal rars can +# nemesi? ( net-libs/libnemesi ) +RDEPEND+=" + sys-libs/ncurses + app-arch/bzip2 + sys-libs/zlib + !bindist? ( + x86? ( + win32codecs? ( media-libs/win32codecs ) + ) + ) + X? ( + ${X_RDEPS} + dga? ( x11-libs/libXxf86dga ) + ggi? ( + media-libs/libggi + media-libs/libggiwmh + ) + opengl? ( virtual/opengl ) + vdpau? ( x11-libs/libvdpau ) + xinerama? ( x11-libs/libXinerama ) + xscreensaver? ( x11-libs/libXScrnSaver ) + xv? ( + x11-libs/libXv + xvmc? ( x11-libs/libXvMC ) + ) + ) + a52? ( media-libs/a52dec ) + aalib? ( media-libs/aalib ) + alsa? ( media-libs/alsa-lib ) + amr? ( !bindist? ( media-libs/opencore-amr ) ) + ass? ( ${FONT_RDEPS} >=media-libs/libass-0.9.10[enca?] ) + bidi? ( dev-libs/fribidi ) + bluray? ( media-libs/libbluray ) + bs2b? ( media-libs/libbs2b ) + cdio? ( dev-libs/libcdio ) + cdparanoia? ( !cdio? ( media-sound/cdparanoia ) ) + dirac? ( media-video/dirac ) + directfb? ( dev-libs/DirectFB ) + dts? ( media-libs/libdca ) + dv? ( media-libs/libdv ) + dvb? ( media-tv/linuxtv-dvb-headers ) + dvd? ( + >=media-libs/libdvdread-4.1.3 + dvdnav? ( >=media-libs/libdvdnav-4.1.3 ) + ) + encode? ( + !twolame? ( toolame? ( media-sound/toolame ) ) + twolame? ( media-sound/twolame ) + faac? ( !bindist? ( media-libs/faac ) ) + mp3? ( media-sound/lame ) + x264? ( >=media-libs/x264-0.0.20100423 ) + xvid? ( media-libs/xvid ) + ) + esd? ( media-sound/esound ) + enca? ( app-i18n/enca ) + faad? ( media-libs/faad2 ) + gif? ( media-libs/giflib ) + gsm? ( media-sound/gsm ) + iconv? ( virtual/libiconv ) + jack? ( media-sound/jack-audio-connection-kit ) + jpeg? ( virtual/jpeg ) + jpeg2k? ( media-libs/openjpeg ) + ladspa? ( media-libs/ladspa-sdk ) + libcaca? ( media-libs/libcaca ) + libmpeg2? ( media-libs/libmpeg2 ) + lirc? ( app-misc/lirc ) + live? ( media-plugins/live ) + lzo? ( >=dev-libs/lzo-2 ) + mad? ( media-libs/libmad ) + mng? ( media-libs/libmng ) + mpg123? ( media-sound/mpg123 ) + nas? ( media-libs/nas ) + nut? ( >=media-libs/libnut-661 ) + openal? ( media-libs/openal ) + png? ( media-libs/libpng ) + pnm? ( media-libs/netpbm ) + pulseaudio? ( media-sound/pulseaudio ) + rar? ( + || ( + app-arch/unrar + app-arch/rar + ) + ) + rtmp? ( media-video/rtmpdump ) + samba? ( net-fs/samba ) + schroedinger? ( media-libs/schroedinger ) + sdl? ( media-libs/libsdl ) + speex? ( media-libs/speex ) + theora? ( media-libs/libtheora[encode?] ) + truetype? ( ${FONT_RDEPS} ) + vorbis? ( media-libs/libvorbis ) + vpx? ( media-libs/libvpx ) + xanim? ( media-video/xanim ) +" + +X_DEPS=" + x11-proto/videoproto + x11-proto/xf86vidmodeproto +" +ASM_DEP="dev-lang/yasm" +DEPEND="${RDEPEND} + dev-util/pkgconfig + X? ( + ${X_DEPS} + dga? ( x11-proto/xf86dgaproto ) + dxr3? ( media-video/em8300-libraries ) + xinerama? ( x11-proto/xineramaproto ) + xscreensaver? ( x11-proto/scrnsaverproto ) + ) + amd64? ( ${ASM_DEP} ) + doc? ( + dev-libs/libxslt app-text/docbook-xml-dtd + app-text/docbook-xsl-stylesheets + ) + x86? ( ${ASM_DEP} ) + x86-fbsd? ( ${ASM_DEP} ) +" + +SLOT="0" +LICENSE="GPL-2" +if [[ ${PV} != *9999* ]]; then + KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~x86-solaris" +else + KEYWORDS="" +fi + +# bindist does not cope with amr codecs (#299405#c6), faac codecs are nonfree, win32codecs are nonfree +# libcdio support: prefer libcdio over cdparanoia and don't check for cddb w/cdio +# dvd navigation requires dvd read support +# ass and freetype font require iconv and ass requires freetype fonts +# unicode transformations are usefull only with iconv +# libvorbis require external tremor to work +# radio requires oss or alsa backend +# xvmc requires xvideo support +REQUIRED_USE="bindist? ( !amr !faac !win32codecs )" + +PATCHES=( + "${FILESDIR}"/${P}-gcc46.patch + "${FILESDIR}"/${P}-sami_subtitle_parsing.patch +) + +pkg_setup() { + if [[ ${PV} == *9999* ]]; then + elog + elog "This is a live ebuild which installs the latest from upstream's" + elog "subversion repository, and is unsupported by Gentoo." + elog "Everything but bugs in the ebuild itself will be ignored." + elog + fi + + if use cpudetection; then + ewarn + ewarn "You've enabled the cpudetection flag. This feature is" + ewarn "included mainly for people who want to use the same" + ewarn "binary on another system with a different CPU architecture." + ewarn "MPlayer will already detect your CPU settings by default at" + ewarn "buildtime; this flag is used for runtime detection." + ewarn "You won't need this turned on if you are only building" + ewarn "mplayer for this system. Also, if your compile fails, try" + ewarn "disabling this use flag." + fi + + if use custom-cpuopts; then + ewarn + ewarn "You are using the custom-cpuopts flag which will" + ewarn "specifically allow you to enable / disable certain" + ewarn "CPU optimizations." + ewarn + ewarn "Most desktop users won't need this functionality, but it" + ewarn "is included for corner cases like cross-compiling and" + ewarn "certain profiles. If unsure, disable this flag and MPlayer" + ewarn "will automatically detect and use your available CPU" + ewarn "optimizations." + ewarn + ewarn "Using this flag means your build is unsupported, so" + ewarn "please make sure your CPU optimization use flags (3dnow" + ewarn "3dnowext mmx mmxext sse sse2 ssse3) are properly set." + fi +} + +src_unpack() { + if [[ ${PV} = *9999* ]]; then + subversion_src_unpack + cd "${WORKDIR}" + rm -rf "${WORKDIR}/${P}/ffmpeg/" + ( S="${WORKDIR}/${P}/ffmpeg/" git_src_unpack ) + else + unpack ${A} + fi + + if ! use truetype; then + unpack font-arial-iso-8859-1.tar.bz2 \ + font-arial-iso-8859-2.tar.bz2 \ + font-arial-cp1250.tar.bz2 + fi +} + +src_prepare() { + if [[ ${PV} = *9999* ]]; then + # Set SVN version manually + subversion_wc_info + sed -i -e "s/UNKNOWN/${ESVN_WC_REVISION}/" "${S}/version.sh" || die + else + # Set version # + sed -i -e "s/UNKNOWN/${MPLAYER_REVISION}/" "${S}/version.sh" || die + fi + + # fix path to bash executable in configure scripts + sed -i -e "1c\#!${EPREFIX}/bin/bash" configure version.sh || die + + base_src_prepare +} + +src_configure() { + local myconf="" + local uses i + + # set LINGUAS + [[ -n $LINGUAS ]] && LINGUAS="${LINGUAS/da/dk}" + + # mplayer ebuild uses "use foo || --disable-foo" to forcibly disable + # compilation in almost every situation. The reason for this is + # because if --enable is used, it will force the build of that option, + # regardless of whether the dependency is available or not. + + ################### + #Optional features# + ################### + # disable svga since we don't want it + # disable arts since we don't have kde3 + # always disable internal ass + myconf+=" + --disable-svga --disable-svgalib_helper + --disable-ass-internal + --disable-arts + --disable-kai + $(use_enable network networking) + $(use_enable joystick) + " + uses="ass bl bluray enca ftp rtc" # nemesi <- not working with in-tree ebuild + myconf+=" --disable-nemesi" # nemesi automagic disable + for i in ${uses}; do + use ${i} || myconf+=" --disable-${i}" + done + use bidi || myconf+=" --disable-fribidi" + use ipv6 || myconf+=" --disable-inet6" + use nut || myconf+=" --disable-libnut" + use rar || myconf+=" --disable-unrarexec" + use samba || myconf+=" --disable-smb" + if ! use lirc; then + myconf+=" + --disable-lirc + --disable-lircc + --disable-apple-ir + " + fi + + # libcdio support: prefer libcdio over cdparanoia + # don't check for cddb w/cdio + if use cdio; then + myconf+=" --disable-cdparanoia" + else + myconf+=" --disable-libcdio" + use cdparanoia || myconf+=" --disable-cdparanoia" + use cddb || myconf+=" --disable-cddb" + fi + + ################################ + # DVD read, navigation support # + ################################ + # + # dvdread - accessing a DVD + # dvdnav - navigation of menus + # + # use external libdvdcss, dvdread and dvdnav + myconf+=" --disable-dvdread-internal --disable-libdvdcss-internal" + if use dvd; then + use dvdnav || myconf+=" --disable-dvdnav" + else + myconf+=" + --disable-dvdnav + --disable-dvdread + " + fi + + ############# + # Subtitles # + ############# + # + # SRT/ASS/SSA (subtitles) requires freetype support + # freetype support requires iconv + # iconv optionally can use unicode + if ! use ass && ! use truetype; then + myconf+=" --disable-freetype" + if ! use iconv; then + myconf+=" + --disable-iconv + --charset=noconv + " + fi + fi + use iconv && use unicode && myconf+=" --charset=UTF-8" + + ##################################### + # DVB / Video4Linux / Radio support # + ##################################### + myconf+=" --disable-tv-bsdbt848" + # broken upstream, won't work with recent kernels + myconf+=" --disable-ivtv" + if { use dvb || use v4l || use v4l2 || use pvr || use radio; }; then + use dvb || myconf+=" --disable-dvb" + use pvr || myconf+=" --disable-pvr" + use v4l || myconf+=" --disable-tv-v4l1" + use v4l2 || myconf+=" --disable-tv-v4l2" + if use radio && { use dvb || use v4l || use v4l2; }; then + myconf+=" + --enable-radio + $(use_enable encode radio-capture) + " + else + myconf+=" + --disable-radio-v4l2 + --disable-radio-bsdbt848 + " + fi + else + myconf+=" + --disable-tv + --disable-tv-v4l1 + --disable-tv-v4l2 + --disable-radio + --disable-radio-v4l2 + --disable-radio-bsdbt848 + --disable-dvb + --disable-v4l2 + --disable-pvr" + fi + + ########## + # Codecs # + ########## + myconf+=" --disable-musepack" # Use internal musepack codecs for SV7 and SV8 support + myconf+=" --disable-libmpeg2-internal" # always use system media-libs/libmpeg2 + use dirac || myconf+=" --disable-libdirac-lavc" + use dts || myconf+=" --disable-libdca" + if ! use mp3; then + myconf+=" + --disable-mp3lame + --disable-mp3lame-lavc + --disable-mp3lib + " + fi + uses="a52 bs2b dv gsm lzo rtmp" + for i in ${uses}; do + use ${i} || myconf+=" --disable-lib${i}" + done + use schroedinger || myconf+=" --disable-libschroedinger-lavc" + use amr || myconf+=" --disable-libopencore_amrnb --disable-libopencore_amrwb" + + uses="faad gif jpeg libmpeg2 live mad mng mpg123 png pnm speex tga theora xanim" + for i in ${uses}; do + use ${i} || myconf+=" --disable-${i}" + done + use jpeg2k || myconf+=" --disable-libopenjpeg" + if use vorbis || use tremor; then + use tremor || myconf+=" --disable-tremor-internal" + use vorbis || myconf+=" --disable-libvorbis" + else + myconf+=" + --disable-tremor-internal + --disable-tremor + --disable-libvorbis + " + fi + use vpx || myconf+=" --disable-libvpx-lavc" + # Encoding + uses="faac x264 xvid toolame twolame" + if use encode; then + for i in ${uses}; do + use ${i} || myconf+=" --disable-${i}" + done + use faac || myconf+=" --disable-faac-lavc" + if use bindist && use faac; then + ewarn "faac is nonfree and cannot be distributed; disabling faac support." + myconf+=" --disable-faac --disable-faac-lavc" + fi + else + myconf+=" --disable-mencoder" + myconf+=" --disable-faac-lavc" + for i in ${uses}; do + myconf+=" --disable-${i}" + use ${i} && elog "Useflag \"${i}\" require \"encode\" useflag enabled to work." + done + fi + + ################# + # Binary codecs # + ################# + # bug 213836 + if ! use x86 || ! use win32codecs; then + use quicktime || myconf+=" --disable-qtx" + fi + + ###################### + # RealPlayer support # + ###################### + # Realplayer support shows up in four places: + # - libavcodec (internal) + # - win32codecs + # - realcodecs (win32codecs libs) + # - realcodecs (realplayer libs) + + # internal + use real || myconf+=" --disable-real" + + # Real binary codec support only available on x86, amd64 + if use real; then + use x86 && myconf+=" --codecsdir=/opt/RealPlayer/codecs" + use amd64 && myconf+=" --codecsdir=/usr/$(get_libdir)/codecs" + fi + myconf+=" $(use_enable win32codecs win32dll)" + + ################ + # Video Output # + ################ + uses="directfb md5sum sdl" + for i in ${uses}; do + use ${i} || myconf+=" --disable-${i}" + done + use aalib || myconf+=" --disable-aa" + use fbcon || myconf+=" --disable-fbdev" + use fbcon && use video_cards_s3virge && myconf+=" --enable-s3fb" + use libcaca || myconf+=" --disable-caca" + use zoran || myconf+=" --disable-zr" + + if ! use kernel_linux || ! use video_cards_mga; then + myconf+=" --disable-mga --disable-xmga" + fi + + if use video_cards_tdfx; then + myconf+=" + $(use_enable video_cards_tdfx tdfxvid) + $(use_enable fbcon tdfxfb) + " + else + myconf+=" + --disable-3dfx + --disable-tdfxvid + --disable-tdfxfb + " + fi + + # sun card, disable by default, see bug #258729 + myconf+=" --disable-xvr100" + + ################ + # Audio Output # + ################ + uses="alsa esd jack ladspa nas openal" + for i in ${uses}; do + use ${i} || myconf+=" --disable-${i}" + done + use pulseaudio || myconf+=" --disable-pulse" + if ! use radio; then + use oss || myconf+=" --disable-ossaudio" + fi + + #################### + # Advanced Options # + #################### + # Platform specific flags, hardcoded on amd64 (see below) + use cpudetection && myconf+=" --enable-runtime-cpudetection" + + # Turning off CPU optimizations usually will break the build. + # However, this use flag, if enabled, will allow users to completely + # specify which ones to use. If disabled, mplayer will automatically + # enable all CPU optimizations that the host build supports. + if use custom-cpuopts; then + uses="3dnow 3dnowext altivec mmx mmxext shm sse sse2 ssse3" + for i in ${uses}; do + myconf+=" $(use_enable ${i})" + done + fi + + use debug && myconf+=" --enable-debug=3" + + if use x86 && gcc-specs-pie; then + filter-flags -fPIC -fPIE + append-ldflags -nopie + fi + + is-flag -O? || append-flags -O2 + + # workaround bug, x86 just has too few registers, see c.f. + # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=402950#44 + # and 32-bits OSX, bug 329861 + if [[ ${CHOST} == i?86-* ]] ; then + use debug || append-flags -fomit-frame-pointer + fi + + ########################### + # X enabled configuration # + ########################### + myconf+=" --disable-gui" + if use X; then + uses="dxr3 ggi xinerama" + for i in ${uses}; do + use ${i} || myconf+=" --disable-${i}" + done + use dga || myconf+=" --disable-dga1 --disable-dga2" + use opengl || myconf+=" --disable-gl" + use osdmenu && myconf+=" --enable-menu" + use vdpau || myconf+=" --disable-vdpau" + use video_cards_vesa || myconf+=" --disable-vesa" + use vidix || myconf+=" --disable-vidix --disable-vidix-pcidb" + use xscreensaver || myconf+=" --disable-xss" + + if use xv; then + if use xvmc; then + myconf+=" --enable-xvmc --with-xvmclib=XvMCW" + else + myconf+=" --disable-xvmc" + fi + else + myconf+=" + --disable-xv + --disable-xvmc + " + use xvmc && elog "Disabling xvmc because it requires \"xv\" useflag enabled." + fi + else + myconf+=" + --disable-dga1 + --disable-dga2 + --disable-dxr3 + --disable-ggi + --disable-gl + --disable-vdpau + --disable-vidix + --disable-vidix-pcidb + --disable-xinerama + --disable-xss + --disable-xv + --disable-xvmc + --disable-x11 + " + uses="dga dxr3 ggi opengl osdmenu vdpau vidix xinerama xscreensaver xv" + for i in ${uses}; do + use ${i} && elog "Useflag \"${i}\" require \"X\" useflag enabled to work." + done + fi + + ############################ + # OSX (aqua) configuration # + ############################ + if use aqua; then + myconf+=" + --enable-macosx-finder + --enable-macosx-bundle + " + fi + + ################### + # External FFmpeg # + ################### + if [[ ${PV} == *9999* ]]; then + use external-ffmpeg && myconf+=" --disable-ffmpeg_a" + fi + + myconf="--cc=$(tc-getCC) + --host-cc=$(tc-getBUILD_CC) + --prefix=${EPREFIX}/usr + --bindir=${EPREFIX}/usr/bin + --libdir=${EPREFIX}/usr/$(get_libdir) + --confdir=${EPREFIX}/etc/mplayer + --datadir=${EPREFIX}/usr/share/mplayer${namesuf} + --mandir=${EPREFIX}/usr/share/man + ${myconf}" + + CFLAGS="${CFLAGS}" ./configure ${myconf} || die +} + +src_compile() { + base_src_compile + # Build only user-requested docs if they're available. + if use doc ; then + # select available languages from $LINGUAS + LINGUAS=${LINGUAS/zh/zh_CN} + local ALLOWED_LINGUAS="cs de en es fr hu it pl ru zh_CN" + local BUILT_DOCS="" + for i in ${LINGUAS} ; do + has ${i} ${ALLOWED_LINGUAS} && BUILT_DOCS+=" ${i}" + done + if [[ -z $BUILT_DOCS ]]; then + emake -j1 -C DOCS/xml html-chunked + else + for i in ${BUILT_DOCS}; do + emake -j1 -C DOCS/xml html-chunked-${i} + done + fi + fi +} + +src_install() { + local i + + emake \ + DESTDIR="${D}" \ + INSTALLSTRIP="" \ + install + + dodoc AUTHORS Changelog Copyright README etc/codecs.conf + + docinto tech/ + dodoc DOCS/tech/{*.txt,MAINTAINERS,mpsub.sub,playtree,TODO,wishlist} + docinto TOOLS/ + dodoc -r TOOLS + if use real; then + docinto tech/realcodecs/ + dodoc DOCS/tech/realcodecs/* + fi + docinto tech/mirrors/ + dodoc DOCS/tech/mirrors/* + + if use doc; then + docinto html/ + dohtml -r "${S}"/DOCS/HTML/* + fi + + if ! use ass && ! use truetype; then + dodir /usr/share/mplayer/fonts + # Do this generic, as the mplayer people like to change the structure + # of their zips ... + for i in $(find "${WORKDIR}/" -type d -name 'font-arial-*'); do + cp -pPR "${i}" "${ED}/usr/share/mplayer/fonts" + done + # Fix the font symlink ... + rm -rf "${ED}/usr/share/mplayer/font" + dosym fonts/font-arial-14-iso-8859-1 /usr/share/mplayer/font + fi + + insinto /etc/mplayer + newins "${S}/etc/example.conf" mplayer.conf + cat >> "${ED}/etc/mplayer/mplayer.conf" << _EOF_ +# Config options can be section specific, global +# options should go in the default section +[default] +_EOF_ + doins "${S}/etc/input.conf" + if use osdmenu; then + doins "${S}/etc/menu.conf" + fi + + if use ass || use truetype; then + cat >> "${ED}/etc/mplayer/mplayer.conf" << _EOF_ +fontconfig=1 +subfont-osd-scale=4 +subfont-text-scale=3 +_EOF_ + fi + + # bug 256203 + if use rar; then + cat >> "${ED}/etc/mplayer/mplayer.conf" << _EOF_ +unrarexec=${EPREFIX}/usr/bin/unrar +_EOF_ + fi + + dosym ../../../etc/mplayer/mplayer.conf /usr/share/mplayer/mplayer.conf + newbin "${S}/TOOLS/midentify.sh" midentify +} + +pkg_preinst() { + [[ -d ${EROOT}/usr/share/mplayer/Skin/default ]] && \ + rm -rf "${EROOT}/usr/share/mplayer/Skin/default" +} + +pkg_postrm() { + # Cleanup stale symlinks + [ -L "${EROOT}/usr/share/mplayer/font" -a \ + ! -e "${EROOT}/usr/share/mplayer/font" ] && \ + rm -f "${EROOT}/usr/share/mplayer/font" + + [ -L "${EROOT}/usr/share/mplayer/subfont.ttf" -a \ + ! -e "${EROOT}/usr/share/mplayer/subfont.ttf" ] && \ + rm -f "${EROOT}/usr/share/mplayer/subfont.ttf" +}