Add hwaccel configury. This generates CONFIG_<CODEC>_<HWACCEL>_HWACCEL
[libav.git] / configure
CommitLineData
aeb29222 1#!/bin/sh
0f3cb305 2#
f57620d5
MR
3# FFmpeg configure script
4#
949906ea
DB
5# Copyright (c) 2000-2002 Fabrice Bellard
6# Copyright (c) 2005-2008 Diego Biurrun
7# Copyright (c) 2005-2008 Mans Rullgard
0f3cb305 8#
cf9d24ad 9
31e647f8 10# Prevent locale nonsense from breaking basic text processing.
79ab96ba
DB
11LC_ALL=C
12export LC_ALL
31e647f8 13
cde2d79a 14# make sure we are running under a compatible shell
c21d6325
MR
15# try to make this part work with most shells
16
17try_exec(){
0dbe81bb 18 echo "Trying shell $1"
2270b4b2 19 type "$1" > /dev/null 2>&1 && exec "$@"
c21d6325
MR
20}
21
5237ce67 22unset foo
2270b4b2 23(: ${foo%%bar}) 2> /dev/null
0dbe81bb
MR
24E1="$?"
25
2270b4b2 26(: ${foo?}) 2> /dev/null
0dbe81bb
MR
27E2="$?"
28
29if test "$E1" != 0 || test "$E2" = 0; then
30 echo "Broken shell detected. Trying alternatives."
c21d6325
MR
31 export FF_CONF_EXEC
32 if test "0$FF_CONF_EXEC" -lt 1; then
33 FF_CONF_EXEC=1
34 try_exec bash "$0" "$@"
35 fi
36 if test "0$FF_CONF_EXEC" -lt 2; then
37 FF_CONF_EXEC=2
38 try_exec ksh "$0" "$@"
39 fi
40 if test "0$FF_CONF_EXEC" -lt 3; then
41 FF_CONF_EXEC=3
42 try_exec /usr/xpg4/bin/sh "$0" "$@"
cde2d79a
MR
43 fi
44 echo "No compatible shell script interpreter found."
fc53da20 45 echo "This configure script requires a POSIX-compatible shell"
c21d6325 46 echo "such as bash or ksh."
505dfb09
DB
47 echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48 echo "Instead, install a working POSIX-compatible shell."
49 echo "Disabling this configure test will create a broken FFmpeg."
c21d6325
MR
50 if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51 echo "This bash version ($BASH_VERSION) is broken on your platform."
52 echo "Upgrade to a later version if available."
53 fi
cde2d79a
MR
54 exit 1
55fi
56
74c53c2d
MR
57show_help(){
58 echo "Usage: configure [options]"
59 echo "Options: [defaults in brackets after descriptions]"
60 echo
61 echo "Standard options:"
62 echo " --help print this message"
8c6afa4d
DB
63 echo " --logfile=FILE log tests and output to FILE [config.err]"
64 echo " --disable-logging do not log configure debug information"
3e89171a 65 echo " --prefix=PREFIX install in PREFIX [$prefix]"
d156bede 66 echo " --bindir=DIR install binaries in DIR [PREFIX/bin]"
14a8acf1 67 echo " --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]"
74c53c2d 68 echo " --libdir=DIR install libs in DIR [PREFIX/lib]"
84c22efd 69 echo " --shlibdir=DIR install shared libs in DIR [PREFIX/lib]"
5341d856 70 echo " --incdir=DIR install includes in DIR [PREFIX/include]"
4ca5ece5 71 echo " --mandir=DIR install man page in DIR [PREFIX/share/man]"
62560865
DB
72 echo
73 echo "Configuration options:"
e6b9d588
DB
74 echo " --disable-static do not build static libraries [no]"
75 echo " --enable-shared build shared libraries [no]"
0a23c0bb
DB
76 echo " --enable-gpl allow use of GPL code, the resulting libs"
77 echo " and binaries will be under GPL [no]"
78 echo " --enable-nonfree allow use of nonfree code, the resulting libs"
79 echo " and binaries will be unredistributable [no]"
62560865
DB
80 echo " --disable-ffmpeg disable ffmpeg build"
81 echo " --disable-ffplay disable ffplay build"
82 echo " --disable-ffserver disable ffserver build"
e6b9d588 83 echo " --enable-postproc enable GPLed postprocessing support [no]"
fdf11906 84 echo " --enable-avfilter video filter support [no]"
0a23c0bb 85 echo " --enable-avfilter-lavf video filters dependent on avformat [no]"
e6b9d588
DB
86 echo " --enable-beosthreads use BeOS threads [no]"
87 echo " --enable-os2threads use OS/2 threads [no]"
88 echo " --enable-pthreads use pthreads [no]"
89 echo " --enable-w32threads use Win32 threads [no]"
90 echo " --enable-x11grab enable X11 grabbing [no]"
62560865
DB
91 echo " --disable-network disable network support [no]"
92 echo " --disable-ipv6 disable IPv6 support [no]"
93 echo " --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]"
94 echo " --enable-gray enable full grayscale support (slower color)"
a9ddb5b1 95 echo " --disable-swscale-alpha disable alpha channel support in swscale"
aa033b1e 96 echo " --disable-fastdiv disable table-based division"
62560865
DB
97 echo " --enable-small optimize for size instead of speed"
98 echo " --disable-aandct disable AAN DCT code"
99 echo " --disable-fft disable FFT code"
100 echo " --disable-golomb disable Golomb code"
101 echo " --disable-mdct disable MDCT code"
68602540 102 echo " --disable-rdft disable RDFT code"
62560865
DB
103 echo " --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
104 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
105 echo " --enable-beos-netserver enable BeOS netserver"
106 echo " --disable-encoder=NAME disable encoder NAME"
107 echo " --enable-encoder=NAME enable encoder NAME"
108 echo " --disable-encoders disable all encoders"
109 echo " --disable-decoder=NAME disable decoder NAME"
110 echo " --enable-decoder=NAME enable decoder NAME"
111 echo " --disable-decoders disable all decoders"
5666fd73
GB
112 echo " --disable-hwaccel=NAME disable hwaccel NAME"
113 echo " --enable-hwaccel=NAME enable hwaccel NAME"
114 echo " --disable-hwaccels disable all hwaccels"
62560865
DB
115 echo " --disable-muxer=NAME disable muxer NAME"
116 echo " --enable-muxer=NAME enable muxer NAME"
117 echo " --disable-muxers disable all muxers"
118 echo " --disable-demuxer=NAME disable demuxer NAME"
119 echo " --enable-demuxer=NAME enable demuxer NAME"
120 echo " --disable-demuxers disable all demuxers"
121 echo " --enable-parser=NAME enable parser NAME"
122 echo " --disable-parser=NAME disable parser NAME"
123 echo " --disable-parsers disable all parsers"
124 echo " --enable-bsf=NAME enable bitstream filter NAME"
125 echo " --disable-bsf=NAME disable bitstream filter NAME"
126 echo " --disable-bsfs disable all bitstream filters"
127 echo " --enable-protocol=NAME enable protocol NAME"
128 echo " --disable-protocol=NAME disable protocol NAME"
129 echo " --disable-protocols disable all protocols"
130 echo " --disable-indevs disable input devices"
131 echo " --disable-outdevs disable output devices"
132 echo " --disable-devices disable all devices"
133 echo " --enable-filter=NAME enable filter NAME"
134 echo " --disable-filter=NAME disable filter NAME"
135 echo " --disable-filters disable all filters"
136 echo " --list-decoders show all available decoders"
137 echo " --list-encoders show all available encoders"
5666fd73 138 echo " --list-hwaccels show all available hardware accelerators"
62560865
DB
139 echo " --list-muxers show all available muxers"
140 echo " --list-demuxers show all available demuxers"
141 echo " --list-parsers show all available parsers"
142 echo " --list-protocols show all available protocols"
143 echo " --list-bsfs show all available bitstream filters"
144 echo " --list-indevs show all available input devices"
145 echo " --list-outdevs show all available output devices"
146 echo " --list-filters show all available filters"
0a622b98
MR
147 echo
148 echo "External library support:"
0a23c0bb 149 echo " --enable-avisynth enable reading of AVISynth script files [no]"
27cb5cbc
CEH
150 echo " --enable-bzlib enable bzlib [autodetect]"
151 echo " --enable-libamr-nb enable libamr-nb floating point audio codec [no]"
152 echo " --enable-libamr-wb enable libamr-wb floating point audio codec [no]"
f7b8bffe 153 echo " --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394"
e6b9d588
DB
154 echo " and libraw1394 [no]"
155 echo " --enable-libdirac enable Dirac support via libdirac [no]"
156 echo " --enable-libfaac enable FAAC support via libfaac [no]"
157 echo " --enable-libfaad enable FAAD support via libfaad [no]"
158 echo " --enable-libfaadbin open libfaad.so.0 at runtime [no]"
159 echo " --enable-libgsm enable GSM support via libgsm [no]"
160 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [no]"
31235134 161 echo " --enable-libnut enable NUT (de)muxing via libnut,"
0a23c0bb 162 echo " native (de)muxer exists [no]"
9a77d59a 163 echo " --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]"
e6b9d588
DB
164 echo " --enable-libschroedinger enable Dirac support via libschroedinger [no]"
165 echo " --enable-libspeex enable Speex decoding via libspeex [no]"
166 echo " --enable-libtheora enable Theora encoding via libtheora [no]"
f9def9cc 167 echo " --enable-libvorbis enable Vorbis encoding via libvorbis,"
e6b9d588
DB
168 echo " native implementation exists [no]"
169 echo " --enable-libx264 enable H.264 encoding via x264 [no]"
1cc60c47 170 echo " --enable-libxvid enable Xvid encoding via xvidcore,"
e6b9d588 171 echo " native MPEG-4/Xvid encoder exists [no]"
732c9a34 172 echo " --enable-mlib enable Sun medialib [no]"
27cb5cbc 173 echo " --enable-zlib enable zlib [autodetect]"
74c53c2d
MR
174 echo ""
175 echo "Advanced options (experts only):"
176 echo " --source-path=PATH path to source code [$source_path]"
177 echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
db6107b6 178 echo " --enable-cross-compile assume a cross-compiler is used"
c5200f17
MR
179 echo " --sysroot=PATH root of cross-build tree"
180 echo " --sysinclude=PATH location of cross-build system headers"
4f854758 181 echo " --target-os=OS compiler targets OS [$target_os]"
a7ada2ba
MR
182 echo " --target-exec=CMD command to run executables on target"
183 echo " --target-path=DIR path to view of build directory on target"
89641463 184 echo " --nm=NM use nm tool"
313c46a6 185 echo " --as=AS use assembler AS [$as_default]"
15396d5c 186 echo " --cc=CC use C compiler CC [$cc_default]"
9da6609f
MR
187 echo " --host-cc=HOSTCC use host C compiler HOSTCC"
188 echo " --host-cflags=HCFLAGS use HCFLAGS when compiling for host"
189 echo " --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host"
190 echo " --host-libs=HLIBS use libs HLIBS when linking for host"
74c53c2d
MR
191 echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
192 echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
193 echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
ac63af34 194 echo " --extra-version=STRING version string suffix []"
0a23c0bb
DB
195 echo " --build-suffix=SUFFIX library name suffix []"
196 echo " --arch=ARCH select architecture [$arch]"
197 echo " --cpu=CPU select the minimum required CPU (affects"
7c758d33 198 echo " instruction selection, may crash on older CPUs)"
2b4c3615 199 echo " --enable-powerpc-perf enable performance report on PPC"
74c53c2d 200 echo " (requires enabling PMC)"
4f50c3d5 201 echo " --disable-altivec disable AltiVec optimizations"
3bf96eec 202 echo " --disable-amd3dnow disable 3DNow! optimizations"
a1ef9f08 203 echo " --disable-amd3dnowext disable 3DNow! extended optimizations"
0a23c0bb
DB
204 echo " --disable-mmx disable MMX optimizations"
205 echo " --disable-mmx2 disable MMX2 optimizations"
1bb04d5a 206 echo " --disable-sse disable SSE optimizations"
0a23c0bb
DB
207 echo " --disable-ssse3 disable SSSE3 optimizations"
208 echo " --disable-armv5te disable armv5te optimizations"
209 echo " --disable-armv6 disable armv6 optimizations"
26c7aa17 210 echo " --disable-armv6t2 disable armv6t2 optimizations"
3bbcba32 211 echo " --disable-armvfp disable ARM VFP optimizations"
0a23c0bb 212 echo " --disable-iwmmxt disable iwmmxt optimizations"
49276307
DB
213 echo " --disable-mmi disable MMI optimizations"
214 echo " --disable-neon disable neon optimizations"
215 echo " --disable-vis disable VIS optimizations"
7595a5e4 216 echo " --disable-yasm disable use of yasm assembler"
0a622b98
MR
217 echo
218 echo "Developer options (useful when working on FFmpeg itself):"
9c56a1f9 219 echo " --disable-debug disable debugging symbols"
b7d49373 220 echo " --enable-debug=LEVEL set the debug level [$debuglevel]"
0a622b98 221 echo " --enable-gprof enable profiling with gprof [$gprof]"
d2bbb2f7 222 echo " --disable-optimizations disable compiler optimizations"
0a622b98 223 echo " --enable-extra-warnings enable more compiler warnings"
87a0fb62 224 echo " --disable-stripping disable stripping of executables and shared libraries"
74c53c2d
MR
225 echo ""
226 echo "NOTE: Object files are built at the place where configure is launched."
60e8bc13 227 exit 0
74c53c2d 228}
cf9d24ad 229
57bd82d4 230log(){
2270b4b2 231 echo "$@" >> $logfile
57bd82d4
MR
232}
233
720c69da 234log_file(){
c8e9f801 235 log BEGIN $1
2270b4b2 236 pr -n -t $1 >> $logfile
c8e9f801
MR
237 log END $1
238}
239
2ba042a7 240echolog(){
c8e9f801 241 log "$@"
57bd82d4 242 echo "$@"
2ba042a7
MR
243}
244
245die(){
246 echolog "$@"
247 cat <<EOF
d326cf7f 248
2ba042a7
MR
249If you think configure made a mistake, make sure you are using the latest
250version from SVN. If the latest version fails, report the problem to the
e5d8ccd7 251ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
2ba042a7 252EOF
e155a21a 253 if disabled logging; then
2ba042a7 254 cat <<EOF
e155a21a
DB
255Rerun configure with logging enabled (do not use --disable-logging), and
256include the log this produces with your report.
2ba042a7
MR
257EOF
258 else
259cat <<EOF
e155a21a
DB
260Include the log file "$logfile" produced by configure as this will help
261solving the problem.
2ba042a7
MR
262EOF
263 fi
57bd82d4
MR
264 exit 1
265}
266
6c6007d6 267# Avoid locale weirdness, besides we really just want to translate ASCII.
44161118 268toupper(){
6c6007d6 269 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
44161118
MR
270}
271
4a5444db 272tolower(){
6c6007d6 273 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
4a5444db
MR
274}
275
14a8acf1
MR
276c_escape(){
277 echo "$*" | sed 's/["\\]/\\\0/g'
278}
279
a8d04fba
MR
280set_all(){
281 value=$1
282 shift
283 for var in $*; do
284 eval $var=$value
285 done
286}
287
72a43668
MR
288set_weak(){
289 value=$1
290 shift
291 for var; do
292 eval : \${$var:=$value}
293 done
294}
295
799c9e9b
MR
296pushvar(){
297 for var in $*; do
298 eval level=\${${var}_level:=0}
299 eval ${var}_${level}="\$$var"
300 eval ${var}_level=$(($level+1))
301 done
302}
303
304popvar(){
305 for var in $*; do
306 eval level=\${${var}_level:-0}
307 test $level = 0 && continue
308 eval level=$(($level-1))
309 eval $var="\${${var}_${level}}"
310 eval ${var}_level=$level
311 eval unset ${var}_${level}
312 done
313}
314
a8d04fba
MR
315enable(){
316 set_all yes $*
317}
318
319disable(){
320 set_all no $*
321}
322
72a43668
MR
323enable_weak(){
324 set_weak yes $*
325}
326
327disable_weak(){
328 set_weak no $*
329}
330
72702705
MR
331enable_safe(){
332 enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
333}
334
335disable_safe(){
336 disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
337}
338
f9d328da
MR
339do_enable_deep(){
340 for var; do
341 enabled $var && continue
342 eval sel="\$${var}_select"
c510c7b5
MR
343 eval sgs="\$${var}_suggest"
344 pushvar var sgs
f9d328da 345 enable_deep $sel
c510c7b5
MR
346 popvar sgs
347 enable_deep_weak $sgs
f9d328da
MR
348 popvar var
349 done
350}
351
352enable_deep(){
353 do_enable_deep $*
354 enable $*
355}
356
72a43668
MR
357enable_deep_weak(){
358 do_enable_deep $*
359 enable_weak $*
360}
361
57bd82d4 362enabled(){
3250003c
MR
363 test "${1#!}" = "$1" && op== || op=!=
364 eval test "x\$${1#!}" $op "xyes"
44161118
MR
365}
366
37970ebf 367disabled(){
3250003c
MR
368 test "${1#!}" = "$1" && op== || op=!=
369 eval test "x\$${1#!}" $op "xno"
37970ebf
RP
370}
371
44161118
MR
372enabled_all(){
373 for opt; do
374 enabled $opt || return 1
375 done
376}
377
85bca2c5
DB
378disabled_all(){
379 for opt; do
380 disabled $opt || return 1
381 done
382}
383
44161118
MR
384enabled_any(){
385 for opt; do
386 enabled $opt && return 0
387 done
388}
389
85bca2c5
DB
390disabled_any(){
391 for opt; do
392 disabled $opt && return 0
393 done
f7b230a7 394 return 1
85bca2c5
DB
395}
396
c9d19248
MR
397set_default(){
398 for opt; do
88268e94 399 eval : \${$opt:=\$${opt}_default}
c9d19248
MR
400 done
401}
402
4a0d6686
AJ
403is_in(){
404 value=$1
405 shift
406 for var in $*; do
407 [ $var = $value ] && return 0
408 done
409 return 1
410}
411
30fd06be
MR
412check_deps(){
413 for cfg; do
3250003c 414 cfg="${cfg#!}"
799c9e9b
MR
415 enabled ${cfg}_checking && die "Circular dependency for $cfg."
416 disabled ${cfg}_checking && continue
417 enable ${cfg}_checking
418
30fd06be
MR
419 eval dep_all="\$${cfg}_deps"
420 eval dep_any="\$${cfg}_deps_any"
7ef3425f 421 eval dep_sel="\$${cfg}_select"
c510c7b5 422 eval dep_sgs="\$${cfg}_suggest"
799c9e9b 423
c510c7b5
MR
424 pushvar cfg dep_all dep_any dep_sel dep_sgs
425 check_deps $dep_all $dep_any $dep_sel $dep_sgs
426 popvar cfg dep_all dep_any dep_sel dep_sgs
799c9e9b 427
6a702d4c
MR
428 enabled_all $dep_all || disable $cfg
429 enabled_any $dep_any || disable $cfg
7ef3425f 430 disabled_any $dep_sel && disable $cfg
799c9e9b 431
4ec45764
RP
432 if enabled $cfg; then
433 eval dep_extralibs="\$${cfg}_extralibs"
434 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
f9d328da 435 enable_deep $dep_sel
c510c7b5 436 enable_deep_weak $dep_sgs
4ec45764
RP
437 fi
438
799c9e9b 439 disable ${cfg}_checking
30fd06be
MR
440 done
441}
442
44161118
MR
443print_config(){
444 pfx=$1
445 header=$2
446 makefile=$3
447 shift 3
448 for cfg; do
5e622c40 449 ucname="$(toupper $cfg)"
44161118 450 if enabled $cfg; then
3d907e22 451 echo "#define ${pfx}${ucname} 1" >> $header
3d907e22
MR
452 echo "${pfx}${ucname}=yes" >> $makefile
453 else
b250f9c6 454 echo "#define ${pfx}${ucname} 0" >> $header
44161118
MR
455 fi
456 done
57bd82d4
MR
457}
458
459flags_saved(){
2270b4b2 460 (: ${SAVE_CFLAGS?}) 2> /dev/null
57bd82d4
MR
461}
462
dcd479c0 463save_flags(){
57bd82d4 464 flags_saved && return
dcd479c0
MR
465 SAVE_CFLAGS="$CFLAGS"
466 SAVE_LDFLAGS="$LDFLAGS"
467 SAVE_extralibs="$extralibs"
468}
469
470restore_flags(){
f5d28d10 471 flags_saved || return
dcd479c0
MR
472 CFLAGS="$SAVE_CFLAGS"
473 LDFLAGS="$SAVE_LDFLAGS"
474 extralibs="$SAVE_extralibs"
475 unset SAVE_CFLAGS
476 unset SAVE_LDFLAGS
477 unset SAVE_extralibs
478}
479
480temp_cflags(){
481 save_flags
482 CFLAGS="$CFLAGS $*"
483}
484
485temp_ldflags(){
486 save_flags
487 LDFLAGS="$LDFLAGS $*"
488}
489
490temp_extralibs(){
491 save_flags
492 extralibs="$extralibs $*"
493}
494
57bd82d4
MR
495append(){
496 var=$1
497 shift
498 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
499 eval "$var=\"\$$var $*\""
500}
501
502add_cflags(){
503 append CFLAGS "$@"
504}
505
506add_ldflags(){
507 append LDFLAGS "$@"
508}
509
510add_extralibs(){
511 append extralibs "$@"
512}
513
b0cfb663 514check_cmd(){
b3cb5d51 515 log "$@"
2270b4b2 516 "$@" >> $logfile 2>&1
b0cfb663
MR
517}
518
dcd479c0 519check_cc(){
57bd82d4 520 log check_cc "$@"
2270b4b2 521 cat > $TMPC
720c69da 522 log_file $TMPC
b0cfb663 523 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
57bd82d4
MR
524}
525
526check_cpp(){
527 log check_cpp "$@"
2270b4b2 528 cat > $TMPC
720c69da 529 log_file $TMPC
b0cfb663 530 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
dcd479c0
MR
531}
532
f65883c8
MR
533check_as(){
534 log check_as "$@"
535 cat > $TMPC
536 log_file $TMPC
537 check_cmd $as $CFLAGS "$@" -c -o $TMPO $TMPC
538}
539
940f335a
MR
540check_asm(){
541 log check_asm "$@"
542 name="$1"
543 asm="$2"
544 shift 2
f65883c8 545 check_as "$@" <<EOF && enable $name || disable $name
124c21d7 546void foo(void){ __asm__ volatile($asm); }
940f335a
MR
547EOF
548}
549
304d586d
LM
550check_yasm(){
551 log check_yasm "$@"
552 echo "$1" > $TMPS
553 log_file $TMPS
554 shift 1
555 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
556}
557
dcd479c0 558check_ld(){
57bd82d4 559 log check_ld "$@"
0607887f 560 check_cc || return
3155a644
MR
561 flags=''
562 libs=''
563 for f; do
564 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
565 done
566 check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
dcd479c0
MR
567}
568
569check_cflags(){
57bd82d4
MR
570 log check_cflags "$@"
571 check_cc "$@" <<EOF && add_cflags "$@"
dcd479c0
MR
572int x;
573EOF
574}
575
576check_ldflags(){
57bd82d4
MR
577 log check_ldflags "$@"
578 check_ld "$@" <<EOF && add_ldflags "$@"
c23a0ac8 579int main(void){ return 0; }
dcd479c0
MR
580EOF
581}
582
583check_header(){
57bd82d4 584 log check_header "$@"
dcd479c0
MR
585 header=$1
586 shift
b77df637
MR
587 disable_safe $header
588 check_cpp "$@" <<EOF && enable_safe $header
dcd479c0
MR
589#include <$header>
590int x;
591EOF
592}
593
594check_func(){
57bd82d4 595 log check_func "$@"
dcd479c0
MR
596 func=$1
597 shift
d8bc5f06
MR
598 disable $func
599 check_ld "$@" <<EOF && enable $func
dcd479c0 600extern int $func();
c23a0ac8 601int main(void){ $func(); }
dcd479c0
MR
602EOF
603}
604
2446d3d6
DB
605check_func_headers(){
606 log check_func_headers "$@"
f8d7b072
MR
607 headers=$1
608 func=$2
609 shift 2
610 disable $func
611 incs=""
612 for hdr in $headers; do
613 incs="$incs
614#include <$hdr>"
615 done
cd0d9a9d 616 check_ld "$@" <<EOF && enable $func && enable_safe $headers
f8d7b072 617$incs
d6773f56 618int main(int argc, char **argv){
f8d7b072
MR
619 (void) $func;
620 return 0;
621}
622EOF
623}
624
a5344cf7
SS
625check_cpp_condition(){
626 log check_cpp_condition "$@"
627 header=$1
628 condition=$2
629 check_cpp <<EOF
630#include <$header>
631#if !($condition)
632#error "unsatisfied condition: $condition"
633#endif
634EOF
635}
636
57bd82d4
MR
637check_lib(){
638 log check_lib "$@"
639 header="$1"
640 func="$2"
641 shift 2
fcfcde17
MR
642 temp_extralibs "$@"
643 check_header $header && check_func $func && add_extralibs "$@"
644 err=$?
645 restore_flags
646 return $err
57bd82d4
MR
647}
648
f8d7b072
MR
649check_lib2(){
650 log check_lib2 "$@"
651 headers="$1"
652 func="$2"
653 shift 2
654 temp_extralibs "$@"
2446d3d6 655 check_func_headers "$headers" $func && add_extralibs "$@"
f8d7b072
MR
656 err=$?
657 restore_flags
658 return $err
659}
660
dcd479c0 661check_exec(){
2270b4b2 662 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
57bd82d4
MR
663}
664
7dfef245 665check_exec_crash(){
5e622c40 666 code=$(cat)
7dfef245
MR
667
668 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
669 # are safe but may not be available everywhere. Thus we use
670 # raise(SIGTERM) instead. The check is run in a subshell so we
671 # can redirect the "Terminated" message from the shell. SIGBUS
672 # is not defined by standard C so it is used conditionally.
673
2270b4b2 674 (check_exec "$@") >> $logfile 2>&1 <<EOF
7dfef245
MR
675#include <signal.h>
676static void sighandler(int sig){
677 raise(SIGTERM);
678}
e5af4a11 679int main(void){
7dfef245
MR
680 signal(SIGILL, sighandler);
681 signal(SIGFPE, sighandler);
682 signal(SIGSEGV, sighandler);
683#ifdef SIGBUS
684 signal(SIGBUS, sighandler);
685#endif
686 { $code }
687}
688EOF
689}
690
72be9e73
DY
691check_type(){
692 log check_type "$@"
693 headers=$1
694 type=$2
695 shift 2
696 disable $type
697 incs=""
698 for hdr in $headers; do
699 incs="$incs
700#include <$hdr>"
701 done
702 check_cc "$@" <<EOF && enable $type
703$incs
704$type v;
705EOF
706}
707
57bd82d4
MR
708require(){
709 name="$1"
710 header="$2"
711 func="$3"
712 shift 3
713 check_lib $header $func "$@" || die "ERROR: $name not found"
dcd479c0
MR
714}
715
f8d7b072
MR
716require2(){
717 name="$1"
718 headers="$2"
719 func="$3"
720 shift 3
721 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
722}
723
eea50282
MR
724check_foo_config(){
725 cfg=$1
726 pkg=$2
727 header=$3
728 func=$4
729 shift 4
730 disable $cfg
731 check_cmd ${pkg}-config --version
732 err=$?
733 if test "$err" = 0; then
5e622c40
DB
734 temp_cflags $(${pkg}-config --cflags)
735 temp_extralibs $(${pkg}-config --libs)
eea50282
MR
736 check_lib "$@" $header $func && enable $cfg
737 fi
738 return $err
739}
740
c505dd31
MR
741apply(){
742 file=$1
743 shift
744 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
745}
746
dcd61286
DB
747# CONFIG_LIST contains configurable options, while HAVE_LIST is for
748# system-dependent things.
749
4a0d6686
AJ
750COMPONENT_LIST="
751 bsfs
752 decoders
753 demuxers
754 encoders
3cde40aa 755 filters
5666fd73 756 hwaccels
c552605c 757 indevs
4a0d6686 758 muxers
c552605c 759 outdevs
4a0d6686
AJ
760 parsers
761 protocols
762"
763
764CONFIG_LIST="
765 $COMPONENT_LIST
e8ed9b7a 766 aandct
f7679c54
VS
767 avfilter
768 avfilter_lavf
c88f5d72
MR
769 avisynth
770 beos_netserver
f402916e 771 bzlib
27a9466b 772 fastdiv
c88f5d72
MR
773 ffmpeg
774 ffplay
775 ffserver
1848f7d9 776 fft
4f034993 777 golomb
c88f5d72 778 gpl
ecfc4f44 779 gprof
d8d0d0b2 780 gray
3abe5fbd 781 hardcoded_tables
c88f5d72 782 ipv6
f5a756ef
DB
783 libamr_nb
784 libamr_wb
f7b8bffe 785 libdc1394
690bfceb 786 libdirac
2eed5a46
DB
787 libfaac
788 libfaad
789 libfaadbin
c88f5d72 790 libgsm
6ebe07fb 791 libmp3lame
c88f5d72 792 libnut
9a77d59a 793 libopenjpeg
f7cd9eed 794 libschroedinger
ae14f311 795 libspeex
150d2772 796 libtheora
c88f5d72 797 libvorbis
1cc60c47
DB
798 libx264
799 libxvid
47a158cb 800 mdct
c88f5d72 801 memalign_hack
a8150374 802 mlib
c88f5d72
MR
803 mpegaudio_hp
804 network
3fe142e2 805 nonfree
4a24ab64 806 postproc
2b4c3615 807 powerpc_perf
68602540 808 rdft
2e35e684 809 shared
bd2216e4 810 small
2e35e684 811 static
a9ddb5b1 812 swscale_alpha
56a059ac 813 x11grab
c88f5d72 814 zlib
4a0d6686 815"
c88f5d72 816
8eee7025
DB
817THREADS_LIST='
818 beosthreads
d22e8442 819 os2threads
8eee7025
DB
820 pthreads
821 w32threads
822'
823
3f5b56e5
MR
824ARCH_LIST='
825 alpha
a2fc0f6a 826 arm
3f5b56e5
MR
827 bfin
828 ia64
829 m68k
830 mips
831 parisc
79cb09b2 832 ppc
3f5b56e5
MR
833 s390
834 sh4
835 sparc
836 sparc64
837 x86
838 x86_32
839 x86_64
840'
841
842ARCH_EXT_LIST='
1ac9331a 843 altivec
3bf96eec 844 amd3dnow
a1ef9f08 845 amd3dnowext
1ac9331a 846 armv5te
edab3048 847 armv6
ab5cb084 848 armv6t2
f55b299a 849 armvfp
3f5b56e5
MR
850 iwmmxt
851 mmi
852 mmx
d7f0920b 853 mmx2
6b18d278 854 neon
799fde37 855 ppc4xx
1bb04d5a 856 sse
9eeed841 857 ssse3
bd9d34a0 858 vis
3f5b56e5
MR
859'
860
861HAVE_LIST="
862 $ARCH_EXT_LIST
863 $THREADS_LIST
35fd8122 864 alsa_asoundlib_h
3f5b56e5 865 altivec_h
c9fdab0d 866 arpa_inet_h
6bd859d6 867 bswap
ecf97f22 868 closesocket
1ac9331a 869 cmov
e16e49ac 870 conio_h
c88f5d72 871 dcbzl
f8aa696f
DB
872 dev_bktr_ioctl_bt848_h
873 dev_bktr_ioctl_meteor_h
874 dev_ic_bt8xx_h
875 dev_video_meteor_ioctl_meteor_h
876 dev_video_bktr_ioctl_bt848_h
18b67ae5 877 dlfcn_h
c88f5d72 878 dlopen
bc574408 879 dos_paths
245626d0
DB
880 ebp_available
881 ebx_available
c2a29455 882 fast_64bit
7073e9fc 883 fast_cmov
7b829d2a 884 fast_unaligned
9d99cc5a 885 fork
da9e86f8 886 gethrtime
4e68cb8a 887 GetProcessTimes
66be5b45 888 getrusage
2e1913b1 889 inet_aton
61d251db 890 inline_asm
0b4a1821
AS
891 libdc1394_1
892 libdc1394_2
a33cab3a
MK
893 llrint
894 lrint
c88f5d72 895 lrintf
f8aa696f
DB
896 machine_ioctl_bt848_h
897 machine_ioctl_meteor_h
c88f5d72
MR
898 malloc_h
899 memalign
6ffa87d3 900 mkstemp
b4e806b2 901 pld
1f91cdce 902 posix_memalign
9cafbd6c 903 ppc64
a33cab3a
MK
904 round
905 roundf
c88f5d72
MR
906 sdl
907 sdl_video_size
b507ebd1 908 setmode
72be9e73 909 socklen_t
deb29777 910 soundcard_h
f8cda19e 911 poll_h
b58412f1 912 sys_mman_h
b091aa44 913 sys_resource_h
81644c2e 914 sys_select_h
deb29777 915 sys_soundcard_h
1b6e8b73 916 sys_videoio_h
d3a4b4e0 917 ten_operands
e16e49ac 918 termios_h
b265431e 919 threads
7b04b8a0 920 truncf
7c5bfe7a 921 VirtualAlloc
6ff3f3e7 922 winsock2_h
304d586d 923 yasm
0cb78cef 924"
44161118 925
b6bb00b0
MR
926# options emitted with CONFIG_ prefix but not available on command line
927CONFIG_EXTRA="
b6bb00b0
MR
928"
929
520cc7f1 930CMDLINE_SELECT="
3f5b56e5 931 $ARCH_EXT_LIST
520cc7f1 932 $CONFIG_LIST
8eee7025 933 $THREADS_LIST
db6107b6 934 cross_compile
520cc7f1
MR
935 debug
936 extra_warnings
8c6afa4d 937 logging
d2bbb2f7 938 optimizations
87a0fb62 939 stripping
7595a5e4 940 yasm
520cc7f1 941"
426be5dc
DB
942
943PATHS_LIST='
d156bede 944 bindir
14a8acf1 945 datadir
26759c44
MR
946 incdir
947 libdir
26759c44
MR
948 mandir
949 prefix
950 shlibdir
426be5dc
DB
951'
952
953CMDLINE_SET="
954 $PATHS_LIST
955 arch
313c46a6 956 as
426be5dc
DB
957 build_suffix
958 cc
959 cpu
960 cross_prefix
ac63af34 961 extra_version
9da6609f
MR
962 host_cc
963 host_cflags
964 host_ldflags
965 host_libs
82bb3329 966 host_os
426be5dc 967 logfile
89641463 968 nm
26759c44 969 source_path
c5200f17
MR
970 sysinclude
971 sysroot
a7ada2ba 972 target_exec
26759c44 973 target_os
a7ada2ba 974 target_path
426be5dc 975"
520cc7f1 976
912f3148
DB
977# code dependency declarations
978
9eeed841 979# architecture extensions
79cb09b2 980altivec_deps="ppc"
3bf96eec 981amd3dnow_deps="mmx"
a1ef9f08 982amd3dnowext_deps="amd3dnow"
a2fc0f6a
MR
983armv5te_deps="arm"
984armv6_deps="arm"
ab5cb084 985armv6t2_deps="arm"
a2fc0f6a
MR
986armvfp_deps="arm"
987iwmmxt_deps="arm"
e241ba14 988mmi_deps="mips"
9eeed841 989mmx_deps="x86"
75aa95a6 990mmx2_deps="mmx"
a2fc0f6a 991neon_deps="arm"
799fde37 992ppc4xx_deps="ppc"
75aa95a6
DB
993sse_deps="mmx"
994ssse3_deps="sse"
bd9d34a0 995vis_deps="sparc"
9eeed841 996
5666fd73 997# decoders / encoders / hardware accelerators
47a158cb 998aac_decoder_select="fft mdct"
d8d12c15 999ac3_decoder_deps="gpl"
47a158cb
MR
1000ac3_decoder_select="fft mdct"
1001atrac3_decoder_select="fft mdct"
4f034993 1002cavs_decoder_select="golomb"
47a158cb 1003cook_decoder_select="fft mdct"
2eef7c62 1004cscd_decoder_suggest="zlib"
47a158cb 1005dca_decoder_select="fft mdct"
e8ed9b7a 1006dnxhd_encoder_select="aandct"
2eef7c62 1007dxa_decoder_select="zlib"
406ab5cc 1008eac3_decoder_deps="gpl"
47a158cb 1009eac3_decoder_select="fft mdct"
e8ed9b7a 1010eatgq_decoder_select="aandct"
d52b39c7 1011eatqi_decoder_select="aandct"
4f034993
MR
1012ffv1_decoder_select="golomb"
1013flac_decoder_select="golomb"
1014flac_encoder_select="golomb"
2eef7c62
AJ
1015flashsv_decoder_select="zlib"
1016flashsv_encoder_select="zlib"
e8ed9b7a
DB
1017flv_encoder_select="aandct"
1018h261_encoder_select="aandct"
1019h263_encoder_select="aandct"
1020h263p_encoder_select="aandct"
4f034993 1021h264_decoder_select="golomb"
711dae77 1022h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
47a158cb 1023imc_decoder_select="fft mdct"
4f034993
MR
1024jpegls_decoder_select="golomb"
1025jpegls_encoder_select="golomb"
e8ed9b7a 1026ljpeg_encoder_select="aandct"
4f034993 1027loco_decoder_select="golomb"
e8ed9b7a
DB
1028mjpeg_encoder_select="aandct"
1029mpeg1video_encoder_select="aandct"
1030mpeg2video_encoder_select="aandct"
1031mpeg4_encoder_select="aandct"
711dae77
DB
1032mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1033mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
8f6f050a 1034mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
e8ed9b7a
DB
1035msmpeg4v1_encoder_select="aandct"
1036msmpeg4v2_encoder_select="aandct"
1037msmpeg4v3_encoder_select="aandct"
47a158cb
MR
1038nellymoser_decoder_select="fft mdct"
1039nellymoser_encoder_select="fft mdct"
2eef7c62
AJ
1040png_decoder_select="zlib"
1041png_encoder_select="zlib"
63cae55d 1042qdm2_decoder_select="fft mdct rdft"
e8ed9b7a
DB
1043rv10_encoder_select="aandct"
1044rv20_encoder_select="aandct"
d52b39c7
AJ
1045rv30_decoder_select="golomb"
1046rv40_decoder_select="golomb"
4f034993
MR
1047shorten_decoder_select="golomb"
1048sonic_decoder_select="golomb"
1049sonic_encoder_select="golomb"
1050sonic_ls_encoder_select="golomb"
1051svq3_decoder_select="golomb"
bee2eac5 1052svq3_decoder_suggest="zlib"
2eef7c62
AJ
1053tiff_decoder_suggest="zlib"
1054tiff_encoder_suggest="zlib"
1055tscc_decoder_select="zlib"
711dae77 1056vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
47a158cb
MR
1057vorbis_decoder_select="fft mdct"
1058vorbis_encoder_select="fft mdct"
1059wmav1_decoder_select="fft mdct"
1060wmav1_encoder_select="fft mdct"
1061wmav2_decoder_select="fft mdct"
1062wmav2_encoder_select="fft mdct"
e8ed9b7a
DB
1063wmv1_encoder_select="aandct"
1064wmv2_encoder_select="aandct"
711dae77 1065wmv3_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
2eef7c62
AJ
1066zlib_decoder_select="zlib"
1067zlib_encoder_select="zlib"
1068zmbv_decoder_select="zlib"
1069zmbv_encoder_select="zlib"
30fd06be 1070
912f3148 1071# external libraries
f5a756ef
DB
1072libamr_nb_decoder_deps="libamr_nb"
1073libamr_nb_encoder_deps="libamr_nb"
1074libamr_wb_decoder_deps="libamr_wb"
1075libamr_wb_encoder_deps="libamr_wb"
1b71f045 1076libdirac_decoder_deps="libdirac !libschroedinger"
690bfceb 1077libdirac_encoder_deps="libdirac"
c9171a83 1078libfaac_encoder_deps="libfaac"
69ddbd1d 1079libfaad_decoder_deps="libfaad"
4ec45764 1080libfaadbin_decoder_extralibs='$ldl'
299c77d5
MR
1081libgsm_decoder_deps="libgsm"
1082libgsm_encoder_deps="libgsm"
8ffed8d8
MR
1083libgsm_ms_decoder_deps="libgsm"
1084libgsm_ms_encoder_deps="libgsm"
1cc60c47 1085libmp3lame_encoder_deps="libmp3lame"
9a77d59a 1086libopenjpeg_decoder_deps="libopenjpeg"
f7cd9eed
AS
1087libschroedinger_decoder_deps="libschroedinger"
1088libschroedinger_encoder_deps="libschroedinger"
ae14f311 1089libspeex_decoder_deps="libspeex"
150d2772 1090libtheora_encoder_deps="libtheora"
b0caf888 1091libvorbis_encoder_deps="libvorbis"
1cc60c47
DB
1092libx264_encoder_deps="libx264"
1093libxvid_encoder_deps="libxvid"
30fd06be 1094
912f3148 1095# demuxers / muxers
03a76ba9 1096ac3_demuxer_deps="ac3_parser"
35fd8122
NG
1097alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1098alsa_demuxer_extralibs="-lasound"
1099alsa_muxer_deps="alsa_asoundlib_h"
1100alsa_muxer_extralibs="-lasound"
50383e88 1101audio_beos_demuxer_deps="audio_beos"
4ec45764 1102audio_beos_demuxer_extralibs="-lmedia -lbe"
50383e88 1103audio_beos_muxer_deps="audio_beos"
4ec45764 1104audio_beos_muxer_extralibs="-lmedia -lbe"
53b73365 1105avisynth_demuxer_deps="avisynth"
73483024 1106bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
17ac9f1c 1107dirac_demuxer_deps="dirac_parser"
fe9bb347 1108dv1394_demuxer_deps="dv1394 dv_demuxer"
f7b8bffe 1109libdc1394_demuxer_deps="libdc1394"
d7c59247
DB
1110libnut_demuxer_deps="libnut"
1111libnut_muxer_deps="libnut"
2eef7c62
AJ
1112matroska_demuxer_suggest="zlib bzlib"
1113mov_demuxer_suggest="zlib"
4bd8e17c 1114mp3_demuxer_deps="mpegaudio_parser"
c7682de0
RP
1115oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1116oss_muxer_deps_any="soundcard_h sys_soundcard_h"
30fd06be 1117redir_demuxer_deps="network"
8eb793c4 1118rtp_muxer_deps="network rtp_protocol"
95c21842
LA
1119rtsp_demuxer_deps="sdp_demuxer"
1120sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
06e31011 1121v4l_demuxer_deps="linux_videodev_h"
1b6e8b73 1122v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
c2345207
RP
1123vfwcap_demuxer_deps="capCreateCaptureWindow"
1124vfwcap_demuxer_extralibs="-lvfw32"
06eab4ba 1125x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
4ec45764 1126x11_grab_device_demuxer_extralibs="-lX11 -lXext"
30fd06be 1127
912f3148 1128# protocols
3fff6382 1129gopher_protocol_deps="network"
c08fb000
AB
1130http_protocol_deps="network"
1131rtp_protocol_deps="udp_protocol"
1132tcp_protocol_deps="network"
1133udp_protocol_deps="network"
1134
f7679c54 1135# filters
81124ba0 1136movie_filter_deps="avfilter_lavf"
f7679c54 1137
912f3148 1138# programs
fa859b4d 1139ffplay_deps="sdl"
6ad42348 1140ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
4ec45764 1141ffserver_extralibs='$ldl'
a2830dca 1142
912f3148 1143
de6d9b64 1144# default parameters
8a608357 1145
2ba042a7 1146logfile="config.err"
8a608357
MR
1147
1148# installation paths
c9d19248
MR
1149prefix_default="/usr/local"
1150bindir_default='${prefix}/bin'
14a8acf1 1151datadir_default='${prefix}/share/ffmpeg'
c9d19248
MR
1152incdir_default='${prefix}/include'
1153libdir_default='${prefix}/lib'
1154mandir_default='${prefix}/share/man'
1155shlibdir_default="$libdir_default"
8a608357
MR
1156
1157# toolchain
11e6d03a 1158ar="ar"
13c7df3d 1159cc_default="gcc"
9da6609f 1160host_cc_default="gcc"
11e6d03a 1161ln_s="ln -sf"
89641463 1162nm_default="nm"
11e6d03a 1163objformat="elf"
be7109c1 1164ranlib="ranlib"
0f3cb305 1165strip="strip"
11e6d03a 1166yasmexe="yasm"
8a608357
MR
1167
1168# machine
5e622c40 1169arch=$(uname -m)
38d0a8aa 1170cpu="generic"
8a608357 1171
8a608357 1172# OS
4f854758 1173target_os=$(tolower $(uname -s))
82bb3329 1174host_os=$target_os
8a608357 1175
8a608357 1176# configurable options
497237c7 1177enable debug
aa033b1e 1178enable fastdiv
497237c7
RP
1179enable ffmpeg
1180enable ffplay
1181enable ffserver
1182enable ipv6
497237c7
RP
1183enable mpegaudio_hp
1184enable network
8400d6b8 1185enable optimizations
497237c7 1186enable protocols
530dc538 1187enable static
87a0fb62 1188enable stripping
a9ddb5b1 1189enable swscale_alpha
8a608357 1190
8a608357 1191# build settings
11a9d3e8 1192add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
9987769a 1193SHFLAGS='-shared -Wl,-soname,$$(@F)'
c536cb09 1194FFSERVERLDFLAGS=-Wl,-E
f3ec2d46
SG
1195LIBPREF="lib"
1196LIBSUF=".a"
c5f14466
RP
1197FULLNAME='$(NAME)$(BUILDSUF)'
1198LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
f3ec2d46
SG
1199SLIBPREF="lib"
1200SLIBSUF=".so"
c5f14466 1201SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
b29bddab
DB
1202SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1203SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
24743a76 1204LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
ef0bc4c9 1205
9da6609f
MR
1206host_cflags='-O3 -g -Wall'
1207host_libs='-lm'
1208
a7ada2ba
MR
1209target_path='.'
1210
0d7dca36
DB
1211# gcc stupidly only outputs the basename of targets with -MM, but we need the
1212# full relative path for objects in subdirectories for non-recursive Make.
333d5374 1213DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
315c741d 1214
c597172e 1215# find source path
5e622c40 1216source_path="$(dirname "$0")"
497237c7 1217enable source_path_used
c597172e 1218if test -z "$source_path" -o "$source_path" = "." ; then
5e622c40 1219 source_path="$(pwd)"
497237c7 1220 disable source_path_used
c597172e 1221else
5e622c40 1222 source_path="$(cd "$source_path"; pwd)"
c597172e 1223 echo "$source_path" | grep -q '[[:blank:]]' &&
7483e694 1224 die "Out of tree builds are impossible with whitespace in source path."
337cee68
MC
1225 test -e "$source_path/config.h" &&
1226 die "Out of tree builds are impossible with config.h in source dir."
c597172e
MR
1227fi
1228
13cbe2c0
MR
1229for v in "$@"; do
1230 r="${v#*=}"
1231 l="${v%$r}"
1232 test "$r" = "${r#* }" || r="'$r'"
1233 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1234done
c597172e 1235
73ef8980
MR
1236find_things(){
1237 thing=$1
1238 pattern=$2
1239 file=$source_path/$3
932ccf39 1240 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
73ef8980
MR
1241}
1242
1243ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1244DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
5666fd73 1245HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
73ef8980
MR
1246PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1247BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1248MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1249DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1250OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1251INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1252PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
81124ba0 1253FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
c597172e 1254
7483e694
DB
1255enable $ARCH_EXT_LIST \
1256 $DECODER_LIST \
1257 $ENCODER_LIST \
5666fd73 1258 $HWACCEL_LIST \
7483e694
DB
1259 $PARSER_LIST \
1260 $BSF_LIST \
1261 $DEMUXER_LIST \
1262 $MUXER_LIST \
f7679c54 1263 $FILTER_LIST \
7483e694
DB
1264 $PROTOCOL_LIST \
1265 $INDEV_LIST \
1266 $OUTDEV_LIST \
c597172e
MR
1267
1268die_unknown(){
1269 echo "Unknown option \"$1\"."
1270 echo "See $0 --help for available options."
1271 exit 1
1272}
1273
794f8e97 1274show_list() {
bf0c4afa
RP
1275 suffix=_$1
1276 shift
1277 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
794f8e97
PI
1278 exit 0
1279}
1280
c597172e 1281for opt do
7483e694
DB
1282 optval="${opt#*=}"
1283 case "$opt" in
0f010b2f 1284 --extra-cflags=*) add_cflags $optval
7483e694 1285 ;;
0f010b2f 1286 --extra-ldflags=*) add_ldflags $optval
7483e694 1287 ;;
0f010b2f 1288 --extra-libs=*) add_extralibs $optval
7483e694 1289 ;;
8fb1cb58 1290 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
9aa8ed9d 1291 ;;
40bcf4c7
BL
1292 --enable-debug=*) debuglevel="$optval"
1293 ;;
7483e694 1294 --enable-*=*|--disable-*=*)
5e622c40 1295 eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
7483e694 1296 case "$thing" in
5666fd73 1297 encoder|decoder|hwaccel|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
7483e694
DB
1298 *) die_unknown "$opt" ;;
1299 esac
1300 ;;
1301 --enable-?*|--disable-?*)
5e622c40 1302 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
e3773a55
MR
1303 if is_in $option $COMPONENT_LIST; then
1304 eval $action \$$(toupper ${option%s})_LIST
1305 elif is_in $option $CMDLINE_SELECT; then
1306 $action $option
1307 else
1308 die_unknown $opt
1309 fi
7483e694
DB
1310 ;;
1311 --list-*)
1312 NAME="${opt#--list-}"
1313 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1314 NAME=${NAME%s}
1315 eval show_list $NAME \$$(toupper $NAME)_LIST
1316 ;;
1317 --help|-h) show_help
1318 ;;
1319 *)
884a36a7 1320 optname="${opt%%=*}"
26759c44
MR
1321 optname="${optname#--}"
1322 optname=$(echo "$optname" | sed 's/-/_/g')
1323 is_in $optname $CMDLINE_SET || die_unknown $opt
1324 eval $optname='$optval'
7483e694
DB
1325 ;;
1326 esac
c597172e
MR
1327done
1328
bcea99bb
MR
1329disabled logging && logfile=/dev/null
1330
13cbe2c0 1331echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
bcea99bb
MR
1332set >> $logfile
1333
9da6609f
MR
1334test -n "$cross_prefix" && enable cross_compile
1335
adb2b908 1336ar="${cross_prefix}${ar}"
11e6d03a 1337cc_default="${cross_prefix}${cc_default}"
20e0ed95 1338nm_default="${cross_prefix}${nm_default}"
adb2b908
RP
1339ranlib="${cross_prefix}${ranlib}"
1340strip="${cross_prefix}${strip}"
1341
c5200f17
MR
1342sysinclude_default="${sysroot}/usr/include"
1343
75800dce
MR
1344set_default cc nm sysinclude
1345as_default=$cc
9da6609f
MR
1346enabled cross_compile || host_cc_default=$cc
1347set_default host_cc
13c7df3d 1348
82bb3329
MR
1349exesuf() {
1350 case $1 in
1351 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1352 esac
1353}
1354
1355EXESUF=$(exesuf $target_os)
1356HOSTEXESUF=$(exesuf $host_os)
c0f5b7f1 1357
e4e69e0b 1358# set temporary file name
a49d42c2 1359: ${TMPDIR:=$TEMPDIR}
c51fafa1 1360: ${TMPDIR:=$TMP}
a49d42c2 1361: ${TMPDIR:=/tmp}
e4e69e0b 1362
54460a83
MR
1363if ! check_cmd type mktemp; then
1364 # simple replacement for missing mktemp
1365 # NOT SAFE FOR GENERAL USE
1366 mktemp(){
1367 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1368 }
1369fi
1370
1371tmpfile(){
1372 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1373 (set -C; exec > $tmp) 2>/dev/null ||
1374 die "Unable to create temoporary file in $TMPDIR."
1375 append TMPFILES $tmp
1376 eval $1=$tmp
1377}
1378
1379trap 'rm -f -- $TMPFILES' EXIT
1380trap exit HUP INT TERM
1381
1382tmpfile TMPC .c
1383tmpfile TMPE $EXESUF
1384tmpfile TMPH .h
1385tmpfile TMPO .o
1386tmpfile TMPS .S
1387tmpfile TMPSH .sh
1388
1389unset -f mktemp
e4e69e0b 1390
993f2d0f
MR
1391# make sure we can execute files in $TMPDIR
1392cat > $TMPSH 2>> $logfile <<EOF
1393#! /bin/sh
1394EOF
1395chmod +x $TMPSH >> $logfile 2>&1
1396if ! $TMPSH >> $logfile 2>&1; then
1397 cat <<EOF
1398Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1399variable to another directory and make sure that it is not mounted noexec.
1400EOF
1401 die "Sanity test failed."
1402fi
993f2d0f 1403
3a636b6f 1404if $cc --version 2>/dev/null | grep -qi gcc; then
629687f6
MR
1405 cc_type=gcc
1406elif $cc --version 2>/dev/null | grep -q Intel; then
1407 cc_type=icc
1408elif $cc -v 2>&1 | grep -q xlc; then
1409 cc_type=xlc
df442a8d
MR
1410elif $cc -V 2>/dev/null | grep -q Compaq; then
1411 cc_type=ccc
1412 DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
03754fcd 1413 debuglevel=3
df442a8d 1414 add_ldflags -Wl,-z,now # calls to libots crash without this
03e37762
MR
1415elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1416 test -d "$sysroot" || die "No valid sysroot specified."
1417 cc_type=armcc
1418 armcc_conf="$PWD/armcc.conf"
1419 $cc --arm_linux_configure \
1420 --arm_linux_config_file="$armcc_conf" \
1421 --configure_sysroot="$sysroot" \
1422 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1423 die "Error creating armcc configuration file."
1424 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
75800dce 1425 as_default="${cross_prefix}gcc"
629687f6
MR
1426fi
1427
1428test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1429
75800dce
MR
1430set_default as
1431
154d432c
MR
1432if test -n "$sysroot"; then
1433 case "$cc_type" in
1434 gcc)
1435 add_cflags --sysroot="$sysroot"
1436 add_ldflags --sysroot="$sysroot"
1437 ;;
1438 esac
1439fi
1440
993f2d0f
MR
1441# compiler sanity check
1442check_exec <<EOF
1443int main(void){ return 0; }
1444EOF
1445if test "$?" != 0; then
1446 echo "$cc is unable to create an executable file."
1447 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1448 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1449 echo "Only do this if you know what cross compiling means."
1450 fi
1451 die "C compiler test failed."
1452fi
1453
e9b9a2f8 1454check_cflags -std=c99
9d821fc2
DB
1455check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1456#include <stdlib.h>
1457EOF
1458check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1459#include <stdlib.h>
1460EOF
e9b9a2f8 1461
b24dbcbd 1462case "$arch" in
b24dbcbd
RP
1463 alpha)
1464 arch="alpha"
1465 enable fast_64bit
c0a02a3e 1466 check_cflags -mieee
b24dbcbd 1467 ;;
cfdb6148
MR
1468 arm|armv[4567]*l)
1469 arch="arm"
b24dbcbd 1470 ;;
f4870943
MR
1471 avr32)
1472 ;;
cfdb6148
MR
1473 bfin)
1474 arch="bfin"
1475 ;;
1476 ia64)
1477 arch="ia64"
b24dbcbd 1478 enable fast_64bit
cfdb6148
MR
1479 ;;
1480 m68k)
1481 arch="m68k"
b24dbcbd 1482 ;;
de3a1240 1483 mips|mipsel|IP*)
b24dbcbd
RP
1484 arch="mips"
1485 ;;
de3a1240
DB
1486 mips64)
1487 arch="mips"
1488 enable fast_64bit
1489 ;;
61597a98 1490 parisc|hppa)
b24dbcbd
RP
1491 arch="parisc"
1492 ;;
61597a98 1493 parisc64|hppa64)
b24dbcbd
RP
1494 arch="parisc"
1495 enable fast_64bit
1496 ;;
cfdb6148
MR
1497 "Power Macintosh"|ppc|powerpc)
1498 arch="ppc"
1499 enable fast_unaligned
1500 ;;
1501 ppc64)
1502 arch="ppc"
1503 enable fast_64bit
1504 enable fast_unaligned
1505 ;;
b24dbcbd
RP
1506 s390|s390x)
1507 arch="s390"
1508 ;;
cfdb6148
MR
1509 sh4|sh)
1510 arch="sh4"
b24dbcbd 1511 ;;
cfdb6148
MR
1512 sparc)
1513 arch="sparc"
1514 ;;
1515 sun4u|sparc64)
1516 arch="sparc"
1517 subarch="sparc64"
b24dbcbd
RP
1518 enable fast_64bit
1519 ;;
cfdb6148
MR
1520 i386|i486|i586|i686|i86pc|BePC)
1521 arch="x86"
1522 subarch="x86_32"
1523 enable fast_unaligned
1524 ;;
1525 x86_64|amd64)
1526 arch="x86"
1527 subarch="x86_32"
1528 enable cmov
1529 enable fast_cmov
1530 enable fast_unaligned
1531 check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1532 int test[sizeof(char*) - 7];
1533EOF
b24dbcbd
RP
1534 ;;
1535 *)
1536 arch="unknown"
1537 ;;
1538esac
1539
62045d48 1540enable $arch $subarch
b24dbcbd 1541
7483e694 1542# OS specific
4f854758 1543case $target_os in
7483e694 1544 beos|haiku|zeta)
c9d19248 1545 prefix_default="$HOME/config"
7483e694 1546 # helps building libavcodec
0f010b2f 1547 add_cflags -DPIC -fomit-frame-pointer
7483e694 1548 # 3 gcc releases known for BeOS, each with ugly bugs
5e622c40 1549 gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
7483e694
DB
1550 case "$gcc_version" in
1551 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1552 disable mmx
1553 ;;
1554 *20010315*) echo "BeBits gcc"
0f010b2f 1555 add_cflags -fno-expensive-optimizations
7483e694
DB
1556 ;;
1557 esac
7483e694
DB
1558 SHFLAGS=-nostart
1559 # enable BeOS things
1560 enable audio_beos
1561 # no need for libm, but the inet stuff
1562 # Check for BONE
1563 # XXX: actually should check for NOT net_server
78fe7631 1564 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
7483e694
DB
1565 network_extralibs="-lbind -lsocket"
1566 else
1567 enable beos_netserver
1568 network_extralibs="-lnet"
1569 fi ;;
1570 sunos)
1571 FFSERVERLDFLAGS=""
9987769a 1572 SHFLAGS='-shared -Wl,-h,$$(@F)'
7483e694 1573 network_extralibs="-lsocket -lnsl"
e193c74e 1574 add_cflags -D__EXTENSIONS__
7483e694
DB
1575 ;;
1576 netbsd)
1577 oss_demuxer_extralibs="-lossaudio"
1578 oss_muxer_extralibs="-lossaudio"
1579 ;;
1580 openbsd)
1581 disable need_memalign
1582 LIBOBJFLAGS='$(PIC)'
7483e694 1583 SHFLAGS='-shared'
7483e694
DB
1584 oss_demuxer_extralibs="-lossaudio"
1585 oss_muxer_extralibs="-lossaudio"
1586 ;;
1587 freebsd)
1588 disable need_memalign
1589 ;;
1590 bsd/os)
1591 osextralibs="-lpoll -lgnugetopt"
1592 strip="strip -d"
1593 ;;
1594 darwin)
1595 disable need_memalign
0138c54e 1596 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
7483e694
DB
1597 strip="strip -x"
1598 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1599 SLIBSUF=".dylib"
1600 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1601 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1602 FFSERVERLDFLAGS=-Wl,-bind_at_load
304d586d 1603 objformat="macho"
1b0f6fb8 1604 enabled x86_64 && objformat="macho64"
7483e694
DB
1605 ;;
1606 mingw32*)
4f854758 1607 target_os=mingw32
dcc01c06 1608 LIBTARGET=i386
1fc9fb8a 1609 if enabled x86_64; then
dcc01c06
RP
1610 disable need_memalign
1611 LIBTARGET=x64
1612 fi
fbd971a4 1613 shlibdir_default="$bindir_default"
7483e694
DB
1614 disable ffserver
1615 SLIBPREF=""
1616 SLIBSUF=".dll"
7483e694
DB
1617 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1618 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
06abe7f5 1619 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
4c25d159
RP
1620 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1621 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
7483e694 1622 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
4b51fb1c 1623 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
304d586d 1624 objformat="win32"
bc574408 1625 enable dos_paths
b1549d61 1626 if ! enabled x86_64; then
f7ad5aa2
RP
1627 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1628 die "ERROR: MinGW runtime version must be >= 3.15."
1629 enabled_any avisynth vfwcap_demuxer &&
1630 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1631 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1632 fi
7483e694
DB
1633 ;;
1634 cygwin*)
4f854758 1635 target_os=cygwin
fbd971a4 1636 shlibdir_default="$bindir_default"
7483e694
DB
1637 SLIBPREF="cyg"
1638 SLIBSUF=".dll"
1639 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1640 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1641 SHFLAGS='-shared -Wl,--enable-auto-image-base'
304d586d 1642 objformat="win32"
bc574408 1643 enable dos_paths
7483e694 1644 ;;
4f365f37 1645 *-dos|freedos|opendos)
fdf11906 1646 disable ffplay ffserver
4f365f37
MK
1647 disable $INDEV_LIST $OUTDEV_LIST
1648 network_extralibs="-lsocket"
ff1c015d 1649 objformat="coff"
bc574408 1650 enable dos_paths
4f365f37 1651 ;;
7483e694 1652 linux)
7483e694
DB
1653 enable dv1394
1654 ;;
1655 irix*)
4f854758 1656 target_os=irix
7483e694
DB
1657 ranlib="echo ignoring ranlib"
1658 ;;
d22e8442 1659 os/2*)
d22e8442
DY
1660 strip="lxlite"
1661 ln_s="cp -f"
d22e8442 1662 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
71c61f62 1663 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
d22e8442 1664 FFSERVERLDFLAGS=""
287d3b13 1665 LIBSUF="_s.a"
d22e8442
DY
1666 SLIBPREF=""
1667 SLIBSUF=".dll"
1668 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1669 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
71c61f62
MR
1670 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1671 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1672 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1673 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1674 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1675 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1676 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1677 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1678 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
d22e8442 1679 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
bc574408 1680 enable dos_paths
d22e8442
DY
1681 ;;
1682
7483e694 1683 *)
4f924f9a 1684 die "Unknown OS '$target_os'."
7483e694
DB
1685 ;;
1686esac
1687
c9d19248
MR
1688set_default $PATHS_LIST
1689
c597172e 1690add_extralibs $osextralibs
de6d9b64 1691
28d8e661
DB
1692# Combine FFLDFLAGS and the LDFLAGS environment variable.
1693LDFLAGS="$FFLDFLAGS $LDFLAGS"
e89b8b0a 1694
320d060a 1695# we need to build at least one lib type
93b3c083 1696if ! enabled_any static shared; then
320d060a
DB
1697 cat <<EOF
1698At least one library type must be built.
1699Specify --enable-static to build the static libraries or --enable-shared to
1700build the shared libraries as well. To only build the shared libraries specify
1701--disable-static in addition to --enable-shared.
1702EOF
1703 exit 1;
1704fi
1705
abc4e572 1706disabled static && LIBNAME=""
2a320695 1707
a2234ceb
RP
1708if enabled_any libfaad libfaadbin ; then
1709 if check_header faad.h; then
295b8c70 1710 check_cc <<EOF
a2234ceb
RP
1711#include <faad.h>
1712#ifndef FAAD2_VERSION
1713ok faad1
1714#endif
db817cf3 1715int main(void) { return 0; }
a2234ceb
RP
1716EOF
1717 test $? = 0 && enable libfaad2
1718 else
ff3dac65 1719 die "FAAD test failed."
a2234ceb
RP
1720 fi
1721fi
1722
1723
93b3c083 1724if ! enabled gpl; then
54118497
RP
1725 die_gpl_disabled(){
1726 name=$1
1727 shift
1728 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1729 }
4a24ab64 1730 die_gpl_disabled "The Postprocessing code" postproc
1cc60c47
DB
1731 die_gpl_disabled "libx264" libx264
1732 die_gpl_disabled "libxvidcore" libxvid
54118497
RP
1733 die_gpl_disabled "FAAD2" libfaad2
1734 die_gpl_disabled "The X11 grabber" x11grab
ebb810d9 1735fi
b2e3c528 1736
3fe142e2
DB
1737if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1738 die "libamr is nonfree and --enable-nonfree is not specified."
1739fi
1740
9eeed841 1741check_deps $ARCH_EXT_LIST
0f3cb305 1742
5d323602
MR
1743test -z "$need_memalign" && need_memalign="$mmx"
1744
cf9d24ad 1745#Darwin CC versions
4f854758 1746if test $target_os = darwin; then
629687f6 1747 if enabled xlc; then
0f010b2f 1748 add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
cf9d24ad 1749 else
0f010b2f
DB
1750 add_cflags -pipe
1751 check_cflags -force_cpusubtype_ALL
1752 check_cflags -Wno-sign-compare
f946a9a4 1753 enabled shared || check_cflags -mdynamic-no-pic
cf9d24ad 1754 fi
2a1a6b64
MN
1755fi
1756
40617a6d 1757disabled optimizations || check_cflags -fomit-frame-pointer
cf9d24ad 1758
a4adb608 1759# Add processor-specific flags
38d0a8aa 1760if test $cpu != "generic"; then
bc8ec47b
MR
1761 warn_altivec(){
1762 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1658bc4f 1763 }
38d0a8aa 1764 case $cpu in
bb270c08 1765 601|ppc601|PowerPC601)
0f010b2f 1766 add_cflags -mcpu=601
bc8ec47b 1767 warn_altivec enabled PPC601
bb270c08
DB
1768 ;;
1769 603*|ppc603*|PowerPC603*)
0f010b2f 1770 add_cflags -mcpu=603
bc8ec47b 1771 warn_altivec enabled PPC603
bb270c08
DB
1772 ;;
1773 604*|ppc604*|PowerPC604*)
0f010b2f 1774 add_cflags -mcpu=604
bc8ec47b 1775 warn_altivec enabled PPC604
bb270c08
DB
1776 ;;
1777 G3|g3|75*|ppc75*|PowerPC75*)
0f010b2f 1778 add_cflags -mcpu=750 -mpowerpc-gfxopt
bc8ec47b 1779 warn_altivec enabled PPC75x
bb270c08
DB
1780 ;;
1781 G4|g4|745*|ppc745*|PowerPC745*)
0f010b2f 1782 add_cflags -mcpu=7450 -mpowerpc-gfxopt
bc8ec47b 1783 warn_altivec disabled PPC745x
bb270c08
DB
1784 ;;
1785 74*|ppc74*|PowerPC74*)
0f010b2f 1786 add_cflags -mcpu=7400 -mpowerpc-gfxopt
bc8ec47b 1787 warn_altivec disabled PPC74xx
bb270c08
DB
1788 ;;
1789 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
0f010b2f 1790 add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
bc8ec47b 1791 warn_altivec disabled PPC970
9cafbd6c 1792 enable ppc64
bb270c08 1793 ;;
e07e357d 1794 Cell|CELL|cell)
0f010b2f 1795 add_cflags -mcpu=cell
e07e357d 1796 warn_altivec disabled Cell
9cafbd6c 1797 enable ppc64
e07e357d 1798 ;;
e7768fc5
GP
1799 # targets that do NOT support conditional mov (cmov)
1800 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
0f010b2f 1801 add_cflags -march=$cpu
497237c7 1802 disable cmov
e7768fc5
GP
1803 ;;
1804 # targets that do support conditional mov (cmov)
416519dd 1805 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
0f010b2f 1806 add_cflags -march=$cpu
497237c7
RP
1807 enable cmov
1808 enable fast_cmov
94e4c3a3
GP
1809 ;;
1810 # targets that do support conditional mov but on which it's slow
800a5a19 1811 pentium4|pentium4m|prescott|nocona)
0f010b2f 1812 add_cflags -march=$cpu
497237c7
RP
1813 enable cmov
1814 disable fast_cmov
bb270c08 1815 ;;
d7b34d08 1816 sparc64)
0f010b2f 1817 add_cflags -mcpu=v9
d7b34d08 1818 ;;
f2e49553 1819 arm11*|cortex*)
0f010b2f 1820 add_cflags -mcpu=$cpu
f2e49553
MR
1821 enable fast_unaligned
1822 ;;
0223bd6f 1823 armv*)
0f010b2f 1824 add_cflags -march=$cpu
0223bd6f 1825 ;;
f2e49553 1826 arm*)
0f010b2f 1827 add_cflags -mcpu=$cpu
6b19786b 1828 ;;
1cd11856 1829 ev4|ev45|ev5|ev56|pca56|ev6|ev67)
df442a8d 1830 enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1cd11856 1831 ;;
bb270c08 1832 *)
7483e694 1833 echo "WARNING: Unknown CPU \"$cpu\", ignored."
bb270c08 1834 ;;
a4adb608
MN
1835 esac
1836fi
1837
b4d96ba2
MR
1838check_cc <<EOF || die "Symbol mangling check failed."
1839int ff_extern;
1840EOF
2f05d9c1 1841sym=$($nm -P -g $TMPO | grep ff_extern)
b4d96ba2
MR
1842extern_prefix=${sym%%ff_extern*}
1843
f65883c8
MR
1844check_cc <<EOF && enable inline_asm
1845void foo(void) { __asm__ volatile ("" ::); }
1846EOF
61d251db 1847
9eeed841 1848if enabled x86; then
44965991
PI
1849 # check whether EBP is available on x86
1850 # As 'i' is stored on the stack, this program will crash
1851 # if the base pointer is used to access it because the
1852 # base pointer is cleared in the inline assembly code.
7dfef245 1853 check_exec_crash <<EOF && enable ebp_available
44965991 1854 volatile int i=0;
be449fca 1855 __asm__ volatile (
44965991
PI
1856 "xorl %%ebp, %%ebp"
1857 ::: "%ebp");
1858 return i;
44965991
PI
1859EOF
1860
1861 # check wether EBX is available on x86
940f335a 1862 check_asm ebx_available '"":::"%ebx"'
8e380710 1863
d3a4b4e0
DB
1864 # check whether more than 10 operands are supported
1865 check_cc <<EOF && enable ten_operands
1866int main(void) {
1867 int x=0;
1868 __asm__ volatile(
1869 ""
1870 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1871 );
1872 return 0;
1873}
1874EOF
1875
d7f0920b 1876 # check whether binutils is new enough to compile SSSE3/MMX2
940f335a 1877 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
5fd89ca0 1878 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
6bd859d6
MR
1879
1880 check_asm bswap '"bswap %%eax" ::: "%eax"'
304d586d 1881
d52481b9 1882 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
304d586d
LM
1883 enabled x86_64 && append YASMFLAGS "-m amd64"
1884 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1885 case "$objformat" in
1886 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1b0f6fb8 1887 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
304d586d
LM
1888 *) append YASMFLAGS "-DPREFIX" ;;
1889 esac
7595a5e4 1890 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
44965991
PI
1891fi
1892
87ea51e0
LB
1893# check for assembler specific support
1894
5b6c2cbd 1895enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
799fde37 1896enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
87ea51e0 1897
57bd82d4
MR
1898# check for SIMD availability
1899
115329f1 1900# AltiVec flags: The FSF version of GCC differs from the Apple version
9eeed841 1901if enabled altivec; then
3ed1a2ee
DB
1902 check_cflags -maltivec -mabi=altivec &&
1903 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4477b9f4 1904 check_cflags -faltivec
b6e52719 1905
0182fee8 1906 # check if our compiler supports Motorola AltiVec C API
497237c7 1907 check_cc <<EOF || disable altivec
dcd479c0 1908$inc_altivec_h
a9a07762
MN
1909int main(void) {
1910 vector signed int v1, v2, v3;
1911 v1 = vec_add(v2,v3);
1912 return 0;
1913}
1914EOF
b006b26c
DB
1915
1916 # check if our compiler supports braces for vector declarations
80a61f08 1917 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
b006b26c 1918$inc_altivec_h
80a61f08 1919int main (void) { (vector int) {1}; return 0; }
b006b26c 1920EOF
a9a07762 1921fi
ab6c65f6 1922
b4e806b2 1923# We have to check if pld is a nop and disable it.
a2fc0f6a 1924enabled arm && check_asm pld '"pld [r0]"'
940f335a
MR
1925enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1926enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
ab5cb084 1927enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
f55b299a 1928enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
940f335a
MR
1929enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1930enabled mmi && check_asm mmi '"lq $2, 0($2)"'
6b18d278 1931enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
940f335a 1932enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
bd9d34a0 1933
0f010b2f 1934enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
8b03def6 1935
57bd82d4
MR
1936# ---
1937# big/little-endian test
9eebe687
MR
1938check_cc <<EOF || die "endian test failed"
1939unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
a3999908 1940EOF
d04d9e16 1941od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
487a54d7 1942
a3999908 1943# ---
3d204385
NK
1944# check availability of some header files
1945
a98bb16d
RP
1946if check_func dlopen; then
1947 ldl=
1948elif check_func dlopen -ldl; then
1949 ldl=-ldl
8bf5d58f
MN
1950fi
1951
75ecf149
DB
1952# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1953check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1954
7483e694
DB
1955check_func fork
1956check_func gethrtime
1957check_func getrusage
094c09bb 1958check_func inet_aton $network_extralibs
7483e694
DB
1959check_func memalign
1960check_func mkstemp
1f91cdce 1961check_func posix_memalign
b507ebd1 1962check_func_headers io.h setmode
2446d3d6 1963check_func_headers windows.h GetProcessTimes
7c5bfe7a 1964check_func_headers windows.h VirtualAlloc
6ffa87d3 1965
e16e49ac 1966check_header conio.h
a98bb16d
RP
1967check_header dlfcn.h
1968check_header malloc.h
bf6ce82d 1969check_header poll.h
b58412f1 1970check_header sys/mman.h
b091aa44 1971check_header sys/resource.h
bf6ce82d 1972check_header sys/select.h
a98bb16d 1973check_header termios.h
272081b0
CEH
1974check_header vdpau/vdpau.h
1975check_header vdpau/vdpau_x11.h
68178ca9 1976check_header X11/extensions/XvMClib.h
a98bb16d 1977
1f91cdce
RP
1978if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1979 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
a98bb16d 1980fi
e16e49ac 1981
a4fa192c 1982disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
632948bd 1983disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
57bd82d4
MR
1984
1985# check for some common methods of building with pthread support
1986# do this before the optional library checks as some of them require pthreads
1987if enabled pthreads; then
9e7fd101
MR
1988 if check_func pthread_create; then
1989 :
1990 elif check_func pthread_create -pthread; then
1991 add_cflags -pthread
afc9aee2 1992 add_extralibs -pthread
9e7fd101
MR
1993 elif check_func pthread_create -pthreads; then
1994 add_cflags -pthreads
afc9aee2 1995 add_extralibs -pthreads
8d94f606
GT
1996 elif check_func pthread_create -lpthreadGC2; then
1997 add_extralibs -lpthreadGC2
9e7fd101
MR
1998 elif ! check_lib pthread.h pthread_create -lpthread; then
1999 die "ERROR: can't find pthreads library"
2000 fi
57bd82d4
MR
2001fi
2002
8eee7025 2003for thread in $THREADS_LIST; do
e5f94c2b 2004 if enabled $thread; then
3ae3b721
RP
2005 test -n "$thread_type" &&
2006 die "ERROR: Only one thread type must be selected." ||
e5f94c2b 2007 thread_type="$thread"
e5f94c2b
RP
2008 fi
2009done
2010
fdf88598
MR
2011check_lib math.h sin -lm
2012
a33cab3a 2013# test for C99 functions in math.h
7b04b8a0 2014for func in llrint lrint lrintf round roundf truncf; do
a33cab3a 2015 check_exec <<EOF && enable $func || disable $func
f32adb22 2016#include <math.h>
a33cab3a 2017int main(void) { return ($func(3.999f) > 0)?0:1; }
f32adb22 2018EOF
a33cab3a 2019done
f32adb22 2020
57bd82d4 2021# these are off by default, so fail if requested and not available
79fda097 2022enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
7483e694
DB
2023enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
2024enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
e3cc7d6f 2025enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
36718e51
DB
2026 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2027 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
79fda097
DB
2028enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2029enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
7483e694 2030enabled libgsm && require libgsm gsm.h gsm_create -lgsm
2bfecf73 2031enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
7483e694 2032enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
3d6fac8c 2033enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
36718e51
DB
2034enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2035 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
ae14f311 2036enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
7483e694
DB
2037enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
2038enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2bfecf73 2039enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
57f0ec6e
MR
2040 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2041 die "ERROR: libx264 version must be >= 0.65."; }
2bfecf73 2042enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
7483e694 2043enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
8ac17293 2044
0b4a1821
AS
2045# libdc1394 check
2046if enabled libdc1394; then
2047 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2048 enable libdc1394_2; } ||
2049 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2050 enable libdc1394_1; } ||
2051 die "ERROR: No version of libdc1394 found "
2052fi
2053
2054
c13e1abd
FH
2055_restrict=
2056for restrict_keyword in restrict __restrict__ __restrict; do
57bd82d4 2057 check_cc <<EOF && _restrict=$restrict_keyword && break
dcd479c0
MR
2058void foo(char * $restrict_keyword p);
2059EOF
c13e1abd
FH
2060done
2061
a86b921c 2062##########################################
29799f8b 2063# SDL check
a86b921c 2064
497237c7
RP
2065disable sdl_too_old
2066disable sdl
6a1a892f 2067SDL_CONFIG="${cross_prefix}sdl-config"
2270b4b2 2068if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
5e622c40 2069 sdl_cflags=$("${SDL_CONFIG}" --cflags)
225e21ef 2070 temp_cflags $sdl_cflags
5e622c40 2071 temp_extralibs $("${SDL_CONFIG}" --libs)
1ca5d97f 2072 if check_lib2 SDL.h SDL_Init; then
5e622c40 2073 _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
29f3b38a 2074 if test "$_sdlversion" -lt 121 ; then
497237c7 2075 enable sdl_too_old
dcd479c0 2076 else
497237c7 2077 enable sdl
225e21ef 2078 check_cc $sdl_cflags <<EOF && enable sdl_video_size
29f3b38a 2079#include <SDL.h>
d6773f56 2080int main(int argc, char **argv){
29f3b38a
MR
2081 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2082 int w = vi->current_w;
2083 return 0;
2084}
2085EOF
dcd479c0
MR
2086 fi
2087 fi
29f3b38a 2088 restore_flags
c3f6b472 2089fi
57bd82d4 2090
2270b4b2 2091texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
146ea952 2092
7a91333f 2093##########################################
73b46a95
RP
2094# Network check
2095
2096if enabled network; then
96000432 2097 check_type "sys/types.h sys/socket.h" socklen_t
73b46a95
RP
2098 # Prefer arpa/inet.h over winsock2
2099 if check_header arpa/inet.h ; then
2100 check_func closesocket
2101 elif check_header winsock2.h ; then
ea10ddde 2102 network_extralibs="-lws2_32"
72be9e73 2103 check_type ws2tcpip.h socklen_t
2446d3d6 2104 check_func_headers winsock2.h closesocket
73b46a95
RP
2105 fi
2106fi
2107
2108##########################################
29799f8b 2109# IPv6 check
7a91333f 2110
497237c7 2111enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
7a91333f
HZ
2112#include <sys/types.h>
2113#include <sys/socket.h>
2114#include <netinet/in.h>
2115#include <netdb.h>
db817cf3 2116int main(void) {
7483e694
DB
2117 struct sockaddr_storage saddr;
2118 struct ipv6_mreq mreq6;
2119 getaddrinfo(0,0,0,0);
2120 getnameinfo(0,0,0,0,0,0,0);
2121 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
7a91333f
HZ
2122}
2123EOF
2124
06e31011
RP
2125check_header linux/videodev.h
2126check_header linux/videodev2.h
1b6e8b73 2127check_header sys/videoio.h
47f38850 2128
2446d3d6 2129check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
c2345207 2130
f8aa696f 2131# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1c915f83
RP
2132{ check_header dev/bktr/ioctl_meteor.h &&
2133 check_header dev/bktr/ioctl_bt848.h; } ||
2134{ check_header machine/ioctl_meteor.h &&
2135 check_header machine/ioctl_bt848.h; } ||
2136{ check_header dev/video/meteor/ioctl_meteor.h &&
2137 check_header dev/video/bktr/ioctl_bt848.h; } ||
2138check_header dev/ic/bt8xx.h
f8aa696f 2139
c7682de0
RP
2140check_header sys/soundcard.h
2141check_header soundcard.h
deb29777 2142
35fd8122
NG
2143check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2144
7483e694 2145# deal with the X11 frame grabber
56a059ac 2146enabled x11grab &&
f58f4ce1
GP
2147check_header X11/Xlib.h &&
2148check_header X11/extensions/XShm.h &&
2149check_func XOpenDisplay -lX11 &&
06eab4ba 2150check_func XShmCreateImage -lX11 -lXext
f58f4ce1 2151
40bcf4c7 2152enabled debug && add_cflags -g"$debuglevel"
57bd82d4
MR
2153
2154# add some useful compiler flags if supported
2155check_cflags -Wdeclaration-after-statement
dcd479c0
MR
2156check_cflags -Wall
2157check_cflags -Wno-switch
c07bd6a9
MN
2158check_cflags -Wdisabled-optimization
2159check_cflags -Wpointer-arith
2160check_cflags -Wredundant-decls
cc1fb623 2161check_cflags -Wno-pointer-sign
f4929996 2162check_cflags -Wcast-qual
9aceb3cf 2163check_cflags -Wwrite-strings
652a5bf6 2164check_cflags -Wtype-limits
764551c6 2165check_cflags -Wundef
5af4e0cc 2166enabled extra_warnings && check_cflags -Winline
cf9d24ad 2167
57bd82d4 2168# add some linker flags
5c0e9479 2169check_ldflags -Wl,--warn-common
8351d2ba
DB
2170check_ldflags -Wl,--as-needed
2171check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
c2fd6530 2172check_ldflags -Wl,-Bsymbolic
94a3401e 2173
bd2216e4
MR
2174if enabled small; then
2175 check_cflags -Os # not all compilers support -Os
8400d6b8
DB
2176 optimizations="small"
2177elif enabled optimizations; then
629687f6 2178 if enabled xlc; then
0f010b2f
DB
2179 add_cflags -O5
2180 add_ldflags -O5
df442a8d
MR
2181 elif enabled ccc; then
2182 add_cflags -fast
cf9d24ad 2183 else
0f010b2f 2184 add_cflags -O3
cf9d24ad 2185 fi
cddf3f45 2186fi
11fdbc44 2187check_cflags -fno-math-errno
b2eb2ff0 2188check_cflags -fno-signed-zeros
cddf3f45 2189
504a64b9 2190# add some flags for Intel C Compiler
629687f6 2191if enabled icc; then
b1598b58
MR
2192 # Just warnings, no remarks
2193 check_cflags -w1
2194 # -wd: Disable following warnings
2195 # 144, 167, 556: -Wno-pointer-sign
2196 # 10006: ignoring unknown option -fno-signed-zeros
2197 # 10156: ignoring option '-W'; no argument required
2198 check_cflags -wd144,167,556,10006,10156
2199 # 11030: Warning unknown option --as-needed
2200 # 10156: ignoring option '-export'; no argument required
2201 check_ldflags -wd10156,11030
2202 # Allow to compile with optimizations
2203 check_ldflags -march=$cpu
be2cf98a
CEH
2204 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2205 enable ebp_available
df442a8d
MR
2206elif enabled ccc; then
2207 # disable some annoying warnings
2208 add_cflags -msg_disable cvtu32to64
2209 add_cflags -msg_disable embedcomment
2210 add_cflags -msg_disable needconstext
2211 add_cflags -msg_disable nomainieee
2212 add_cflags -msg_disable ptrmismatch1
2213 add_cflags -msg_disable unreachcode
504a64b9
CEH
2214fi
2215
80581e98 2216# PIC flags for shared library objects where they are needed
5af4e0cc 2217if enabled shared; then
569cb218
MR
2218 # LIBOBJFLAGS may have already been set in the OS configuration
2219 if test -z "$LIBOBJFLAGS" ; then
a8e28698 2220 case "${subarch-$arch}" in
b6bd7268 2221 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
569cb218
MR
2222 esac
2223 fi
80581e98
MN
2224fi
2225
90be59ef 2226if enabled gprof; then
0f010b2f
DB
2227 add_cflags -p
2228 add_ldflags -p
1db54e20
DB
2229fi
2230
7f3c02fc 2231# Find out if the .align argument is a power of two or not.
9377b6ce 2232check_asm asmalign_pot '".align 3"'
4454dc1b 2233
7483e694
DB
2234enabled_any $DECODER_LIST && enable decoders
2235enabled_any $ENCODER_LIST && enable encoders
5666fd73 2236enabled_any $HWACCEL_LIST && enable hwaccels
7483e694
DB
2237enabled_any $BSF_LIST && enable bsfs
2238enabled_any $DEMUXER_LIST && enable demuxers
2239enabled_any $MUXER_LIST && enable muxers
f7679c54 2240enabled_any $FILTER_LIST && enable filters
7483e694
DB
2241enabled_any $INDEV_LIST && enable demuxers
2242enabled_any $OUTDEV_LIST && enable muxers
2243enabled_any $PROTOCOL_LIST && enable protocols
2244
2245enabled_any $THREADS_LIST && enable threads
2246
2247check_deps $CONFIG_LIST \
b6bb00b0 2248 $CONFIG_EXTRA \
7483e694
DB
2249 $HAVE_LIST \
2250 $DECODER_LIST \
2251 $ENCODER_LIST \
5666fd73 2252 $HWACCEL_LIST \
7483e694
DB
2253 $PARSER_LIST \
2254 $BSF_LIST \
2255 $DEMUXER_LIST \
2256 $MUXER_LIST \
f7679c54 2257 $FILTER_LIST \
7483e694
DB
2258 $INDEV_LIST \
2259 $OUTDEV_LIST \
2260 $PROTOCOL_LIST \
f70f03f6 2261
3e89171a 2262echo "install prefix $prefix"
f36958f8
DB
2263echo "source path $source_path"
2264echo "C compiler $cc"
bfd5afd8 2265echo ".align is power-of-two $asmalign_pot"
f36958f8 2266echo "ARCH $arch ($cpu)"
ce8871c2
MR
2267if test "$build_suffix" != ""; then
2268 echo "build suffix $build_suffix"
eb94aca9 2269fi
ac63af34
DB
2270if test "$extra_version" != ""; then
2271 echo "version string suffix $extra_version"
2272fi
0db2ce77 2273echo "big-endian ${bigendian-no}"
5b6c2cbd 2274if enabled x86; then
af44e8e4 2275 echo "yasm ${yasm-no}"
0db2ce77 2276 echo "MMX enabled ${mmx-no}"
30e98e62 2277 echo "MMX2 enabled ${mmx2-no}"
3bf96eec 2278 echo "3DNow! enabled ${amd3dnow-no}"
a1ef9f08 2279 echo "3DNow! extended enabled ${amd3dnowext-no}"
1bb04d5a 2280 echo "SSE enabled ${sse-no}"
30e98e62 2281 echo "SSSE3 enabled ${ssse3-no}"
0db2ce77
MR
2282 echo "CMOV enabled ${cmov-no}"
2283 echo "CMOV is fast ${fast_cmov-no}"
971cc990
MN
2284 echo "EBX available ${ebx_available-no}"
2285 echo "EBP available ${ebp_available-no}"
d3a4b4e0 2286 echo "10 operands supported ${ten_operands-no}"
e41e8342 2287fi
5b6c2cbd 2288if enabled arm; then
0db2ce77
MR
2289 echo "ARMv5TE enabled ${armv5te-no}"
2290 echo "ARMv6 enabled ${armv6-no}"
ab5cb084 2291 echo "ARMv6T2 enabled ${armv6t2-no}"
f55b299a 2292 echo "ARM VFP enabled ${armvfp-no}"
0db2ce77 2293 echo "IWMMXT enabled ${iwmmxt-no}"
6b18d278 2294 echo "NEON enabled ${neon-no}"
eba9ae3c 2295fi
5b6c2cbd 2296if enabled mips; then
0db2ce77 2297 echo "MMI enabled ${mmi-no}"
e41e8342 2298fi
5b6c2cbd 2299if enabled ppc; then
0db2ce77 2300 echo "AltiVec enabled ${altivec-no}"
30e98e62 2301 echo "PPC 4xx optimizations ${ppc4xx-no}"
0db2ce77 2302 echo "dcbzl available ${dcbzl-no}"
30e98e62
DB
2303 echo "performance report ${powerpc_perf-no}"
2304fi
2305if enabled sparc; then
2306 echo "VIS enabled ${vis-no}"
e41e8342 2307fi
0db2ce77
MR
2308echo "gprof enabled ${gprof-no}"
2309echo "debug symbols ${debug-no}"
87a0fb62 2310echo "strip symbols ${stripping-no}"
8400d6b8 2311echo "optimizations ${optimizations-no}"
0db2ce77
MR
2312echo "static ${static-no}"
2313echo "shared ${shared-no}"
4a24ab64 2314echo "postprocessing support ${postproc-no}"
f7679c54 2315echo "new filter support ${avfilter-no}"
81124ba0 2316echo "filters using lavformat ${avfilter_lavf-no}"
0db2ce77 2317echo "network support ${network-no}"
90be59ef 2318if enabled network; then
0db2ce77 2319 echo "IPv6 support ${ipv6-no}"
bfd5afd8 2320fi
0db2ce77
MR
2321echo "threading support ${thread_type-no}"
2322echo "SDL support ${sdl-no}"
90be59ef 2323if enabled sdl_too_old; then
bfd5afd8
DB
2324 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2325fi
0db2ce77
MR
2326echo "Sun medialib support ${mlib-no}"
2327echo "AVISynth enabled ${avisynth-no}"
0db2ce77
MR
2328echo "libamr-nb support ${libamr_nb-no}"
2329echo "libamr-wb support ${libamr_wb-no}"
f7b8bffe 2330echo "libdc1394 support ${libdc1394-no}"
690bfceb 2331echo "libdirac enabled ${libdirac-no}"
0db2ce77
MR
2332echo "libfaac enabled ${libfaac-no}"
2333echo "libfaad enabled ${libfaad-no}"
7e0871a7 2334echo "libfaad dlopened ${libfaadbin-no}"
0db2ce77
MR
2335echo "libgsm enabled ${libgsm-no}"
2336echo "libmp3lame enabled ${libmp3lame-no}"
2337echo "libnut enabled ${libnut-no}"
9a77d59a 2338echo "libopenjpeg enabled ${libopenjpeg-no}"
f7cd9eed 2339echo "libschroedinger enabled ${libschroedinger-no}"
ae14f311 2340echo "libspeex enabled ${libspeex-no}"
0db2ce77
MR
2341echo "libtheora enabled ${libtheora-no}"
2342echo "libvorbis enabled ${libvorbis-no}"
d6bd62db
DB
2343echo "libx264 enabled ${libx264-no}"
2344echo "libxvid enabled ${libxvid-no}"
0db2ce77 2345echo "zlib enabled ${zlib-no}"
f402916e 2346echo "bzlib enabled ${bzlib-no}"
2c62e737 2347echo
de6d9b64 2348
5666fd73 2349for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
8138b9db 2350 echo "Enabled ${type}s:"
f65c9da1 2351 eval list=\$$(toupper $type)_LIST
8138b9db 2352 for part in $list; do
f65c9da1
MR
2353 enabled $part && echo ${part%_*}
2354 done | sort | pr -3 -t
2355 echo
8138b9db
RP
2356done
2357
ba321adb
JK
2358license="LGPL"
2359if enabled nonfree; then
2360 license="unredistributable"
2361elif enabled gpl; then
2362 license="GPL"
2363fi
2364
2365echo "License: $license"
ca5323af 2366
cf1392e9
DB
2367echo "Creating config.mak and config.h..."
2368
29799f8b
DB
2369echo "# Automatically generated by configure - do not modify!" > config.mak
2370echo "/* Automatically generated by configure - do not modify! */" > $TMPH
9c05103f
DB
2371echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2372echo "#define FFMPEG_CONFIG_H" >> $TMPH
0fd12426 2373echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
14a8acf1 2374echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
de6d9b64 2375
d921f03f 2376echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
c9d19248 2377echo "prefix=$prefix" >> config.mak
22a324da
DB
2378echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2379echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2380echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2381echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
14a8acf1 2382echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
22a324da 2383echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
0a7ee3ef
DB
2384echo "SRC_PATH=\"$source_path\"" >> config.mak
2385echo "SRC_PATH_BARE=$source_path" >> config.mak
2386echo "BUILD_ROOT=\"$PWD\"" >> config.mak
980fc7b8 2387echo "CC=$cc" >> config.mak
313c46a6 2388echo "AS=$as" >> config.mak
304d586d 2389echo "YASM=$yasmexe" >> config.mak
980fc7b8 2390echo "AR=$ar" >> config.mak
be7109c1 2391echo "RANLIB=$ranlib" >> config.mak
20369773 2392echo "LN_S=$ln_s" >> config.mak
87a0fb62 2393enabled stripping &&
3ae3b721 2394 echo "STRIP=$strip" >> config.mak ||
f25fc9b1 2395 echo "STRIP=echo ignoring strip" >> config.mak
75388c74 2396
a9b3f630 2397echo "OPTFLAGS=$CFLAGS" >> config.mak
0f3cb305 2398echo "LDFLAGS=$LDFLAGS" >> config.mak
c536cb09 2399echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
e1707f52 2400echo "SHFLAGS=$SHFLAGS" >> config.mak
304d586d 2401echo "YASMFLAGS=$YASMFLAGS" >> config.mak
80581e98 2402echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
5af4e0cc 2403echo "BUILD_STATIC=$static" >> config.mak
ce8871c2 2404echo "BUILDSUF=$build_suffix" >> config.mak
c5f14466 2405echo "FULLNAME=$FULLNAME" >> config.mak
f3ec2d46 2406echo "LIBPREF=$LIBPREF" >> config.mak
c5f14466 2407echo "LIBSUF=$LIBSUF" >> config.mak
24743a76 2408echo "LIBNAME=$LIBNAME" >> config.mak
f3ec2d46 2409echo "SLIBPREF=$SLIBPREF" >> config.mak
c5f14466
RP
2410echo "SLIBSUF=$SLIBSUF" >> config.mak
2411echo "EXESUF=$EXESUF" >> config.mak
ac63af34 2412echo "EXTRA_VERSION=$extra_version" >> config.mak
315c741d 2413echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
9da6609f
MR
2414echo "HOSTCC=$host_cc" >> config.mak
2415echo "HOSTCFLAGS=$host_cflags" >> config.mak
82bb3329 2416echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
9da6609f
MR
2417echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2418echo "HOSTLIBS=$host_libs" >> config.mak
a7ada2ba
MR
2419echo "TARGET_EXEC=$target_exec" >> config.mak
2420echo "TARGET_PATH=$target_path" >> config.mak
4dc62701 2421
90be59ef 2422if enabled bigendian; then
7483e694
DB
2423 echo "WORDS_BIGENDIAN=yes" >> config.mak
2424 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
91d1f1a4 2425fi
44161118 2426
90be59ef 2427if enabled sdl; then
5e622c40
DB
2428 echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2429 echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
a86b921c 2430fi
90be59ef 2431if enabled texi2html; then
7483e694 2432 echo "BUILD_DOC=yes" >> config.mak
146ea952 2433fi
5a872801 2434
719c8e00
MR
2435get_version(){
2436 name=$1
2437 file=$source_path/$2
147e7692
MR
2438 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2439 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
0e32c8c6
MR
2440 lcname=$(tolower $name)
2441 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2442 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
719c8e00
MR
2443}
2444
147e7692
MR
2445get_version LIBSWSCALE libswscale/swscale.h
2446get_version LIBPOSTPROC libpostproc/postprocess.h
2447get_version LIBAVCODEC libavcodec/avcodec.h
2448get_version LIBAVDEVICE libavdevice/avdevice.h
2449get_version LIBAVFORMAT libavformat/avformat.h
2450get_version LIBAVUTIL libavutil/avutil.h
a6601d69 2451get_version LIBAVFILTER libavfilter/avfilter.h
5a872801 2452
5af4e0cc 2453if enabled shared; then
7483e694
DB
2454 echo "BUILD_SHARED=yes" >> config.mak
2455 echo "PIC=-fPIC -DPIC" >> config.mak
dcc01c06 2456 echo "LIBTARGET=${LIBTARGET}" >> config.mak
7483e694
DB
2457 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2458 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2459 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
d22e8442 2460 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
7483e694
DB
2461 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2462 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2463 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
0319c531 2464fi
d7e27559 2465echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
ef0bc4c9 2466echo "EXTRALIBS=$extralibs" >> config.mak
d2845d68 2467
7b5e8a27
DB
2468echo "ARCH=$arch" >> config.mak
2469
3d907e22
MR
2470print_config ARCH_ $TMPH config.mak $ARCH_LIST
2471print_config HAVE_ $TMPH config.mak $HAVE_LIST
7483e694 2472print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
b6bb00b0 2473 $CONFIG_EXTRA \
7483e694
DB
2474 $DECODER_LIST \
2475 $ENCODER_LIST \
5666fd73 2476 $HWACCEL_LIST \
7483e694
DB
2477 $PARSER_LIST \
2478 $BSF_LIST \
2479 $DEMUXER_LIST \
2480 $MUXER_LIST \
f7679c54 2481 $FILTER_LIST \
7483e694
DB
2482 $PROTOCOL_LIST \
2483 $INDEV_LIST \
2484 $OUTDEV_LIST \
8ac17293 2485
c13e1abd
FH
2486echo "#define restrict $_restrict" >> $TMPH
2487
bd2216e4 2488if enabled small; then
7483e694 2489 echo "#define av_always_inline" >> $TMPH
bb801c97
MN
2490fi
2491
0f3cb305 2492
8156056e 2493# Apparently it's not possible to portably echo a backslash.
3ae3b721 2494enabled asmalign_pot &&
7483e694 2495 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
295b8c70 2496 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
4454dc1b 2497
b4d96ba2 2498echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
bc634f6f 2499
9c05103f
DB
2500echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2501
b7860763 2502# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3ae3b721
RP
2503cmp -s $TMPH config.h &&
2504 echo "config.h is unchanged" ||
2505 mv -f $TMPH config.h
3d204385 2506
165af439 2507# build tree in object directory if source path is different from current one
90be59ef 2508if enabled source_path_used; then
165af439 2509 DIRS="\
7483e694
DB
2510 doc \
2511 libavcodec \
2512 libavcodec/alpha \
a2fc0f6a 2513 libavcodec/arm \
7483e694 2514 libavcodec/bfin \
7483e694
DB
2515 libavcodec/mlib \
2516 libavcodec/ppc \
2517 libavcodec/sh4 \
2518 libavcodec/sparc \
a6493a8f 2519 libavcodec/x86 \
52a9cf34 2520 libavdevice \
f7679c54 2521 libavfilter \
7483e694
DB
2522 libavformat \
2523 libavutil \
2524 libpostproc \
2525 libswscale \
b2cfd7e3
RP
2526 libswscale/bfin \
2527 libswscale/mlib \
2528 libswscale/ppc \
2529 libswscale/sparc \
2530 libswscale/x86 \
7483e694
DB
2531 tests \
2532 tools \
7483e694 2533 "
165af439 2534 FILES="\
7483e694
DB
2535 Makefile \
2536 common.mak \
71c61f62 2537 subdir.mak \
7483e694
DB
2538 doc/texi2pod.pl \
2539 libavcodec/Makefile \
52a9cf34 2540 libavdevice/Makefile \
f7679c54 2541 libavfilter/Makefile \
7483e694
DB
2542 libavformat/Makefile \
2543 libavutil/Makefile \
2544 libpostproc/Makefile \
2545 libswscale/Makefile \
2546 "
165af439 2547 for dir in $DIRS ; do
7483e694 2548 mkdir -p $dir
165af439
MR
2549 done
2550 for f in $FILES ; do
20369773 2551 $ln_s "$source_path/$f" $f
165af439
MR
2552 done
2553fi
def4272a 2554
def4272a 2555
d0674868 2556# build pkg-config files
def4272a 2557
d0674868
DB
2558pkgconfig_generate(){
2559name=$1
b0dfd108 2560shortname=${name#lib}${build_suffix}
d0674868
DB
2561comment=$2
2562version=$3
2563libs=$4
2564requires=$5
25cd5cb3 2565cat <<EOF > $name/$name.pc
3e89171a 2566prefix=$prefix
a94e666c 2567exec_prefix=\${prefix}
f2b7382c 2568libdir=$libdir
7622778e 2569includedir=$incdir
def4272a 2570
d0674868
DB
2571Name: $name
2572Description: $comment
2573Version: $version
5dcfe9f8
AH
2574Requires: $(disabled shared && echo $requires)
2575Requires.private: $(enabled shared && echo $requires)
def4272a 2576Conflicts:
12701f6e
AH
2577Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2578Libs.private: $(enabled shared && echo $libs)
76a448ed 2579Cflags: -I\${includedir}
def4272a 2580EOF
25cd5cb3 2581cat <<EOF > $name/$name-uninstalled.pc
def4272a
AJ
2582prefix=
2583exec_prefix=
46d1ff83 2584libdir=\${pcfiledir}
1d44d365 2585includedir=${source_path}
def4272a 2586
d0674868
DB
2587Name: $name
2588Description: $comment
2589Version: $version
2590Requires: $requires
def4272a 2591Conflicts:
12701f6e 2592Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
def4272a
AJ
2593Cflags: -I\${includedir}
2594EOF
d0674868 2595}
def4272a 2596
e426941d 2597pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
46983309
RT
2598pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2599pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2600pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3ed1a2ee 2601enabled avfilter &&
46983309 2602 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3ed1a2ee 2603enabled postproc &&
e426941d 2604 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
5add54b4 2605pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"