]> git.sesse.net Git - ffmpeg/blob - configure
configure: make fast_unaligned configureable
[ffmpeg] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
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" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
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."
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
54     exit 1
55 fi
56
57 show_help(){
58 cat <<EOF
59 Usage: configure [options]
60 Options: [defaults in brackets after descriptions]
61
62 Help options:
63   --help                   print this message
64   --list-decoders          show all available decoders
65   --list-encoders          show all available encoders
66   --list-hwaccels          show all available hardware accelerators
67   --list-demuxers          show all available demuxers
68   --list-muxers            show all available muxers
69   --list-parsers           show all available parsers
70   --list-protocols         show all available protocols
71   --list-bsfs              show all available bitstream filters
72   --list-indevs            show all available input devices
73   --list-outdevs           show all available output devices
74   --list-filters           show all available filters
75
76 Standard options:
77   --logfile=FILE           log tests and output to FILE [config.log]
78   --disable-logging        do not log configure debug information
79   --prefix=PREFIX          install in PREFIX [$prefix]
80   --bindir=DIR             install binaries in DIR [PREFIX/bin]
81   --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
82   --libdir=DIR             install libs in DIR [PREFIX/lib]
83   --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
84   --incdir=DIR             install includes in DIR [PREFIX/include]
85   --mandir=DIR             install man page in DIR [PREFIX/share/man]
86
87 Licensing options:
88   --enable-gpl             allow use of GPL code, the resulting libs
89                            and binaries will be under GPL [no]
90   --enable-version3        upgrade (L)GPL to version 3 [no]
91   --enable-nonfree         allow use of nonfree code, the resulting libs
92                            and binaries will be unredistributable [no]
93
94 Configuration options:
95   --disable-static         do not build static libraries [no]
96   --enable-shared          build shared libraries [no]
97   --enable-small           optimize for size instead of speed
98   --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
99   --enable-gray            enable full grayscale support (slower color)
100   --disable-swscale-alpha  disable alpha channel support in swscale
101
102 Component options:
103   --disable-doc            do not build documentation
104   --disable-ffmpeg         disable ffmpeg build
105   --disable-ffplay         disable ffplay build
106   --disable-ffprobe        disable ffprobe build
107   --disable-ffserver       disable ffserver build
108   --disable-avdevice       disable libavdevice build
109   --disable-avcodec        disable libavcodec build
110   --disable-avformat       disable libavformat build
111   --disable-swresample     disable libswresample build
112   --disable-swscale        disable libswscale build
113   --disable-postproc       disable libpostproc build
114   --disable-avfilter       disable video filter support [no]
115   --enable-avresample      enable libavresample build [no]
116   --disable-pthreads       disable pthreads [auto]
117   --disable-w32threads     disable Win32 threads [auto]
118   --disable-os2threads     disable OS/2 threads [auto]
119   --enable-x11grab         enable X11 grabbing [no]
120   --disable-network        disable network support [no]
121   --disable-dct            disable DCT code
122   --disable-mdct           disable MDCT code
123   --disable-rdft           disable RDFT code
124   --disable-fft            disable FFT code
125   --enable-dxva2           enable DXVA2 code
126   --enable-vaapi           enable VAAPI code [autodetect]
127   --enable-vda             enable VDA code   [autodetect]
128   --enable-vdpau           enable VDPAU code [autodetect]
129
130 Individual component options:
131   --disable-everything     disable all components listed below
132   --disable-encoder=NAME   disable encoder NAME
133   --enable-encoder=NAME    enable encoder NAME
134   --disable-encoders       disable all encoders
135   --disable-decoder=NAME   disable decoder NAME
136   --enable-decoder=NAME    enable decoder NAME
137   --disable-decoders       disable all decoders
138   --disable-hwaccel=NAME   disable hwaccel NAME
139   --enable-hwaccel=NAME    enable hwaccel NAME
140   --disable-hwaccels       disable all hwaccels
141   --disable-muxer=NAME     disable muxer NAME
142   --enable-muxer=NAME      enable muxer NAME
143   --disable-muxers         disable all muxers
144   --disable-demuxer=NAME   disable demuxer NAME
145   --enable-demuxer=NAME    enable demuxer NAME
146   --disable-demuxers       disable all demuxers
147   --enable-parser=NAME     enable parser NAME
148   --disable-parser=NAME    disable parser NAME
149   --disable-parsers        disable all parsers
150   --enable-bsf=NAME        enable bitstream filter NAME
151   --disable-bsf=NAME       disable bitstream filter NAME
152   --disable-bsfs           disable all bitstream filters
153   --enable-protocol=NAME   enable protocol NAME
154   --disable-protocol=NAME  disable protocol NAME
155   --disable-protocols      disable all protocols
156   --enable-indev=NAME      enable input device NAME
157   --disable-indev=NAME     disable input device NAME
158   --disable-indevs         disable input devices
159   --enable-outdev=NAME     enable output device NAME
160   --disable-outdev=NAME    disable output device NAME
161   --disable-outdevs        disable output devices
162   --disable-devices        disable all devices
163   --enable-filter=NAME     enable filter NAME
164   --disable-filter=NAME    disable filter NAME
165   --disable-filters        disable all filters
166
167 External library support:
168   --enable-avisynth        enable reading of AVISynth script files [no]
169   --enable-bzlib           enable bzlib [autodetect]
170   --enable-fontconfig      enable fontconfig
171   --enable-frei0r          enable frei0r video filtering
172   --enable-gnutls          enable gnutls [no]
173   --enable-libaacplus      enable AAC+ encoding via libaacplus [no]
174   --enable-libass          enable libass subtitles rendering [no]
175   --enable-libbluray       enable BluRay reading using libbluray [no]
176   --enable-libcelt         enable CELT decoding via libcelt [no]
177   --enable-libcdio         enable audio CD grabbing with libcdio
178   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
179                            and libraw1394 [no]
180   --enable-libfaac         enable FAAC support via libfaac [no]
181   --enable-libfreetype     enable libfreetype [no]
182   --enable-libgsm          enable GSM support via libgsm [no]
183   --enable-libilbc         enable iLBC de/encoding via libilbc [no]
184   --enable-libmodplug      enable ModPlug via libmodplug [no]
185   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
186   --enable-libnut          enable NUT (de)muxing via libnut,
187                            native (de)muxer exists [no]
188   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
189   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
190   --enable-libopencv       enable video filtering via libopencv [no]
191   --enable-libopenjpeg     enable JPEG 2000 encoding/decoding via OpenJPEG [no]
192   --enable-libpulse        enable Pulseaudio input via libpulse [no]
193   --enable-librtmp         enable RTMP[E] support via librtmp [no]
194   --enable-libschroedinger enable Dirac support via libschroedinger [no]
195   --enable-libspeex        enable Speex support via libspeex [no]
196   --enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]
197   --enable-libtheora       enable Theora encoding via libtheora [no]
198   --enable-libutvideo      enable Ut Video encoding and decoding via libutvideo [no]
199   --enable-libv4l2         enable libv4l2/v4l-utils [no]
200   --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
201   --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
202   --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
203                            native implementation exists [no]
204   --enable-libvpx          enable VP8 support via libvpx [no]
205   --enable-libx264         enable H.264 encoding via x264 [no]
206   --enable-libxavs         enable AVS encoding via xavs [no]
207   --enable-libxvid         enable Xvid encoding via xvidcore,
208                            native MPEG-4/Xvid encoder exists [no]
209   --enable-openal          enable OpenAL 1.1 capture support [no]
210   --enable-openssl         enable openssl [no]
211   --enable-zlib            enable zlib [autodetect]
212
213 Advanced options (experts only):
214   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
215   --enable-cross-compile   assume a cross-compiler is used
216   --sysroot=PATH           root of cross-build tree
217   --sysinclude=PATH        location of cross-build system headers
218   --target-os=OS           compiler targets OS [$target_os]
219   --target-exec=CMD        command to run executables on target
220   --target-path=DIR        path to view of build directory on target
221   --nm=NM                  use nm tool NM [$nm_default]
222   --ar=AR                  use archive tool AR [$ar_default]
223   --as=AS                  use assembler AS [$as_default]
224   --yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]
225   --cc=CC                  use C compiler CC [$cc_default]
226   --cxx=CXX                use C compiler CXX [$cxx_default]
227   --ld=LD                  use linker LD [$ld_default]
228   --host-cc=HOSTCC         use host C compiler HOSTCC
229   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
230   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
231   --host-libs=HLIBS        use libs HLIBS when linking for host
232   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
233   --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
234   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
235   --extra-libs=ELIBS       add ELIBS [$ELIBS]
236   --extra-version=STRING   version string suffix []
237   --optflags               override optimization-related compiler flags
238   --build-suffix=SUFFIX    library name suffix []
239   --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
240   --progs-suffix=SUFFIX    program name suffix []
241   --arch=ARCH              select architecture [$arch]
242   --cpu=CPU                select the minimum required CPU (affects
243                            instruction selection, may crash on older CPUs)
244   --enable-pic             build position-independent code
245   --enable-sram            allow use of on-chip SRAM
246   --disable-symver         disable symbol versioning
247   --disable-fastdiv        disable table-based division
248   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
249   --disable-safe-bitstream-reader
250                            disable buffer boundary checking in bitreaders
251                            (faster, but may crash)
252   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
253
254 Optimization options (experts only):
255   --disable-asm            disable all assembler optimizations
256   --disable-altivec        disable AltiVec optimizations
257   --disable-amd3dnow       disable 3DNow! optimizations
258   --disable-amd3dnowext    disable 3DNow! extended optimizations
259   --disable-mmx            disable MMX optimizations
260   --disable-mmx2           disable MMX2 optimizations
261   --disable-sse            disable SSE optimizations
262   --disable-ssse3          disable SSSE3 optimizations
263   --disable-avx            disable AVX optimizations
264   --disable-armv5te        disable armv5te optimizations
265   --disable-armv6          disable armv6 optimizations
266   --disable-armv6t2        disable armv6t2 optimizations
267   --disable-armvfp         disable ARM VFP optimizations
268   --disable-mmi            disable MMI optimizations
269   --disable-neon           disable NEON optimizations
270   --disable-vis            disable VIS optimizations
271   --disable-yasm           disable use of yasm assembler
272   --disable-mips32r2       disable MIPS32R2 optimizations
273   --disable-mipsdspr1      disable MIPS DSP ASE R1 optimizations
274   --disable-mipsdspr2      disable MIPS DSP ASE R2 optimizations
275   --disable-mipsfpu        disable floating point MIPS optimizations
276   --disable-fast-unaligned consider unaligned accesses slow
277   --postproc-version=V     build libpostproc version V.
278                            Where V can be '$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO' or 'current'. [$postproc_version_default]
279
280 Developer options (useful when working on FFmpeg itself):
281   --enable-coverage        build with test coverage instrumentation
282   --disable-debug          disable debugging symbols
283   --enable-debug=LEVEL     set the debug level [$debuglevel]
284   --disable-optimizations  disable compiler optimizations
285   --enable-extra-warnings  enable more compiler warnings
286   --disable-stripping      disable stripping of executables and shared libraries
287   --assert-level=level     0(default), 1 or 2, amount of assertion testing,
288                            2 causes a slowdown at runtime.
289   --valgrind=VALGRIND      run "make fate" tests through valgrind to detect memory
290                            leaks and errors, using the specified valgrind binary.
291                            Cannot be combined with --target-exec
292   --samples=PATH           location of test samples for FATE, if not set use
293                            \$FATE_SAMPLES at make invocation time.
294   --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
295                            should be used only for debugging purposes)
296   --enable-random          randomly enable/disable components
297   --disable-random
298   --enable-random=LIST     randomly enable/disable specific components or
299   --disable-random=LIST    component groups. LIST is a comma-separated list
300                            of NAME[:PROB] entries where NAME is a component
301                            (group) and PROB the probability associated with
302                            NAME (default 0.5).
303   --random-seed=VALUE      seed value for --enable/disable-random
304
305 NOTE: Object files are built at the place where configure is launched.
306 EOF
307   exit 0
308 }
309
310 quotes='""'
311
312 log(){
313     echo "$@" >> $logfile
314 }
315
316 log_file(){
317     log BEGIN $1
318     pr -n -t $1 >> $logfile
319     log END $1
320 }
321
322 echolog(){
323     log "$@"
324     echo "$@"
325 }
326
327 warn(){
328     log "WARNING: $*"
329     WARNINGS="${WARNINGS}WARNING: $*\n"
330 }
331
332 die(){
333     echolog "$@"
334     cat <<EOF
335
336 If you think configure made a mistake, make sure you are using the latest
337 version from Git.  If the latest version fails, report the problem to the
338 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
339 EOF
340     if disabled logging; then
341         cat <<EOF
342 Rerun configure with logging enabled (do not use --disable-logging), and
343 include the log this produces with your report.
344 EOF
345     else
346 cat <<EOF
347 Include the log file "$logfile" produced by configure as this will help
348 solving the problem.
349 EOF
350     fi
351     exit 1
352 }
353
354 # Avoid locale weirdness, besides we really just want to translate ASCII.
355 toupper(){
356     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
357 }
358
359 tolower(){
360     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
361 }
362
363 c_escape(){
364     echo "$*" | sed 's/["\\]/\\\0/g'
365 }
366
367 sh_quote(){
368     v=$(echo "$1" | sed "s/'/'\\\\''/g")
369     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
370     echo "$v"
371 }
372
373 cleanws(){
374     echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
375 }
376
377 filter(){
378     pat=$1
379     shift
380     for v; do
381         eval "case $v in $pat) echo $v ;; esac"
382     done
383 }
384
385 filter_out(){
386     pat=$1
387     shift
388     for v; do
389         eval "case $v in $pat) ;; *) echo $v ;; esac"
390     done
391 }
392
393 map(){
394     m=$1
395     shift
396     for v; do eval $m; done
397 }
398
399 set_all(){
400     value=$1
401     shift
402     for var in $*; do
403         eval $var=$value
404     done
405 }
406
407 set_weak(){
408     value=$1
409     shift
410     for var; do
411         eval : \${$var:=$value}
412     done
413 }
414
415 set_safe(){
416     var=$1
417     shift
418     eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
419 }
420
421 get_safe(){
422     eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
423 }
424
425 pushvar(){
426     for var in $*; do
427         eval level=\${${var}_level:=0}
428         eval ${var}_${level}="\$$var"
429         eval ${var}_level=$(($level+1))
430     done
431 }
432
433 popvar(){
434     for var in $*; do
435         eval level=\${${var}_level:-0}
436         test $level = 0 && continue
437         eval level=$(($level-1))
438         eval $var="\${${var}_${level}}"
439         eval ${var}_level=$level
440         eval unset ${var}_${level}
441     done
442 }
443
444 enable(){
445     set_all yes $*
446 }
447
448 disable(){
449     set_all no $*
450 }
451
452 enable_weak(){
453     set_weak yes $*
454 }
455
456 disable_weak(){
457     set_weak no $*
458 }
459
460 enable_safe(){
461     for var; do
462         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
463     done
464 }
465
466 disable_safe(){
467     for var; do
468         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
469     done
470 }
471
472 do_enable_deep(){
473     for var; do
474         enabled $var && continue
475         eval sel="\$${var}_select"
476         eval sgs="\$${var}_suggest"
477         pushvar var sgs
478         enable_deep $sel
479         popvar sgs
480         enable_deep_weak $sgs
481         popvar var
482     done
483 }
484
485 enable_deep(){
486     do_enable_deep $*
487     enable $*
488 }
489
490 enable_deep_weak(){
491     do_enable_deep $*
492     enable_weak $*
493 }
494
495 enabled(){
496     test "${1#!}" = "$1" && op== || op=!=
497     eval test "x\$${1#!}" $op "xyes"
498 }
499
500 disabled(){
501     test "${1#!}" = "$1" && op== || op=!=
502     eval test "x\$${1#!}" $op "xno"
503 }
504
505 enabled_all(){
506     for opt; do
507         enabled $opt || return 1
508     done
509 }
510
511 disabled_all(){
512     for opt; do
513         disabled $opt || return 1
514     done
515 }
516
517 enabled_any(){
518     for opt; do
519         enabled $opt && return 0
520     done
521 }
522
523 disabled_any(){
524     for opt; do
525         disabled $opt && return 0
526     done
527     return 1
528 }
529
530 set_default(){
531     for opt; do
532         eval : \${$opt:=\$${opt}_default}
533     done
534 }
535
536 is_in(){
537     value=$1
538     shift
539     for var in $*; do
540         [ $var = $value ] && return 0
541     done
542     return 1
543 }
544
545 check_deps(){
546     for cfg; do
547         cfg="${cfg#!}"
548         enabled ${cfg}_checking && die "Circular dependency for $cfg."
549         disabled ${cfg}_checking && continue
550         enable ${cfg}_checking
551
552         eval dep_all="\$${cfg}_deps"
553         eval dep_any="\$${cfg}_deps_any"
554         eval dep_sel="\$${cfg}_select"
555         eval dep_sgs="\$${cfg}_suggest"
556         eval dep_ifa="\$${cfg}_if"
557         eval dep_ifn="\$${cfg}_if_any"
558
559         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
560         check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
561         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
562
563         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
564         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
565         enabled_all  $dep_all || disable $cfg
566         enabled_any  $dep_any || disable $cfg
567         disabled_any $dep_sel && disable $cfg
568
569         if enabled $cfg; then
570             eval dep_extralibs="\$${cfg}_extralibs"
571             test -n "$dep_extralibs" && add_extralibs $dep_extralibs
572             enable_deep $dep_sel
573             enable_deep_weak $dep_sgs
574         fi
575
576         disable ${cfg}_checking
577     done
578 }
579
580 print_config_h(){
581     enabled $1 && v=1 || v=0
582     echo "#define $2 $v"
583 }
584
585 print_config_mak(){
586     enabled $1 && v= || v=!
587     echo "$v$2=yes"
588 }
589
590 print_config_asm(){
591     enabled $1 && v=1 || v=0
592     echo "%define $2 $v"
593 }
594
595 print_config(){
596     pfx=$1
597     files=$2
598     shift 2
599     for cfg; do
600         ucname="$(toupper $cfg)"
601         for f in $files; do
602             "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
603         done
604     done
605 }
606
607 print_enabled(){
608     test "$1" = -n && end=" " && shift || end="\n"
609     suf=$1
610     shift
611     for v; do
612         enabled $v && printf "%s$end" ${v%$suf};
613     done
614 }
615
616 append(){
617     var=$1
618     shift
619     eval "$var=\"\$$var $*\""
620 }
621
622 prepend(){
623     var=$1
624     shift
625     eval "$var=\"$* \$$var\""
626 }
627
628 add_cppflags(){
629     append CPPFLAGS $($filter_cppflags "$@")
630 }
631
632 add_cflags(){
633     append CFLAGS $($filter_cflags "$@")
634 }
635
636 add_cxxflags(){
637     append CXXFLAGS $($filter_cflags "$@")
638 }
639
640 add_asflags(){
641     append ASFLAGS $($filter_asflags "$@")
642 }
643
644 add_ldflags(){
645     append LDFLAGS "$@"
646 }
647
648 add_extralibs(){
649     prepend extralibs "$@"
650 }
651
652 check_cmd(){
653     log "$@"
654     "$@" >> $logfile 2>&1
655 }
656
657 check_cc(){
658     log check_cc "$@"
659     cat > $TMPC
660     log_file $TMPC
661     check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
662 }
663
664 check_cxx(){
665     log check_cxx "$@"
666     cat > $TMPCPP
667     log_file $TMPCPP
668     check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" -c -o $TMPO $TMPCPP
669 }
670
671 check_cpp(){
672     log check_cpp "$@"
673     cat > $TMPC
674     log_file $TMPC
675     check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
676 }
677
678 check_as(){
679     log check_as "$@"
680     cat > $TMPC
681     log_file $TMPC
682     check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
683 }
684
685 check_asm(){
686     log check_asm "$@"
687     name="$1"
688     code="$2"
689     shift 2
690     disable $name
691     check_as "$@" <<EOF && enable $name
692 void foo(void){ __asm__ volatile($code); }
693 EOF
694 }
695
696 check_yasm(){
697     log check_yasm "$@"
698     echo "$1" > $TMPS
699     log_file $TMPS
700     shift 1
701     check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
702 }
703
704 check_ld(){
705     log check_ld "$@"
706     type=$1
707     shift 1
708     flags=''
709     libs=''
710     for f; do
711         test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
712     done
713     check_$type $($filter_cflags $flags) || return
714     check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $libs $extralibs
715 }
716
717 check_cppflags(){
718     log check_cppflags "$@"
719     set -- $($filter_cppflags "$@")
720     check_cc "$@" <<EOF && append CPPFLAGS "$@"
721 int x;
722 EOF
723 }
724
725 check_cflags(){
726     log check_cflags "$@"
727     set -- $($filter_cflags "$@")
728     check_cc "$@" <<EOF && append CFLAGS "$@"
729 int x;
730 EOF
731 }
732
733 check_cxxflags(){
734     log check_cxxflags "$@"
735     set -- $($filter_cflags "$@")
736     check_cxx "$@" <<EOF && append CXXFLAGS "$@"
737 int x;
738 EOF
739 }
740
741 test_ldflags(){
742     log test_ldflags "$@"
743     check_ld "cc" "$@" <<EOF
744 int main(void){ return 0; }
745 EOF
746 }
747
748 check_ldflags(){
749     log check_ldflags "$@"
750     test_ldflags "$@" && add_ldflags "$@"
751 }
752
753 check_header(){
754     log check_header "$@"
755     header=$1
756     shift
757     disable_safe $header
758     check_cpp "$@" <<EOF && enable_safe $header
759 #include <$header>
760 int x;
761 EOF
762 }
763
764 check_func(){
765     log check_func "$@"
766     func=$1
767     shift
768     disable $func
769     check_ld "cc" "$@" <<EOF && enable $func
770 extern int $func();
771 int main(void){ $func(); }
772 EOF
773 }
774
775 check_mathfunc(){
776     log check_mathfunc "$@"
777     func=$1
778     shift
779     disable $func
780     check_ld "cc" "$@" <<EOF && enable $func
781 #include <math.h>
782 float foo(float f) { return $func(f); }
783 int main(void){ return (int) foo; }
784 EOF
785 }
786
787 check_func_headers(){
788     log check_func_headers "$@"
789     headers=$1
790     funcs=$2
791     shift 2
792     {
793         for hdr in $headers; do
794             echo "#include <$hdr>"
795         done
796         for func in $funcs; do
797             echo "long check_$func(void) { return (long) $func; }"
798         done
799         echo "int main(void) { return 0; }"
800     } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
801 }
802
803 check_class_headers_cpp(){
804     log check_class_headers_cpp "$@"
805     headers=$1
806     classes=$2
807     shift 2
808     {
809         for hdr in $headers; do
810             echo "#include <$hdr>"
811         done
812         echo "int main(void) { "
813         i=1
814         for class in $classes; do
815             echo "$class obj$i;"
816             i=$(expr $i + 1)
817         done
818         echo "return 0; }"
819     } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
820 }
821
822 check_cpp_condition(){
823     log check_cpp_condition "$@"
824     header=$1
825     condition=$2
826     shift 2
827     check_cpp $($filter_cppflags "$@") <<EOF
828 #include <$header>
829 #if !($condition)
830 #error "unsatisfied condition: $condition"
831 #endif
832 EOF
833 }
834
835 check_lib(){
836     log check_lib "$@"
837     header="$1"
838     func="$2"
839     shift 2
840     check_header $header && check_func $func "$@" && add_extralibs "$@"
841 }
842
843 check_lib2(){
844     log check_lib2 "$@"
845     headers="$1"
846     funcs="$2"
847     shift 2
848     check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
849 }
850
851 check_lib_cpp(){
852     log check_lib_cpp "$@"
853     headers="$1"
854     classes="$2"
855     shift 2
856     check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
857 }
858
859 check_pkg_config(){
860     log check_pkg_config "$@"
861     pkg="$1"
862     headers="$2"
863     funcs="$3"
864     shift 3
865     $pkg_config --exists $pkg 2>/dev/null || return
866     pkg_cflags=$($pkg_config --cflags $pkg)
867     pkg_libs=$($pkg_config --libs $pkg)
868     check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
869         set_safe ${pkg}_cflags $pkg_cflags   &&
870         set_safe ${pkg}_libs   $pkg_libs
871 }
872
873 check_exec(){
874     check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
875 }
876
877 check_exec_crash(){
878     code=$(cat)
879
880     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
881     # are safe but may not be available everywhere.  Thus we use
882     # raise(SIGTERM) instead.  The check is run in a subshell so we
883     # can redirect the "Terminated" message from the shell.  SIGBUS
884     # is not defined by standard C so it is used conditionally.
885
886     (check_exec "$@") >> $logfile 2>&1 <<EOF
887 #include <signal.h>
888 static void sighandler(int sig){
889     raise(SIGTERM);
890 }
891 int func(void){
892     $code
893 }
894 int (*func_ptr)(void) = func;
895 int main(void){
896     signal(SIGILL, sighandler);
897     signal(SIGFPE, sighandler);
898     signal(SIGSEGV, sighandler);
899 #ifdef SIGBUS
900     signal(SIGBUS, sighandler);
901 #endif
902     return func_ptr();
903 }
904 EOF
905 }
906
907 check_type(){
908     log check_type "$@"
909     headers=$1
910     type=$2
911     shift 2
912     disable_safe "$type"
913     incs=""
914     for hdr in $headers; do
915         incs="$incs
916 #include <$hdr>"
917     done
918     check_cc "$@" <<EOF && enable_safe "$type"
919 $incs
920 $type v;
921 EOF
922 }
923
924 check_struct(){
925     log check_type "$@"
926     headers=$1
927     struct=$2
928     member=$3
929     shift 3
930     disable_safe "${struct}_${member}"
931     incs=""
932     for hdr in $headers; do
933         incs="$incs
934 #include <$hdr>"
935     done
936     check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
937 $incs
938 const void *p = &(($struct *)0)->$member;
939 EOF
940 }
941
942 require(){
943     name="$1"
944     header="$2"
945     func="$3"
946     shift 3
947     check_lib $header $func "$@" || die "ERROR: $name not found"
948 }
949
950 require2(){
951     name="$1"
952     headers="$2"
953     func="$3"
954     shift 3
955     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
956 }
957
958 require_cpp(){
959     name="$1"
960     headers="$2"
961     classes="$3"
962     shift 3
963     check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
964 }
965
966 require_pkg_config(){
967     pkg="$1"
968     check_pkg_config "$@" || die "ERROR: $pkg not found"
969     add_cflags    $(get_safe ${pkg}_cflags)
970     add_extralibs $(get_safe ${pkg}_libs)
971 }
972
973 check_host_cc(){
974     log check_host_cc "$@"
975     cat > $TMPC
976     log_file $TMPC
977     check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
978 }
979
980 check_host_cflags(){
981     log check_host_cflags "$@"
982     check_host_cc "$@" <<EOF && append host_cflags "$@"
983 int x;
984 EOF
985 }
986
987 apply(){
988     file=$1
989     shift
990     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
991 }
992
993 cp_if_changed(){
994     cmp -s "$1" "$2" && echo "$2 is unchanged" && return
995     mkdir -p "$(dirname $2)"
996     cp -f "$1" "$2"
997 }
998
999 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1000 # system-dependent things.
1001
1002 COMPONENT_LIST="
1003     bsfs
1004     decoders
1005     demuxers
1006     encoders
1007     filters
1008     hwaccels
1009     indevs
1010     muxers
1011     outdevs
1012     parsers
1013     protocols
1014 "
1015
1016 PROGRAM_LIST="
1017     ffplay
1018     ffprobe
1019     ffserver
1020     ffmpeg
1021 "
1022
1023 CONFIG_LIST="
1024     $COMPONENT_LIST
1025     $PROGRAM_LIST
1026     ac3dsp
1027     avcodec
1028     avdevice
1029     avfilter
1030     avformat
1031     avresample
1032     avisynth
1033     bzlib
1034     crystalhd
1035     dct
1036     doc
1037     dwt
1038     dxva2
1039     fast_unaligned
1040     fastdiv
1041     fft
1042     fontconfig
1043     frei0r
1044     gnutls
1045     gpl
1046     gray
1047     hardcoded_tables
1048     libaacplus
1049     libass
1050     libbluray
1051     libcdio
1052     libcelt
1053     libdc1394
1054     libfaac
1055     libfreetype
1056     libgsm
1057     libilbc
1058     libmodplug
1059     libmp3lame
1060     libnut
1061     libopencore_amrnb
1062     libopencore_amrwb
1063     libopencv
1064     libopenjpeg
1065     libpulse
1066     librtmp
1067     libschroedinger
1068     libspeex
1069     libstagefright_h264
1070     libtheora
1071     libutvideo
1072     libv4l2
1073     libvo_aacenc
1074     libvo_amrwbenc
1075     libvorbis
1076     libvpx
1077     libx264
1078     libxavs
1079     libxvid
1080     lsp
1081     mdct
1082     memalign_hack
1083     mpegaudiodsp
1084     network
1085     nonfree
1086     openal
1087     openssl
1088     pic
1089     postproc
1090     rdft
1091     rtpdec
1092     runtime_cpudetect
1093     safe_bitstream_reader
1094     shared
1095     sinewin
1096     small
1097     sram
1098     static
1099     swresample
1100     swscale
1101     swscale_alpha
1102     thumb
1103     vaapi
1104     vda
1105     vdpau
1106     version3
1107     xmm_clobber_test
1108     x11grab
1109     zlib
1110 "
1111
1112 THREADS_LIST='
1113     pthreads
1114     w32threads
1115     os2threads
1116 '
1117
1118 ARCH_LIST='
1119     alpha
1120     arm
1121     avr32
1122     avr32_ap
1123     avr32_uc
1124     bfin
1125     ia64
1126     m68k
1127     mips
1128     mips64
1129     parisc
1130     ppc
1131     ppc64
1132     s390
1133     sh4
1134     sparc
1135     sparc64
1136     tomi
1137     x86
1138     x86_32
1139     x86_64
1140 '
1141
1142 ARCH_EXT_LIST='
1143     altivec
1144     amd3dnow
1145     amd3dnowext
1146     armv5te
1147     armv6
1148     armv6t2
1149     armvfp
1150     avx
1151     mmi
1152     mmx
1153     mmx2
1154     neon
1155     ppc4xx
1156     sse
1157     ssse3
1158     vfpv3
1159     vis
1160     mipsfpu
1161     mips32r2
1162     mipsdspr1
1163     mipsdspr2
1164 '
1165
1166 HAVE_LIST_PUB='
1167     bigendian
1168     fast_unaligned
1169 '
1170
1171 HAVE_LIST="
1172     $ARCH_EXT_LIST
1173     $HAVE_LIST_PUB
1174     $THREADS_LIST
1175     aligned_malloc
1176     aligned_stack
1177     alsa_asoundlib_h
1178     altivec_h
1179     arpa_inet_h
1180     asm_mod_y
1181     asm_types_h
1182     attribute_may_alias
1183     attribute_packed
1184     cbrtf
1185     clock_gettime
1186     closesocket
1187     cmov
1188     dcbzl
1189     dev_bktr_ioctl_bt848_h
1190     dev_bktr_ioctl_meteor_h
1191     dev_ic_bt8xx_h
1192     dev_video_bktr_ioctl_bt848_h
1193     dev_video_meteor_ioctl_meteor_h
1194     dlfcn_h
1195     dlopen
1196     dos_paths
1197     dxva_h
1198     ebp_available
1199     ebx_available
1200     exp2
1201     exp2f
1202     fast_64bit
1203     fast_clz
1204     fast_cmov
1205     fcntl
1206     fork
1207     getaddrinfo
1208     gethrtime
1209     GetProcessAffinityMask
1210     GetProcessMemoryInfo
1211     GetProcessTimes
1212     GetSystemTimeAsFileTime
1213     getrusage
1214     gettimeofday
1215     glob
1216     gnu_as
1217     ibm_asm
1218     inet_aton
1219     inline_asm
1220     isatty
1221     isinf
1222     isnan
1223     jack_port_get_latency_range
1224     kbhit
1225     ldbrx
1226     libdc1394_1
1227     libdc1394_2
1228     llrint
1229     llrintf
1230     local_aligned_16
1231     local_aligned_8
1232     localtime_r
1233     log2
1234     log2f
1235     loongson
1236     lrint
1237     lrintf
1238     lzo1x_999_compress
1239     machine_ioctl_bt848_h
1240     machine_ioctl_meteor_h
1241     makeinfo
1242     malloc_h
1243     MapViewOfFile
1244     memalign
1245     mkstemp
1246     mmap
1247     nanosleep
1248     netinet_sctp_h
1249     PeekNamedPipe
1250     poll_h
1251     posix_memalign
1252     pthread_cancel
1253     round
1254     roundf
1255     sched_getaffinity
1256     sdl
1257     sdl_video_size
1258     setmode
1259     setrlimit
1260     Sleep
1261     sndio_h
1262     socklen_t
1263     soundcard_h
1264     strerror_r
1265     strptime
1266     struct_addrinfo
1267     struct_group_source_req
1268     struct_ip_mreq_source
1269     struct_ipv6_mreq
1270     struct_pollfd
1271     struct_rusage_ru_maxrss
1272     struct_sockaddr_in6
1273     struct_sockaddr_sa_len
1274     struct_sockaddr_storage
1275     struct_v4l2_frmivalenum_discrete
1276     symver
1277     symver_asm_label
1278     symver_gnu_asm
1279     sysconf
1280     sysctl
1281     sys_mman_h
1282     sys_param_h
1283     sys_resource_h
1284     sys_select_h
1285     sys_soundcard_h
1286     sys_time_h
1287     sys_videoio_h
1288     termios_h
1289     threads
1290     trunc
1291     truncf
1292     unistd_h
1293     usleep
1294     vfp_args
1295     VirtualAlloc
1296     windows_h
1297     winsock2_h
1298     xform_asm
1299     xmm_clobbers
1300     yasm
1301 "
1302
1303 # options emitted with CONFIG_ prefix but not available on command line
1304 CONFIG_EXTRA="
1305     aandct
1306     avutil
1307     golomb
1308     gplv3
1309     h264chroma
1310     h264dsp
1311     h264pred
1312     h264qpel
1313     huffman
1314     lgplv3
1315     lpc
1316 "
1317
1318 CMDLINE_SELECT="
1319     $ARCH_EXT_LIST
1320     $CONFIG_LIST
1321     $THREADS_LIST
1322     asm
1323     coverage
1324     cross_compile
1325     debug
1326     extra_warnings
1327     logging
1328     optimizations
1329     stripping
1330     symver
1331     yasm
1332 "
1333
1334 PATHS_LIST='
1335     bindir
1336     datadir
1337     incdir
1338     libdir
1339     mandir
1340     prefix
1341     shlibdir
1342 '
1343
1344 CMDLINE_SET="
1345     $PATHS_LIST
1346     ar
1347     arch
1348     as
1349     assert_level
1350     build_suffix
1351     cc
1352     cpu
1353     cross_prefix
1354     cxx
1355     dep_cc
1356     extra_version
1357     host_cc
1358     host_cflags
1359     host_ldflags
1360     host_libs
1361     host_os
1362     install
1363     ld
1364     logfile
1365     malloc_prefix
1366     nm
1367     optflags
1368     pkg_config
1369     postproc_version
1370     progs_suffix
1371     random_seed
1372     samples
1373     strip
1374     sysinclude
1375     sysroot
1376     target_exec
1377     target_os
1378     target_path
1379     valgrind
1380     yasmexe
1381 "
1382
1383 CMDLINE_APPEND="
1384     extra_cflags
1385     extra_cxxflags
1386 "
1387
1388 # code dependency declarations
1389
1390 # architecture extensions
1391
1392 armv5te_deps="arm"
1393 armv6_deps="arm"
1394 armv6t2_deps="arm"
1395 armvfp_deps="arm"
1396 neon_deps="arm"
1397 vfpv3_deps="armvfp"
1398
1399 mipsfpu_deps="mips"
1400 mips32r2_deps="mips"
1401 mipsdspr1_deps="mips"
1402 mipsdspr2_deps="mips"
1403 mmi_deps="mips"
1404
1405 altivec_deps="ppc"
1406 ppc4xx_deps="ppc"
1407
1408 vis_deps="sparc"
1409
1410 x86_64_suggest="cmov fast_cmov"
1411 amd3dnow_deps="mmx"
1412 amd3dnowext_deps="amd3dnow"
1413 mmx_deps="x86"
1414 mmx2_deps="mmx"
1415 sse_deps="mmx"
1416 ssse3_deps="sse"
1417 avx_deps="ssse3"
1418
1419 aligned_stack_if_any="ppc x86"
1420 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1421 fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1422 fast_unaligned_if_any="armv6 ppc x86"
1423
1424 inline_asm_deps="!tms470"
1425 need_memalign="altivec neon sse"
1426
1427 symver_if_any="symver_asm_label symver_gnu_asm"
1428
1429 # subsystems
1430 dct_select="rdft"
1431 mdct_select="fft"
1432 rdft_select="fft"
1433 mpegaudiodsp_select="dct"
1434
1435 # decoders / encoders / hardware accelerators
1436 aac_decoder_select="mdct sinewin"
1437 aac_encoder_select="mdct sinewin"
1438 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1439 ac3_decoder_select="mdct ac3dsp ac3_parser"
1440 ac3_encoder_select="mdct ac3dsp"
1441 ac3_fixed_encoder_select="mdct ac3dsp"
1442 alac_encoder_select="lpc"
1443 amrnb_decoder_select="lsp"
1444 amrwb_decoder_select="lsp"
1445 amv_encoder_select="aandct"
1446 atrac1_decoder_select="mdct sinewin"
1447 atrac3_decoder_select="mdct"
1448 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1449 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1450 cavs_decoder_select="golomb"
1451 cook_decoder_select="mdct sinewin"
1452 cscd_decoder_suggest="zlib"
1453 dca_decoder_select="mdct"
1454 dirac_decoder_select="dwt golomb"
1455 dnxhd_encoder_select="aandct"
1456 dxa_decoder_select="zlib"
1457 eac3_decoder_select="ac3_decoder"
1458 eac3_encoder_select="mdct ac3dsp"
1459 eamad_decoder_select="aandct"
1460 eatgq_decoder_select="aandct"
1461 eatqi_decoder_select="aandct"
1462 ffv1_decoder_select="golomb"
1463 flac_decoder_select="golomb"
1464 flac_encoder_select="golomb lpc"
1465 flashsv_decoder_select="zlib"
1466 flashsv_encoder_select="zlib"
1467 flashsv2_encoder_select="zlib"
1468 flashsv2_decoder_select="zlib"
1469 flv_decoder_select="h263_decoder"
1470 flv_encoder_select="h263_encoder"
1471 fraps_decoder_select="huffman"
1472 h261_encoder_select="aandct"
1473 h263_decoder_select="h263_parser"
1474 h263_encoder_select="aandct"
1475 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1476 h263i_decoder_select="h263_decoder"
1477 h263p_encoder_select="h263_encoder"
1478 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
1479 h264_decoder_select="golomb h264chroma h264dsp h264pred h264qpel"
1480 h264_dxva2_hwaccel_deps="dxva2api_h"
1481 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1482 h264_vaapi_hwaccel_select="vaapi h264_decoder"
1483 h264_vda_hwaccel_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1484 h264_vda_hwaccel_select="vda h264_decoder"
1485 h264_vdpau_decoder_select="vdpau h264_decoder"
1486 iac_decoder_select="fft mdct sinewin"
1487 imc_decoder_select="fft mdct sinewin"
1488 jpegls_decoder_select="golomb"
1489 jpegls_encoder_select="golomb"
1490 ljpeg_encoder_select="aandct"
1491 loco_decoder_select="golomb"
1492 mjpeg_encoder_select="aandct"
1493 mlp_decoder_select="mlp_parser"
1494 mp1_decoder_select="mpegaudiodsp"
1495 mp1float_decoder_select="mpegaudiodsp"
1496 mp2_decoder_select="mpegaudiodsp"
1497 mp2float_decoder_select="mpegaudiodsp"
1498 mp3_decoder_select="mpegaudiodsp"
1499 mp3adu_decoder_select="mpegaudiodsp"
1500 mp3adufloat_decoder_select="mpegaudiodsp"
1501 mp3float_decoder_select="mpegaudiodsp"
1502 mp3on4_decoder_select="mpegaudiodsp"
1503 mp3on4float_decoder_select="mpegaudiodsp"
1504 mpc7_decoder_select="mpegaudiodsp"
1505 mpc8_decoder_select="mpegaudiodsp"
1506 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1507 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1508 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1509 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1510 mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder"
1511 mpeg1video_encoder_select="aandct"
1512 mpeg2_crystalhd_decoder_select="crystalhd"
1513 mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1514 mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1515 mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder"
1516 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1517 mpeg2video_encoder_select="aandct"
1518 mpeg4_crystalhd_decoder_select="crystalhd"
1519 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1520 mpeg4_encoder_select="h263_encoder"
1521 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1522 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1523 msmpeg4_crystalhd_decoder_select="crystalhd"
1524 msmpeg4v1_decoder_select="h263_decoder"
1525 msmpeg4v1_encoder_select="h263_encoder"
1526 msmpeg4v2_decoder_select="h263_decoder"
1527 msmpeg4v2_encoder_select="h263_encoder"
1528 msmpeg4v3_decoder_select="h263_decoder"
1529 msmpeg4v3_encoder_select="h263_encoder"
1530 nellymoser_decoder_select="mdct sinewin"
1531 nellymoser_encoder_select="mdct sinewin"
1532 png_decoder_select="zlib"
1533 png_encoder_select="zlib"
1534 qcelp_decoder_select="lsp"
1535 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1536 ra_144_encoder_select="lpc"
1537 ralf_decoder_select="golomb"
1538 rv10_decoder_select="h263_decoder"
1539 rv10_encoder_select="h263_encoder"
1540 rv20_decoder_select="h263_decoder"
1541 rv20_encoder_select="h263_encoder"
1542 rv30_decoder_select="golomb h264chroma h264pred h264qpel"
1543 rv40_decoder_select="golomb h264chroma h264pred h264qpel"
1544 shorten_decoder_select="golomb"
1545 sipr_decoder_select="lsp"
1546 snow_decoder_select="dwt"
1547 snow_encoder_select="aandct dwt"
1548 sonic_decoder_select="golomb"
1549 sonic_encoder_select="golomb"
1550 sonic_ls_encoder_select="golomb"
1551 svq1_encoder_select="aandct"
1552 svq3_decoder_select="golomb h264chroma h264dsp h264pred h264qpel"
1553 svq3_decoder_suggest="zlib"
1554 theora_decoder_select="vp3_decoder"
1555 tiff_decoder_suggest="zlib"
1556 tiff_encoder_suggest="zlib"
1557 tscc_decoder_select="zlib"
1558 twinvq_decoder_select="mdct lsp sinewin"
1559 vc1_crystalhd_decoder_select="crystalhd"
1560 vc1_decoder_select="h263_decoder h264chroma h264qpel"
1561 vc1_dxva2_hwaccel_deps="dxva2api_h"
1562 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1563 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1564 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1565 vc1image_decoder_select="vc1_decoder"
1566 vorbis_decoder_select="mdct"
1567 vorbis_encoder_select="mdct"
1568 vp6_decoder_select="huffman"
1569 vp6a_decoder_select="vp6_decoder"
1570 vp6f_decoder_select="vp6_decoder"
1571 vp8_decoder_select="h264pred h264qpel"
1572 wmapro_decoder_select="mdct sinewin"
1573 wmav1_decoder_select="mdct sinewin"
1574 wmav1_encoder_select="mdct sinewin"
1575 wmav2_decoder_select="mdct sinewin"
1576 wmav2_encoder_select="mdct sinewin"
1577 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1578 wmv1_decoder_select="h263_decoder"
1579 wmv1_encoder_select="h263_encoder"
1580 wmv2_decoder_select="h263_decoder"
1581 wmv2_encoder_select="h263_encoder"
1582 wmv3_decoder_select="vc1_decoder"
1583 wmv3_crystalhd_decoder_select="crystalhd"
1584 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1585 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1586 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1587 wmv3image_decoder_select="wmv3_decoder"
1588 zerocodec_decoder_select="zlib"
1589 zlib_decoder_select="zlib"
1590 zlib_encoder_select="zlib"
1591 zmbv_decoder_select="zlib"
1592 zmbv_encoder_select="zlib"
1593
1594 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1595 vaapi_deps="va_va_h"
1596 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1597 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1598
1599 # parsers
1600 h264_parser_select="golomb h264dsp h264pred"
1601
1602 # external libraries
1603 libaacplus_encoder_deps="libaacplus"
1604 libcelt_decoder_deps="libcelt"
1605 libfaac_encoder_deps="libfaac"
1606 libgsm_decoder_deps="libgsm"
1607 libgsm_encoder_deps="libgsm"
1608 libgsm_ms_decoder_deps="libgsm"
1609 libgsm_ms_encoder_deps="libgsm"
1610 libilbc_decoder_deps="libilbc"
1611 libilbc_encoder_deps="libilbc"
1612 libmodplug_demuxer_deps="libmodplug"
1613 libmp3lame_encoder_deps="libmp3lame"
1614 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1615 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1616 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1617 libopenjpeg_decoder_deps="libopenjpeg"
1618 libopenjpeg_encoder_deps="libopenjpeg"
1619 libschroedinger_decoder_deps="libschroedinger"
1620 libschroedinger_encoder_deps="libschroedinger"
1621 libspeex_decoder_deps="libspeex"
1622 libspeex_encoder_deps="libspeex"
1623 libstagefright_h264_decoder_deps="libstagefright_h264"
1624 libtheora_encoder_deps="libtheora"
1625 libvo_aacenc_encoder_deps="libvo_aacenc"
1626 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1627 libvorbis_decoder_deps="libvorbis"
1628 libvorbis_encoder_deps="libvorbis"
1629 libvpx_decoder_deps="libvpx"
1630 libvpx_encoder_deps="libvpx"
1631 libx264_encoder_deps="libx264"
1632 libx264rgb_encoder_deps="libx264"
1633 libxavs_encoder_deps="libxavs"
1634 libxvid_encoder_deps="libxvid"
1635 libutvideo_decoder_deps="libutvideo"
1636 libutvideo_encoder_deps="libutvideo"
1637
1638 # demuxers / muxers
1639 ac3_demuxer_select="ac3_parser"
1640 asf_stream_muxer_select="asf_muxer"
1641 avisynth_demuxer_deps="avisynth"
1642 dirac_demuxer_select="dirac_parser"
1643 eac3_demuxer_select="ac3_parser"
1644 flac_demuxer_select="flac_parser"
1645 ipod_muxer_select="mov_muxer"
1646 libnut_demuxer_deps="libnut"
1647 libnut_muxer_deps="libnut"
1648 matroska_audio_muxer_select="matroska_muxer"
1649 matroska_demuxer_suggest="zlib bzlib"
1650 mov_demuxer_suggest="zlib"
1651 mp3_demuxer_select="mpegaudio_parser"
1652 mp4_muxer_select="mov_muxer"
1653 mpegts_muxer_select="adts_muxer latm_muxer"
1654 mpegtsraw_demuxer_select="mpegts_demuxer"
1655 mxf_d10_muxer_select="mxf_muxer"
1656 ogg_demuxer_select="golomb"
1657 psp_muxer_select="mov_muxer"
1658 rtp_demuxer_select="sdp_demuxer"
1659 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1660 rtsp_demuxer_select="http_protocol rtpdec"
1661 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
1662 sap_demuxer_select="sdp_demuxer"
1663 sap_muxer_select="rtp_muxer rtp_protocol"
1664 sdp_demuxer_select="rtpdec"
1665 spdif_muxer_select="aac_parser"
1666 tg2_muxer_select="mov_muxer"
1667 tgp_muxer_select="mov_muxer"
1668 w64_demuxer_deps="wav_demuxer"
1669
1670 # indevs / outdevs
1671 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1672 alsa_outdev_deps="alsa_asoundlib_h"
1673 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1674 dshow_indev_deps="IBaseFilter"
1675 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
1676 dv1394_indev_deps="dv1394 dv_demuxer"
1677 fbdev_indev_deps="linux_fb_h"
1678 jack_indev_deps="jack_jack_h sem_timedwait"
1679 lavfi_indev_deps="avfilter"
1680 libcdio_indev_deps="libcdio"
1681 libdc1394_indev_deps="libdc1394"
1682 libv4l2_indev_deps="libv4l2"
1683 openal_indev_deps="openal"
1684 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1685 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1686 pulse_indev_deps="libpulse"
1687 sdl_outdev_deps="sdl"
1688 sndio_indev_deps="sndio_h"
1689 sndio_outdev_deps="sndio_h"
1690 v4l_indev_deps="linux_videodev_h"
1691 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1692 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1693 vfwcap_indev_extralibs="-lavicap32"
1694 x11_grab_device_indev_deps="x11grab XShmCreateImage"
1695
1696 # protocols
1697 bluray_protocol_deps="libbluray"
1698 gopher_protocol_deps="network"
1699 httpproxy_protocol_deps="network"
1700 httpproxy_protocol_select="tcp_protocol"
1701 http_protocol_deps="network"
1702 http_protocol_select="tcp_protocol"
1703 https_protocol_select="tls_protocol"
1704 librtmp_protocol_deps="librtmp"
1705 librtmpe_protocol_deps="librtmp"
1706 librtmps_protocol_deps="librtmp"
1707 librtmpt_protocol_deps="librtmp"
1708 librtmpte_protocol_deps="librtmp"
1709 mmsh_protocol_select="http_protocol"
1710 mmst_protocol_deps="network"
1711 rtmp_protocol_deps="!librtmp_protocol"
1712 rtmp_protocol_select="tcp_protocol"
1713 rtmphttp_protocol_deps="!librtmp_protocol"
1714 rtmphttp_protocol_select="http_protocol"
1715 rtmpt_protocol_deps="!librtmp_protocol"
1716 rtmpt_protocol_select="rtmphttp_protocol"
1717 rtp_protocol_select="udp_protocol"
1718 sctp_protocol_deps="network netinet_sctp_h"
1719 tcp_protocol_deps="network"
1720 tls_protocol_deps_any="openssl gnutls"
1721 tls_protocol_select="tcp_protocol"
1722 udp_protocol_deps="network"
1723
1724 # filters
1725 aconvert_filter_deps="swresample"
1726 amovie_filter_deps="avcodec avformat"
1727 aresample_filter_deps="swresample"
1728 ass_filter_deps="libass"
1729 asyncts_filter_deps="avresample"
1730 atempo_filter_deps="avcodec rdft"
1731 blackframe_filter_deps="gpl"
1732 boxblur_filter_deps="gpl"
1733 colormatrix_filter_deps="gpl"
1734 cropdetect_filter_deps="gpl"
1735 delogo_filter_deps="gpl"
1736 deshake_filter_deps="avcodec"
1737 drawtext_filter_deps="libfreetype"
1738 frei0r_filter_deps="frei0r dlopen"
1739 frei0r_filter_extralibs='$ldl'
1740 frei0r_src_filter_deps="frei0r dlopen"
1741 frei0r_src_filter_extralibs='$ldl'
1742 hqdn3d_filter_deps="gpl"
1743 movie_filter_deps="avcodec avformat"
1744 mp_filter_deps="gpl avcodec swscale postproc"
1745 mptestsrc_filter_deps="gpl"
1746 negate_filter_deps="lut_filter"
1747 resample_filter_deps="avresample"
1748 ocv_filter_deps="libopencv"
1749 pan_filter_deps="swresample"
1750 removelogo_filter_deps="avcodec avformat swscale"
1751 scale_filter_deps="swscale"
1752 select_filter_deps="avcodec"
1753 super2xsai_filter_deps="gpl"
1754 tinterlace_filter_deps="gpl"
1755 yadif_filter_deps="gpl"
1756
1757 # libraries
1758 avdevice_deps="avcodec avformat"
1759 avformat_deps="avcodec"
1760 postproc_deps="gpl"
1761
1762 # programs
1763 ffmpeg_deps="avcodec avfilter avformat swscale swresample"
1764 ffmpeg_select="buffersink_filter format_filter aformat_filter
1765                setpts_filter null_filter anull_filter"
1766 ffplay_deps="avcodec avformat swscale swresample sdl"
1767 ffplay_select="buffersink_filter rdft"
1768 ffprobe_deps="avcodec avformat"
1769 ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
1770 ffserver_extralibs='$ldl'
1771
1772 doc_deps="texi2html"
1773
1774 # tests
1775
1776 test_deps(){
1777     suf1=$1
1778     suf2=$2
1779     shift 2
1780     for v; do
1781         dep=${v%=*}
1782         tests=${v#*=}
1783         for name in ${tests}; do
1784             append ${name}_test_deps ${dep}$suf1 ${dep}$suf2
1785         done
1786     done
1787 }
1788
1789 mxf_d10_test_deps="avfilter"
1790 seek_lavf_mxf_d10_test_deps="mxf_d10_test"
1791
1792 test_deps _muxer _demuxer                                               \
1793     aiff                                                                \
1794     pcm_alaw=alaw                                                       \
1795     asf                                                                 \
1796     au                                                                  \
1797     avi                                                                 \
1798     dv=dv_fmt                                                           \
1799     ffm                                                                 \
1800     flv=flv_fmt                                                         \
1801     gxf                                                                 \
1802     matroska=mkv                                                        \
1803     mmf                                                                 \
1804     mov="mov ismv"                                                      \
1805     pcm_mulaw=mulaw                                                     \
1806     mxf="mxf mxf_d10"                                                   \
1807     nut                                                                 \
1808     ogg="ogg ogg_vp3"                                                   \
1809     rawvideo=pixfmt                                                     \
1810     rm                                                                  \
1811     swf                                                                 \
1812     mpegts=ts                                                           \
1813     voc                                                                 \
1814     wav                                                                 \
1815     yuv4mpegpipe=yuv4mpeg                                               \
1816
1817 colormatrix1_test_deps="colormatrix_filter"
1818 colormatrix2_test_deps="colormatrix_filter"
1819 flashsv2_test_deps="zlib"
1820 mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1821 mpng_test_deps="zlib"
1822 pp_test_deps="mp_filter"
1823 pp2_test_deps="mp_filter"
1824 pp3_test_deps="mp_filter"
1825 pp4_test_deps="mp_filter"
1826 pp5_test_deps="mp_filter"
1827 pp6_test_deps="mp_filter"
1828 zlib_test_deps="zlib"
1829 zmbv_test_deps="zlib"
1830
1831 # default parameters
1832
1833 logfile="config.log"
1834
1835 # installation paths
1836 prefix_default="/usr/local"
1837 bindir_default='${prefix}/bin'
1838 datadir_default='${prefix}/share/ffmpeg'
1839 incdir_default='${prefix}/include'
1840 libdir_default='${prefix}/lib'
1841 mandir_default='${prefix}/share/man'
1842 shlibdir_default="$libdir_default"
1843 postproc_version_default="current"
1844
1845 # toolchain
1846 ar_default="ar"
1847 cc_default="gcc"
1848 cxx_default="g++"
1849 cc_version=\"unknown\"
1850 host_cc_default="gcc"
1851 install="install"
1852 ln_s="ln -sf"
1853 nm_default="nm"
1854 objformat="elf"
1855 pkg_config_default=pkg-config
1856 ranlib="ranlib"
1857 strip_default="strip"
1858 yasmexe_default="yasm"
1859
1860 nm_opts='-g'
1861 nogas=":"
1862
1863 # machine
1864 arch_default=$(uname -m)
1865 cpu="generic"
1866
1867 # OS
1868 target_os_default=$(tolower $(uname -s))
1869 host_os=$target_os_default
1870
1871 # alternative libpostproc version
1872 ALT_PP_VER_MAJOR=51
1873 ALT_PP_VER_MINOR=2
1874 ALT_PP_VER_MICRO=101
1875 ALT_PP_VER=$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO
1876
1877 # configurable options
1878 enable $PROGRAM_LIST
1879
1880 enable avcodec
1881 enable avdevice
1882 enable avfilter
1883 enable avformat
1884 enable avutil
1885 enable postproc
1886 enable stripping
1887 enable swresample
1888 enable swscale
1889
1890 enable asm
1891 enable debug
1892 enable doc
1893 enable fastdiv
1894 enable network
1895 enable optimizations
1896 enable safe_bitstream_reader
1897 enable static
1898 enable swscale_alpha
1899
1900 # build settings
1901 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1902 FFSERVERLDFLAGS=-Wl,-E
1903 LIBPREF="lib"
1904 LIBSUF=".a"
1905 FULLNAME='$(NAME)$(BUILDSUF)'
1906 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1907 SLIBPREF="lib"
1908 SLIBSUF=".so"
1909 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1910 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1911 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1912 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1913 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
1914 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
1915
1916 AS_O='-o $@'
1917 CC_O='-o $@'
1918 CXX_O='-o $@'
1919
1920 host_cflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600 -O3 -g'
1921 host_libs='-lm'
1922
1923 target_path='$(CURDIR)'
1924
1925 # since the object filename is not given with the -MM flag, the compiler
1926 # is only able to print the basename, and we must add the path ourselves
1927 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1928 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1929
1930 # find source path
1931 if test -f configure; then
1932     source_path=.
1933 else
1934     source_path=$(cd $(dirname "$0"); pwd)
1935     echo "$source_path" | grep -q '[[:blank:]]' &&
1936         die "Out of tree builds are impossible with whitespace in source path."
1937     test -e "$source_path/config.h" &&
1938         die "Out of tree builds are impossible with config.h in source dir."
1939 fi
1940
1941 for v in "$@"; do
1942     r=${v#*=}
1943     l=${v%"$r"}
1944     r=$(sh_quote "$r")
1945     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1946 done
1947
1948 find_things(){
1949     thing=$1
1950     pattern=$2
1951     file=$source_path/$3
1952     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1953 }
1954
1955 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1956 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1957 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1958 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1959 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1960 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1961 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1962 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1963 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1964 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1965 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1966
1967 ALL_COMPONENTS="
1968     $BSF_LIST
1969     $DECODER_LIST
1970     $DEMUXER_LIST
1971     $ENCODER_LIST
1972     $FILTER_LIST
1973     $HWACCEL_LIST
1974     $INDEV_LIST
1975     $MUXER_LIST
1976     $OUTDEV_LIST
1977     $PARSER_LIST
1978     $PROTOCOL_LIST
1979 "
1980
1981 find_tests(){
1982     map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1983 }
1984
1985 LAVF_FATE_TESTS=$(find_tests lavf-fate)
1986 LAVF_TESTS=$(find_tests lavf)
1987 LAVFI_TESTS=$(find_tests lavfi)
1988 SEEK_TESTS=$(find_tests seek seek_)
1989
1990 ALL_TESTS="$LAVF_FATE_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS"
1991
1992 for n in $COMPONENT_LIST; do
1993     v=$(toupper ${n%s})_LIST
1994     eval enable \$$v
1995     eval ${n}_if_any="\$$v"
1996 done
1997
1998 enable $ARCH_EXT_LIST $ALL_TESTS
1999
2000 die_unknown(){
2001     echo "Unknown option \"$1\"."
2002     echo "See $0 --help for available options."
2003     exit 1
2004 }
2005
2006 show_list() {
2007     suffix=_$1
2008     shift
2009     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
2010     exit 0
2011 }
2012
2013 rand_list(){
2014     IFS=', '
2015     set -- $*
2016     unset IFS
2017     for thing; do
2018         comp=${thing%:*}
2019         prob=${thing#$comp}
2020         prob=${prob#:}
2021         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2022         echo "prob ${prob:-0.5}"
2023         printf '%s\n' $comp
2024     done
2025 }
2026
2027 do_random(){
2028     action=$1
2029     shift
2030     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2031     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2032 }
2033
2034 for opt do
2035     optval="${opt#*=}"
2036     case "$opt" in
2037     --extra-ldflags=*) add_ldflags $optval
2038     ;;
2039     --extra-libs=*) add_extralibs $optval
2040     ;;
2041     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
2042     ;;
2043     --enable-debug=*) debuglevel="$optval"
2044     ;;
2045     --disable-everything)
2046     map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2047     ;;
2048     --enable-random|--disable-random)
2049     action=${opt%%-random}
2050     do_random ${action#--} $COMPONENT_LIST
2051     ;;
2052     --enable-random=*|--disable-random=*)
2053     action=${opt%%-random=*}
2054     do_random ${action#--} $optval
2055     ;;
2056     --enable-*=*|--disable-*=*)
2057     eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2058     is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2059     eval list=\$$(toupper $thing)_LIST
2060     name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2061     $action $(filter "$name" $list)
2062     ;;
2063     --enable-?*|--disable-?*)
2064     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2065     if is_in $option $COMPONENT_LIST; then
2066         test $action = disable && action=unset
2067         eval $action \$$(toupper ${option%s})_LIST
2068     elif is_in $option $CMDLINE_SELECT; then
2069         $action $option
2070     else
2071         die_unknown $opt
2072     fi
2073     ;;
2074     --list-*)
2075         NAME="${opt#--list-}"
2076         is_in $NAME $COMPONENT_LIST || die_unknown $opt
2077         NAME=${NAME%s}
2078         eval show_list $NAME \$$(toupper $NAME)_LIST
2079     ;;
2080     --help|-h) show_help
2081     ;;
2082     *)
2083     optname="${opt%%=*}"
2084     optname="${optname#--}"
2085     optname=$(echo "$optname" | sed 's/-/_/g')
2086     if is_in $optname $CMDLINE_SET; then
2087         eval $optname='$optval'
2088     elif is_in $optname $CMDLINE_APPEND; then
2089         append $optname "$optval"
2090     else
2091          die_unknown $opt
2092     fi
2093     ;;
2094     esac
2095 done
2096
2097 disabled logging && logfile=/dev/null
2098
2099 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2100 set >> $logfile
2101
2102 test -n "$cross_prefix" && enable cross_compile
2103
2104 if enabled cross_compile; then
2105     test -n "$arch" && test -n "$target_os" ||
2106         die "Must specify target arch and OS when cross-compiling"
2107 fi
2108
2109 set_default arch target_os postproc_version
2110
2111 # Check if we should build alternative libpostproc version instead of current
2112 if   test "$postproc_version" = $ALT_PP_VER; then
2113   LIBPOSTPROC_VERSION=$ALT_PP_VER
2114   LIBPOSTPROC_VERSION_MAJOR=$ALT_PP_VER_MAJOR
2115   LIBPOSTPROC_VERSION_MINOR=$ALT_PP_VER_MINOR
2116   LIBPOSTPROC_VERSION_MICRO=$ALT_PP_VER_MICRO
2117 elif test "$postproc_version" != current; then
2118   die "Invalid argument to --postproc-version. See --help output."
2119 fi
2120
2121 ar_default="${cross_prefix}${ar_default}"
2122 cc_default="${cross_prefix}${cc_default}"
2123 cxx_default="${cross_prefix}${cxx_default}"
2124 nm_default="${cross_prefix}${nm_default}"
2125 pkg_config_default="${cross_prefix}${pkg_config_default}"
2126 ranlib="${cross_prefix}${ranlib}"
2127 strip_default="${cross_prefix}${strip_default}"
2128
2129 sysinclude_default="${sysroot}/usr/include"
2130
2131 set_default cc cxx nm pkg_config strip sysinclude yasmexe
2132 enabled cross_compile || host_cc_default=$cc
2133 set_default host_cc
2134
2135 if ! $pkg_config --version >/dev/null 2>&1; then
2136     warn "$pkg_config not found, library detection may fail."
2137     pkg_config=false
2138 fi
2139
2140 exesuf() {
2141     case $1 in
2142         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2143     esac
2144 }
2145
2146 EXESUF=$(exesuf $target_os)
2147 HOSTEXESUF=$(exesuf $host_os)
2148
2149 # set temporary file name
2150 : ${TMPDIR:=$TEMPDIR}
2151 : ${TMPDIR:=$TMP}
2152 : ${TMPDIR:=/tmp}
2153
2154 if ! check_cmd mktemp -u XXXXXX; then
2155     # simple replacement for missing mktemp
2156     # NOT SAFE FOR GENERAL USE
2157     mktemp(){
2158         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2159     }
2160 fi
2161
2162 tmpfile(){
2163     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2164         (set -C; exec > $tmp) 2>/dev/null ||
2165         die "Unable to create temporary file in $TMPDIR."
2166     append TMPFILES $tmp
2167     eval $1=$tmp
2168 }
2169
2170 trap 'rm -f -- $TMPFILES' EXIT
2171
2172 tmpfile TMPASM .asm
2173 tmpfile TMPC   .c
2174 tmpfile TMPCPP .cpp
2175 tmpfile TMPE   $EXESUF
2176 tmpfile TMPH   .h
2177 tmpfile TMPO   .o
2178 tmpfile TMPS   .S
2179 tmpfile TMPSH  .sh
2180 tmpfile TMPV   .ver
2181
2182 unset -f mktemp
2183
2184 chmod +x $TMPE
2185
2186 # make sure we can execute files in $TMPDIR
2187 cat > $TMPSH 2>> $logfile <<EOF
2188 #! /bin/sh
2189 EOF
2190 chmod +x $TMPSH >> $logfile 2>&1
2191 if ! $TMPSH >> $logfile 2>&1; then
2192     cat <<EOF
2193 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2194 variable to another directory and make sure that it is not mounted noexec.
2195 EOF
2196     die "Sanity test failed."
2197 fi
2198
2199 filter_asflags=echo
2200 filter_cflags=echo
2201 filter_cppflags=echo
2202
2203 if   $cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2204     cc_type=llvm_gcc
2205     cc_version=__VERSION__
2206     gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
2207     cc_ident="llvm-gcc $($cc -dumpversion) $gcc_extra_ver"
2208     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2209     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2210     speed_cflags='-O3'
2211     size_cflags='-Os'
2212 elif $cc -v 2>&1 | grep -qi ^gcc; then
2213     cc_type=gcc
2214     cc_version=__VERSION__
2215     gcc_version=$($cc --version | head -n1)
2216     gcc_basever=$($cc -dumpversion)
2217     gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2218     gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2219     cc_ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2220     if ! $cc -dumpversion | grep -q '^2\.'; then
2221         CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2222         AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2223     fi
2224     speed_cflags='-O3'
2225     size_cflags='-Os'
2226 elif $cc --version 2>/dev/null | grep -q Intel; then
2227     cc_type=icc
2228     cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
2229     cc_ident=$($cc --version | head -n1)
2230     icc_version=$($cc -dumpversion)
2231     CC_DEPFLAGS='-MMD'
2232     AS_DEPFLAGS='-MMD'
2233     speed_cflags='-O3'
2234     size_cflags='-Os'
2235     noopt_cflags='-O1'
2236 elif $cc -v 2>&1 | grep -q xlc; then
2237     cc_type=xlc
2238     cc_version="AV_STRINGIFY(__IBMC__)"
2239     cc_ident=$($cc -qversion 2>/dev/null | head -n1)
2240     speed_cflags='-O5'
2241     size_cflags='-O5 -qcompact'
2242 elif $cc -V 2>/dev/null | grep -q Compaq; then
2243     cc_type=ccc
2244     cc_version="AV_STRINGIFY(__DECC_VER)"
2245     cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3)
2246     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
2247     debuglevel=3
2248     add_ldflags -Wl,-z,now # calls to libots crash without this
2249     speed_cflags='-fast'
2250     size_cflags='-O1'
2251 elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2252     test -d "$sysroot" || die "No valid sysroot specified."
2253     cc_type=armcc
2254     cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
2255     cc_ident=$($cc --vsn | head -n1)
2256     armcc_conf="$PWD/armcc.conf"
2257     $cc --arm_linux_configure                 \
2258         --arm_linux_config_file="$armcc_conf" \
2259         --configure_sysroot="$sysroot"        \
2260         --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2261         die "Error creating armcc configuration file."
2262     $cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2263     cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
2264     as_default="${cross_prefix}gcc"
2265     CC_DEPFLAGS='-MMD'
2266     AS_DEPFLAGS='-MMD'
2267     speed_cflags='-O3'
2268     size_cflags='-Os'
2269     filter_asflags="filter_out -W${armcc_opt}*"
2270 elif $cc -version 2>/dev/null | grep -q TMS470; then
2271     cc_type=tms470
2272     cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
2273     cc_ident=$($cc -version | head -n1 | tr -s ' ')
2274     cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
2275     CC_O='-fr=$(@D)'
2276     as_default="${cross_prefix}gcc"
2277     ld_default="${cross_prefix}gcc"
2278     TMPO=$(basename $TMPC .c).o
2279     append TMPFILES $TMPO
2280     add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
2281     CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
2282     AS_DEPFLAGS='-MMD'
2283     speed_cflags='-O3 -mf=5'
2284     size_cflags='-O3 -mf=2'
2285     filter_cflags=tms470_flags
2286     tms470_flags(){
2287         for flag; do
2288             case $flag in
2289                 -march=*|-mcpu=*)
2290                     case "${flag#*=}" in
2291                         armv7-a|cortex-a*)      echo -mv=7a8 ;;
2292                         armv7-r|cortex-r*)      echo -mv=7r4 ;;
2293                         armv7-m|cortex-m*)      echo -mv=7m3 ;;
2294                         armv6*|arm11*)          echo -mv=6   ;;
2295                         armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2296                                                 echo -mv=5e  ;;
2297                         armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2298                     esac
2299                     ;;
2300                 -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2301                 -mfpu=vfp)      echo --float_support=vfpv2        ;;
2302                 -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2303                 -msoft-float)   echo --float_support=vfplib       ;;
2304                 -O[0-3]|-mf=*)  echo $flag                        ;;
2305                 -g)             echo -g -mn                       ;;
2306                 -pds=*)         echo $flag                        ;;
2307             esac
2308         done
2309     }
2310 elif $cc -v 2>&1 | grep -q clang; then
2311     cc_type=clang
2312     $cc -dM -E $TMPC | grep -q __clang_version__ &&
2313         cc_version=__clang_version__ || cc_version=__VERSION__
2314     cc_ident=$($cc --version | head -n1)
2315     CC_DEPFLAGS='-MMD'
2316     AS_DEPFLAGS='-MMD'
2317     speed_cflags='-O3'
2318     size_cflags='-Os'
2319 elif $cc -V 2>&1 | grep -q Sun; then
2320     cc_type=suncc
2321     cc_version="AV_STRINGIFY(__SUNPRO_C)"
2322     cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2323     DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2324     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
2325     add_ldflags -xc99
2326     speed_cflags='-O5'
2327     size_cflags='-O5 -xspace'
2328     filter_cflags=suncc_flags
2329     suncc_flags(){
2330         for flag; do
2331             case $flag in
2332                 -march=*|-mcpu=*)
2333                     case "${flag#*=}" in
2334                         native)                   echo -xtarget=native       ;;
2335                         v9|niagara)               echo -xarch=sparc          ;;
2336                         ultrasparc)               echo -xarch=sparcvis       ;;
2337                         ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2338                         i586|pentium)             echo -xchip=pentium        ;;
2339                         i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2340                         pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2341                         pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2342                         pentium4*)          echo -xtarget=pentium4           ;;
2343                         prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2344                         *-sse3)             echo -xarch=sse3                 ;;
2345                         core2)              echo -xarch=ssse3 -xchip=core2   ;;
2346                         amdfam10|barcelona)       echo -xarch=sse4_1         ;;
2347                         athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
2348                         k8|opteron|athlon64|athlon-fx)
2349                                                   echo -xarch=sse2a          ;;
2350                         athlon*)                  echo -xarch=pentium_proa   ;;
2351                     esac
2352                     ;;
2353                 -std=c99)             echo -xc99              ;;
2354                 -fomit-frame-pointer) echo -xregs=frameptr    ;;
2355                 -fPIC)                echo -KPIC -xcode=pic32 ;;
2356                 -W*,*)                echo $flag              ;;
2357                 -f*-*|-W*)                                    ;;
2358                 *)                    echo $flag              ;;
2359             esac
2360         done
2361     }
2362 elif $cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2363     cc_type=pathscale
2364     cc_version=__PATHSCALE__
2365     cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2366     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2367     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2368     speed_cflags='-O2'
2369     size_cflags='-Os'
2370     filter_cflags='filter_out -Wdisabled-optimization'
2371 elif $cc -v 2>&1 | grep -q Open64; then
2372     cc_type=open64
2373     cc_version=__OPEN64__
2374     cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2375     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2376     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2377     speed_cflags='-O2'
2378     size_cflags='-Os'
2379     filter_cflags='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2380 elif $cc -V 2>&1 | grep -q Portland; then
2381     cc_type=pgi
2382     cc_version='AV_STRINGIFY(__PGIC__.__PGIC_MINOR__.__PGIC_PATCHLEVEL__)'
2383     cc_ident="PGI $($cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2384     opt_common='-alias=ansi -Mlre -Mpre'
2385     speed_cflags="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2386     size_cflags="-O2 -Munroll=c:1 $opt_common"
2387     noopt_cflags="-O1"
2388     filter_cflags=pgi_flags
2389     pgi_flags(){
2390         for flag; do
2391             case $flag in
2392                 -fomit-frame-pointer) echo -Mnoframe ;;
2393                 -g)                   echo -gopt ;;
2394                 *)                    echo $flag ;;
2395             esac
2396         done
2397     }
2398 fi
2399
2400 test -n "$cc_type" && enable $cc_type ||
2401     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2402
2403 : ${as_default:=$cc}
2404 : ${dep_cc_default:=$cc}
2405 : ${ld_default:=$cc}
2406 set_default ar as dep_cc ld
2407
2408 test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
2409 test -n "$CXX_DEPFLAGS" || CXXDEP=$DEPEND_CMD
2410 test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
2411
2412 add_cflags $extra_cflags
2413 add_cxxflags $extra_cxxflags
2414 add_asflags $extra_cflags
2415
2416 if test -n "$sysroot"; then
2417     case "$cc_type" in
2418         gcc|llvm_gcc|clang)
2419             add_cppflags --sysroot="$sysroot"
2420             add_ldflags --sysroot="$sysroot"
2421         ;;
2422         tms470)
2423             add_cppflags -I"$sysinclude"
2424             add_ldflags  --sysroot="$sysroot"
2425         ;;
2426     esac
2427 fi
2428
2429 if test "$cpu" = host; then
2430     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2431
2432     case "$cc_type" in
2433         gcc|llvm_gcc)
2434             check_native(){
2435                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2436                 sed -n "/cc1.*$1=/{
2437                             s/.*$1=\\([^ ]*\\).*/\\1/
2438                             p
2439                             q
2440                         }" $TMPE
2441             }
2442             cpu=$(check_native -march || check_native -mcpu)
2443         ;;
2444     esac
2445
2446     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2447 fi
2448
2449 # Deal with common $arch aliases
2450 case "$arch" in
2451     arm*|iPad*)
2452         arch="arm"
2453     ;;
2454     mips|mipsel|IP*)
2455         arch="mips"
2456     ;;
2457     mips64*)
2458         arch="mips"
2459         subarch="mips64"
2460     ;;
2461     parisc|hppa)
2462         arch="parisc"
2463     ;;
2464     parisc64|hppa64)
2465         arch="parisc"
2466         subarch="parisc64"
2467     ;;
2468     "Power Macintosh"|ppc|powerpc|ppc64|powerpc64)
2469         arch="ppc"
2470     ;;
2471     s390|s390x)
2472         arch="s390"
2473     ;;
2474     sh4|sh)
2475         arch="sh4"
2476     ;;
2477     sun4u|sparc64)
2478         arch="sparc"
2479         subarch="sparc64"
2480     ;;
2481     i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
2482         arch="x86"
2483     ;;
2484 esac
2485
2486 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2487 enable $arch
2488
2489 # Add processor-specific flags
2490 if test "$cpu" = generic; then
2491     : do nothing
2492 elif enabled ppc; then
2493
2494     case $(tolower $cpu) in
2495         601|ppc601|powerpc601)
2496             cpuflags="-mcpu=601"
2497             disable altivec
2498         ;;
2499         603*|ppc603*|powerpc603*)
2500             cpuflags="-mcpu=603"
2501             disable altivec
2502         ;;
2503         604*|ppc604*|powerpc604*)
2504             cpuflags="-mcpu=604"
2505             disable altivec
2506         ;;
2507         g3|75*|ppc75*|powerpc75*)
2508             cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2509             disable altivec
2510         ;;
2511         g4|745*|ppc745*|powerpc745*)
2512             cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2513         ;;
2514         74*|ppc74*|powerpc74*)
2515             cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2516         ;;
2517         g5|970|ppc970|powerpc970)
2518             cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2519         ;;
2520         power[3-7]*)
2521             cpuflags="-mcpu=$cpu -mpowerpc-gfxopt -mpowerpc64"
2522         ;;
2523         cell)
2524             cpuflags="-mcpu=cell"
2525             enable ldbrx
2526         ;;
2527         e500v2)
2528             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2529             disable altivec
2530         ;;
2531         e500)
2532             cpuflags="-mcpu=8540 -mhard-float"
2533             disable altivec
2534         ;;
2535     esac
2536
2537 elif enabled x86; then
2538
2539     case $cpu in
2540         i[345]86|pentium)
2541             cpuflags="-march=$cpu"
2542             disable mmx
2543         ;;
2544         # targets that do NOT support conditional mov (cmov)
2545         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2546             cpuflags="-march=$cpu"
2547             disable cmov
2548         ;;
2549         # targets that do support conditional mov (cmov)
2550         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom)
2551             cpuflags="-march=$cpu"
2552             enable cmov
2553             enable fast_cmov
2554         ;;
2555         # targets that do support conditional mov but on which it's slow
2556         pentium4|pentium4m|prescott|nocona)
2557             cpuflags="-march=$cpu"
2558             enable cmov
2559             disable fast_cmov
2560         ;;
2561     esac
2562
2563 elif enabled sparc; then
2564
2565     case $cpu in
2566         niagara)
2567             cpuflags="-mcpu=$cpu"
2568             disable vis
2569         ;;
2570         sparc64)
2571             cpuflags="-mcpu=v9"
2572         ;;
2573     esac
2574
2575 elif enabled arm; then
2576
2577     case $cpu in
2578         armv*)
2579             cpuflags="-march=$cpu"
2580             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2581         ;;
2582         *)
2583             cpuflags="-mcpu=$cpu"
2584             case $cpu in
2585                 cortex-a*)                               subarch=armv7a  ;;
2586                 cortex-r*)                               subarch=armv7r  ;;
2587                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
2588                 arm11*)                                  subarch=armv6   ;;
2589                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2590                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2591             esac
2592         ;;
2593     esac
2594
2595 elif enabled alpha; then
2596
2597     enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2598
2599 elif enabled bfin; then
2600
2601     cpuflags="-mcpu=$cpu"
2602
2603 elif enabled mips; then
2604
2605     cpuflags="-march=$cpu"
2606
2607     case $cpu in
2608         24kc)
2609             disable mipsfpu
2610             disable mipsdspr1
2611             disable mipsdspr2
2612         ;;
2613         24kf*)
2614             disable mipsdspr1
2615             disable mipsdspr2
2616         ;;
2617         24kec|34kc|1004kc)
2618             disable mipsfpu
2619             disable mipsdspr2
2620         ;;
2621         24kef*|34kf*|1004kf*)
2622             disable mipsdspr2
2623         ;;
2624         74kc)
2625             disable mipsfpu
2626         ;;
2627     esac
2628
2629 elif enabled avr32; then
2630
2631     case $cpu in
2632         ap7[02]0[0-2])
2633             subarch="avr32_ap"
2634             cpuflags="-mpart=$cpu"
2635         ;;
2636         ap)
2637             subarch="avr32_ap"
2638             cpuflags="-march=$cpu"
2639         ;;
2640         uc3[ab]*)
2641             subarch="avr32_uc"
2642             cpuflags="-mcpu=$cpu"
2643         ;;
2644         uc)
2645             subarch="avr32_uc"
2646             cpuflags="-march=$cpu"
2647         ;;
2648     esac
2649
2650 fi
2651
2652 add_cflags $cpuflags
2653 add_asflags $cpuflags
2654
2655 # compiler sanity check
2656 check_exec <<EOF
2657 int main(void){ return 0; }
2658 EOF
2659 if test "$?" != 0; then
2660     echo "$cc is unable to create an executable file."
2661     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2662         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2663         echo "Only do this if you know what cross compiling means."
2664     fi
2665     die "C compiler test failed."
2666 fi
2667
2668 add_cppflags -D_ISOC99_SOURCE
2669 add_cxxflags -D__STDC_CONSTANT_MACROS
2670 check_cflags -std=c99
2671 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2672 #include <stdlib.h>
2673 EOF
2674 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2675 #include <stdlib.h>
2676 EOF
2677
2678 check_host_cflags -std=c99
2679 check_host_cflags -Wall
2680
2681 case "$arch" in
2682     alpha|ia64|mips|parisc|sparc)
2683         spic=$shared
2684     ;;
2685     x86)
2686         subarch="x86_32"
2687         check_cc <<EOF && subarch="x86_64"
2688         int test[(int)sizeof(char*) - 7];
2689 EOF
2690         if test "$subarch" = "x86_64"; then
2691             spic=$shared
2692         fi
2693     ;;
2694     ppc)
2695         check_cc <<EOF && subarch="ppc64"
2696         int test[(int)sizeof(char*) - 7];
2697 EOF
2698     ;;
2699 esac
2700
2701 enable $subarch
2702 enabled spic && enable pic
2703
2704 # OS specific
2705 case $target_os in
2706     haiku)
2707         prefix_default="/boot/common"
2708         network_extralibs="-lnetwork"
2709         host_libs=
2710         ;;
2711     sunos)
2712         FFSERVERLDFLAGS=""
2713         SHFLAGS='-shared -Wl,-h,$$(@F)'
2714         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2715         network_extralibs="-lsocket -lnsl"
2716         add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
2717         # When using suncc to build, the Solaris linker will mark
2718         # an executable with each instruction set encountered by
2719         # the Solaris assembler.  As our libraries contain their own
2720         # guards for processor-specific code, instead suppress
2721         # generation of the HWCAPS ELF section on Solaris x86 only.
2722         enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
2723         nm_opts='-P -g'
2724         ;;
2725     netbsd)
2726         disable symver
2727         oss_indev_extralibs="-lossaudio"
2728         oss_outdev_extralibs="-lossaudio"
2729         ;;
2730     openbsd|bitrig)
2731         # On OpenBSD 4.5. the compiler does not use PIC unless
2732         # explicitly using -fPIC. FFmpeg builds fine without PIC,
2733         # however the generated executable will not do anything
2734         # (simply quits with exit-code 1, no crash, no output).
2735         # Thus explicitly enable PIC here.
2736         enable pic
2737         disable symver
2738         SHFLAGS='-shared'
2739         SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBVERSION)'
2740         oss_indev_extralibs="-lossaudio"
2741         oss_outdev_extralibs="-lossaudio"
2742         ;;
2743     dragonfly)
2744         disable symver
2745         ;;
2746     freebsd)
2747         ;;
2748     bsd/os)
2749         add_extralibs -lpoll -lgnugetopt
2750         strip="strip -d"
2751         ;;
2752     darwin)
2753         gas="gas-preprocessor.pl $cc"
2754         enabled ppc && add_asflags -force_cpusubtype_ALL
2755         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2756         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
2757         strip="${strip} -x"
2758         add_ldflags -Wl,-dynamic,-search_paths_first
2759         SLIBSUF=".dylib"
2760         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2761         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2762         FFSERVERLDFLAGS=-Wl,-bind_at_load
2763         objformat="macho"
2764         enabled x86_64 && objformat="macho64"
2765         enabled_any pic shared ||
2766             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2767         ;;
2768     mingw32*)
2769         if test $target_os = "mingw32ce"; then
2770             disable network
2771         else
2772             target_os=mingw32
2773         fi
2774         LIBTARGET=i386
2775         if enabled x86_64; then
2776             LIBTARGET=x64
2777         elif enabled arm; then
2778             LIBTARGET=arm-wince
2779         fi
2780         shlibdir_default="$bindir_default"
2781         SLIBPREF=""
2782         SLIBSUF=".dll"
2783         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2784         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2785         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
2786         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2787         SLIB_INSTALL_LINKS=
2788         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2789         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2790         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'
2791         objformat="win32"
2792         enable dos_paths
2793         check_cflags -fno-common
2794         check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2795                                       || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2796                 die "ERROR: MinGW runtime version must be >= 3.15."
2797         add_cppflags -U__STRICT_ANSI__
2798         ;;
2799     cygwin*)
2800         target_os=cygwin
2801         shlibdir_default="$bindir_default"
2802         SLIBPREF="cyg"
2803         SLIBSUF=".dll"
2804         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2805         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2806         SHFLAGS='-shared -Wl,--enable-auto-image-base'
2807         objformat="win32"
2808         enable dos_paths
2809         check_cflags -fno-common
2810         add_cppflags -U__STRICT_ANSI__
2811         ;;
2812     *-dos|freedos|opendos)
2813         network_extralibs="-lsocket"
2814         objformat="coff"
2815         enable dos_paths
2816         add_cppflags -U__STRICT_ANSI__
2817         ;;
2818     linux)
2819         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2820         enable dv1394
2821         ;;
2822     irix*)
2823         target_os=irix
2824         ranlib="echo ignoring ranlib"
2825         ;;
2826     os/2*)
2827         strip="lxlite -CS"
2828         ln_s="cp -f"
2829         objformat="aout"
2830         add_cppflags -D_GNU_SOURCE
2831         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2832         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2833         FFSERVERLDFLAGS=""
2834         LIBSUF="_s.a"
2835         SLIBPREF=""
2836         SLIBSUF=".dll"
2837         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2838         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2839         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2840           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2841           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2842           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2843           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2844           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2845         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2846           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2847         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
2848         enable dos_paths
2849         enable_weak os2threads
2850         ;;
2851     gnu/kfreebsd)
2852         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
2853         ;;
2854     gnu)
2855         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2856         ;;
2857     qnx)
2858         add_cppflags -D_QNX_SOURCE
2859         network_extralibs="-lsocket"
2860         ;;
2861     symbian)
2862         SLIBSUF=".dll"
2863         enable dos_paths
2864         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
2865         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
2866         add_ldflags -Wl,--target1-abs,--no-undefined \
2867                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
2868                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
2869         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
2870                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
2871                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
2872         ;;
2873     none)
2874         ;;
2875     *)
2876         die "Unknown OS '$target_os'."
2877         ;;
2878 esac
2879
2880 esc(){
2881     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
2882 }
2883
2884 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
2885
2886 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2887
2888 set_default $PATHS_LIST
2889
2890 # we need to build at least one lib type
2891 if ! enabled_any static shared; then
2892     cat <<EOF
2893 At least one library type must be built.
2894 Specify --enable-static to build the static libraries or --enable-shared to
2895 build the shared libraries as well. To only build the shared libraries specify
2896 --disable-static in addition to --enable-shared.
2897 EOF
2898     exit 1;
2899 fi
2900
2901 die_license_disabled() {
2902     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2903 }
2904
2905 die_license_disabled_gpl() {
2906     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
2907 }
2908
2909 die_license_disabled gpl libcdio
2910 die_license_disabled gpl libutvideo
2911 die_license_disabled gpl libx264
2912 die_license_disabled gpl libxavs
2913 die_license_disabled gpl libxvid
2914 die_license_disabled gpl x11grab
2915
2916 die_license_disabled nonfree libaacplus
2917 die_license_disabled nonfree libfaac
2918 enabled gpl && die_license_disabled_gpl nonfree openssl
2919
2920 die_license_disabled version3 libopencore_amrnb
2921 die_license_disabled version3 libopencore_amrwb
2922 die_license_disabled version3 libvo_aacenc
2923 die_license_disabled version3 libvo_amrwbenc
2924
2925 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2926
2927 disabled optimizations || check_cflags -fomit-frame-pointer
2928
2929 enable_pic() {
2930     enable pic
2931     add_cppflags -DPIC
2932     add_cflags   -fPIC
2933     add_asflags  -fPIC
2934 }
2935
2936 enabled pic && enable_pic
2937
2938 check_cc <<EOF || die "Symbol mangling check failed."
2939 int ff_extern;
2940 EOF
2941 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2942 extern_prefix=${sym%%ff_extern*}
2943
2944 check_cc <<EOF && enable inline_asm
2945 void foo(void) { __asm__ volatile ("" ::); }
2946 EOF
2947
2948 _restrict=
2949 for restrict_keyword in restrict __restrict__ __restrict; do
2950     check_cc <<EOF && _restrict=$restrict_keyword && break
2951 void foo(char * $restrict_keyword p);
2952 EOF
2953 done
2954
2955 check_cc <<EOF && enable attribute_packed
2956 struct { int x; } __attribute__((packed)) x;
2957 EOF
2958
2959 check_cc <<EOF && enable attribute_may_alias
2960 union { int x; } __attribute__((may_alias)) x;
2961 EOF
2962
2963 check_cc <<EOF || die "endian test failed"
2964 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2965 EOF
2966 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2967
2968 if enabled alpha; then
2969
2970     check_cflags -mieee
2971
2972 elif enabled arm; then
2973
2974     enabled thumb && check_cflags -mthumb || check_cflags -marm
2975     nogas=die
2976
2977     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
2978         enable vfp_args
2979     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
2980         case "${cross_prefix:-$cc}" in
2981             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
2982             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
2983 __asm__ (".eabi_attribute 28, 1");
2984 int main(void) { return 0; }
2985 EOF
2986         esac
2987         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
2988     fi
2989
2990     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2991     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2992     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2993     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2994     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2995     enabled vfpv3   && check_asm vfpv3   '"vmov.f32 s0, #1.0"'
2996
2997     check_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
2998
2999     enabled_all armv6t2 shared !pic && enable_pic
3000
3001 elif enabled mips; then
3002
3003     check_asm loongson '"dmult.g $1, $2, $3"'
3004     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
3005     enabled mips32r2  && add_cflags "-mips32r2" &&
3006      check_asm mips32r2  '"rotr $t0, $t1, 1"'
3007     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
3008      check_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
3009     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
3010      check_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
3011     enabled mipsfpu   && add_cflags "-mhard-float" &&
3012      check_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
3013
3014
3015 elif enabled ppc; then
3016
3017     enable local_aligned_8 local_aligned_16
3018
3019     check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
3020     check_asm ibm_asm   '"add 0, 0, 0"'
3021     check_asm ppc4xx    '"maclhw r10, r11, r12"'
3022     check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3023
3024     # AltiVec flags: The FSF version of GCC differs from the Apple version
3025     if enabled altivec; then
3026         nogas=warn
3027         check_cflags -maltivec -mabi=altivec &&
3028         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3029         check_cflags -faltivec
3030
3031         # check if our compiler supports Motorola AltiVec C API
3032         check_cc <<EOF || disable altivec
3033 $inc_altivec_h
3034 int main(void) {
3035     vector signed int v1, v2, v3;
3036     v1 = vec_add(v2,v3);
3037     return 0;
3038 }
3039 EOF
3040
3041         # check if our compiler supports braces for vector declarations
3042         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
3043 $inc_altivec_h
3044 int main (void) { (vector int) {1}; return 0; }
3045 EOF
3046     fi
3047
3048 elif enabled sparc; then
3049
3050     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
3051         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
3052
3053 elif enabled x86; then
3054
3055     enable local_aligned_8 local_aligned_16
3056
3057     # check whether EBP is available on x86
3058     # As 'i' is stored on the stack, this program will crash
3059     # if the base pointer is used to access it because the
3060     # base pointer is cleared in the inline assembly code.
3061     check_exec_crash <<EOF && enable ebp_available
3062     volatile int i=0;
3063     __asm__ volatile (
3064         "xorl %%ebp, %%ebp"
3065     ::: "%ebp");
3066     return i;
3067 EOF
3068
3069     # check whether EBX is available on x86
3070     check_asm ebx_available '""::"b"(0)' &&
3071         check_asm ebx_available '"":::"%ebx"'
3072
3073     # check whether xmm clobbers are supported
3074     check_asm xmm_clobbers '"":::"%xmm0"'
3075
3076     # check whether binutils is new enough to compile SSSE3/MMX2
3077     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
3078     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
3079
3080     if ! disabled_any asm mmx yasm; then
3081         if check_cmd $yasmexe --version; then
3082             enabled x86_64 && yasm_extra="-m amd64"
3083             yasm_debug="-g dwarf2"
3084         elif check_cmd nasm -v; then
3085             yasmexe=nasm
3086             yasm_debug="-g -F dwarf"
3087             enabled x86_64 && test "$objformat" = elf && objformat=elf64
3088         fi
3089
3090         YASMFLAGS="-f $objformat $yasm_extra"
3091         enabled pic               && append YASMFLAGS "-DPIC"
3092         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
3093         case "$objformat" in
3094             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3095         esac
3096
3097         check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
3098             die "yasm not found, use --disable-yasm for a crippled build"
3099         check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx
3100     fi
3101
3102     case "$cpu" in
3103         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3104             disable fast_clz
3105         ;;
3106     esac
3107
3108 fi
3109
3110 if enabled asm; then
3111     as=${gas:=$as}
3112     check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
3113         $nogas "GNU assembler not found, install gas-preprocessor"
3114 fi
3115
3116 check_ldflags -Wl,--as-needed
3117
3118 if check_func dlopen; then
3119     ldl=
3120 elif check_func dlopen -ldl; then
3121     ldl=-ldl
3122 fi
3123
3124 if enabled network; then
3125     check_type "sys/types.h sys/socket.h" socklen_t
3126     check_type netdb.h "struct addrinfo"
3127     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
3128     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
3129     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3130     check_type netinet/in.h "struct sockaddr_in6"
3131     check_type poll.h "struct pollfd"
3132     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3133     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3134     check_header netinet/sctp.h
3135     # Prefer arpa/inet.h over winsock2
3136     if check_header arpa/inet.h ; then
3137         check_func closesocket
3138     elif check_header winsock2.h ; then
3139         check_func_headers winsock2.h closesocket -lws2 && \
3140             network_extralibs="-lws2" || \
3141         { check_func_headers winsock2.h closesocket -lws2_32 && \
3142             network_extralibs="-lws2_32"; }
3143         check_type ws2tcpip.h socklen_t
3144         check_type ws2tcpip.h "struct addrinfo"
3145         check_type ws2tcpip.h "struct group_source_req"
3146         check_type ws2tcpip.h "struct ip_mreq_source"
3147         check_type ws2tcpip.h "struct ipv6_mreq"
3148         check_type winsock2.h "struct pollfd"
3149         check_type ws2tcpip.h "struct sockaddr_in6"
3150         check_type ws2tcpip.h "struct sockaddr_storage"
3151         check_struct winsock2.h "struct sockaddr" sa_len
3152     else
3153         disable network
3154     fi
3155 fi
3156
3157 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3158 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3159
3160 check_func  clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
3161 check_func  fcntl
3162 check_func  fork
3163 check_func  getaddrinfo $network_extralibs
3164 check_func  gethrtime
3165 check_func  getrusage
3166 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3167 check_func  gettimeofday
3168 check_func  inet_aton $network_extralibs
3169 check_func  isatty
3170 check_func  localtime_r
3171 check_func  ${malloc_prefix}memalign            && enable memalign
3172 check_func  mkstemp
3173 check_func  mmap
3174 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
3175 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
3176 check_func  setrlimit
3177 check_func  strerror_r
3178 check_func  strptime
3179 check_func  sched_getaffinity
3180 check_func  sysconf
3181 check_func  sysctl
3182 check_func  usleep
3183 check_func_headers conio.h kbhit
3184 check_func_headers windows.h PeekNamedPipe
3185 check_func_headers io.h setmode
3186 check_func_headers lzo/lzo1x.h lzo1x_999_compress
3187 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3188 check_func_headers windows.h GetProcessAffinityMask
3189 check_func_headers windows.h GetProcessTimes
3190 check_func_headers windows.h GetSystemTimeAsFileTime
3191 check_func_headers windows.h MapViewOfFile
3192 check_func_headers windows.h Sleep
3193 check_func_headers windows.h VirtualAlloc
3194 check_func_headers glob.h glob
3195
3196 check_header dlfcn.h
3197 check_header dxva.h
3198 check_header dxva2api.h -D_WIN32_WINNT=0x0600
3199 check_header libcrystalhd/libcrystalhd_if.h
3200 check_header malloc.h
3201 check_header poll.h
3202 check_header sys/mman.h
3203 check_header sys/param.h
3204 check_header sys/resource.h
3205 check_header sys/select.h
3206 check_header sys/time.h
3207 check_header termios.h
3208 check_header unistd.h
3209 check_header vdpau/vdpau.h
3210 check_header vdpau/vdpau_x11.h
3211 check_header windows.h
3212 check_header X11/extensions/XvMClib.h
3213 check_header asm/types.h
3214
3215 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
3216 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3217
3218 # check for VDA header
3219 if ! disabled vda; then
3220     if check_header VideoDecodeAcceleration/VDADecoder.h; then
3221         enable vda
3222         add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
3223     fi
3224 fi
3225
3226 if ! disabled w32threads && ! enabled pthreads; then
3227     check_func _beginthreadex && enable w32threads
3228 fi
3229
3230 # check for some common methods of building with pthread support
3231 # do this before the optional library checks as some of them require pthreads
3232 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
3233     enable pthreads
3234     if check_func pthread_create; then
3235         :
3236     elif check_func pthread_create -pthread; then
3237         add_cflags -pthread
3238         add_extralibs -pthread
3239     elif check_func pthread_create -pthreads; then
3240         add_cflags -pthreads
3241         add_extralibs -pthreads
3242     elif check_func pthread_create -lpthreadGC2; then
3243         add_extralibs -lpthreadGC2
3244     elif ! check_lib pthread.h pthread_create -lpthread; then
3245         disable pthreads
3246     fi
3247 fi
3248
3249 for thread in $THREADS_LIST; do
3250     if enabled $thread; then
3251         test -n "$thread_type" &&
3252             die "ERROR: Only one thread type must be selected." ||
3253             thread_type="$thread"
3254     fi
3255 done
3256
3257 if enabled pthreads; then
3258   check_func pthread_cancel
3259 fi
3260
3261 check_lib math.h sin -lm && LIBM="-lm"
3262 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
3263 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3264
3265 check_mathfunc cbrtf
3266 check_mathfunc exp2
3267 check_mathfunc exp2f
3268 check_mathfunc isinf
3269 check_mathfunc isnan
3270 check_mathfunc llrint
3271 check_mathfunc llrintf
3272 check_mathfunc log2
3273 check_mathfunc log2f
3274 check_mathfunc lrint
3275 check_mathfunc lrintf
3276 check_mathfunc round
3277 check_mathfunc roundf
3278 check_mathfunc trunc
3279 check_mathfunc truncf
3280
3281 # these are off by default, so fail if requested and not available
3282 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3283 enabled fontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
3284 enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3285 enabled gnutls     && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3286 enabled libaacplus && require  "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
3287 enabled libass     && require_pkg_config libass ass/ass.h ass_library_init
3288 enabled libbluray  && require libbluray libbluray/bluray.h bd_open -lbluray
3289 enabled libcelt    && require libcelt celt/celt.h celt_decode -lcelt0 &&
3290                       { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
3291                         die "ERROR: libcelt version must be >= 0.11.0."; }
3292 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3293 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3294 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
3295 enabled libilbc    && require  libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
3296 enabled libmodplug && require  libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
3297 enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3298 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
3299 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3300 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3301 enabled libopencv  && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
3302 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3303 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3304 enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3305 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3306 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
3307 enabled libstagefright_h264  && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
3308     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
3309     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
3310 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3311 enabled libutvideo    && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
3312 enabled libv4l2    && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
3313 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3314 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3315 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3316 enabled libvpx     && {
3317     enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3318                                 die "ERROR: libvpx decoder version must be >=0.9.1"; }
3319     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
3320                                 die "ERROR: libvpx encoder version must be >=0.9.7"; } }
3321 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
3322                       { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3323                         die "ERROR: libx264 version must be >= 0.118."; }
3324 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
3325 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
3326 enabled openal     && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
3327                         check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
3328                         die "ERROR: openal not found"; } &&
3329                       { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
3330                         die "ERROR: openal version must be 1.1 or compatible"; }
3331 enabled openssl    && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3332                         check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3333                         check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3334                         die "ERROR: openssl not found"; }
3335
3336 # libdc1394 check
3337 if enabled libdc1394; then
3338     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3339         enable libdc1394_2; } ||
3340     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3341         enable libdc1394_1; } ||
3342     die "ERROR: No version of libdc1394 found "
3343 fi
3344
3345 SDL_CONFIG="${cross_prefix}sdl-config"
3346 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
3347     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3348     enable sdl &&
3349     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3350 else
3351   if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
3352     sdl_cflags=$("${SDL_CONFIG}" --cflags)
3353     sdl_libs=$("${SDL_CONFIG}" --libs)
3354     check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
3355     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3356     enable sdl &&
3357     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3358   fi
3359 fi
3360 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
3361
3362 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
3363 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
3364
3365 check_header linux/fb.h
3366 check_header linux/videodev.h
3367 check_header linux/videodev2.h
3368 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3369
3370 check_header sys/videoio.h
3371
3372 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3373 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3374 # w32api 3.12 had it defined wrong
3375 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3376
3377 check_type "dshow.h" IBaseFilter
3378
3379 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3380 { check_header dev/bktr/ioctl_meteor.h &&
3381   check_header dev/bktr/ioctl_bt848.h; } ||
3382 { check_header machine/ioctl_meteor.h &&
3383   check_header machine/ioctl_bt848.h; } ||
3384 { check_header dev/video/meteor/ioctl_meteor.h &&
3385   check_header dev/video/bktr/ioctl_bt848.h; } ||
3386 check_header dev/ic/bt8xx.h
3387
3388 check_header sndio.h
3389 if check_struct sys/soundcard.h audio_buf_info bytes; then
3390     enable_safe sys/soundcard.h
3391 else
3392     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
3393     #include <sys/soundcard.h>
3394     audio_buf_info abc;
3395 EOF
3396 fi
3397 check_header soundcard.h
3398
3399 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3400
3401 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
3402     check_func jack_port_get_latency_range -ljack
3403
3404 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3405
3406 enabled libcdio &&
3407     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open "-lcdio_paranoia -lcdio_cdda -lcdio"
3408
3409 enabled x11grab                                           &&
3410 require X11 X11/Xlib.h XOpenDisplay -lX11                 &&
3411 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
3412 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
3413
3414 if ! disabled vaapi; then
3415     check_lib va/va.h vaInitialize -lva && {
3416         check_cpp_condition va/va_version.h "VA_CHECK_VERSION(0,32,0)" ||
3417         warn "Please upgrade to VA-API >= 0.32 if you would like full VA-API support.";
3418     } || disable vaapi
3419 fi
3420
3421 if ! disabled vdpau && enabled vdpau_vdpau_h; then
3422 check_cpp_condition \
3423     vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3424     { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
3425       disable vdpau; }
3426 fi
3427
3428 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3429 enabled coverage && add_cflags "-fprofile-arcs -ftest-coverage" && add_ldflags "-fprofile-arcs -ftest-coverage"
3430 test -n "$valgrind" && target_exec="$valgrind --error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions=$source_path/tests/fate-valgrind.supp"
3431
3432 # add some useful compiler flags if supported
3433 check_cflags -Wdeclaration-after-statement
3434 check_cflags -Wall
3435 check_cflags -Wno-parentheses
3436 check_cflags -Wno-switch
3437 check_cflags -Wno-format-zero-length
3438 check_cflags -Wdisabled-optimization
3439 check_cflags -Wpointer-arith
3440 check_cflags -Wredundant-decls
3441 check_cflags -Wno-pointer-sign
3442 check_cflags -Wwrite-strings
3443 check_cflags -Wtype-limits
3444 check_cflags -Wundef
3445 check_cflags -Wmissing-prototypes
3446 check_cflags -Wno-pointer-to-int-cast
3447 check_cflags -Wstrict-prototypes
3448 enabled extra_warnings && check_cflags -Winline
3449
3450 # add some linker flags
3451 check_ldflags -Wl,--warn-common
3452 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
3453 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3454
3455 enabled xmm_clobber_test &&                             \
3456     check_ldflags -Wl,--wrap,avcodec_open2              \
3457                   -Wl,--wrap,avcodec_decode_audio4      \
3458                   -Wl,--wrap,avcodec_decode_video2      \
3459                   -Wl,--wrap,avcodec_decode_subtitle2   \
3460                   -Wl,--wrap,avcodec_encode_audio2      \
3461                   -Wl,--wrap,avcodec_encode_video       \
3462                   -Wl,--wrap,avcodec_encode_subtitle    \
3463                   -Wl,--wrap,sws_scale ||               \
3464     disable xmm_clobber_test
3465
3466 echo "X{};" > $TMPV
3467 if test_ldflags -Wl,--version-script,$TMPV; then
3468     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3469     check_cc <<EOF && enable symver_asm_label
3470 void ff_foo(void) __asm__ ("av_foo@VERSION");
3471 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3472 EOF
3473     check_cc <<EOF && enable symver_gnu_asm
3474 __asm__(".symver ff_foo,av_foo@VERSION");
3475 void ff_foo(void) {}
3476 EOF
3477 fi
3478
3479 if [ -n "$optflags" ]; then
3480     add_cflags $optflags
3481 elif enabled small; then
3482     add_cflags $size_cflags
3483 elif enabled optimizations; then
3484     add_cflags $speed_cflags
3485 else
3486     add_cflags $noopt_cflags
3487 fi
3488 check_cflags -fno-math-errno
3489 check_cflags -fno-signed-zeros
3490 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
3491 int x;
3492 EOF
3493
3494
3495 if enabled icc; then
3496     # Just warnings, no remarks
3497     check_cflags -w1
3498     # -wd: Disable following warnings
3499     # 144, 167, 556: -Wno-pointer-sign
3500     # 1292: attribute "foo" ignored
3501     # 1419: external declaration in primary source file
3502     # 10006: ignoring unknown option -fno-signed-zeros
3503     # 10148: ignoring unknown option -Wno-parentheses
3504     # 10156: ignoring option '-W'; no argument required
3505     check_cflags -wd144,167,556,1292,1419,10006,10148,10156
3506     # 11030: Warning unknown option --as-needed
3507     # 10156: ignoring option '-export'; no argument required
3508     check_ldflags -wd10156,11030
3509     # Allow to compile with optimizations
3510     check_ldflags -march=$cpu
3511     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3512     enable ebp_available
3513     if enabled x86_32; then
3514         test ${icc_version%%.*} -ge 11 && \
3515             check_cflags -falign-stack=maintain-16-byte || \
3516             disable aligned_stack
3517     fi
3518 elif enabled ccc; then
3519     # disable some annoying warnings
3520     add_cflags -msg_disable cvtu32to64
3521     add_cflags -msg_disable embedcomment
3522     add_cflags -msg_disable needconstext
3523     add_cflags -msg_disable nomainieee
3524     add_cflags -msg_disable ptrmismatch1
3525     add_cflags -msg_disable unreachcode
3526 elif enabled gcc; then
3527     check_cflags -fno-tree-vectorize
3528     check_cflags -Werror=implicit-function-declaration
3529     check_cflags -Werror=missing-prototypes
3530 elif enabled llvm_gcc; then
3531     check_cflags -mllvm -stack-alignment=16
3532 elif enabled clang; then
3533     check_cflags -mllvm -stack-alignment=16
3534     check_cflags -Qunused-arguments
3535 elif enabled armcc; then
3536     # 2523: use of inline assembler is deprecated
3537     add_cflags -W${armcc_opt},--diag_suppress=2523
3538     add_cflags -W${armcc_opt},--diag_suppress=1207
3539     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3540     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3541     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
3542     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
3543 elif enabled tms470; then
3544     add_cflags -pds=824 -pds=837
3545 elif enabled pathscale; then
3546     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3547 fi
3548
3549 enabled_any $THREADS_LIST      && enable threads
3550
3551 check_deps $CONFIG_LIST       \
3552            $CONFIG_EXTRA      \
3553            $HAVE_LIST         \
3554            $ALL_COMPONENTS    \
3555            $ALL_TESTS         \
3556
3557 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3558
3559 if test $target_os = "haiku"; then
3560     disable memalign
3561     disable posix_memalign
3562 fi
3563
3564 ! enabled_any memalign posix_memalign aligned_malloc &&
3565     enabled_any $need_memalign && enable memalign_hack
3566
3567 # add_dep lib dep
3568 # -> enable ${lib}_deps_${dep}
3569 # -> add $dep to ${lib}_deps only once
3570 add_dep() {
3571     lib=$1
3572     dep=$2
3573     enabled "${lib}_deps_${dep}" && return 0
3574     enable  "${lib}_deps_${dep}"
3575     prepend "${lib}_deps" $dep
3576 }
3577
3578 # merge deps lib components
3579 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
3580 merge_deps() {
3581     lib=$1
3582     shift
3583     for comp in $*; do
3584         enabled $comp || continue
3585         eval "dep=\"\$${comp}_deps\""
3586         for d in $dep; do
3587             add_dep $lib $d
3588         done
3589     done
3590 }
3591
3592 merge_deps libavfilter $FILTER_LIST
3593
3594 echo "install prefix            $prefix"
3595 echo "source path               $source_path"
3596 echo "C compiler                $cc"
3597 echo "ARCH                      $arch ($cpu)"
3598 if test "$build_suffix" != ""; then
3599     echo "build suffix              $build_suffix"
3600 fi
3601 if test "$progs_suffix" != ""; then
3602     echo "progs suffix              $progs_suffix"
3603 fi
3604 if test "$extra_version" != ""; then
3605     echo "version string suffix     $extra_version"
3606 fi
3607 echo "big-endian                ${bigendian-no}"
3608 echo "runtime cpu detection     ${runtime_cpudetect-no}"
3609 if enabled x86; then
3610     echo "${yasmexe}                      ${yasm-no}"
3611     echo "MMX enabled               ${mmx-no}"
3612     echo "MMX2 enabled              ${mmx2-no}"
3613     echo "3DNow! enabled            ${amd3dnow-no}"
3614     echo "3DNow! extended enabled   ${amd3dnowext-no}"
3615     echo "SSE enabled               ${sse-no}"
3616     echo "SSSE3 enabled             ${ssse3-no}"
3617     echo "AVX enabled               ${avx-no}"
3618     echo "CMOV enabled              ${cmov-no}"
3619     echo "CMOV is fast              ${fast_cmov-no}"
3620     echo "EBX available             ${ebx_available-no}"
3621     echo "EBP available             ${ebp_available-no}"
3622 fi
3623 if enabled arm; then
3624     echo "ARMv5TE enabled           ${armv5te-no}"
3625     echo "ARMv6 enabled             ${armv6-no}"
3626     echo "ARMv6T2 enabled           ${armv6t2-no}"
3627     echo "ARM VFP enabled           ${armvfp-no}"
3628     echo "NEON enabled              ${neon-no}"
3629 fi
3630 if enabled mips; then
3631     echo "MMI enabled               ${mmi-no}"
3632     echo "MIPS FPU enabled          ${mipsfpu-no}"
3633     echo "MIPS32R2 enabled          ${mips32r2-no}"
3634     echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"
3635     echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
3636 fi
3637 if enabled ppc; then
3638     echo "AltiVec enabled           ${altivec-no}"
3639     echo "PPC 4xx optimizations     ${ppc4xx-no}"
3640     echo "dcbzl available           ${dcbzl-no}"
3641 fi
3642 if enabled sparc; then
3643     echo "VIS enabled               ${vis-no}"
3644 fi
3645 echo "debug symbols             ${debug-no}"
3646 echo "strip symbols             ${stripping-no}"
3647 echo "optimize for size         ${small-no}"
3648 echo "optimizations             ${optimizations-no}"
3649 echo "static                    ${static-no}"
3650 echo "shared                    ${shared-no}"
3651 echo "postprocessing support    ${postproc-no}"
3652 echo "new filter support        ${avfilter-no}"
3653 echo "network support           ${network-no}"
3654 echo "threading support         ${thread_type-no}"
3655 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
3656 echo "SDL support               ${sdl-no}"
3657 echo "libdxva2 enabled          ${dxva2-no}"
3658 echo "libva enabled             ${vaapi-no}"
3659 echo "libvdpau enabled          ${vdpau-no}"
3660 echo "AVISynth enabled          ${avisynth-no}"
3661 echo "frei0r enabled            ${frei0r-no}"
3662 echo "gnutls enabled            ${gnutls-no}"
3663 echo "libaacplus enabled        ${libaacplus-no}"
3664 echo "libass enabled            ${libass-no}"
3665 echo "libcdio support           ${libcdio-no}"
3666 echo "libcelt enabled           ${libcelt-no}"
3667 echo "libdc1394 support         ${libdc1394-no}"
3668 echo "libfaac enabled           ${libfaac-no}"
3669 echo "libgsm enabled            ${libgsm-no}"
3670 echo "libilbc enabled           ${libilbc-no}"
3671 echo "libmodplug enabled        ${libmodplug-no}"
3672 echo "libmp3lame enabled        ${libmp3lame-no}"
3673 echo "libnut enabled            ${libnut-no}"
3674 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3675 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3676 echo "libopencv support         ${libopencv-no}"
3677 echo "libopenjpeg enabled       ${libopenjpeg-no}"
3678 echo "libpulse enabled          ${libpulse-no}"
3679 echo "librtmp enabled           ${librtmp-no}"
3680 echo "libschroedinger enabled   ${libschroedinger-no}"
3681 echo "libspeex enabled          ${libspeex-no}"
3682 echo "libstagefright-h264 enabled    ${libstagefright_h264-no}"
3683 echo "libtheora enabled         ${libtheora-no}"
3684 echo "libutvideo enabled        ${libutvideo-no}"
3685 echo "libv4l2 enabled           ${libv4l2-no}"
3686 echo "libvo-aacenc support      ${libvo_aacenc-no}"
3687 echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
3688 echo "libvorbis enabled         ${libvorbis-no}"
3689 echo "libvpx enabled            ${libvpx-no}"
3690 echo "libx264 enabled           ${libx264-no}"
3691 echo "libxavs enabled           ${libxavs-no}"
3692 echo "libxvid enabled           ${libxvid-no}"
3693 echo "openal enabled            ${openal-no}"
3694 echo "openssl enabled           ${openssl-no}"
3695 echo "zlib enabled              ${zlib-no}"
3696 echo "bzlib enabled             ${bzlib-no}"
3697 test -n "$random_seed" &&
3698     echo "random seed               ${random_seed}"
3699 echo
3700
3701 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3702     echo "Enabled ${type}s:"
3703     eval list=\$$(toupper $type)_LIST
3704     print_enabled '_*' $list | sort | pr -r -3 -t
3705     echo
3706 done
3707
3708 license="LGPL version 2.1 or later"
3709 if enabled nonfree; then
3710     license="nonfree and unredistributable"
3711 elif enabled gplv3; then
3712     license="GPL version 3 or later"
3713 elif enabled lgplv3; then
3714     license="LGPL version 3 or later"
3715 elif enabled gpl; then
3716     license="GPL version 2 or later"
3717 fi
3718
3719 echo "License: $license"
3720
3721 echo "Creating config.mak and config.h..."
3722
3723 test -e Makefile || $ln_s "$source_path/Makefile" .
3724
3725 enabled stripping || strip="echo skipping strip"
3726
3727 config_files="$TMPH config.mak"
3728
3729 cat > config.mak <<EOF
3730 # Automatically generated by configure - do not modify!
3731 ifndef FFMPEG_CONFIG_MAK
3732 FFMPEG_CONFIG_MAK=1
3733 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3734 prefix=$prefix
3735 LIBDIR=\$(DESTDIR)$libdir
3736 SHLIBDIR=\$(DESTDIR)$shlibdir
3737 INCDIR=\$(DESTDIR)$incdir
3738 BINDIR=\$(DESTDIR)$bindir
3739 DATADIR=\$(DESTDIR)$datadir
3740 MANDIR=\$(DESTDIR)$mandir
3741 SRC_PATH=$source_path
3742 ifndef MAIN_MAKEFILE
3743 SRC_PATH:=\$(SRC_PATH:.%=..%)
3744 endif
3745 CC_IDENT=$cc_ident
3746 ARCH=$arch
3747 CC=$cc
3748 CXX=$cxx
3749 AS=$as
3750 LD=$ld
3751 DEPCC=$dep_cc
3752 YASM=$yasmexe
3753 YASMDEP=$yasmexe
3754 AR=$ar
3755 RANLIB=$ranlib
3756 CP=cp -p
3757 LN_S=$ln_s
3758 STRIP=$strip
3759 CPPFLAGS=$CPPFLAGS
3760 CFLAGS=$CFLAGS
3761 CXXFLAGS=$CXXFLAGS
3762 ASFLAGS=$ASFLAGS
3763 AS_O=$CC_O
3764 CC_O=$CC_O
3765 CXX_O=$CXX_O
3766 LDFLAGS=$LDFLAGS
3767 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3768 SHFLAGS=$SHFLAGS
3769 YASMFLAGS=$YASMFLAGS
3770 BUILDSUF=$build_suffix
3771 PROGSSUF=$progs_suffix
3772 FULLNAME=$FULLNAME
3773 LIBPREF=$LIBPREF
3774 LIBSUF=$LIBSUF
3775 LIBNAME=$LIBNAME
3776 SLIBPREF=$SLIBPREF
3777 SLIBSUF=$SLIBSUF
3778 EXESUF=$EXESUF
3779 EXTRA_VERSION=$extra_version
3780 DEPFLAGS=$DEPFLAGS
3781 CCDEP=$CCDEP
3782 CXXDEP=$CXXDEP
3783 ASDEP=$ASDEP
3784 CC_DEPFLAGS=$CC_DEPFLAGS
3785 AS_DEPFLAGS=$AS_DEPFLAGS
3786 HOSTCC=$host_cc
3787 HOSTCFLAGS=$host_cflags
3788 HOSTEXESUF=$HOSTEXESUF
3789 HOSTLDFLAGS=$host_ldflags
3790 HOSTLIBS=$host_libs
3791 TARGET_EXEC=$target_exec
3792 TARGET_PATH=$target_path
3793 SDL_LIBS=$sdl_libs
3794 SDL_CFLAGS=$sdl_cflags
3795 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3796 EXTRALIBS=$extralibs
3797 INSTALL=$install
3798 LIBTARGET=${LIBTARGET}
3799 SLIBNAME=${SLIBNAME}
3800 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3801 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3802 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3803 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3804 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
3805 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
3806 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
3807 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
3808 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
3809 NOREDZONE_FLAGS=$noredzone_flags
3810 EOF
3811
3812 get_version(){
3813     name=$1
3814     file=$source_path/$2
3815 # This condition will be removed when we stop supporting old libpostproc versions
3816 if ! test "$name" = LIBPOSTPROC || test "$postproc_version" = current; then
3817     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3818     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3819 fi
3820     lcname=$(tolower $name)
3821     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3822     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3823 }
3824
3825 get_version LIBAVCODEC  libavcodec/version.h
3826 get_version LIBAVDEVICE libavdevice/avdevice.h
3827 get_version LIBAVFILTER libavfilter/version.h
3828 get_version LIBAVFORMAT libavformat/version.h
3829 get_version LIBAVRESAMPLE libavresample/version.h
3830 get_version LIBAVUTIL   libavutil/version.h
3831 get_version LIBPOSTPROC libpostproc/postprocess.h
3832 get_version LIBSWRESAMPLE libswresample/swresample.h
3833 get_version LIBSWSCALE  libswscale/swscale.h
3834
3835 cat > $TMPH <<EOF
3836 /* Automatically generated by configure - do not modify! */
3837 #ifndef FFMPEG_CONFIG_H
3838 #define FFMPEG_CONFIG_H
3839 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3840 #define FFMPEG_LICENSE "$(c_escape $license)"
3841 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3842 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
3843 #define CC_TYPE "$cc_type"
3844 #define CC_VERSION $cc_version
3845 #define av_restrict $_restrict
3846 #define EXTERN_PREFIX "${extern_prefix}"
3847 #define EXTERN_ASM ${extern_prefix}
3848 #define SLIBSUF "$SLIBSUF"
3849 EOF
3850
3851 test -n "$assert_level" &&
3852     echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
3853
3854 test -n "$malloc_prefix" &&
3855     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3856
3857 if enabled small || disabled optimizations; then
3858     echo "#undef  av_always_inline"  >> $TMPH
3859     if enabled small; then
3860         echo "#define av_always_inline inline"  >> $TMPH
3861     else
3862         echo "#define av_always_inline av_unused"  >> $TMPH
3863     fi
3864 fi
3865
3866 if enabled yasm; then
3867     append config_files $TMPASM
3868     printf '' >$TMPASM
3869 fi
3870
3871 print_config ARCH_   "$config_files" $ARCH_LIST
3872 print_config HAVE_   "$config_files" $HAVE_LIST
3873 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
3874                                      $CONFIG_EXTRA      \
3875                                      $ALL_COMPONENTS    \
3876
3877 cat >>config.mak <<EOF
3878 LAVF_FATE_TESTS=$(print_enabled -n _test $LAVF_FATE_TESTS)
3879 LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3880 LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3881 SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3882 EOF
3883
3884 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3885 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3886
3887 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3888 cp_if_changed $TMPH config.h
3889 touch .config
3890
3891 enabled yasm && cp_if_changed $TMPASM config.asm
3892
3893 cat > $TMPH <<EOF
3894 /* Generated by ffconf */
3895 #ifndef AVUTIL_AVCONFIG_H
3896 #define AVUTIL_AVCONFIG_H
3897 EOF
3898
3899 test "$postproc_version" != current && cat >> $TMPH <<EOF
3900 #define LIBPOSTPROC_VERSION_MAJOR $LIBPOSTPROC_VERSION_MAJOR
3901 #define LIBPOSTPROC_VERSION_MINOR $LIBPOSTPROC_VERSION_MINOR
3902 #define LIBPOSTPROC_VERSION_MICRO $LIBPOSTPROC_VERSION_MICRO
3903 EOF
3904
3905 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3906
3907 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3908
3909 cp_if_changed $TMPH libavutil/avconfig.h
3910
3911 test -n "$WARNINGS" && printf "\n$WARNINGS"
3912
3913 # build pkg-config files
3914
3915 pkgconfig_generate(){
3916 name=$1
3917 shortname=${name#lib}${build_suffix}
3918 comment=$2
3919 version=$3
3920 libs=$4
3921 requires=$5
3922 enabled ${name#lib} || return 0
3923 mkdir -p $name
3924 cat <<EOF > $name/$name.pc
3925 prefix=$prefix
3926 exec_prefix=\${prefix}
3927 libdir=$libdir
3928 includedir=$incdir
3929
3930 Name: $name
3931 Description: $comment
3932 Version: $version
3933 Requires: $(enabled shared || echo $requires)
3934 Requires.private: $(enabled shared && echo $requires)
3935 Conflicts:
3936 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3937 Libs.private: $(enabled shared && echo $libs)
3938 Cflags: -I\${includedir}
3939 EOF
3940 cat <<EOF > $name/$name-uninstalled.pc
3941 prefix=
3942 exec_prefix=
3943 libdir=\${pcfiledir}
3944 includedir=${source_path}
3945
3946 Name: $name
3947 Description: $comment
3948 Version: $version
3949 Requires: $requires
3950 Conflicts:
3951 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3952 Cflags: -I\${includedir}
3953 EOF
3954 }
3955
3956 libavfilter_pc_deps=""
3957 enabled libavfilter_deps_avcodec    && prepend libavfilter_pc_deps "libavcodec = $LIBAVCODEC_VERSION,"
3958 enabled libavfilter_deps_avformat   && prepend libavfilter_pc_deps "libavformat = $LIBAVFORMAT_VERSION,"
3959 enabled libavfilter_deps_swscale    && prepend libavfilter_pc_deps "libswscale = $LIBSWSCALE_VERSION,"
3960 enabled libavfilter_deps_swresample && prepend libavfilter_pc_deps "libswresample = $LIBSWRESAMPLE_VERSION,"
3961 enabled libavfilter_deps_postproc   && prepend libavfilter_pc_deps "libpostproc = $LIBPOSTPROC_VERSION,"
3962 libavfilter_pc_deps=${libavfilter_pc_deps%, }
3963
3964 libavdevice_pc_deps="libavformat = $LIBAVFORMAT_VERSION"
3965 enabled lavfi_indev && prepend libavdevice_pc_deps "libavfilter = $LIBAVFILTER_VERSION,"
3966
3967 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
3968 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3969 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3970 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$libavdevice_pc_deps"
3971 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$libavfilter_pc_deps"
3972 pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
3973 pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs"
3974 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
3975 pkgconfig_generate libswresample "FFmpeg audio rescaling library" "$LIBSWRESAMPLE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"