# Copyright 1999-2009 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ EAPI="1" inherit subversion eutils flag-o-matic multilib toolchain-funcs ESVN_REPO_URI="svn://svn.mplayerhq.hu/ffmpeg/trunk" DESCRIPTION="Complete solution to record, convert and stream audio and video (source from SVN)" HOMEPAGE="http://ffmpeg.org/" LICENSE="GPL-2" SLOT="live" KEYWORDS="~amd64 ~ppc64 ~sparc ~x86" IUSE="+aac altivec amrnb amrwb -bindist -debug dirac doc gsm +hardcoded-tables icc ieee1394 imlib ipv6 mmx +mp3 network oss schroedinger sdl test theora +threads +truetype v4l vdpau +vorbis X +x264 +xvid +zlib" RDEPEND="aac? ( media-libs/faad2 media-libs/faac ) !bindist? ( amrnb? ( media-libs/amrnb ) amrwb? ( media-libs/amrwb ) ) dirac? ( media-video/dirac ) gsm? ( >=media-sound/gsm-1.0.12-r1 ) ieee1394? ( media-libs/libdc1394 sys-libs/libraw1394 ) imlib? ( media-libs/imlib2 ) mp3? ( media-sound/lame ) schroedinger? ( media-libs/schroedinger ) sdl? ( >=media-libs/libsdl-1.2.10 ) theora? ( media-libs/libtheora media-libs/libogg ) truetype? ( >=media-libs/freetype-2 ) vdpau? ( >=x11-drivers/nvidia-drivers-180.08 ) vorbis? ( media-libs/libvorbis media-libs/libogg ) X? ( x11-libs/libX11 x11-libs/libXext ) x264? ( >=media-libs/x264-0.0.20081006 ) xvid? ( >=media-libs/xvid-1.1.0 ) zlib? ( sys-libs/zlib )" DEPEND="${RDEPEND} doc? ( app-text/texi2html ) mmx? ( dev-lang/yasm ) test? ( net-misc/wget ) v4l? ( sys-kernel/linux-headers )" S=${WORKDIR}/${PN} src_unpack() { subversion_src_unpack # For Version Branding cd "${ESVN_STORE_DIR}/${ESVN_CO_DIR}/${ESVN_PROJECT}/${ESVN_REPO_URI##*/}" ./version.sh . version.h mv version.h "${S}" cd "${S}" # disable version rebranding # epatch "${FILESDIR}/disable-version-rebranding-2009.01.patch" # Make it use pic always since we don't need textrels sed -i -e "s:LIBOBJFLAGS=\"\":LIBOBJFLAGS=\'\$\(PIC\)\':" configure # To make sure the ffserver test will work sed -i -e "s:-e debug=off::" tests/server-regression.sh epatch "${FILESDIR}"/ffmpeg-x86-pic-fix-20080916.patch use icc && epatch "${FILESDIR}"/ffmpeg-icc.patch } src_compile() { #Note; library makefiles don't propogate flags from config.mak so #use specified CFLAGS are only used in executables replace-flags -O0 -O2 #x86, what a wonderful arch.... replace-flags -O1 -O2 # Append -fomit-frame-pointer to avoid some common issues use debug || append-flags "-fomit-frame-pointer" # Append -DBROKEN_RELOCATIONS to build for bug 179872. append-flags "-DBROKEN_RELOCATIONS" # temporary fix for bug reported at http://forums.gentoo.org/viewtopic-p-5186627.html#5186627 append-flags "-D_BSD_SOURCE" local myconf="${EXTRA_ECONF}" # disable mmx accelerated code if not requested, or if PIC is required # as the provided asm decidedly is not PIC. if ( gcc-specs-pie || ! use mmx ) && ( ! use amd64 ); then myconf="${myconf} --disable-mmx --disable-mmx2" fi if use elibc_FreeBSD; then myconf="${myconf} --enable-memalign-hack" fi use amd64 && myconf="${myconf} --arch=x86_64 --cpu=athlon64" # enabled by default use altivec || myconf="${myconf} --disable-altivec" use debug || myconf="${myconf} --disable-debug" use network || myconf="${myconf} --disable-network" use ipv6 || myconf="${myconf} --disable-ipv6" use zlib || myconf="${myconf} --disable-zlib" use sdl || myconf="${myconf} --disable-ffplay" # disabled by default use mp3 && myconf="${myconf} --enable-libmp3lame" use ieee1394 && myconf="${myconf} --enable-libdc1394" use threads && myconf="${myconf} --enable-pthreads" use xvid && myconf="${myconf} --enable-libxvid" use vorbis && myconf="${myconf} --enable-libvorbis" use x264 && myconf="${myconf} --enable-libx264" use theora && myconf="${myconf} --enable-libtheora" use aac && myconf="${myconf} --enable-libfaad --enable-libfaac" use hardcoded-tables && myconf="${myconf} --enable-hardcoded-tables" use dirac && myconf="${myconf} --enable-libdirac" use schroedinger && myconf="${myconf} --enable-libschroedinger" use vdpau && myconf="${myconf} --enable-vdpau" use X && myconf="${myconf} --enable-x11grab" if use gsm; then myconf="${myconf} --enable-libgsm" append-flags -I/usr/include/gsm fi if ! use bindist ; then use amrnb && myconf="${myconf} --enable-libamr-nb --enable-nonfree" use amrwb && myconf="${myconf} --enable-libamr-wb --enable-nonfree" fi myconf="${myconf} --enable-gpl --enable-postproc --disable-stripping" myconf="${myconf} --enable-avfilter --enable-avfilter-lavf" tc-is-cross-compiler && myconf="${myconf} --cross-compile --arch=$(tc-arch-kernel)" # Specific workarounds for too-few-registers arch... if [[ $(tc-arch) == "x86" ]]; then filter-flags -fforce-addr -momit-leaf-frame-pointer append-flags -fomit-frame-pointer is-flag -O? || append-flags -O2 if use debug; then # no need to warn about debug if not using debug flag ewarn "" ewarn "Debug information will be almost useless as the frame pointer is omitted." ewarn "This makes debugging harder, so crashes that has no fixed behavior are" ewarn "difficult to fix. Please have that in mind." ewarn "" fi fi cd "${S}" ./configure \ --prefix=/usr \ --libdir=/usr/$(get_libdir) \ --shlibdir=/usr/$(get_libdir) \ --mandir=/usr/share/man \ --enable-static --enable-shared \ "--cc=$(tc-getCC)" \ ${myconf} || die "configure failed" emake -j1 depend || die "depend failed" emake || die "make failed" } src_install() { emake -j1 LDCONFIG=true DESTDIR=${D} install || die "Install Failed" use doc && emake -j1 documentation dodoc Changelog README INSTALL dodoc doc/* } # Never die for now... src_test() { cd "${S}/tests" for t in "codectest libavtest test-server" ; do make ${t} || ewarn "Some tests in ${t} failed" done } pkg_postinst() { echo ewarn "ffmpeg may have had ABI changes, if ffmpeg based programs" ewarn "like xine-lib or vlc stop working, please rebuild them." echo }