Update libx264.c to use new libx264 features
[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 57show_help(){
06454877
MR
58cat <<EOF
59Usage: configure [options]
60Options: [defaults in brackets after descriptions]
61
62Standard options:
63 --help print this message
64 --logfile=FILE log tests and output to FILE [config.err]
65 --disable-logging do not log configure debug information
66 --prefix=PREFIX install in PREFIX [$prefix]
67 --bindir=DIR install binaries in DIR [PREFIX/bin]
68 --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
69 --libdir=DIR install libs in DIR [PREFIX/lib]
70 --shlibdir=DIR install shared libs in DIR [PREFIX/lib]
71 --incdir=DIR install includes in DIR [PREFIX/include]
72 --mandir=DIR install man page in DIR [PREFIX/share/man]
73
74Configuration options:
75 --disable-static do not build static libraries [no]
76 --enable-shared build shared libraries [no]
77 --enable-gpl allow use of GPL code, the resulting libs
78 and binaries will be under GPL [no]
79 --enable-version3 upgrade (L)GPL to version 3 [no]
80 --enable-nonfree allow use of nonfree code, the resulting libs
81 and binaries will be unredistributable [no]
82 --disable-doc do not build documentation
83 --disable-ffmpeg disable ffmpeg build
84 --disable-ffplay disable ffplay build
85 --disable-ffserver disable ffserver build
86 --enable-postproc enable GPLed postprocessing support [no]
87 --enable-avfilter video filter support [no]
88 --enable-avfilter-lavf video filters dependent on avformat [no]
89 --enable-beosthreads use BeOS threads [no]
90 --enable-os2threads use OS/2 threads [no]
91 --enable-pthreads use pthreads [no]
92 --enable-w32threads use Win32 threads [no]
93 --enable-x11grab enable X11 grabbing [no]
94 --disable-network disable network support [no]
95 --disable-ipv6 disable IPv6 support [no]
96 --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]
97 --enable-gray enable full grayscale support (slower color)
98 --disable-swscale-alpha disable alpha channel support in swscale
99 --disable-fastdiv disable table-based division
100 --enable-small optimize for size instead of speed
101 --disable-aandct disable AAN DCT code
102 --disable-fft disable FFT code
103 --disable-golomb disable Golomb code
104 --disable-lpc disable LPC code
105 --disable-mdct disable MDCT code
106 --disable-rdft disable RDFT code
107 --disable-vaapi disable VAAPI code
108 --disable-vdpau disable VDPAU code
109 --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
110 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
111 --enable-memalign-hack emulate memalign, interferes with memory debuggers
112 --enable-beos-netserver enable BeOS netserver
113 --disable-encoder=NAME disable encoder NAME
114 --enable-encoder=NAME enable encoder NAME
115 --disable-encoders disable all encoders
116 --disable-decoder=NAME disable decoder NAME
117 --enable-decoder=NAME enable decoder NAME
118 --disable-decoders disable all decoders
119 --disable-hwaccel=NAME disable hwaccel NAME
120 --enable-hwaccel=NAME enable hwaccel NAME
121 --disable-hwaccels disable all hwaccels
122 --disable-muxer=NAME disable muxer NAME
123 --enable-muxer=NAME enable muxer NAME
124 --disable-muxers disable all muxers
125 --disable-demuxer=NAME disable demuxer NAME
126 --enable-demuxer=NAME enable demuxer NAME
127 --disable-demuxers disable all demuxers
128 --enable-parser=NAME enable parser NAME
129 --disable-parser=NAME disable parser NAME
130 --disable-parsers disable all parsers
131 --enable-bsf=NAME enable bitstream filter NAME
132 --disable-bsf=NAME disable bitstream filter NAME
133 --disable-bsfs disable all bitstream filters
134 --enable-protocol=NAME enable protocol NAME
135 --disable-protocol=NAME disable protocol NAME
136 --disable-protocols disable all protocols
137 --disable-indev=NAME disable input device NAME
138 --disable-outdev=NAME disable output device NAME
139 --disable-indevs disable input devices
140 --disable-outdevs disable output devices
141 --disable-devices disable all devices
142 --enable-filter=NAME enable filter NAME
143 --disable-filter=NAME disable filter NAME
144 --disable-filters disable all filters
145 --list-decoders show all available decoders
146 --list-encoders show all available encoders
147 --list-hwaccels show all available hardware accelerators
148 --list-muxers show all available muxers
149 --list-demuxers show all available demuxers
150 --list-parsers show all available parsers
151 --list-protocols show all available protocols
152 --list-bsfs show all available bitstream filters
153 --list-indevs show all available input devices
154 --list-outdevs show all available output devices
155 --list-filters show all available filters
156
157External library support:
158 --enable-avisynth enable reading of AVISynth script files [no]
159 --enable-bzlib enable bzlib [autodetect]
160 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
161 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
162 --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
163 and libraw1394 [no]
164 --enable-libdirac enable Dirac support via libdirac [no]
165 --enable-libfaac enable FAAC support via libfaac [no]
166 --enable-libfaad enable FAAD support via libfaad [no]
167 --enable-libfaadbin open libfaad.so.0 at runtime [no]
168 --enable-libgsm enable GSM support via libgsm [no]
169 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
170 --enable-libnut enable NUT (de)muxing via libnut,
171 native (de)muxer exists [no]
172 --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]
173 --enable-libschroedinger enable Dirac support via libschroedinger [no]
174 --enable-libspeex enable Speex decoding via libspeex [no]
175 --enable-libtheora enable Theora encoding via libtheora [no]
176 --enable-libvorbis enable Vorbis encoding via libvorbis,
177 native implementation exists [no]
178 --enable-libx264 enable H.264 encoding via x264 [no]
179 --enable-libxvid enable Xvid encoding via xvidcore,
180 native MPEG-4/Xvid encoder exists [no]
181 --enable-mlib enable Sun medialib [no]
182 --enable-zlib enable zlib [autodetect]
183
184Advanced options (experts only):
185 --source-path=PATH path to source code [$source_path]
186 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
187 --enable-cross-compile assume a cross-compiler is used
188 --sysroot=PATH root of cross-build tree
189 --sysinclude=PATH location of cross-build system headers
190 --target-os=OS compiler targets OS [$target_os]
191 --target-exec=CMD command to run executables on target
192 --target-path=DIR path to view of build directory on target
193 --nm=NM use nm tool
194 --as=AS use assembler AS [$as_default]
195 --cc=CC use C compiler CC [$cc_default]
196 --ld=LD use linker LD
197 --host-cc=HOSTCC use host C compiler HOSTCC
198 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
199 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
200 --host-libs=HLIBS use libs HLIBS when linking for host
201 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
202 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
203 --extra-libs=ELIBS add ELIBS [$ELIBS]
204 --extra-version=STRING version string suffix []
205 --build-suffix=SUFFIX library name suffix []
206 --arch=ARCH select architecture [$arch]
207 --cpu=CPU select the minimum required CPU (affects
208 instruction selection, may crash on older CPUs)
209 --enable-powerpc-perf enable performance report on PPC
210 (requires enabling PMC)
c8a4ae00 211 --disable-asm disable all assembler optimizations
06454877
MR
212 --disable-altivec disable AltiVec optimizations
213 --disable-amd3dnow disable 3DNow! optimizations
214 --disable-amd3dnowext disable 3DNow! extended optimizations
215 --disable-mmx disable MMX optimizations
216 --disable-mmx2 disable MMX2 optimizations
217 --disable-sse disable SSE optimizations
218 --disable-ssse3 disable SSSE3 optimizations
219 --disable-armv5te disable armv5te optimizations
220 --disable-armv6 disable armv6 optimizations
221 --disable-armv6t2 disable armv6t2 optimizations
222 --disable-armvfp disable ARM VFP optimizations
223 --disable-iwmmxt disable iwmmxt optimizations
224 --disable-mmi disable MMI optimizations
225 --disable-neon disable neon optimizations
226 --disable-vis disable VIS optimizations
227 --disable-yasm disable use of yasm assembler
228 --enable-pic build position-independent code
229
230Developer options (useful when working on FFmpeg itself):
231 --disable-debug disable debugging symbols
232 --enable-debug=LEVEL set the debug level [$debuglevel]
233 --enable-gprof enable profiling with gprof [$gprof]
234 --disable-optimizations disable compiler optimizations
235 --enable-extra-warnings enable more compiler warnings
236 --disable-stripping disable stripping of executables and shared libraries
237
238NOTE: Object files are built at the place where configure is launched.
239EOF
60e8bc13 240 exit 0
74c53c2d 241}
cf9d24ad 242
57bd82d4 243log(){
2270b4b2 244 echo "$@" >> $logfile
57bd82d4
MR
245}
246
720c69da 247log_file(){
c8e9f801 248 log BEGIN $1
2270b4b2 249 pr -n -t $1 >> $logfile
c8e9f801
MR
250 log END $1
251}
252
2ba042a7 253echolog(){
c8e9f801 254 log "$@"
57bd82d4 255 echo "$@"
2ba042a7
MR
256}
257
258die(){
259 echolog "$@"
260 cat <<EOF
d326cf7f 261
2ba042a7
MR
262If you think configure made a mistake, make sure you are using the latest
263version from SVN. If the latest version fails, report the problem to the
e5d8ccd7 264ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
2ba042a7 265EOF
e155a21a 266 if disabled logging; then
2ba042a7 267 cat <<EOF
e155a21a
DB
268Rerun configure with logging enabled (do not use --disable-logging), and
269include the log this produces with your report.
2ba042a7
MR
270EOF
271 else
272cat <<EOF
e155a21a
DB
273Include the log file "$logfile" produced by configure as this will help
274solving the problem.
2ba042a7
MR
275EOF
276 fi
57bd82d4
MR
277 exit 1
278}
279
6c6007d6 280# Avoid locale weirdness, besides we really just want to translate ASCII.
44161118 281toupper(){
6c6007d6 282 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
44161118
MR
283}
284
4a5444db 285tolower(){
6c6007d6 286 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
4a5444db
MR
287}
288
14a8acf1
MR
289c_escape(){
290 echo "$*" | sed 's/["\\]/\\\0/g'
291}
292
b04251c5
MR
293sh_quote(){
294 v=$(echo "$1" | sed "s/'/'\\\\''/g")
295 test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
296 echo "$v"
297}
298
be8f2501
MR
299filter(){
300 pat=$1
301 shift
302 for v; do
98ef6079 303 eval "case $v in $pat) echo $v ;; esac"
be8f2501
MR
304 done
305}
306
a8d04fba
MR
307set_all(){
308 value=$1
309 shift
310 for var in $*; do
311 eval $var=$value
312 done
313}
314
72a43668
MR
315set_weak(){
316 value=$1
317 shift
318 for var; do
319 eval : \${$var:=$value}
320 done
321}
322
799c9e9b
MR
323pushvar(){
324 for var in $*; do
325 eval level=\${${var}_level:=0}
326 eval ${var}_${level}="\$$var"
327 eval ${var}_level=$(($level+1))
328 done
329}
330
331popvar(){
332 for var in $*; do
333 eval level=\${${var}_level:-0}
334 test $level = 0 && continue
335 eval level=$(($level-1))
336 eval $var="\${${var}_${level}}"
337 eval ${var}_level=$level
338 eval unset ${var}_${level}
339 done
340}
341
a8d04fba
MR
342enable(){
343 set_all yes $*
344}
345
346disable(){
347 set_all no $*
348}
349
72a43668
MR
350enable_weak(){
351 set_weak yes $*
352}
353
354disable_weak(){
355 set_weak no $*
356}
357
72702705 358enable_safe(){
fd07f803
MR
359 for var; do
360 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
361 done
72702705
MR
362}
363
364disable_safe(){
fd07f803
MR
365 for var; do
366 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
367 done
72702705
MR
368}
369
f9d328da
MR
370do_enable_deep(){
371 for var; do
372 enabled $var && continue
373 eval sel="\$${var}_select"
c510c7b5
MR
374 eval sgs="\$${var}_suggest"
375 pushvar var sgs
f9d328da 376 enable_deep $sel
c510c7b5
MR
377 popvar sgs
378 enable_deep_weak $sgs
f9d328da
MR
379 popvar var
380 done
381}
382
383enable_deep(){
384 do_enable_deep $*
385 enable $*
386}
387
72a43668
MR
388enable_deep_weak(){
389 do_enable_deep $*
390 enable_weak $*
391}
392
57bd82d4 393enabled(){
3250003c
MR
394 test "${1#!}" = "$1" && op== || op=!=
395 eval test "x\$${1#!}" $op "xyes"
44161118
MR
396}
397
37970ebf 398disabled(){
3250003c
MR
399 test "${1#!}" = "$1" && op== || op=!=
400 eval test "x\$${1#!}" $op "xno"
37970ebf
RP
401}
402
44161118
MR
403enabled_all(){
404 for opt; do
405 enabled $opt || return 1
406 done
407}
408
85bca2c5
DB
409disabled_all(){
410 for opt; do
411 disabled $opt || return 1
412 done
413}
414
44161118
MR
415enabled_any(){
416 for opt; do
417 enabled $opt && return 0
418 done
419}
420
85bca2c5
DB
421disabled_any(){
422 for opt; do
423 disabled $opt && return 0
424 done
f7b230a7 425 return 1
85bca2c5
DB
426}
427
c9d19248
MR
428set_default(){
429 for opt; do
88268e94 430 eval : \${$opt:=\$${opt}_default}
c9d19248
MR
431 done
432}
433
4a0d6686
AJ
434is_in(){
435 value=$1
436 shift
437 for var in $*; do
438 [ $var = $value ] && return 0
439 done
440 return 1
441}
442
30fd06be
MR
443check_deps(){
444 for cfg; do
3250003c 445 cfg="${cfg#!}"
799c9e9b
MR
446 enabled ${cfg}_checking && die "Circular dependency for $cfg."
447 disabled ${cfg}_checking && continue
448 enable ${cfg}_checking
449
30fd06be
MR
450 eval dep_all="\$${cfg}_deps"
451 eval dep_any="\$${cfg}_deps_any"
7ef3425f 452 eval dep_sel="\$${cfg}_select"
c510c7b5 453 eval dep_sgs="\$${cfg}_suggest"
3d7453e0
MR
454 eval dep_ifa="\$${cfg}_if"
455 eval dep_ifn="\$${cfg}_if_any"
799c9e9b 456
3d7453e0
MR
457 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
458 check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
459 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
799c9e9b 460
3d7453e0
MR
461 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
462 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
6a702d4c
MR
463 enabled_all $dep_all || disable $cfg
464 enabled_any $dep_any || disable $cfg
7ef3425f 465 disabled_any $dep_sel && disable $cfg
799c9e9b 466
4ec45764
RP
467 if enabled $cfg; then
468 eval dep_extralibs="\$${cfg}_extralibs"
469 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
f9d328da 470 enable_deep $dep_sel
c510c7b5 471 enable_deep_weak $dep_sgs
4ec45764
RP
472 fi
473
799c9e9b 474 disable ${cfg}_checking
30fd06be
MR
475 done
476}
477
44161118
MR
478print_config(){
479 pfx=$1
480 header=$2
481 makefile=$3
482 shift 3
483 for cfg; do
5e622c40 484 ucname="$(toupper $cfg)"
44161118 485 if enabled $cfg; then
3d907e22 486 echo "#define ${pfx}${ucname} 1" >> $header
3d907e22
MR
487 echo "${pfx}${ucname}=yes" >> $makefile
488 else
b250f9c6 489 echo "#define ${pfx}${ucname} 0" >> $header
fbb6c6c2 490 echo "!${pfx}${ucname}=yes" >> $makefile
44161118
MR
491 fi
492 done
57bd82d4
MR
493}
494
495flags_saved(){
2270b4b2 496 (: ${SAVE_CFLAGS?}) 2> /dev/null
57bd82d4
MR
497}
498
dcd479c0 499save_flags(){
57bd82d4 500 flags_saved && return
dcd479c0
MR
501 SAVE_CFLAGS="$CFLAGS"
502 SAVE_LDFLAGS="$LDFLAGS"
503 SAVE_extralibs="$extralibs"
504}
505
506restore_flags(){
f5d28d10 507 flags_saved || return
dcd479c0
MR
508 CFLAGS="$SAVE_CFLAGS"
509 LDFLAGS="$SAVE_LDFLAGS"
510 extralibs="$SAVE_extralibs"
511 unset SAVE_CFLAGS
512 unset SAVE_LDFLAGS
513 unset SAVE_extralibs
514}
515
516temp_cflags(){
517 save_flags
518 CFLAGS="$CFLAGS $*"
519}
520
521temp_ldflags(){
522 save_flags
523 LDFLAGS="$LDFLAGS $*"
524}
525
526temp_extralibs(){
527 save_flags
528 extralibs="$extralibs $*"
529}
530
57bd82d4
MR
531append(){
532 var=$1
533 shift
534 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
535 eval "$var=\"\$$var $*\""
536}
537
50a334e4 538add_cppflags(){
caf458dd 539 append CPPFLAGS $($filter_cppflags "$@")
50a334e4
MR
540}
541
57bd82d4 542add_cflags(){
caf458dd 543 append CFLAGS $($filter_cflags "$@")
57bd82d4
MR
544}
545
2f2e6c7c 546add_asflags(){
caf458dd 547 append ASFLAGS $($filter_asflags "$@")
2f2e6c7c
MR
548}
549
57bd82d4
MR
550add_ldflags(){
551 append LDFLAGS "$@"
552}
553
554add_extralibs(){
555 append extralibs "$@"
556}
557
b0cfb663 558check_cmd(){
b3cb5d51 559 log "$@"
2270b4b2 560 "$@" >> $logfile 2>&1
b0cfb663
MR
561}
562
dcd479c0 563check_cc(){
57bd82d4 564 log check_cc "$@"
2270b4b2 565 cat > $TMPC
720c69da 566 log_file $TMPC
50a334e4 567 check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
57bd82d4
MR
568}
569
570check_cpp(){
571 log check_cpp "$@"
2270b4b2 572 cat > $TMPC
720c69da 573 log_file $TMPC
9e7f3277 574 check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
dcd479c0
MR
575}
576
f65883c8
MR
577check_as(){
578 log check_as "$@"
579 cat > $TMPC
580 log_file $TMPC
2f2e6c7c 581 check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
f65883c8
MR
582}
583
940f335a
MR
584check_asm(){
585 log check_asm "$@"
586 name="$1"
3784e82e 587 code="$2"
940f335a 588 shift 2
49214f61
MR
589 disable $name
590 check_as "$@" <<EOF && enable $name
3784e82e 591void foo(void){ __asm__ volatile($code); }
940f335a
MR
592EOF
593}
594
304d586d
LM
595check_yasm(){
596 log check_yasm "$@"
597 echo "$1" > $TMPS
598 log_file $TMPS
599 shift 1
600 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
601}
602
dcd479c0 603check_ld(){
57bd82d4 604 log check_ld "$@"
3155a644
MR
605 flags=''
606 libs=''
607 for f; do
608 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
609 done
2a194acd 610 check_cc $($filter_cflags $flags) || return
684b28e0 611 check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
dcd479c0
MR
612}
613
50a334e4
MR
614check_cppflags(){
615 log check_cppflags "$@"
caf458dd
MR
616 set -- $($filter_cppflags "$@")
617 check_cc "$@" <<EOF && append CPPFLAGS "$@"
50a334e4
MR
618int x;
619EOF
620}
621
dcd479c0 622check_cflags(){
57bd82d4 623 log check_cflags "$@"
caf458dd
MR
624 set -- $($filter_cflags "$@")
625 check_cc "$@" <<EOF && append CFLAGS "$@"
dcd479c0
MR
626int x;
627EOF
628}
629
2ed46eea
MR
630test_ldflags(){
631 log test_ldflags "$@"
632 check_ld "$@" <<EOF
c23a0ac8 633int main(void){ return 0; }
dcd479c0
MR
634EOF
635}
636
2ed46eea
MR
637check_ldflags(){
638 log check_ldflags "$@"
639 test_ldflags "$@" && add_ldflags "$@"
640}
641
dcd479c0 642check_header(){
57bd82d4 643 log check_header "$@"
dcd479c0
MR
644 header=$1
645 shift
b77df637
MR
646 disable_safe $header
647 check_cpp "$@" <<EOF && enable_safe $header
dcd479c0
MR
648#include <$header>
649int x;
650EOF
651}
652
653check_func(){
57bd82d4 654 log check_func "$@"
dcd479c0
MR
655 func=$1
656 shift
d8bc5f06
MR
657 disable $func
658 check_ld "$@" <<EOF && enable $func
dcd479c0 659extern int $func();
c23a0ac8 660int main(void){ $func(); }
dcd479c0
MR
661EOF
662}
663
2446d3d6
DB
664check_func_headers(){
665 log check_func_headers "$@"
f8d7b072
MR
666 headers=$1
667 func=$2
668 shift 2
669 disable $func
670 incs=""
671 for hdr in $headers; do
672 incs="$incs
673#include <$hdr>"
674 done
cd0d9a9d 675 check_ld "$@" <<EOF && enable $func && enable_safe $headers
f8d7b072 676$incs
d6773f56 677int main(int argc, char **argv){
2b2c2a81 678 return (long) $func;
f8d7b072
MR
679}
680EOF
681}
682
a5344cf7
SS
683check_cpp_condition(){
684 log check_cpp_condition "$@"
685 header=$1
686 condition=$2
f855b7b9
MR
687 shift 2
688 check_cpp $($filter_cppflags "$@") <<EOF
a5344cf7
SS
689#include <$header>
690#if !($condition)
691#error "unsatisfied condition: $condition"
692#endif
693EOF
694}
695
57bd82d4
MR
696check_lib(){
697 log check_lib "$@"
698 header="$1"
699 func="$2"
700 shift 2
fcfcde17
MR
701 temp_extralibs "$@"
702 check_header $header && check_func $func && add_extralibs "$@"
703 err=$?
704 restore_flags
705 return $err
57bd82d4
MR
706}
707
f8d7b072
MR
708check_lib2(){
709 log check_lib2 "$@"
710 headers="$1"
711 func="$2"
712 shift 2
300cde27 713 check_func_headers "$headers" $func "$@" && add_extralibs "$@"
f8d7b072
MR
714}
715
dcd479c0 716check_exec(){
2270b4b2 717 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
57bd82d4
MR
718}
719
7dfef245 720check_exec_crash(){
5e622c40 721 code=$(cat)
7dfef245
MR
722
723 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
724 # are safe but may not be available everywhere. Thus we use
725 # raise(SIGTERM) instead. The check is run in a subshell so we
726 # can redirect the "Terminated" message from the shell. SIGBUS
727 # is not defined by standard C so it is used conditionally.
728
2270b4b2 729 (check_exec "$@") >> $logfile 2>&1 <<EOF
7dfef245
MR
730#include <signal.h>
731static void sighandler(int sig){
732 raise(SIGTERM);
733}
e5af4a11 734int main(void){
7dfef245
MR
735 signal(SIGILL, sighandler);
736 signal(SIGFPE, sighandler);
737 signal(SIGSEGV, sighandler);
738#ifdef SIGBUS
739 signal(SIGBUS, sighandler);
740#endif
741 { $code }
742}
743EOF
744}
745
72be9e73
DY
746check_type(){
747 log check_type "$@"
748 headers=$1
749 type=$2
750 shift 2
ae550ce9 751 disable_safe "$type"
72be9e73
DY
752 incs=""
753 for hdr in $headers; do
754 incs="$incs
755#include <$hdr>"
756 done
ae550ce9 757 check_cc "$@" <<EOF && enable_safe "$type"
72be9e73
DY
758$incs
759$type v;
760EOF
761}
762
14d36751
MR
763check_struct(){
764 log check_type "$@"
765 headers=$1
766 struct=$2
767 member=$3
768 shift 3
769 disable_safe "${struct}_${member}"
770 incs=""
771 for hdr in $headers; do
772 incs="$incs
773#include <$hdr>"
774 done
775 check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
776$incs
777const void *p = &(($struct *)0)->$member;
778EOF
779}
780
57bd82d4
MR
781require(){
782 name="$1"
783 header="$2"
784 func="$3"
785 shift 3
786 check_lib $header $func "$@" || die "ERROR: $name not found"
dcd479c0
MR
787}
788
f8d7b072
MR
789require2(){
790 name="$1"
791 headers="$2"
792 func="$3"
793 shift 3
794 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
795}
796
eea50282
MR
797check_foo_config(){
798 cfg=$1
799 pkg=$2
800 header=$3
801 func=$4
802 shift 4
803 disable $cfg
804 check_cmd ${pkg}-config --version
805 err=$?
806 if test "$err" = 0; then
5e622c40
DB
807 temp_cflags $(${pkg}-config --cflags)
808 temp_extralibs $(${pkg}-config --libs)
eea50282
MR
809 check_lib "$@" $header $func && enable $cfg
810 fi
811 return $err
812}
813
f0125de9
MR
814check_host_cc(){
815 log check_host_cc "$@"
816 cat > $TMPC
817 log_file $TMPC
818 check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
819}
820
821check_host_cflags(){
822 log check_host_cflags "$@"
823 check_host_cc "$@" <<EOF && append host_cflags "$@"
824int x;
825EOF
826}
827
c505dd31
MR
828apply(){
829 file=$1
830 shift
831 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
832}
833
dcd61286
DB
834# CONFIG_LIST contains configurable options, while HAVE_LIST is for
835# system-dependent things.
836
4a0d6686
AJ
837COMPONENT_LIST="
838 bsfs
839 decoders
840 demuxers
841 encoders
3cde40aa 842 filters
5666fd73 843 hwaccels
c552605c 844 indevs
4a0d6686 845 muxers
c552605c 846 outdevs
4a0d6686
AJ
847 parsers
848 protocols
849"
850
851CONFIG_LIST="
852 $COMPONENT_LIST
e8ed9b7a 853 aandct
f7679c54
VS
854 avfilter
855 avfilter_lavf
c88f5d72
MR
856 avisynth
857 beos_netserver
f402916e 858 bzlib
c73f65d9 859 doc
27a9466b 860 fastdiv
c88f5d72
MR
861 ffmpeg
862 ffplay
863 ffserver
1848f7d9 864 fft
4f034993 865 golomb
c88f5d72 866 gpl
ecfc4f44 867 gprof
d8d0d0b2 868 gray
3abe5fbd 869 hardcoded_tables
c88f5d72 870 ipv6
f7b8bffe 871 libdc1394
690bfceb 872 libdirac
2eed5a46
DB
873 libfaac
874 libfaad
875 libfaadbin
c88f5d72 876 libgsm
6ebe07fb 877 libmp3lame
c88f5d72 878 libnut
0b175caa
DB
879 libopencore_amrnb
880 libopencore_amrwb
9a77d59a 881 libopenjpeg
f7cd9eed 882 libschroedinger
ae14f311 883 libspeex
150d2772 884 libtheora
c88f5d72 885 libvorbis
1cc60c47
DB
886 libx264
887 libxvid
f4d608e3 888 lpc
47a158cb 889 mdct
c88f5d72 890 memalign_hack
a8150374 891 mlib
c88f5d72
MR
892 mpegaudio_hp
893 network
3fe142e2 894 nonfree
8a3c8627 895 pic
4a24ab64 896 postproc
2b4c3615 897 powerpc_perf
68602540 898 rdft
e90f5b5a 899 runtime_cpudetect
2e35e684 900 shared
bd2216e4 901 small
2e35e684 902 static
a9ddb5b1 903 swscale_alpha
17492d5e
DB
904 vaapi
905 vdpau
9cad0e4e 906 version3
56a059ac 907 x11grab
c88f5d72 908 zlib
4a0d6686 909"
c88f5d72 910
8eee7025
DB
911THREADS_LIST='
912 beosthreads
d22e8442 913 os2threads
8eee7025
DB
914 pthreads
915 w32threads
916'
917
3f5b56e5
MR
918ARCH_LIST='
919 alpha
a2fc0f6a 920 arm
fdcd782d
MR
921 avr32
922 avr32_ap
923 avr32_uc
3f5b56e5
MR
924 bfin
925 ia64
926 m68k
927 mips
bae3abb0 928 mips64
3f5b56e5 929 parisc
79cb09b2 930 ppc
34d11b87 931 ppc64
3f5b56e5
MR
932 s390
933 sh4
934 sparc
935 sparc64
936 x86
937 x86_32
938 x86_64
939'
940
941ARCH_EXT_LIST='
1ac9331a 942 altivec
3bf96eec 943 amd3dnow
a1ef9f08 944 amd3dnowext
1ac9331a 945 armv5te
edab3048 946 armv6
ab5cb084 947 armv6t2
f55b299a 948 armvfp
3f5b56e5
MR
949 iwmmxt
950 mmi
951 mmx
d7f0920b 952 mmx2
6b18d278 953 neon
799fde37 954 ppc4xx
1bb04d5a 955 sse
9eeed841 956 ssse3
bd9d34a0 957 vis
3f5b56e5
MR
958'
959
960HAVE_LIST="
961 $ARCH_EXT_LIST
962 $THREADS_LIST
35fd8122 963 alsa_asoundlib_h
3f5b56e5 964 altivec_h
c9fdab0d 965 arpa_inet_h
e7ea5e3d 966 attribute_packed
08a85a59 967 bigendian
6bd859d6 968 bswap
ecf97f22 969 closesocket
1ac9331a 970 cmov
e16e49ac 971 conio_h
c88f5d72 972 dcbzl
f8aa696f
DB
973 dev_bktr_ioctl_bt848_h
974 dev_bktr_ioctl_meteor_h
975 dev_ic_bt8xx_h
976 dev_video_meteor_ioctl_meteor_h
977 dev_video_bktr_ioctl_bt848_h
18b67ae5 978 dlfcn_h
c88f5d72 979 dlopen
bc574408 980 dos_paths
245626d0
DB
981 ebp_available
982 ebx_available
6b7c7703
VS
983 exp2
984 exp2f
c2a29455 985 fast_64bit
669b5583 986 fast_clz
7073e9fc 987 fast_cmov
7b829d2a 988 fast_unaligned
9d99cc5a 989 fork
84882df6 990 getaddrinfo
da9e86f8 991 gethrtime
4e68cb8a 992 GetProcessTimes
66be5b45 993 getrusage
2e1913b1 994 inet_aton
61d251db 995 inline_asm
abfc8d05 996 isatty
9f5ff83f 997 ldbrx
0b4a1821
AS
998 libdc1394_1
999 libdc1394_2
a33cab3a 1000 llrint
291fd18a 1001 log2
6b7c7703 1002 log2f
85dd97ad 1003 loongson
a33cab3a 1004 lrint
c88f5d72 1005 lrintf
e4673692 1006 lzo1x_999_compress
f8aa696f
DB
1007 machine_ioctl_bt848_h
1008 machine_ioctl_meteor_h
c88f5d72
MR
1009 malloc_h
1010 memalign
6ffa87d3 1011 mkstemp
b4e806b2 1012 pld
1f91cdce 1013 posix_memalign
a33cab3a
MK
1014 round
1015 roundf
c88f5d72
MR
1016 sdl
1017 sdl_video_size
b507ebd1 1018 setmode
72be9e73 1019 socklen_t
deb29777 1020 soundcard_h
f8cda19e 1021 poll_h
c0018613 1022 struct_addrinfo
33a4dbdd 1023 struct_sockaddr_storage
b58412f1 1024 sys_mman_h
b091aa44 1025 sys_resource_h
81644c2e 1026 sys_select_h
deb29777 1027 sys_soundcard_h
1b6e8b73 1028 sys_videoio_h
d3a4b4e0 1029 ten_operands
e16e49ac 1030 termios_h
b265431e 1031 threads
7b04b8a0 1032 truncf
ce742de2 1033 vfp_args
7c5bfe7a 1034 VirtualAlloc
6ff3f3e7 1035 winsock2_h
cc078b5d 1036 xform_asm
304d586d 1037 yasm
0cb78cef 1038"
44161118 1039
b6bb00b0
MR
1040# options emitted with CONFIG_ prefix but not available on command line
1041CONFIG_EXTRA="
9cad0e4e
DB
1042 gplv3
1043 lgplv3
b6bb00b0
MR
1044"
1045
520cc7f1 1046CMDLINE_SELECT="
3f5b56e5 1047 $ARCH_EXT_LIST
520cc7f1 1048 $CONFIG_LIST
8eee7025 1049 $THREADS_LIST
c8a4ae00 1050 asm
db6107b6 1051 cross_compile
520cc7f1
MR
1052 debug
1053 extra_warnings
8c6afa4d 1054 logging
d2bbb2f7 1055 optimizations
87a0fb62 1056 stripping
7595a5e4 1057 yasm
520cc7f1 1058"
426be5dc
DB
1059
1060PATHS_LIST='
d156bede 1061 bindir
14a8acf1 1062 datadir
26759c44
MR
1063 incdir
1064 libdir
26759c44
MR
1065 mandir
1066 prefix
1067 shlibdir
426be5dc
DB
1068'
1069
1070CMDLINE_SET="
1071 $PATHS_LIST
1072 arch
313c46a6 1073 as
426be5dc
DB
1074 build_suffix
1075 cc
1076 cpu
1077 cross_prefix
50567afa 1078 dep_cc
ac63af34 1079 extra_version
9da6609f
MR
1080 host_cc
1081 host_cflags
1082 host_ldflags
1083 host_libs
82bb3329 1084 host_os
684b28e0 1085 ld
426be5dc 1086 logfile
89641463 1087 nm
26759c44 1088 source_path
c5200f17
MR
1089 sysinclude
1090 sysroot
a7ada2ba 1091 target_exec
26759c44 1092 target_os
a7ada2ba 1093 target_path
426be5dc 1094"
520cc7f1 1095
89f2932b
MR
1096CMDLINE_APPEND="
1097 extra_cflags
1098"
1099
912f3148
DB
1100# code dependency declarations
1101
9eeed841 1102# architecture extensions
808fa33c 1103
a2fc0f6a
MR
1104armv5te_deps="arm"
1105armv6_deps="arm"
ab5cb084 1106armv6t2_deps="arm"
a2fc0f6a
MR
1107armvfp_deps="arm"
1108iwmmxt_deps="arm"
808fa33c
MR
1109neon_deps="arm"
1110
e241ba14 1111mmi_deps="mips"
808fa33c
MR
1112
1113altivec_deps="ppc"
1114ppc4xx_deps="ppc"
1115
1116vis_deps="sparc"
1117
e939cedd 1118x86_64_select="cmov fast_cmov"
808fa33c
MR
1119amd3dnow_deps="mmx"
1120amd3dnowext_deps="amd3dnow"
9eeed841 1121mmx_deps="x86"
75aa95a6 1122mmx2_deps="mmx"
75aa95a6
DB
1123sse_deps="mmx"
1124ssse3_deps="sse"
9eeed841 1125
e939cedd 1126fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
669b5583 1127fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
e939cedd 1128fast_unaligned_if_any="armv6 ppc x86"
669b5583 1129
89e053f8 1130need_memalign="altivec neon sse"
6fec122a 1131inline_asm_deps="!tms470"
89e053f8 1132
5666fd73 1133# decoders / encoders / hardware accelerators
f1e94694 1134aac_decoder_select="fft mdct aac_parser"
84c04e25 1135aac_encoder_select="fft mdct"
5b423887 1136ac3_decoder_select="fft mdct ac3_parser"
f4d608e3 1137alac_encoder_select="lpc"
47a158cb 1138atrac3_decoder_select="fft mdct"
4f034993 1139cavs_decoder_select="golomb"
47a158cb 1140cook_decoder_select="fft mdct"
2eef7c62 1141cscd_decoder_suggest="zlib"
47a158cb 1142dca_decoder_select="fft mdct"
e8ed9b7a 1143dnxhd_encoder_select="aandct"
2eef7c62 1144dxa_decoder_select="zlib"
baf91bb9 1145eac3_decoder_select="ac3_decoder"
84c04e25 1146eamad_decoder_select="aandct"
e8ed9b7a 1147eatgq_decoder_select="aandct"
d52b39c7 1148eatqi_decoder_select="aandct"
4f034993
MR
1149ffv1_decoder_select="golomb"
1150flac_decoder_select="golomb"
f4d608e3 1151flac_encoder_select="golomb lpc"
2eef7c62
AJ
1152flashsv_decoder_select="zlib"
1153flashsv_encoder_select="zlib"
4414137e 1154flv_decoder_select="h263_decoder"
4d4b4bd1 1155flv_encoder_select="h263_encoder"
e8ed9b7a 1156h261_encoder_select="aandct"
7f647ae0 1157h263_decoder_select="h263_parser"
e8ed9b7a 1158h263_encoder_select="aandct"
ff418735 1159h263_vaapi_hwaccel_deps="va_va_h"
95a61cfc 1160h263_vaapi_hwaccel_select="vaapi h263_decoder"
4414137e 1161h263i_decoder_select="h263_decoder"
fe629c2d 1162h263p_encoder_select="h263_encoder"
4f034993 1163h264_decoder_select="golomb"
ff418735 1164h264_vaapi_hwaccel_deps="va_va_h"
17492d5e 1165h264_vaapi_hwaccel_select="vaapi"
711dae77 1166h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
95a61cfc 1167h264_vdpau_decoder_select="vdpau h264_decoder"
47a158cb 1168imc_decoder_select="fft mdct"
4f034993
MR
1169jpegls_decoder_select="golomb"
1170jpegls_encoder_select="golomb"
e8ed9b7a 1171ljpeg_encoder_select="aandct"
4f034993 1172loco_decoder_select="golomb"
e8ed9b7a 1173mjpeg_encoder_select="aandct"
2cca233b 1174mlp_decoder_select="mlp_parser"
e8ed9b7a
DB
1175mpeg1video_encoder_select="aandct"
1176mpeg2video_encoder_select="aandct"
4414137e 1177mpeg4_decoder_select="h263_decoder mpeg4video_parser"
c37de5e1 1178mpeg4_encoder_select="h263_encoder"
711dae77 1179mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
95a61cfc 1180mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
711dae77 1181mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
95a61cfc 1182mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
ff418735 1183mpeg2_vaapi_hwaccel_deps="va_va_h"
95a61cfc 1184mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
ff418735 1185mpeg4_vaapi_hwaccel_deps="va_va_h"
95a61cfc 1186mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
70e0c871
NC
1187mpeg4_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1188mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
8f6f050a 1189mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
4d8eecf4 1190mpeg_xvmc_decoder_select="mpegvideo_decoder"
4414137e 1191msmpeg4v1_decoder_select="h263_decoder"
4e169d89 1192msmpeg4v1_encoder_select="h263_encoder"
4414137e 1193msmpeg4v2_decoder_select="h263_decoder"
4e169d89 1194msmpeg4v2_encoder_select="h263_encoder"
4414137e 1195msmpeg4v3_decoder_select="h263_decoder"
4e169d89 1196msmpeg4v3_encoder_select="h263_encoder"
47a158cb
MR
1197nellymoser_decoder_select="fft mdct"
1198nellymoser_encoder_select="fft mdct"
2eef7c62
AJ
1199png_decoder_select="zlib"
1200png_encoder_select="zlib"
63cae55d 1201qdm2_decoder_select="fft mdct rdft"
a8beb22f 1202rv10_decoder_select="h263_decoder"
b2bf38b4 1203rv10_encoder_select="h263_encoder"
a8beb22f 1204rv20_decoder_select="h263_decoder"
b2bf38b4 1205rv20_encoder_select="h263_encoder"
d52b39c7
AJ
1206rv30_decoder_select="golomb"
1207rv40_decoder_select="golomb"
4f034993
MR
1208shorten_decoder_select="golomb"
1209sonic_decoder_select="golomb"
1210sonic_encoder_select="golomb"
1211sonic_ls_encoder_select="golomb"
1212svq3_decoder_select="golomb"
bee2eac5 1213svq3_decoder_suggest="zlib"
4eef77c1 1214theora_decoder_select="vp3_decoder"
2eef7c62
AJ
1215tiff_decoder_suggest="zlib"
1216tiff_encoder_suggest="zlib"
aec09a00 1217truehd_decoder_select="mlp_decoder"
2eef7c62 1218tscc_decoder_select="zlib"
f95bfab0 1219vc1_decoder_select="h263_decoder"
ff418735 1220vc1_vaapi_hwaccel_deps="va_va_h"
95a61cfc 1221vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
711dae77 1222vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
95a61cfc 1223vc1_vdpau_decoder_select="vdpau vc1_decoder"
47a158cb
MR
1224vorbis_decoder_select="fft mdct"
1225vorbis_encoder_select="fft mdct"
e82dc4c9
DB
1226vp6a_decoder_select="vp6_decoder"
1227vp6f_decoder_select="vp6_decoder"
47a158cb
MR
1228wmav1_decoder_select="fft mdct"
1229wmav1_encoder_select="fft mdct"
1230wmav2_decoder_select="fft mdct"
1231wmav2_encoder_select="fft mdct"
f95bfab0 1232wmv1_decoder_select="h263_decoder"
665507aa 1233wmv1_encoder_select="h263_encoder"
f95bfab0 1234wmv2_decoder_select="h263_decoder"
1746e2a9 1235wmv2_encoder_select="h263_encoder"
015f8ee0
DB
1236wmv3_decoder_select="vc1_decoder"
1237wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1238wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
2eef7c62
AJ
1239zlib_decoder_select="zlib"
1240zlib_encoder_select="zlib"
1241zmbv_decoder_select="zlib"
1242zmbv_encoder_select="zlib"
30fd06be 1243
28b80940
DB
1244# parsers
1245h264_parser_select="golomb"
1246
f1e94694
DB
1247# bitstream_filters
1248aac_adtstoasc_bsf_select="aac_parser"
1249
912f3148 1250# external libraries
1b71f045 1251libdirac_decoder_deps="libdirac !libschroedinger"
690bfceb 1252libdirac_encoder_deps="libdirac"
c9171a83 1253libfaac_encoder_deps="libfaac"
69ddbd1d 1254libfaad_decoder_deps="libfaad"
4ec45764 1255libfaadbin_decoder_extralibs='$ldl'
299c77d5
MR
1256libgsm_decoder_deps="libgsm"
1257libgsm_encoder_deps="libgsm"
8ffed8d8
MR
1258libgsm_ms_decoder_deps="libgsm"
1259libgsm_ms_encoder_deps="libgsm"
1cc60c47 1260libmp3lame_encoder_deps="libmp3lame"
0b175caa
DB
1261libopencore_amrnb_decoder_deps="libopencore_amrnb"
1262libopencore_amrnb_encoder_deps="libopencore_amrnb"
1263libopencore_amrwb_decoder_deps="libopencore_amrwb"
9a77d59a 1264libopenjpeg_decoder_deps="libopenjpeg"
f7cd9eed
AS
1265libschroedinger_decoder_deps="libschroedinger"
1266libschroedinger_encoder_deps="libschroedinger"
ae14f311 1267libspeex_decoder_deps="libspeex"
150d2772 1268libtheora_encoder_deps="libtheora"
b0caf888 1269libvorbis_encoder_deps="libvorbis"
1cc60c47
DB
1270libx264_encoder_deps="libx264"
1271libxvid_encoder_deps="libxvid"
30fd06be 1272
912f3148 1273# demuxers / muxers
03a76ba9 1274ac3_demuxer_deps="ac3_parser"
647c2356 1275asf_stream_muxer_select="asf_muxer"
4e622dea
SS
1276avisynth_demuxer_deps="avisynth"
1277dirac_demuxer_deps="dirac_parser"
5b423887 1278eac3_demuxer_select="ac3_parser"
647c2356 1279ipod_muxer_select="mov_muxer"
4e622dea
SS
1280libnut_demuxer_deps="libnut"
1281libnut_muxer_deps="libnut"
647c2356 1282matroska_audio_muxer_select="matroska_muxer"
4e622dea
SS
1283matroska_demuxer_suggest="zlib bzlib"
1284mov_demuxer_suggest="zlib"
1285mp3_demuxer_deps="mpegaudio_parser"
647c2356
DB
1286mp4_muxer_select="mov_muxer"
1287mpegtsraw_demuxer_select="mpegts_demuxer"
1288mxf_d10_muxer_select="mxf_muxer"
24ca518b 1289ogg_demuxer_select="golomb"
647c2356 1290psp_muxer_select="mov_muxer"
4e622dea
SS
1291rtsp_demuxer_deps="sdp_demuxer"
1292sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
f1e94694 1293spdif_muxer_select="aac_parser"
647c2356
DB
1294tg2_muxer_select="mov_muxer"
1295tgp_muxer_select="mov_muxer"
6bdaa5f4 1296w64_demuxer_deps="wav_demuxer"
4e622dea
SS
1297
1298# indevs / outdevs
38e54a75
SS
1299alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1300alsa_indev_extralibs="-lasound"
1301alsa_outdev_deps="alsa_asoundlib_h"
1302alsa_outdev_extralibs="-lasound"
1303audio_beos_indev_deps="audio_beos"
1304audio_beos_indev_extralibs="-lmedia -lbe"
1305audio_beos_outdev_deps="audio_beos"
1306audio_beos_outdev_extralibs="-lmedia -lbe"
38e54a75 1307bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
38e54a75
SS
1308dv1394_indev_deps="dv1394 dv_demuxer"
1309jack_indev_deps="jack_jack_h"
1310jack_indev_extralibs="-ljack"
1311libdc1394_indev_deps="libdc1394"
38e54a75
SS
1312oss_indev_deps_any="soundcard_h sys_soundcard_h"
1313oss_outdev_deps_any="soundcard_h sys_soundcard_h"
38e54a75
SS
1314v4l_indev_deps="linux_videodev_h"
1315v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1316vfwcap_indev_deps="capCreateCaptureWindow"
1317vfwcap_indev_extralibs="-lvfw32"
1318x11_grab_device_indev_deps="x11grab XShmCreateImage"
781c1aa6 1319x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
30fd06be 1320
912f3148 1321# protocols
3fff6382 1322gopher_protocol_deps="network"
c08fb000 1323http_protocol_deps="network"
cbf29889 1324rtmp_protocol_deps="tcp_protocol"
c08fb000
AB
1325rtp_protocol_deps="udp_protocol"
1326tcp_protocol_deps="network"
1327udp_protocol_deps="network"
1328
f7679c54 1329# filters
81124ba0 1330movie_filter_deps="avfilter_lavf"
f7679c54 1331
912f3148 1332# programs
fa859b4d 1333ffplay_deps="sdl"
6ad42348 1334ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
4ec45764 1335ffserver_extralibs='$ldl'
a2830dca 1336
c73f65d9 1337doc_deps="texi2html"
912f3148 1338
de6d9b64 1339# default parameters
8a608357 1340
2ba042a7 1341logfile="config.err"
8a608357
MR
1342
1343# installation paths
c9d19248
MR
1344prefix_default="/usr/local"
1345bindir_default='${prefix}/bin'
14a8acf1 1346datadir_default='${prefix}/share/ffmpeg'
c9d19248
MR
1347incdir_default='${prefix}/include'
1348libdir_default='${prefix}/lib'
1349mandir_default='${prefix}/share/man'
1350shlibdir_default="$libdir_default"
8a608357
MR
1351
1352# toolchain
11e6d03a 1353ar="ar"
13c7df3d 1354cc_default="gcc"
a3d7c197 1355cc_version=\"unknown\"
9da6609f 1356host_cc_default="gcc"
11e6d03a 1357ln_s="ln -sf"
89641463 1358nm_default="nm"
11e6d03a 1359objformat="elf"
be7109c1 1360ranlib="ranlib"
0f3cb305 1361strip="strip"
11e6d03a 1362yasmexe="yasm"
8a608357
MR
1363
1364# machine
5e622c40 1365arch=$(uname -m)
38d0a8aa 1366cpu="generic"
8a608357 1367
8a608357 1368# OS
4f854758 1369target_os=$(tolower $(uname -s))
82bb3329 1370host_os=$target_os
8a608357 1371
8a608357 1372# configurable options
c8a4ae00 1373enable asm
497237c7 1374enable debug
c73f65d9 1375enable doc
aa033b1e 1376enable fastdiv
497237c7
RP
1377enable ffmpeg
1378enable ffplay
1379enable ffserver
1380enable ipv6
497237c7
RP
1381enable mpegaudio_hp
1382enable network
8400d6b8 1383enable optimizations
497237c7 1384enable protocols
530dc538 1385enable static
87a0fb62 1386enable stripping
a9ddb5b1 1387enable swscale_alpha
8a608357 1388
8a608357 1389# build settings
9987769a 1390SHFLAGS='-shared -Wl,-soname,$$(@F)'
c536cb09 1391FFSERVERLDFLAGS=-Wl,-E
f3ec2d46
SG
1392LIBPREF="lib"
1393LIBSUF=".a"
c5f14466
RP
1394FULLNAME='$(NAME)$(BUILDSUF)'
1395LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
f3ec2d46
SG
1396SLIBPREF="lib"
1397SLIBSUF=".so"
c5f14466 1398SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
b29bddab
DB
1399SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1400SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
24743a76 1401LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
ef0bc4c9 1402
7e6c86e6
MR
1403CC_O='-o $@'
1404
f0125de9 1405host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
9da6609f
MR
1406host_libs='-lm'
1407
a7ada2ba
MR
1408target_path='.'
1409
0d7dca36
DB
1410# gcc stupidly only outputs the basename of targets with -MM, but we need the
1411# full relative path for objects in subdirectories for non-recursive Make.
c1c3933a 1412DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
d8059267 1413DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
315c741d 1414
c597172e 1415# find source path
5e622c40 1416source_path="$(dirname "$0")"
497237c7 1417enable source_path_used
24524f36 1418if test -f configure; then
5e622c40 1419 source_path="$(pwd)"
497237c7 1420 disable source_path_used
c597172e 1421else
5e622c40 1422 source_path="$(cd "$source_path"; pwd)"
c597172e 1423 echo "$source_path" | grep -q '[[:blank:]]' &&
7483e694 1424 die "Out of tree builds are impossible with whitespace in source path."
337cee68
MC
1425 test -e "$source_path/config.h" &&
1426 die "Out of tree builds are impossible with config.h in source dir."
c597172e
MR
1427fi
1428
13cbe2c0 1429for v in "$@"; do
b04251c5
MR
1430 r=${v#*=}
1431 l=${v%"$r"}
1432 r=$(sh_quote "$r")
13cbe2c0
MR
1433 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1434done
c597172e 1435
73ef8980
MR
1436find_things(){
1437 thing=$1
1438 pattern=$2
1439 file=$source_path/$3
932ccf39 1440 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
73ef8980
MR
1441}
1442
1443ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1444DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
5666fd73 1445HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
73ef8980
MR
1446PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1447BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1448MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1449DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
38e54a75
SS
1450OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
1451INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
73ef8980 1452PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
81124ba0 1453FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
c597172e 1454
7483e694
DB
1455enable $ARCH_EXT_LIST \
1456 $DECODER_LIST \
1457 $ENCODER_LIST \
5666fd73 1458 $HWACCEL_LIST \
7483e694
DB
1459 $PARSER_LIST \
1460 $BSF_LIST \
1461 $DEMUXER_LIST \
1462 $MUXER_LIST \
f7679c54 1463 $FILTER_LIST \
7483e694
DB
1464 $PROTOCOL_LIST \
1465 $INDEV_LIST \
1466 $OUTDEV_LIST \
c597172e
MR
1467
1468die_unknown(){
1469 echo "Unknown option \"$1\"."
1470 echo "See $0 --help for available options."
1471 exit 1
1472}
1473
794f8e97 1474show_list() {
bf0c4afa
RP
1475 suffix=_$1
1476 shift
1477 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
794f8e97
PI
1478 exit 0
1479}
1480
c597172e 1481for opt do
7483e694
DB
1482 optval="${opt#*=}"
1483 case "$opt" in
0f010b2f 1484 --extra-ldflags=*) add_ldflags $optval
7483e694 1485 ;;
0f010b2f 1486 --extra-libs=*) add_extralibs $optval
7483e694 1487 ;;
8fb1cb58 1488 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
9aa8ed9d 1489 ;;
40bcf4c7
BL
1490 --enable-debug=*) debuglevel="$optval"
1491 ;;
7483e694 1492 --enable-*=*|--disable-*=*)
8b93ddc3 1493 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
be8f2501
MR
1494 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1495 eval list=\$$(toupper $thing)_LIST
8b93ddc3
MR
1496 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1497 $action $(filter "$name" $list)
7483e694
DB
1498 ;;
1499 --enable-?*|--disable-?*)
5e622c40 1500 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
e3773a55 1501 if is_in $option $COMPONENT_LIST; then
fed5d54b 1502 test $action = disable && action=unset
e3773a55
MR
1503 eval $action \$$(toupper ${option%s})_LIST
1504 elif is_in $option $CMDLINE_SELECT; then
1505 $action $option
1506 else
1507 die_unknown $opt
1508 fi
7483e694
DB
1509 ;;
1510 --list-*)
1511 NAME="${opt#--list-}"
1512 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1513 NAME=${NAME%s}
1514 eval show_list $NAME \$$(toupper $NAME)_LIST
1515 ;;
1516 --help|-h) show_help
1517 ;;
1518 *)
884a36a7 1519 optname="${opt%%=*}"
26759c44
MR
1520 optname="${optname#--}"
1521 optname=$(echo "$optname" | sed 's/-/_/g')
89f2932b
MR
1522 if is_in $optname $CMDLINE_SET; then
1523 eval $optname='$optval'
1524 elif is_in $optname $CMDLINE_APPEND; then
1525 append $optname "$optval"
1526 else
1527 die_unknown $opt
1528 fi
7483e694
DB
1529 ;;
1530 esac
c597172e
MR
1531done
1532
bcea99bb
MR
1533disabled logging && logfile=/dev/null
1534
13cbe2c0 1535echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
bcea99bb
MR
1536set >> $logfile
1537
9da6609f
MR
1538test -n "$cross_prefix" && enable cross_compile
1539
adb2b908 1540ar="${cross_prefix}${ar}"
11e6d03a 1541cc_default="${cross_prefix}${cc_default}"
20e0ed95 1542nm_default="${cross_prefix}${nm_default}"
adb2b908
RP
1543ranlib="${cross_prefix}${ranlib}"
1544strip="${cross_prefix}${strip}"
1545
c5200f17
MR
1546sysinclude_default="${sysroot}/usr/include"
1547
75800dce 1548set_default cc nm sysinclude
9da6609f
MR
1549enabled cross_compile || host_cc_default=$cc
1550set_default host_cc
13c7df3d 1551
82bb3329
MR
1552exesuf() {
1553 case $1 in
1554 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1555 esac
1556}
1557
1558EXESUF=$(exesuf $target_os)
1559HOSTEXESUF=$(exesuf $host_os)
c0f5b7f1 1560
e4e69e0b 1561# set temporary file name
a49d42c2 1562: ${TMPDIR:=$TEMPDIR}
c51fafa1 1563: ${TMPDIR:=$TMP}
a49d42c2 1564: ${TMPDIR:=/tmp}
e4e69e0b 1565
54460a83
MR
1566if ! check_cmd type mktemp; then
1567 # simple replacement for missing mktemp
1568 # NOT SAFE FOR GENERAL USE
1569 mktemp(){
1570 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1571 }
1572fi
1573
1574tmpfile(){
1575 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1576 (set -C; exec > $tmp) 2>/dev/null ||
f7ba16a7 1577 die "Unable to create temporary file in $TMPDIR."
54460a83
MR
1578 append TMPFILES $tmp
1579 eval $1=$tmp
1580}
1581
1582trap 'rm -f -- $TMPFILES' EXIT
1583trap exit HUP INT TERM
1584
1585tmpfile TMPC .c
1586tmpfile TMPE $EXESUF
1587tmpfile TMPH .h
1588tmpfile TMPO .o
1589tmpfile TMPS .S
a482e61b 1590tmpfile TMPV .ver
54460a83
MR
1591tmpfile TMPSH .sh
1592
1593unset -f mktemp
e4e69e0b 1594
993f2d0f
MR
1595# make sure we can execute files in $TMPDIR
1596cat > $TMPSH 2>> $logfile <<EOF
1597#! /bin/sh
1598EOF
1599chmod +x $TMPSH >> $logfile 2>&1
1600if ! $TMPSH >> $logfile 2>&1; then
1601 cat <<EOF
1602Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1603variable to another directory and make sure that it is not mounted noexec.
1604EOF
1605 die "Sanity test failed."
1606fi
993f2d0f 1607
19b4c628
MR
1608filter_cflags=echo
1609filter_cppflags=echo
1610filter_asflags=echo
1611
8f0c157a 1612if $cc -v 2>&1 | grep -qi ^gcc; then
629687f6 1613 cc_type=gcc
a3d7c197 1614 cc_version=__VERSION__
aef6bd1b
MR
1615 if ! $cc -dumpversion | grep -q '^2\.'; then
1616 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1617 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1618 fi
629687f6
MR
1619elif $cc --version 2>/dev/null | grep -q Intel; then
1620 cc_type=icc
6e3fa35d 1621 cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
07dec06e
MR
1622 CC_DEPFLAGS='-MMD'
1623 AS_DEPFLAGS='-MMD'
629687f6
MR
1624elif $cc -v 2>&1 | grep -q xlc; then
1625 cc_type=xlc
6e3fa35d 1626 cc_version="AV_STRINGIFY(__IBMC__)"
df442a8d
MR
1627elif $cc -V 2>/dev/null | grep -q Compaq; then
1628 cc_type=ccc
6e3fa35d 1629 cc_version="AV_STRINGIFY(__DECC_VER)"
d8059267 1630 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
03754fcd 1631 debuglevel=3
df442a8d 1632 add_ldflags -Wl,-z,now # calls to libots crash without this
6a0d5493 1633elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
03e37762
MR
1634 test -d "$sysroot" || die "No valid sysroot specified."
1635 cc_type=armcc
6e3fa35d 1636 cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
03e37762
MR
1637 armcc_conf="$PWD/armcc.conf"
1638 $cc --arm_linux_configure \
1639 --arm_linux_config_file="$armcc_conf" \
1640 --configure_sysroot="$sysroot" \
1641 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1642 die "Error creating armcc configuration file."
1643 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
75800dce 1644 as_default="${cross_prefix}gcc"
07dec06e
MR
1645 CC_DEPFLAGS='-MMD'
1646 AS_DEPFLAGS='-MMD'
6fec122a
MR
1647elif $cc -version 2>/dev/null | grep -q TMS470; then
1648 cc_type=tms470
6e3fa35d 1649 cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
6fec122a
MR
1650 cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1651 CC_O='-fr=$(@D)'
1652 as_default="${cross_prefix}gcc"
1653 ld_default="${cross_prefix}gcc"
6fec122a
MR
1654 TMPO=$(basename $TMPC .c).o
1655 append TMPFILES $TMPO
1656 add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
07dec06e
MR
1657 CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1658 AS_DEPFLAGS='-MMD'
6fec122a
MR
1659 filter_cflags=tms470_flags
1660 tms470_flags(){
1661 for flag; do
1662 case $flag in
1663 -march=*|-mcpu=*)
1664 case "${flag#*=}" in
1665 armv7-a|cortex-a*) echo -mv=7a8 ;;
1666 armv7-r|cortex-r*) echo -mv=7r4 ;;
1667 armv7-m|cortex-m*) echo -mv=7m3 ;;
1668 armv6*|arm11*) echo -mv=6 ;;
1669 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1670 echo -mv=5e ;;
1671 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
1672 esac
1673 ;;
1674 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
1675 -mfpu=vfp) echo --float_support=vfpv2 ;;
a2709020 1676 -msoft-float) echo --float_support=vfplib ;;
6fec122a
MR
1677 -Os) echo -O3 -mf=2 ;;
1678 -O[0-3]) echo $flag -mf=5 ;;
1679 -g) echo -g -mn ;;
1680 esac
1681 done
1682 }
06da6943
DC
1683elif $cc -v 2>&1 | grep -q clang; then
1684 cc_type=clang
1685 cc_version=__VERSION__
1686 CC_DEPFLAGS='-MMD'
1687 AS_DEPFLAGS='-MMD'
2a472e9c
MK
1688elif $cc -V 2>&1 | grep -q Sun; then
1689 cc_type=suncc
1690 cc_version="AV_STRINGIFY(__SUNPRO_C)"
faa374b7 1691 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2a472e9c 1692 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
03279bbe
MK
1693 filter_cflags=suncc_flags
1694 suncc_flags(){
1695 for flag; do
1696 case $flag in
1697 -march=*|-mcpu=*)
1698 case "${flag#*=}" in
1699 native) echo -xtarget=native ;;
1700 v9) echo -xarch=sparc ;;
1701 ultrasparc) echo -xarch=sparcvis ;;
1702 ultrasparc3|niagara*) echo -xarch=sparcvis2 ;;
1703 i586|pentium) echo -xchip=pentium ;;
1704 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
1705 pentium3*|c3-2) echo -xtarget=pentium3 ;;
1706 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
1707 pentium4*) echo -xtarget=pentium4 ;;
1708 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
1709 *-sse3) echo -xarch=sse3 ;;
1710 core2) echo -xarch=ssse3 -xchip=core2 ;;
1711 amdfam10|barcelona) echo -xarch=sse4_1 ;;
1712 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
1713 k8|opteron|athlon64|athlon-fx)
1714 echo -xarch=sse2a ;;
1715 athlon*) echo -xarch=pentium_proa ;;
1716 esac
1717 ;;
1718 -std=c99) echo -xc99 ;;
1719 -fomit-frame-pointer) echo -xregs=frameptr ;;
1720 -fPIC) echo -KPIC -xcode=pic32 ;;
1721 -Os) echo -O5 -xspace ;;
1722 -W*,*) echo $flag ;;
1723 -f*-*|-W*) ;;
1724 *) echo $flag ;;
1725 esac
1726 done
1727 }
629687f6
MR
1728fi
1729
1730test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1731
75bafbac 1732: ${as_default:=$cc}
50567afa 1733: ${dep_cc_default:=$cc}
684b28e0 1734: ${ld_default:=$cc}
50567afa 1735set_default as dep_cc ld
75800dce 1736
07dec06e
MR
1737test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1738test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1739
7f32f40c 1740add_cflags $extra_cflags
2f2e6c7c 1741add_asflags $extra_cflags
7f32f40c 1742
154d432c
MR
1743if test -n "$sysroot"; then
1744 case "$cc_type" in
1745 gcc)
467256f2 1746 add_cppflags --sysroot="$sysroot"
154d432c
MR
1747 add_ldflags --sysroot="$sysroot"
1748 ;;
6fec122a
MR
1749 tms470)
1750 add_cppflags -I"$sysinclude"
1751 add_ldflags --sysroot="$sysroot"
1752 ;;
06da6943
DC
1753 clang)
1754 add_cppflags -isysroot="$sysroot"
1755 add_ldflags -isysroot="$sysroot"
1756 ;;
154d432c
MR
1757 esac
1758fi
1759
d22c13a8
MR
1760if test "$cpu" = host; then
1761 enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
1762
1763 case "$cc_type" in
1764 gcc)
1765 check_native(){
1766 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
1767 awk "/$1=/{ match(\$0, /$1=(\\w+)/, a);print a[1];exit }" $TMPE
1768 }
1769 cpu=$(check_native -march || check_native -mcpu)
1770 ;;
1771 esac
1772
1773 test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
1774fi
1775
e939cedd
MR
1776# Deal with common $arch aliases
1777case "$arch" in
1778 arm*)
1779 arch="arm"
1780 ;;
1781 mips|mipsel|IP*)
1782 arch="mips"
1783 ;;
1784 mips64)
1785 arch="mips"
1786 subarch="mips64"
1787 ;;
1788 parisc|hppa)
1789 arch="parisc"
1790 ;;
1791 parisc64|hppa64)
1792 arch="parisc"
1793 subarch="parisc64"
1794 ;;
1795 "Power Macintosh"|ppc|powerpc)
1796 arch="ppc"
1797 ;;
1798 ppc64)
1799 arch="ppc"
1800 subarch="ppc64"
1801 ;;
1802 s390|s390x)
1803 arch="s390"
1804 ;;
1805 sh4|sh)
1806 arch="sh4"
1807 ;;
1808 sun4u|sparc64)
1809 arch="sparc"
1810 subarch="sparc64"
1811 ;;
1812 i[3-6]86|i86pc|BePC|x86_64|amd64)
1813 arch="x86"
1814 ;;
1815esac
1816
1817is_in $arch $ARCH_LIST || echo "WARNING: unknown arch $arch"
343aef9b 1818enable $arch
e939cedd 1819
df5cdc24 1820# Add processor-specific flags
5d54c126
MR
1821if test "$cpu" = generic; then
1822 : do nothing
1823elif enabled ppc; then
343aef9b 1824
9dbd5c3d
MR
1825 case $cpu in
1826 601|ppc601|PowerPC601)
1827 cpuflags="-mcpu=601"
1828 ;;
1829 603*|ppc603*|PowerPC603*)
1830 cpuflags="-mcpu=603"
1831 ;;
1832 604*|ppc604*|PowerPC604*)
1833 cpuflags="-mcpu=604"
1834 ;;
1835 G3|g3|75*|ppc75*|PowerPC75*)
1836 cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1837 ;;
1838 G4|g4|745*|ppc745*|PowerPC745*)
1839 cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1840 ;;
1841 74*|ppc74*|PowerPC74*)
1842 cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1843 ;;
1844 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1845 cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1846 ;;
1847 Cell|CELL|cell)
1848 cpuflags="-mcpu=cell"
1849 enable ldbrx
1850 ;;
1851 esac
343aef9b
MR
1852
1853elif enabled x86; then
1854
9dbd5c3d
MR
1855 case $cpu in
1856 i[345]86|pentium)
1857 cpuflags="-march=$cpu"
1858 disable mmx
1859 ;;
1860 # targets that do NOT support conditional mov (cmov)
1861 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1862 cpuflags="-march=$cpu"
1863 disable cmov
1864 ;;
1865 # targets that do support conditional mov (cmov)
1866 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1867 cpuflags="-march=$cpu"
1868 enable cmov
1869 enable fast_cmov
1870 ;;
1871 # targets that do support conditional mov but on which it's slow
1872 pentium4|pentium4m|prescott|nocona)
1873 cpuflags="-march=$cpu"
1874 enable cmov
1875 disable fast_cmov
1876 ;;
1877 esac
343aef9b
MR
1878
1879elif enabled sparc; then
1880
9dbd5c3d
MR
1881 case $cpu in
1882 sparc64)
1883 cpuflags="-mcpu=v9"
1884 ;;
1885 esac
343aef9b
MR
1886
1887elif enabled arm; then
1888
34ba23c9
MR
1889 case $cpu in
1890 armv*)
1891 cpuflags="-march=$cpu"
1892 ;;
1893 *)
1894 cpuflags="-mcpu=$cpu"
1895 ;;
1896 esac
343aef9b
MR
1897
1898elif enabled alpha; then
1899
34ba23c9 1900 enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
343aef9b
MR
1901
1902elif enabled bfin; then
1903
34ba23c9 1904 cpuflags="-mcpu=$cpu"
343aef9b
MR
1905
1906elif enabled mips; then
1907
34ba23c9 1908 cpuflags="-march=$cpu"
343aef9b
MR
1909
1910elif enabled avr32; then
1911
9dbd5c3d
MR
1912 case $cpu in
1913 ap7[02]0[0-2])
1914 subarch="avr32_ap"
1915 cpuflags="-mpart=$cpu"
1916 ;;
1917 ap)
1918 subarch="avr32_ap"
1919 cpuflags="-march=$cpu"
1920 ;;
1921 uc3[ab]*)
1922 subarch="avr32_uc"
1923 cpuflags="-mcpu=$cpu"
1924 ;;
1925 uc)
1926 subarch="avr32_uc"
1927 cpuflags="-march=$cpu"
1928 ;;
1929 esac
df5cdc24 1930
343aef9b
MR
1931fi
1932
df5cdc24
MR
1933add_cflags $cpuflags
1934add_asflags $cpuflags
1935
993f2d0f
MR
1936# compiler sanity check
1937check_exec <<EOF
1938int main(void){ return 0; }
1939EOF
1940if test "$?" != 0; then
1941 echo "$cc is unable to create an executable file."
1942 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1943 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1944 echo "Only do this if you know what cross compiling means."
1945 fi
1946 die "C compiler test failed."
1947fi
1948
38a9c529 1949add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
e9b9a2f8 1950check_cflags -std=c99
50a334e4 1951check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
9d821fc2
DB
1952#include <stdlib.h>
1953EOF
50a334e4 1954check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
9d821fc2
DB
1955#include <stdlib.h>
1956EOF
e9b9a2f8 1957
f0125de9
MR
1958check_host_cflags -std=c99
1959
b24dbcbd 1960case "$arch" in
e939cedd 1961 alpha|ia64|mips|parisc|sparc)
8a3c8627 1962 spic=$shared
b24dbcbd 1963 ;;
e939cedd 1964 x86)
cfdb6148 1965 subarch="x86_32"
e939cedd 1966 check_cc <<EOF && subarch="x86_64"
58b3536d 1967 int test[(int)sizeof(char*) - 7];
cfdb6148 1968EOF
de27f4d9 1969 if test "$subarch" = "x86_64"; then
e939cedd 1970 spic=$shared
de27f4d9 1971 fi
b24dbcbd 1972 ;;
b24dbcbd
RP
1973esac
1974
343aef9b 1975enable $subarch
8a3c8627 1976enabled spic && enable pic
5755bc88 1977check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
b24dbcbd 1978
7483e694 1979# OS specific
4f854758 1980case $target_os in
7483e694 1981 beos|haiku|zeta)
c9d19248 1982 prefix_default="$HOME/config"
7483e694 1983 # 3 gcc releases known for BeOS, each with ugly bugs
5e622c40 1984 gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
7483e694
DB
1985 case "$gcc_version" in
1986 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1987 disable mmx
1988 ;;
1989 *20010315*) echo "BeBits gcc"
0f010b2f 1990 add_cflags -fno-expensive-optimizations
7483e694
DB
1991 ;;
1992 esac
7483e694
DB
1993 SHFLAGS=-nostart
1994 # enable BeOS things
1995 enable audio_beos
1996 # no need for libm, but the inet stuff
1997 # Check for BONE
1998 # XXX: actually should check for NOT net_server
78fe7631 1999 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
7483e694
DB
2000 network_extralibs="-lbind -lsocket"
2001 else
2002 enable beos_netserver
2003 network_extralibs="-lnet"
2004 fi ;;
2005 sunos)
2006 FFSERVERLDFLAGS=""
9987769a 2007 SHFLAGS='-shared -Wl,-h,$$(@F)'
0600d30a 2008 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
7483e694 2009 network_extralibs="-lsocket -lnsl"
50a334e4 2010 add_cppflags -D__EXTENSIONS__
7483e694
DB
2011 ;;
2012 netbsd)
07a8eef6
MR
2013 oss_indev_extralibs="-lossaudio"
2014 oss_outdev_extralibs="-lossaudio"
7483e694
DB
2015 ;;
2016 openbsd)
89e053f8 2017 enable malloc_aligned
7c4a001a
MR
2018 # On OpenBSD 4.5. the compiler does not use PIC unless
2019 # explicitly using -fPIC. FFmpeg builds fine without PIC,
2020 # however the generated executable will not do anything
2021 # (simply quits with exit-code 1, no crash, no output).
a7b9c8ae 2022 # Thus explicitly enable PIC here.
cd78208b 2023 enable pic
7483e694 2024 SHFLAGS='-shared'
07a8eef6
MR
2025 oss_indev_extralibs="-lossaudio"
2026 oss_outdev_extralibs="-lossaudio"
7483e694 2027 ;;
90b4f091 2028 freebsd|dragonfly)
89e053f8 2029 enable malloc_aligned
7483e694
DB
2030 ;;
2031 bsd/os)
2032 osextralibs="-lpoll -lgnugetopt"
2033 strip="strip -d"
2034 ;;
2035 darwin)
89e053f8 2036 enable malloc_aligned
0138c54e 2037 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
7483e694
DB
2038 strip="strip -x"
2039 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
2040 SLIBSUF=".dylib"
2041 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2042 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2043 FFSERVERLDFLAGS=-Wl,-bind_at_load
304d586d 2044 objformat="macho"
1b0f6fb8 2045 enabled x86_64 && objformat="macho64"
8dfa86f7 2046 enabled_any pic shared ||
2704bd1a 2047 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
7483e694
DB
2048 ;;
2049 mingw32*)
ad7da0b5
RP
2050 # Only WinXP or greater are supported
2051 add_cflags -D_WIN32_WINNT=0x0501
9d3f4f50 2052 if test $target_os = "mingw32ce"; then
1aa71e25
MS
2053 disable network
2054 else
2055 target_os=mingw32
2056 fi
dcc01c06 2057 LIBTARGET=i386
1fc9fb8a 2058 if enabled x86_64; then
89e053f8 2059 enable malloc_aligned
dcc01c06 2060 LIBTARGET=x64
336cc1b0
MS
2061 elif enabled arm; then
2062 LIBTARGET=arm
dcc01c06 2063 fi
fbd971a4 2064 shlibdir_default="$bindir_default"
7483e694
DB
2065 disable ffserver
2066 SLIBPREF=""
2067 SLIBSUF=".dll"
7483e694
DB
2068 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2069 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
06abe7f5 2070 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
4c25d159 2071 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
b9349ff4
MS
2072 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2073 install -d "$(LIBDIR)"; \
2074 install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
7483e694 2075 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
4b51fb1c 2076 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 2077 objformat="win32"
bc574408 2078 enable dos_paths
1894e741 2079 check_cflags -fno-common
b1549d61 2080 if ! enabled x86_64; then
f7ad5aa2
RP
2081 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2082 die "ERROR: MinGW runtime version must be >= 3.15."
8beb4178 2083 enabled_any avisynth vfwcap_indev &&
f7ad5aa2 2084 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
8beb4178 2085 die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
f7ad5aa2 2086 fi
7483e694
DB
2087 ;;
2088 cygwin*)
4f854758 2089 target_os=cygwin
fbd971a4 2090 shlibdir_default="$bindir_default"
7483e694
DB
2091 SLIBPREF="cyg"
2092 SLIBSUF=".dll"
2093 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2094 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2095 SHFLAGS='-shared -Wl,--enable-auto-image-base'
304d586d 2096 objformat="win32"
bc574408 2097 enable dos_paths
1894e741 2098 check_cflags -fno-common
7483e694 2099 ;;
4f365f37 2100 *-dos|freedos|opendos)
fdf11906 2101 disable ffplay ffserver
4f365f37
MK
2102 disable $INDEV_LIST $OUTDEV_LIST
2103 network_extralibs="-lsocket"
ff1c015d 2104 objformat="coff"
bc574408 2105 enable dos_paths
4f365f37 2106 ;;
7483e694 2107 linux)
7483e694
DB
2108 enable dv1394
2109 ;;
2110 irix*)
4f854758 2111 target_os=irix
7483e694
DB
2112 ranlib="echo ignoring ranlib"
2113 ;;
d22e8442 2114 os/2*)
d22e8442
DY
2115 strip="lxlite"
2116 ln_s="cp -f"
d22e8442 2117 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
71c61f62 2118 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
d22e8442 2119 FFSERVERLDFLAGS=""
287d3b13 2120 LIBSUF="_s.a"
d22e8442
DY
2121 SLIBPREF=""
2122 SLIBSUF=".dll"
2123 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2124 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
71c61f62
MR
2125 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2126 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2127 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2128 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2129 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2130 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2131 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2132 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2133 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
d22e8442 2134 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
bc574408 2135 enable dos_paths
d22e8442 2136 ;;
83993c1c
AM
2137 gnu/kfreebsd)
2138 ;;
34e82167 2139 gnu)
34e82167 2140 ;;
d22e8442 2141
7483e694 2142 *)
4f924f9a 2143 die "Unknown OS '$target_os'."
7483e694
DB
2144 ;;
2145esac
2146
c9d19248
MR
2147set_default $PATHS_LIST
2148
c597172e 2149add_extralibs $osextralibs
de6d9b64 2150
28d8e661
DB
2151# Combine FFLDFLAGS and the LDFLAGS environment variable.
2152LDFLAGS="$FFLDFLAGS $LDFLAGS"
e89b8b0a 2153
320d060a 2154# we need to build at least one lib type
93b3c083 2155if ! enabled_any static shared; then
320d060a
DB
2156 cat <<EOF
2157At least one library type must be built.
2158Specify --enable-static to build the static libraries or --enable-shared to
2159build the shared libraries as well. To only build the shared libraries specify
2160--disable-static in addition to --enable-shared.
2161EOF
2162 exit 1;
2163fi
2164
abc4e572 2165disabled static && LIBNAME=""
2a320695 2166
a2234ceb
RP
2167if enabled_any libfaad libfaadbin ; then
2168 if check_header faad.h; then
295b8c70 2169 check_cc <<EOF
a2234ceb
RP
2170#include <faad.h>
2171#ifndef FAAD2_VERSION
2172ok faad1
2173#endif
db817cf3 2174int main(void) { return 0; }
a2234ceb
RP
2175EOF
2176 test $? = 0 && enable libfaad2
2177 else
ff3dac65 2178 die "FAAD test failed."
a2234ceb
RP
2179 fi
2180fi
2181
2182
2184c6f7 2183die_license_disabled() {
4c27207c 2184 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2184c6f7
DB
2185}
2186
2187die_license_disabled gpl libfaad2
2188die_license_disabled gpl libx264
2189die_license_disabled gpl libxvid
2190die_license_disabled gpl postproc
2191die_license_disabled gpl x11grab
2192
2f7ae63b 2193die_license_disabled nonfree libfaac
b2e3c528 2194
0b175caa
DB
2195die_license_disabled version3 libopencore_amrnb
2196die_license_disabled version3 libopencore_amrwb
2197
9cad0e4e 2198enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3fe142e2 2199
9eeed841 2200check_deps $ARCH_EXT_LIST
0f3cb305 2201
40617a6d 2202disabled optimizations || check_cflags -fomit-frame-pointer
cf9d24ad 2203
e276d9e8
MR
2204enable_pic() {
2205 enable pic
bce7b696
MR
2206 add_cppflags -DPIC
2207 add_cflags -fPIC
2208 add_asflags -fPIC
e276d9e8
MR
2209}
2210
2211enabled pic && enable_pic
bce7b696 2212
b4d96ba2
MR
2213check_cc <<EOF || die "Symbol mangling check failed."
2214int ff_extern;
2215EOF
2f05d9c1 2216sym=$($nm -P -g $TMPO | grep ff_extern)
b4d96ba2
MR
2217extern_prefix=${sym%%ff_extern*}
2218
f65883c8
MR
2219check_cc <<EOF && enable inline_asm
2220void foo(void) { __asm__ volatile ("" ::); }
2221EOF
61d251db 2222
df5e3978
MR
2223_restrict=
2224for restrict_keyword in restrict __restrict__ __restrict; do
2225 check_cc <<EOF && _restrict=$restrict_keyword && break
2226void foo(char * $restrict_keyword p);
2227EOF
2228done
2229
2230check_cc <<EOF && enable attribute_packed
2231struct { int x; } __attribute__((packed)) x;
2232EOF
2233
2234check_cc <<EOF || die "endian test failed"
2235unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2236EOF
2237od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2238
e939cedd
MR
2239if enabled alpha; then
2240
2241 check_cflags -mieee
2242
2243elif enabled arm; then
e45391bb 2244
50fa82e6
MR
2245 check_cflags -marm
2246
fa0912fe
MR
2247 check_ld <<EOF && enable vfp_args
2248__asm__ (".eabi_attribute 28, 1");
2249int main(void) { return 0; }
2250EOF
2251
2252 # We have to check if pld is a nop and disable it.
2253 check_asm pld '"pld [r0]"'
2254
2255 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2256 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
2257 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2258 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
2259 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
2260 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
e45391bb 2261
e276d9e8
MR
2262 enabled_all armv6t2 shared !pic && enable_pic
2263
e939cedd
MR
2264elif enabled ia64; then
2265
2266 # HACK: currently fails to build if .bss is > 4MB and shared libs are built
2267 enabled shared && enable_weak hardcoded_tables
2268
fa0912fe 2269elif enabled mips; then
e45391bb 2270
fa0912fe
MR
2271 check_asm loongson '"dmult.g $1, $2, $3"'
2272 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
e45391bb 2273
fa0912fe 2274elif enabled ppc; then
e45391bb 2275
fa0912fe
MR
2276 check_asm dcbzl '"dcbzl 0, 1"'
2277 check_asm ppc4xx '"maclhw r10, r11, r12"'
64de20d1 2278 check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
fa0912fe
MR
2279
2280 # AltiVec flags: The FSF version of GCC differs from the Apple version
2281 if enabled altivec; then
2282 check_cflags -maltivec -mabi=altivec &&
2283 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2284 check_cflags -faltivec
2285
2286 # check if our compiler supports Motorola AltiVec C API
2287 check_cc <<EOF || disable altivec
2288$inc_altivec_h
2289int main(void) {
2290 vector signed int v1, v2, v3;
2291 v1 = vec_add(v2,v3);
2292 return 0;
2293}
2294EOF
2295
2296 # check if our compiler supports braces for vector declarations
2297 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2298$inc_altivec_h
2299int main (void) { (vector int) {1}; return 0; }
2300EOF
2301 fi
e45391bb 2302
fa0912fe 2303elif enabled sparc; then
e45391bb 2304
fa0912fe
MR
2305 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2306 add_cflags -mcpu=ultrasparc -mtune=ultrasparc
e45391bb 2307
fa0912fe 2308elif enabled x86; then
e45391bb 2309
44965991
PI
2310 # check whether EBP is available on x86
2311 # As 'i' is stored on the stack, this program will crash
2312 # if the base pointer is used to access it because the
2313 # base pointer is cleared in the inline assembly code.
7dfef245 2314 check_exec_crash <<EOF && enable ebp_available
44965991 2315 volatile int i=0;
be449fca 2316 __asm__ volatile (
44965991
PI
2317 "xorl %%ebp, %%ebp"
2318 ::: "%ebp");
2319 return i;
44965991
PI
2320EOF
2321
f494213c 2322 # check whether EBX is available on x86
7cee5421
MR
2323 check_asm ebx_available '""::"b"(0)' &&
2324 check_asm ebx_available '"":::"%ebx"'
8e380710 2325
d3a4b4e0
DB
2326 # check whether more than 10 operands are supported
2327 check_cc <<EOF && enable ten_operands
2328int main(void) {
2329 int x=0;
2330 __asm__ volatile(
2331 ""
2332 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2333 );
2334 return 0;
2335}
2336EOF
2337
d7f0920b 2338 # check whether binutils is new enough to compile SSSE3/MMX2
940f335a 2339 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
5fd89ca0 2340 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
6bd859d6
MR
2341
2342 check_asm bswap '"bswap %%eax" ::: "%eax"'
304d586d 2343
d52481b9 2344 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
304d586d 2345 enabled x86_64 && append YASMFLAGS "-m amd64"
a34ebe60 2346 enabled pic && append YASMFLAGS "-DPIC"
5f36d94d 2347 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
304d586d
LM
2348 case "$objformat" in
2349 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
304d586d 2350 esac
7595a5e4 2351 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
e45391bb 2352
669b5583
MR
2353 case "$cpu" in
2354 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2355 disable fast_clz
2356 ;;
2357 esac
2358
44965991
PI
2359fi
2360
a98bb16d
RP
2361if check_func dlopen; then
2362 ldl=
2363elif check_func dlopen -ldl; then
2364 ldl=-ldl
8bf5d58f
MN
2365fi
2366
75ecf149
DB
2367# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2368check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2369
7483e694 2370check_func fork
84882df6 2371check_func getaddrinfo $network_extralibs
7483e694
DB
2372check_func gethrtime
2373check_func getrusage
094c09bb 2374check_func inet_aton $network_extralibs
abfc8d05 2375check_func isatty
7483e694
DB
2376check_func memalign
2377check_func mkstemp
1f91cdce 2378check_func posix_memalign
b507ebd1 2379check_func_headers io.h setmode
e4673692 2380check_func_headers lzo/lzo1x.h lzo1x_999_compress
2446d3d6 2381check_func_headers windows.h GetProcessTimes
7c5bfe7a 2382check_func_headers windows.h VirtualAlloc
6ffa87d3 2383
e16e49ac 2384check_header conio.h
a98bb16d
RP
2385check_header dlfcn.h
2386check_header malloc.h
bf6ce82d 2387check_header poll.h
b58412f1 2388check_header sys/mman.h
b091aa44 2389check_header sys/resource.h
bf6ce82d 2390check_header sys/select.h
a98bb16d 2391check_header termios.h
272081b0
CEH
2392check_header vdpau/vdpau.h
2393check_header vdpau/vdpau_x11.h
68178ca9 2394check_header X11/extensions/XvMClib.h
a98bb16d 2395
89e053f8
MR
2396if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2397 enabled_any $need_memalign ; then
1f91cdce 2398 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
a98bb16d 2399fi
e16e49ac 2400
a4fa192c 2401disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
632948bd 2402disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
57bd82d4
MR
2403
2404# check for some common methods of building with pthread support
2405# do this before the optional library checks as some of them require pthreads
2406if enabled pthreads; then
9e7fd101
MR
2407 if check_func pthread_create; then
2408 :
2409 elif check_func pthread_create -pthread; then
2410 add_cflags -pthread
afc9aee2 2411 add_extralibs -pthread
9e7fd101
MR
2412 elif check_func pthread_create -pthreads; then
2413 add_cflags -pthreads
afc9aee2 2414 add_extralibs -pthreads
8d94f606
GT
2415 elif check_func pthread_create -lpthreadGC2; then
2416 add_extralibs -lpthreadGC2
9e7fd101
MR
2417 elif ! check_lib pthread.h pthread_create -lpthread; then
2418 die "ERROR: can't find pthreads library"
2419 fi
57bd82d4
MR
2420fi
2421
8eee7025 2422for thread in $THREADS_LIST; do
e5f94c2b 2423 if enabled $thread; then
3ae3b721
RP
2424 test -n "$thread_type" &&
2425 die "ERROR: Only one thread type must be selected." ||
e5f94c2b 2426 thread_type="$thread"
e5f94c2b
RP
2427 fi
2428done
2429
fdf88598 2430check_lib math.h sin -lm
ff418735 2431check_lib va/va.h vaInitialize -lva
fdf88598 2432
6b7c7703
VS
2433check_func exp2
2434check_func exp2f
ad420e25
MR
2435check_func llrint
2436check_func log2
6b7c7703 2437check_func log2f
ad420e25
MR
2438check_func lrint
2439check_func lrintf
2440check_func round
2441check_func roundf
2442check_func truncf
f32adb22 2443
57bd82d4 2444# these are off by default, so fail if requested and not available
79fda097 2445enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
e3cc7d6f 2446enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
2513b2b4
DB
2447 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2448 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
79fda097
DB
2449enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2450enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
7483e694 2451enabled libgsm && require libgsm gsm.h gsm_create -lgsm
2bfecf73 2452enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
7483e694 2453enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
0b175caa
DB
2454enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2455enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
3d6fac8c 2456enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
36718e51
DB
2457enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2458 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
ae14f311 2459enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
c261a5d9 2460enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
7483e694 2461enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
e69bb386 2462enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 -lm &&
76d81909
JGG
2463 { check_cpp_condition x264.h "X264_BUILD >= 83" ||
2464 die "ERROR: libx264 version must be >= 0.83."; }
2bfecf73 2465enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
7483e694 2466enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
8ac17293 2467
0b4a1821
AS
2468# libdc1394 check
2469if enabled libdc1394; then
2470 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2471 enable libdc1394_2; } ||
2472 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2473 enable libdc1394_1; } ||
2474 die "ERROR: No version of libdc1394 found "
2475fi
2476
6a1a892f 2477SDL_CONFIG="${cross_prefix}sdl-config"
2270b4b2 2478if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
5e622c40 2479 sdl_cflags=$("${SDL_CONFIG}" --cflags)
b4f93564 2480 sdl_libs=$("${SDL_CONFIG}" --libs)
aa692d54
MR
2481 check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2482 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2483 enable sdl &&
2484 check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
c3f6b472 2485fi
57bd82d4 2486
2270b4b2 2487texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
146ea952 2488
73b46a95 2489if enabled network; then
96000432 2490 check_type "sys/types.h sys/socket.h" socklen_t
c0018613 2491 check_type netdb.h "struct addrinfo"
33a4dbdd 2492 check_type sys/socket.h "struct sockaddr_storage"
73b46a95
RP
2493 # Prefer arpa/inet.h over winsock2
2494 if check_header arpa/inet.h ; then
2495 check_func closesocket
2496 elif check_header winsock2.h ; then
f4c13872
MS
2497 check_func_headers winsock2.h closesocket -lws2 && \
2498 network_extralibs="-lws2" || \
2499 { check_func_headers winsock2.h closesocket -lws2_32 && \
2500 network_extralibs="-lws2_32"; }
72be9e73 2501 check_type ws2tcpip.h socklen_t
c0018613 2502 check_type ws2tcpip.h "struct addrinfo"
33a4dbdd 2503 check_type ws2tcpip.h "struct sockaddr_storage"
28c9f069
MK
2504 else
2505 disable network
73b46a95
RP
2506 fi
2507fi
2508
b6f3d925 2509enabled_all network ipv6 && check_ld <<EOF || disable ipv6
7a91333f
HZ
2510#include <sys/types.h>
2511#include <sys/socket.h>
2512#include <netinet/in.h>
2513#include <netdb.h>
db817cf3 2514int main(void) {
7483e694
DB
2515 struct sockaddr_storage saddr;
2516 struct ipv6_mreq mreq6;
2517 getaddrinfo(0,0,0,0);
2518 getnameinfo(0,0,0,0,0,0,0);
2519 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
7a91333f
HZ
2520}
2521EOF
2522
06e31011
RP
2523check_header linux/videodev.h
2524check_header linux/videodev2.h
1b6e8b73 2525check_header sys/videoio.h
47f38850 2526
2446d3d6 2527check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
c2345207 2528
f8aa696f 2529# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1c915f83
RP
2530{ check_header dev/bktr/ioctl_meteor.h &&
2531 check_header dev/bktr/ioctl_bt848.h; } ||
2532{ check_header machine/ioctl_meteor.h &&
2533 check_header machine/ioctl_bt848.h; } ||
2534{ check_header dev/video/meteor/ioctl_meteor.h &&
2535 check_header dev/video/bktr/ioctl_bt848.h; } ||
2536check_header dev/ic/bt8xx.h
f8aa696f 2537
c7682de0
RP
2538check_header sys/soundcard.h
2539check_header soundcard.h
deb29777 2540
b6f3d925 2541enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
35fd8122 2542
0e57fe17 2543enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
80ff8a16 2544
56a059ac 2545enabled x11grab &&
f58f4ce1
GP
2546check_header X11/Xlib.h &&
2547check_header X11/extensions/XShm.h &&
0a045661 2548check_header X11/extensions/Xfixes.h &&
f58f4ce1 2549check_func XOpenDisplay -lX11 &&
781c1aa6
R
2550check_func XShmCreateImage -lX11 -lXext &&
2551check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
f58f4ce1 2552
598ef02b 2553if ! disabled vdpau && enabled vdpau_vdpau_h; then
deda2a4a
AC
2554check_cpp_condition \
2555 vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
d1ebd4a9
AC
2556 { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2557 disable vdpau; }
abf649c7 2558fi
deda2a4a 2559
95e561ec 2560enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
57bd82d4
MR
2561
2562# add some useful compiler flags if supported
2563check_cflags -Wdeclaration-after-statement
dcd479c0
MR
2564check_cflags -Wall
2565check_cflags -Wno-switch
c07bd6a9
MN
2566check_cflags -Wdisabled-optimization
2567check_cflags -Wpointer-arith
2568check_cflags -Wredundant-decls
cc1fb623 2569check_cflags -Wno-pointer-sign
f4929996 2570check_cflags -Wcast-qual
9aceb3cf 2571check_cflags -Wwrite-strings
652a5bf6 2572check_cflags -Wtype-limits
764551c6 2573check_cflags -Wundef
5af4e0cc 2574enabled extra_warnings && check_cflags -Winline
cf9d24ad 2575
57bd82d4 2576# add some linker flags
5c0e9479 2577check_ldflags -Wl,--warn-common
8351d2ba
DB
2578check_ldflags -Wl,--as-needed
2579check_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 2580check_ldflags -Wl,-Bsymbolic
94a3401e 2581
a482e61b
MR
2582echo "X{};" > $TMPV
2583test_ldflags -Wl,--version-script,$TMPV &&
2584 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2585
bd2216e4
MR
2586if enabled small; then
2587 check_cflags -Os # not all compilers support -Os
8400d6b8
DB
2588 optimizations="small"
2589elif enabled optimizations; then
629687f6 2590 if enabled xlc; then
0f010b2f
DB
2591 add_cflags -O5
2592 add_ldflags -O5
03279bbe
MK
2593 elif enabled suncc; then
2594 add_cflags -O5
df442a8d
MR
2595 elif enabled ccc; then
2596 add_cflags -fast
cf9d24ad 2597 else
0f010b2f 2598 add_cflags -O3
cf9d24ad 2599 fi
cddf3f45 2600fi
11fdbc44 2601check_cflags -fno-math-errno
b2eb2ff0 2602check_cflags -fno-signed-zeros
cddf3f45 2603
629687f6 2604if enabled icc; then
b1598b58
MR
2605 # Just warnings, no remarks
2606 check_cflags -w1
2607 # -wd: Disable following warnings
2608 # 144, 167, 556: -Wno-pointer-sign
2609 # 10006: ignoring unknown option -fno-signed-zeros
2610 # 10156: ignoring option '-W'; no argument required
2611 check_cflags -wd144,167,556,10006,10156
2612 # 11030: Warning unknown option --as-needed
2613 # 10156: ignoring option '-export'; no argument required
2614 check_ldflags -wd10156,11030
2615 # Allow to compile with optimizations
2616 check_ldflags -march=$cpu
be2cf98a
CEH
2617 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2618 enable ebp_available
df442a8d
MR
2619elif enabled ccc; then
2620 # disable some annoying warnings
2621 add_cflags -msg_disable cvtu32to64
2622 add_cflags -msg_disable embedcomment
2623 add_cflags -msg_disable needconstext
2624 add_cflags -msg_disable nomainieee
2625 add_cflags -msg_disable ptrmismatch1
2626 add_cflags -msg_disable unreachcode
973859f5
MR
2627elif enabled gcc; then
2628 check_cflags -fno-tree-vectorize
06da6943
DC
2629elif enabled clang; then
2630 check_cflags -Qunused-arguments
504a64b9
CEH
2631fi
2632
90be59ef 2633if enabled gprof; then
0f010b2f
DB
2634 add_cflags -p
2635 add_ldflags -p
1db54e20
DB
2636fi
2637
7f3c02fc 2638# Find out if the .align argument is a power of two or not.
9377b6ce 2639check_asm asmalign_pot '".align 3"'
4454dc1b 2640
7483e694
DB
2641enabled_any $DECODER_LIST && enable decoders
2642enabled_any $ENCODER_LIST && enable encoders
5666fd73 2643enabled_any $HWACCEL_LIST && enable hwaccels
7483e694
DB
2644enabled_any $BSF_LIST && enable bsfs
2645enabled_any $DEMUXER_LIST && enable demuxers
2646enabled_any $MUXER_LIST && enable muxers
f7679c54 2647enabled_any $FILTER_LIST && enable filters
63d72fda
DB
2648enabled_any $INDEV_LIST && enable indevs
2649enabled_any $OUTDEV_LIST && enable outdevs
7483e694
DB
2650enabled_any $PROTOCOL_LIST && enable protocols
2651
2652enabled_any $THREADS_LIST && enable threads
2653
2654check_deps $CONFIG_LIST \
b6bb00b0 2655 $CONFIG_EXTRA \
7483e694
DB
2656 $HAVE_LIST \
2657 $DECODER_LIST \
2658 $ENCODER_LIST \
5666fd73 2659 $HWACCEL_LIST \
7483e694
DB
2660 $PARSER_LIST \
2661 $BSF_LIST \
2662 $DEMUXER_LIST \
2663 $MUXER_LIST \
f7679c54 2664 $FILTER_LIST \
7483e694
DB
2665 $INDEV_LIST \
2666 $OUTDEV_LIST \
2667 $PROTOCOL_LIST \
f70f03f6 2668
c8a4ae00
MR
2669enabled asm || disable $ARCH_LIST $ARCH_EXT_LIST
2670
3e89171a 2671echo "install prefix $prefix"
f36958f8
DB
2672echo "source path $source_path"
2673echo "C compiler $cc"
bfd5afd8 2674echo ".align is power-of-two $asmalign_pot"
f36958f8 2675echo "ARCH $arch ($cpu)"
ce8871c2
MR
2676if test "$build_suffix" != ""; then
2677 echo "build suffix $build_suffix"
eb94aca9 2678fi
ac63af34
DB
2679if test "$extra_version" != ""; then
2680 echo "version string suffix $extra_version"
2681fi
0db2ce77 2682echo "big-endian ${bigendian-no}"
e90f5b5a 2683echo "runtime cpu detection ${runtime_cpudetect-no}"
5b6c2cbd 2684if enabled x86; then
af44e8e4 2685 echo "yasm ${yasm-no}"
0db2ce77 2686 echo "MMX enabled ${mmx-no}"
30e98e62 2687 echo "MMX2 enabled ${mmx2-no}"
3bf96eec 2688 echo "3DNow! enabled ${amd3dnow-no}"
a1ef9f08 2689 echo "3DNow! extended enabled ${amd3dnowext-no}"
1bb04d5a 2690 echo "SSE enabled ${sse-no}"
30e98e62 2691 echo "SSSE3 enabled ${ssse3-no}"
0db2ce77
MR
2692 echo "CMOV enabled ${cmov-no}"
2693 echo "CMOV is fast ${fast_cmov-no}"
971cc990
MN
2694 echo "EBX available ${ebx_available-no}"
2695 echo "EBP available ${ebp_available-no}"
d3a4b4e0 2696 echo "10 operands supported ${ten_operands-no}"
e41e8342 2697fi
5b6c2cbd 2698if enabled arm; then
0db2ce77
MR
2699 echo "ARMv5TE enabled ${armv5te-no}"
2700 echo "ARMv6 enabled ${armv6-no}"
ab5cb084 2701 echo "ARMv6T2 enabled ${armv6t2-no}"
f55b299a 2702 echo "ARM VFP enabled ${armvfp-no}"
0db2ce77 2703 echo "IWMMXT enabled ${iwmmxt-no}"
6b18d278 2704 echo "NEON enabled ${neon-no}"
eba9ae3c 2705fi
5b6c2cbd 2706if enabled mips; then
0db2ce77 2707 echo "MMI enabled ${mmi-no}"
e41e8342 2708fi
5b6c2cbd 2709if enabled ppc; then
0db2ce77 2710 echo "AltiVec enabled ${altivec-no}"
30e98e62 2711 echo "PPC 4xx optimizations ${ppc4xx-no}"
0db2ce77 2712 echo "dcbzl available ${dcbzl-no}"
30e98e62
DB
2713 echo "performance report ${powerpc_perf-no}"
2714fi
2715if enabled sparc; then
2716 echo "VIS enabled ${vis-no}"
e41e8342 2717fi
0db2ce77
MR
2718echo "gprof enabled ${gprof-no}"
2719echo "debug symbols ${debug-no}"
87a0fb62 2720echo "strip symbols ${stripping-no}"
8400d6b8 2721echo "optimizations ${optimizations-no}"
0db2ce77
MR
2722echo "static ${static-no}"
2723echo "shared ${shared-no}"
4a24ab64 2724echo "postprocessing support ${postproc-no}"
f7679c54 2725echo "new filter support ${avfilter-no}"
81124ba0 2726echo "filters using lavformat ${avfilter_lavf-no}"
0db2ce77 2727echo "network support ${network-no}"
90be59ef 2728if enabled network; then
0db2ce77 2729 echo "IPv6 support ${ipv6-no}"
bfd5afd8 2730fi
0db2ce77
MR
2731echo "threading support ${thread_type-no}"
2732echo "SDL support ${sdl-no}"
0db2ce77
MR
2733echo "Sun medialib support ${mlib-no}"
2734echo "AVISynth enabled ${avisynth-no}"
f7b8bffe 2735echo "libdc1394 support ${libdc1394-no}"
690bfceb 2736echo "libdirac enabled ${libdirac-no}"
0db2ce77
MR
2737echo "libfaac enabled ${libfaac-no}"
2738echo "libfaad enabled ${libfaad-no}"
7e0871a7 2739echo "libfaad dlopened ${libfaadbin-no}"
0db2ce77
MR
2740echo "libgsm enabled ${libgsm-no}"
2741echo "libmp3lame enabled ${libmp3lame-no}"
2742echo "libnut enabled ${libnut-no}"
0b175caa
DB
2743echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2744echo "libopencore-amrwb support ${libopencore_amrwb-no}"
9a77d59a 2745echo "libopenjpeg enabled ${libopenjpeg-no}"
f7cd9eed 2746echo "libschroedinger enabled ${libschroedinger-no}"
ae14f311 2747echo "libspeex enabled ${libspeex-no}"
0db2ce77
MR
2748echo "libtheora enabled ${libtheora-no}"
2749echo "libvorbis enabled ${libvorbis-no}"
d6bd62db
DB
2750echo "libx264 enabled ${libx264-no}"
2751echo "libxvid enabled ${libxvid-no}"
0db2ce77 2752echo "zlib enabled ${zlib-no}"
f402916e 2753echo "bzlib enabled ${bzlib-no}"
2c62e737 2754echo
de6d9b64 2755
5666fd73 2756for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
8138b9db 2757 echo "Enabled ${type}s:"
f65c9da1 2758 eval list=\$$(toupper $type)_LIST
8138b9db 2759 for part in $list; do
f65c9da1
MR
2760 enabled $part && echo ${part%_*}
2761 done | sort | pr -3 -t
2762 echo
8138b9db
RP
2763done
2764
ba7a7039 2765license="LGPL version 2.1 or later"
ba321adb 2766if enabled nonfree; then
ba7a7039 2767 license="nonfree and unredistributable"
9cad0e4e
DB
2768elif enabled gplv3; then
2769 license="GPL version 3 or later"
2770elif enabled lgplv3; then
2771 license="LGPL version 3 or later"
ba321adb 2772elif enabled gpl; then
ba7a7039 2773 license="GPL version 2 or later"
ba321adb
JK
2774fi
2775
2776echo "License: $license"
ca5323af 2777
cf1392e9
DB
2778echo "Creating config.mak and config.h..."
2779
ad212cc6
MR
2780enabled stripping || strip="echo skipping strip"
2781
173c983b
MR
2782cat > config.mak <<EOF
2783# Automatically generated by configure - do not modify!
2784ifndef FFMPEG_CONFIG_MAK
2785FFMPEG_CONFIG_MAK=1
2786FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2787prefix=$prefix
2788LIBDIR=\$(DESTDIR)$libdir
2789SHLIBDIR=\$(DESTDIR)$shlibdir
2790INCDIR=\$(DESTDIR)$incdir
2791BINDIR=\$(DESTDIR)$bindir
2792DATADIR=\$(DESTDIR)$datadir
2793MANDIR=\$(DESTDIR)$mandir
2794SRC_PATH="$source_path"
2795SRC_PATH_BARE=$source_path
2796BUILD_ROOT="$PWD"
2797ARCH=$arch
2798CC=$cc
2799AS=$as
2800LD=$ld
2801DEPCC=$dep_cc
2802YASM=$yasmexe
2803AR=$ar
2804RANLIB=$ranlib
2805LN_S=$ln_s
2806STRIP=$strip
2807CPPFLAGS=$CPPFLAGS
2808CFLAGS=$CFLAGS
2809ASFLAGS=$ASFLAGS
2810CC_O=$CC_O
2811LDFLAGS=$LDFLAGS
2812FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2813SHFLAGS=$SHFLAGS
2814YASMFLAGS=$YASMFLAGS
2815BUILDSUF=$build_suffix
2816FULLNAME=$FULLNAME
2817LIBPREF=$LIBPREF
2818LIBSUF=$LIBSUF
2819LIBNAME=$LIBNAME
2820SLIBPREF=$SLIBPREF
2821SLIBSUF=$SLIBSUF
2822EXESUF=$EXESUF
2823EXTRA_VERSION=$extra_version
2824DEPFLAGS=$DEPFLAGS
2825CCDEP=$CCDEP
2826ASDEP=$ASDEP
2827CC_DEPFLAGS=$CC_DEPFLAGS
2828AS_DEPFLAGS=$AS_DEPFLAGS
2829HOSTCC=$host_cc
2830HOSTCFLAGS=$host_cflags
2831HOSTEXESUF=$HOSTEXESUF
2832HOSTLDFLAGS=$host_ldflags
2833HOSTLIBS=$host_libs
2834TARGET_EXEC=$target_exec
2835TARGET_PATH=$target_path
2836SDL_LIBS=$sdl_libs
2837SDL_CFLAGS=$sdl_cflags
2838LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2839EXTRALIBS=$extralibs
2840EOF
5a872801 2841
719c8e00
MR
2842get_version(){
2843 name=$1
2844 file=$source_path/$2
147e7692
MR
2845 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2846 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
0e32c8c6
MR
2847 lcname=$(tolower $name)
2848 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2849 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
719c8e00
MR
2850}
2851
147e7692
MR
2852get_version LIBSWSCALE libswscale/swscale.h
2853get_version LIBPOSTPROC libpostproc/postprocess.h
2854get_version LIBAVCODEC libavcodec/avcodec.h
2855get_version LIBAVDEVICE libavdevice/avdevice.h
2856get_version LIBAVFORMAT libavformat/avformat.h
2857get_version LIBAVUTIL libavutil/avutil.h
a6601d69 2858get_version LIBAVFILTER libavfilter/avfilter.h
5a872801 2859
173c983b
MR
2860enabled shared && cat >> config.mak <<EOF
2861LIBTARGET=${LIBTARGET}
2862SLIBNAME=${SLIBNAME}
2863SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2864SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2865SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2866SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2867SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2868SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2869EOF
523ef551 2870
173c983b
MR
2871enabled asmalign_pot || align_shift="1 <<"
2872
2873cat > $TMPH <<EOF
2874/* Automatically generated by configure - do not modify! */
2875#ifndef FFMPEG_CONFIG_H
2876#define FFMPEG_CONFIG_H
2877#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
c1736936 2878#define FFMPEG_LICENSE "$(c_escape $license)"
173c983b
MR
2879#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
2880#define CC_TYPE "$cc_type"
2881#define CC_VERSION $cc_version
2882#define restrict $_restrict
2883#define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t"
2884#define EXTERN_PREFIX "${extern_prefix}"
2885#define EXTERN_ASM ${extern_prefix}
2886EOF
523ef551
DB
2887
2888if enabled small || disabled optimizations; then
2889 echo "#define av_always_inline" >> $TMPH
2890fi
2891
3d907e22
MR
2892print_config ARCH_ $TMPH config.mak $ARCH_LIST
2893print_config HAVE_ $TMPH config.mak $HAVE_LIST
7483e694 2894print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
b6bb00b0 2895 $CONFIG_EXTRA \
7483e694
DB
2896 $DECODER_LIST \
2897 $ENCODER_LIST \
5666fd73 2898 $HWACCEL_LIST \
7483e694
DB
2899 $PARSER_LIST \
2900 $BSF_LIST \
2901 $DEMUXER_LIST \
2902 $MUXER_LIST \
f7679c54 2903 $FILTER_LIST \
7483e694
DB
2904 $PROTOCOL_LIST \
2905 $INDEV_LIST \
2906 $OUTDEV_LIST \
8ac17293 2907
9c05103f 2908echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
8c6d2da5 2909echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
9c05103f 2910
b7860763 2911# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3ae3b721
RP
2912cmp -s $TMPH config.h &&
2913 echo "config.h is unchanged" ||
2914 mv -f $TMPH config.h
3d204385 2915
165af439 2916# build tree in object directory if source path is different from current one
90be59ef 2917if enabled source_path_used; then
b767b9cd
MR
2918 DIRS="
2919 doc
2920 libavcodec
2921 libavcodec/$arch
2922 libavdevice
2923 libavfilter
2924 libavformat
2925 libavutil
2926 libavutil/$arch
2927 libpostproc
2928 libswscale
2929 libswscale/$arch
2930 tests
2931 tools
2932 "
2933 FILES="
2934 Makefile
2935 common.mak
2936 subdir.mak
2937 doc/texi2pod.pl
2938 libavcodec/Makefile
2939 libavdevice/Makefile
2940 libavfilter/Makefile
2941 libavformat/Makefile
2942 libavutil/Makefile
2943 libpostproc/Makefile
2944 libswscale/Makefile
2945 "
165af439 2946 for dir in $DIRS ; do
7483e694 2947 mkdir -p $dir
165af439
MR
2948 done
2949 for f in $FILES ; do
20369773 2950 $ln_s "$source_path/$f" $f
165af439
MR
2951 done
2952fi
def4272a 2953
def4272a 2954
d0674868 2955# build pkg-config files
def4272a 2956
d0674868
DB
2957pkgconfig_generate(){
2958name=$1
b0dfd108 2959shortname=${name#lib}${build_suffix}
d0674868
DB
2960comment=$2
2961version=$3
2962libs=$4
2963requires=$5
25cd5cb3 2964cat <<EOF > $name/$name.pc
3e89171a 2965prefix=$prefix
a94e666c 2966exec_prefix=\${prefix}
f2b7382c 2967libdir=$libdir
7622778e 2968includedir=$incdir
def4272a 2969
d0674868
DB
2970Name: $name
2971Description: $comment
2972Version: $version
8cd6b388 2973Requires: $(enabled shared || echo $requires)
5dcfe9f8 2974Requires.private: $(enabled shared && echo $requires)
def4272a 2975Conflicts:
8cd6b388 2976Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
12701f6e 2977Libs.private: $(enabled shared && echo $libs)
76a448ed 2978Cflags: -I\${includedir}
def4272a 2979EOF
25cd5cb3 2980cat <<EOF > $name/$name-uninstalled.pc
def4272a
AJ
2981prefix=
2982exec_prefix=
46d1ff83 2983libdir=\${pcfiledir}
1d44d365 2984includedir=${source_path}
def4272a 2985
d0674868
DB
2986Name: $name
2987Description: $comment
2988Version: $version
2989Requires: $requires
def4272a 2990Conflicts:
12701f6e 2991Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
def4272a
AJ
2992Cflags: -I\${includedir}
2993EOF
d0674868 2994}
def4272a 2995
e426941d 2996pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
46983309
RT
2997pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2998pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2999pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3ed1a2ee 3000enabled avfilter &&
46983309 3001 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3ed1a2ee 3002enabled postproc &&
e426941d 3003 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
5add54b4 3004pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"