1 # Copyright 1999-2015 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
7 if [[ ${PV} == *9999 ]] ; then
9 EGIT_REPO_URI="git://git.libav.org/libav.git"
10 [[ ${PV%9999} != "" ]] && EGIT_BRANCH="release/${PV%.9999}"
13 inherit eutils flag-o-matic multilib multilib-minimal toolchain-funcs ${SCM}
15 DESCRIPTION="Complete solution to record, convert and stream audio and video"
16 HOMEPAGE="http://libav.org/"
17 if [[ ${PV} == *9999 ]] ; then
19 elif [[ ${PV%_p*} != ${PV} ]] ; then # Gentoo snapshot
20 SRC_URI="https://dev.gentoo.org/~lu_zero/libav/${P}.tar.xz"
21 else # Official release
22 SRC_URI="http://${PN}.org/releases/${P}.tar.xz"
25 SRC_URI+=" test? ( https://dev.gentoo.org/~lu_zero/libav/fate-10.tar.xz )"
27 LICENSE="LGPL-2.1 gpl? ( GPL-3 )"
29 [[ ${PV} == *9999 ]] || KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64
30 ~sparc ~x86 ~x86-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos
31 ~x64-solaris ~x86-solaris"
32 IUSE="aac alsa amr +bzip2 cdio cpudetection custom-cflags debug doc +encode
33 faac fdk frei0r +gpl gsm +hardcoded-tables ieee1394 jack jpeg2k mp3
34 +network openssl opus oss pic pulseaudio rtmp schroedinger sdl speex ssl
35 static-libs test theora threads tools truetype v4l vaapi vdpau vorbis vpx X
36 wavpack webp x264 xvid +zlib"
38 # String for CPU features in the useflag[:configure_option] form
39 # if :configure_option isn't set, it will use 'useflag' as configure option
40 CPU_FEATURES="cpu_flags_x86_3dnow:amd3dnow cpu_flags_x86_3dnowext:amd3dnowext altivec cpu_flags_x86_avx:avx cpu_flags_x86_mmx:mmx cpu_flags_x86_mmxext:mmxext neon cpu_flags_x86_ssse3:ssse3 vis cpu_flags_x86_avx2:avx2"
41 for i in ${CPU_FEATURES} ; do
47 alsa? ( >=media-libs/alsa-lib-1.0.27.2[${MULTILIB_USEDEP}] )
48 amr? ( >=media-libs/opencore-amr-0.1.3-r1[${MULTILIB_USEDEP}] )
49 bzip2? ( >=app-arch/bzip2-1.0.6-r4[${MULTILIB_USEDEP}] )
52 >=dev-libs/libcdio-paranoia-0.90_p1-r1[${MULTILIB_USEDEP}]
53 <dev-libs/libcdio-0.90[-minimal,${MULTILIB_USEDEP}]
57 aac? ( >=media-libs/vo-aacenc-0.1.3[${MULTILIB_USEDEP}] )
58 amr? ( >=media-libs/vo-amrwbenc-0.1.2-r1[${MULTILIB_USEDEP}] )
59 faac? ( >=media-libs/faac-1.28-r3[${MULTILIB_USEDEP}] )
60 fdk? ( >=media-libs/fdk-aac-0.1.2[${MULTILIB_USEDEP}] )
61 mp3? ( >=media-sound/lame-3.99.5-r1[${MULTILIB_USEDEP}] )
63 >=media-libs/libtheora-1.1.1[encode,${MULTILIB_USEDEP}]
64 >=media-libs/libogg-1.3.0[${MULTILIB_USEDEP}]
67 >=media-libs/libvorbis-1.3.3-r1[${MULTILIB_USEDEP}]
68 >=media-libs/libogg-1.3.0[${MULTILIB_USEDEP}]
70 webp? ( >=media-libs/libwebp-0.3.0[${MULTILIB_USEDEP}] )
71 wavpack? ( >=media-sound/wavpack-4.60.1-r1[${MULTILIB_USEDEP}] )
72 x264? ( >=media-libs/x264-0.0.20130506:=[${MULTILIB_USEDEP}] )
73 xvid? ( >=media-libs/xvid-1.3.2-r1[${MULTILIB_USEDEP}] )
75 frei0r? ( media-plugins/frei0r-plugins )
76 gsm? ( >=media-sound/gsm-1.0.13-r1[${MULTILIB_USEDEP}] )
78 >=media-libs/libdc1394-2.2.1[${MULTILIB_USEDEP}]
79 >=sys-libs/libraw1394-2.1.0-r1[${MULTILIB_USEDEP}]
81 jack? ( >=media-sound/jack-audio-connection-kit-0.121.3-r1[${MULTILIB_USEDEP}] )
82 jpeg2k? ( >=media-libs/openjpeg-1.5.0:0[${MULTILIB_USEDEP}] )
83 opus? ( >=media-libs/opus-1.0.2-r2[${MULTILIB_USEDEP}] )
84 pulseaudio? ( >=media-sound/pulseaudio-2.1-r1[${MULTILIB_USEDEP}] )
85 rtmp? ( >=media-video/rtmpdump-2.4_p20131018[${MULTILIB_USEDEP}] )
87 openssl? ( >=dev-libs/openssl-1.0.1h-r2[${MULTILIB_USEDEP}] )
88 !openssl? ( >=net-libs/gnutls-2.12.23-r6[${MULTILIB_USEDEP}] )
90 sdl? ( >=media-libs/libsdl-1.2.15-r4[sound,video,${MULTILIB_USEDEP}] )
91 schroedinger? ( >=media-libs/schroedinger-1.0.11-r1[${MULTILIB_USEDEP}] )
92 speex? ( >=media-libs/speex-1.2_rc1-r1[${MULTILIB_USEDEP}] )
93 truetype? ( >=media-libs/freetype-2.5.0.1:2[${MULTILIB_USEDEP}] )
94 vaapi? ( >=x11-libs/libva-1.2.1-r1[${MULTILIB_USEDEP}] )
95 vdpau? ( >=x11-libs/libvdpau-0.7[${MULTILIB_USEDEP}] )
96 vpx? ( >=media-libs/libvpx-1.2.0_pre20130625[${MULTILIB_USEDEP}] )
98 >=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}]
99 >=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}]
100 >=x11-libs/libXfixes-5.0.1[${MULTILIB_USEDEP}]
102 zlib? ( >=sys-libs/zlib-1.2.8-r1[${MULTILIB_USEDEP}] )
106 >=sys-devel/make-3.81
107 doc? ( app-text/texi2html )
108 ieee1394? ( >=virtual/pkgconfig-0-r1[${MULTILIB_USEDEP}] )
109 cpu_flags_x86_mmx? ( dev-lang/yasm )
110 rtmp? ( >=virtual/pkgconfig-0-r1[${MULTILIB_USEDEP}] )
111 schroedinger? ( >=virtual/pkgconfig-0-r1[${MULTILIB_USEDEP}] )
112 ssl? ( >=virtual/pkgconfig-0-r1[${MULTILIB_USEDEP}] )
113 test? ( sys-devel/bc )
114 truetype? ( >=virtual/pkgconfig-0-r1[${MULTILIB_USEDEP}] )
115 v4l? ( sys-kernel/linux-headers )
119 abi_x86_32? ( !<=app-emulation/emul-linux-x86-medialibs-20140508-r3
120 !app-emulation/emul-linux-x86-medialibs[-abi_x86_32(-)] )"
122 # faac can't be binary distributed
123 # openssl support marked as nonfree
124 # faac and aac are concurent implementations
125 # amr and aac require at least lgpl3
127 REQUIRED_USE="rtmp? ( network )
128 amr? ( gpl ) aac? ( gpl ) x264? ( gpl ) X? ( gpl ) cdio? ( gpl )
129 test? ( encode zlib )
132 # Test on live ebuild are not possible as they require trunk fate
133 RESTRICT="test faac? ( bindist ) fdk? ( bindist ) openssl? ( bindist )"
135 MULTILIB_WRAPPED_HEADERS=(
136 /usr/include/libavutil/avconfig.h
142 # if we have snapshot then we need to hardcode the version
143 if [[ ${PV%_p*} != ${PV} ]]; then
144 sed -i -e "s/UNKNOWN/DATE-${PV#*_pre}/" "${S}/version.sh" || die
147 TOOLS=( aviocat graph2dot ismindex pktdumper qt-faststart trasher )
148 use zlib && TOOLS+=( cws2fws )
153 multilib_src_configure() {
154 local myconf=( ${EXTRA_LIBAV_CONF} )
159 $(use_enable gpl version3)
164 uses="debug doc network zlib"
166 use ${i} || myconf+=( --disable-${i} )
168 use bzip2 || myconf+=( --disable-bzlib )
169 use sdl || myconf+=( --disable-avplay )
172 use openssl && myconf+=( --enable-openssl --enable-nonfree ) \
173 || myconf+=( --enable-gnutls )
176 use custom-cflags && myconf+=( --disable-optimizations )
177 use cpudetection && myconf+=( --enable-runtime-cpudetect )
179 use vdpau || myconf+=( --disable-vdpau )
181 use vaapi && myconf+=( --enable-vaapi )
185 use faac && myconf+=( --enable-nonfree )
186 use fdk && myconf+=( --enable-nonfree --enable-libfdk-aac )
187 use mp3 && myconf+=( --enable-libmp3lame )
188 use amr && myconf+=( --enable-libvo-amrwbenc )
189 use aac && myconf+=( --enable-libvo-aacenc )
190 uses="faac theora vorbis wavpack webp x264 xvid"
192 use ${i} && myconf+=( --enable-lib${i} )
195 myconf+=( --disable-encoders )
198 # libavdevice options
199 use cdio && myconf+=( --enable-libcdio )
200 use ieee1394 && myconf+=( --enable-libdc1394 )
201 use pulseaudio && myconf+=( --enable-libpulse )
204 # v4l1 is gone since linux-headers-2.6.38
205 myconf+=( --disable-indev=v4l )
206 use v4l || myconf+=( --disable-indev=v4l2 )
207 for i in alsa oss jack; do
208 use ${i} || myconf+=( --disable-indev=${i} )
210 use X && myconf+=( --enable-x11grab )
212 for i in alsa oss ; do
213 use ${i} || myconf+=( --disable-outdev=${i} )
215 # libavfilter options
216 multilib_is_native_abi && use frei0r && myconf+=( --enable-frei0r )
217 use truetype && myconf+=( --enable-libfreetype )
219 # Threads; we only support pthread for now
220 use threads && myconf+=( --enable-pthreads )
223 use amr && myconf+=( --enable-libopencore-amrwb --enable-libopencore-amrnb )
224 uses="gsm opus rtmp schroedinger speex vpx"
226 use ${i} && myconf+=( --enable-lib${i} )
228 use jpeg2k && myconf+=( --enable-libopenjpeg )
231 for i in ${CPU_FEATURES}; do
232 use ${i%:*} || myconf+=( --disable-${i#*:} )
235 # pass the right -mfpu as extra
236 use neon && myconf+=( --extra-cflags=-mfpu=neon )
238 # disable mmx accelerated code if PIC is required
239 # as the provided asm decidedly is not PIC for x86.
240 if use pic && [[ ${ABI} == x86 ]]; then
241 myconf+=( --disable-mmx --disable-mmxext )
244 # Option to force building pic
245 use pic && myconf+=( --enable-pic )
247 # cross compile support
248 if tc-is-cross-compiler ; then
249 myconf+=( --enable-cross-compile --arch=$(tc-arch-kernel) --cross-prefix=${CHOST}- )
252 myconf+=( --target-os=freebsd )
255 myconf+=( --target-os=mingw32 )
258 myconf+=( --target-os=linux )
264 use hardcoded-tables && myconf+=( --enable-hardcoded-tables )
266 # Specific workarounds for too-few-registers arch...
267 if [[ ${ABI} == x86 ]]; then
268 local CFLAGS=${CFLAGS} CXXFLAGS=${CXXFLAGS}
269 filter-flags -fforce-addr -momit-leaf-frame-pointer
270 append-flags -fomit-frame-pointer
271 is-flag -O? || append-flags -O2
273 # no need to warn about debug if not using debug flag
275 ewarn "Debug information will be almost useless as the frame pointer is omitted."
276 ewarn "This makes debugging harder, so crashes that has no fixed behavior are"
277 ewarn "difficult to fix. Please have that in mind."
282 set -- "${S}"/configure \
283 --prefix="${EPREFIX}"/usr \
284 --libdir="${EPREFIX}"/usr/$(get_libdir) \
285 --shlibdir="${EPREFIX}"/usr/$(get_libdir) \
286 --mandir="${EPREFIX}"/usr/share/man \
290 --optflags="${CFLAGS}" \
291 --extra-cflags="${CFLAGS}" \
292 $(use_enable static-libs static) \
298 multilib_src_compile() {
304 emake ${TOOLS[@]/#/tools/}
308 multilib_src_install() {
309 emake DESTDIR="${D}" install install-man
312 dobin ${TOOLS[@]/#/tools/}
316 multilib_src_install_all() {
317 dodoc Changelog README INSTALL
319 use doc && dodoc doc/*.html
322 multilib_src_test() {
323 LD_LIBRARY_PATH="${BUILD_DIR}/libavcore:${BUILD_DIR}/libswscale:${BUILD_DIR}/libavcodec:${BUILD_DIR}/libavdevice:${BUILD_DIR}/libavfilter:${BUILD_DIR}/libavformat:${BUILD_DIR}/libavutil" \