Fix security bug (SAMI Subtitle Parsing Buffer Overflow) #379297 by Agostino Sarubbo
authorSamuli Suominen <ssuominen@gentoo.org>
Thu, 6 Oct 2011 13:04:36 +0000 (13:04 +0000)
committerSamuli Suominen <ssuominen@gentoo.org>
Thu, 6 Oct 2011 13:04:36 +0000 (13:04 +0000)
Package-Manager: portage-2.2.0_alpha61/cvs/Linux x86_64

media-video/mplayer/ChangeLog
media-video/mplayer/Manifest
media-video/mplayer/files/mplayer-1.0_rc4_p20110322-sami_subtitle_parsing.patch [new file with mode: 0644]
media-video/mplayer/mplayer-1.0_rc4_p20110322-r1.ebuild [new file with mode: 0644]

index a4b9a9a0997862051af3c572e005331e83d11d08..771d3b6290d7376d1cb263afc15c88e4a18e38b6 100644 (file)
@@ -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 <ssuominen@gentoo.org>
+  +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 <mattst88@gentoo.org>
   mplayer-1.0_rc4_p20110322.ebuild,
index 2b8de74220bbfa266dbe27c3a7b43cc43fafa36d..49657f7e1494fe3fc1694b8e62f0f74bfbeae6d2 100644 (file)
@@ -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 (file)
index 0000000..edecce0
--- /dev/null
@@ -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, "<br>", 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 (file)
index 0000000..2fa5522
--- /dev/null
@@ -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"
+}