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