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