summaryrefslogtreecommitdiff
path: root/media-video/ffmpeg/ffmpeg-20099999.ebuild
blob: 2472eca7d06f05129b26d99e650a8bcf23c481f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# 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
}