]> 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 test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
58
59 show_help(){
60     cat <<EOF
61 Usage: configure [options]
62 Options: [defaults in brackets after descriptions]
63
64 Help options:
65   --help                   print this message
66   --list-decoders          show all available decoders
67   --list-encoders          show all available encoders
68   --list-hwaccels          show all available hardware accelerators
69   --list-demuxers          show all available demuxers
70   --list-muxers            show all available muxers
71   --list-parsers           show all available parsers
72   --list-protocols         show all available protocols
73   --list-bsfs              show all available bitstream filters
74   --list-indevs            show all available input devices
75   --list-outdevs           show all available output devices
76   --list-filters           show all available filters
77
78 Standard options:
79   --logfile=FILE           log tests and output to FILE [config.log]
80   --disable-logging        do not log configure debug information
81   --fatal-warnings         fail if any configure warning is generated
82   --prefix=PREFIX          install in PREFIX [$prefix]
83   --bindir=DIR             install binaries in DIR [PREFIX/bin]
84   --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
85   --docdir=DIR             install documentation in DIR [PREFIX/share/doc/ffmpeg]
86   --libdir=DIR             install libs in DIR [PREFIX/lib]
87   --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
88   --incdir=DIR             install includes in DIR [PREFIX/include]
89   --mandir=DIR             install man page in DIR [PREFIX/share/man]
90   --enable-rpath           use rpath to allow installing libraries in paths
91                            not part of the dynamic linker search path
92
93 Licensing options:
94   --enable-gpl             allow use of GPL code, the resulting libs
95                            and binaries will be under GPL [no]
96   --enable-version3        upgrade (L)GPL to version 3 [no]
97   --enable-nonfree         allow use of nonfree code, the resulting libs
98                            and binaries will be unredistributable [no]
99
100 Configuration options:
101   --disable-static         do not build static libraries [no]
102   --enable-shared          build shared libraries [no]
103   --enable-small           optimize for size instead of speed
104   --disable-runtime-cpudetect disable detecting cpu capabilities at runtime (smaller binary)
105   --enable-gray            enable full grayscale support (slower color)
106   --disable-swscale-alpha  disable alpha channel support in swscale
107   --disable-all            disable building components, libraries and programs
108   --enable-incompatible-libav-abi enable incompatible Libav fork ABI [no]
109   --enable-incompatible-fork-abi  enable incompatible Libav fork ABI (deprecated) [no]
110
111 Program options:
112   --disable-programs       do not build command line programs
113   --disable-ffmpeg         disable ffmpeg build
114   --disable-ffplay         disable ffplay build
115   --disable-ffprobe        disable ffprobe build
116   --disable-ffserver       disable ffserver build
117
118 Documentation options:
119   --disable-doc            do not build documentation
120   --disable-htmlpages      do not build HTML documentation pages
121   --disable-manpages       do not build man documentation pages
122   --disable-podpages       do not build POD documentation pages
123   --disable-txtpages       do not build text documentation pages
124
125 Component options:
126   --disable-avdevice       disable libavdevice build
127   --disable-avcodec        disable libavcodec build
128   --disable-avformat       disable libavformat build
129   --disable-avutil         disable libavutil build
130   --disable-swresample     disable libswresample build
131   --disable-swscale        disable libswscale build
132   --disable-postproc       disable libpostproc build
133   --disable-avfilter       disable libavfilter build
134   --enable-avresample      enable libavresample build [no]
135   --disable-pthreads       disable pthreads [auto]
136   --disable-w32threads     disable Win32 threads [auto]
137   --disable-os2threads     disable OS/2 threads [auto]
138   --disable-network        disable network support [no]
139   --disable-dct            disable DCT code
140   --disable-dwt            disable DWT code
141   --disable-error-resilience disable error resilience code
142   --disable-lsp            disable LSP code
143   --disable-lzo            disable LZO decoder code
144   --disable-mdct           disable MDCT code
145   --disable-rdft           disable RDFT code
146   --disable-fft            disable FFT code
147
148 Hardware accelerators:
149   --disable-dxva2          disable DXVA2 code [autodetect]
150   --disable-vaapi          disable VAAPI code [autodetect]
151   --enable-vda             enable VDA code
152   --disable-vdpau          disable VDPAU code [autodetect]
153
154 Individual component options:
155   --disable-everything     disable all components listed below
156   --disable-encoder=NAME   disable encoder NAME
157   --enable-encoder=NAME    enable encoder NAME
158   --disable-encoders       disable all encoders
159   --disable-decoder=NAME   disable decoder NAME
160   --enable-decoder=NAME    enable decoder NAME
161   --disable-decoders       disable all decoders
162   --disable-hwaccel=NAME   disable hwaccel NAME
163   --enable-hwaccel=NAME    enable hwaccel NAME
164   --disable-hwaccels       disable all hwaccels
165   --disable-muxer=NAME     disable muxer NAME
166   --enable-muxer=NAME      enable muxer NAME
167   --disable-muxers         disable all muxers
168   --disable-demuxer=NAME   disable demuxer NAME
169   --enable-demuxer=NAME    enable demuxer NAME
170   --disable-demuxers       disable all demuxers
171   --enable-parser=NAME     enable parser NAME
172   --disable-parser=NAME    disable parser NAME
173   --disable-parsers        disable all parsers
174   --enable-bsf=NAME        enable bitstream filter NAME
175   --disable-bsf=NAME       disable bitstream filter NAME
176   --disable-bsfs           disable all bitstream filters
177   --enable-protocol=NAME   enable protocol NAME
178   --disable-protocol=NAME  disable protocol NAME
179   --disable-protocols      disable all protocols
180   --enable-indev=NAME      enable input device NAME
181   --disable-indev=NAME     disable input device NAME
182   --disable-indevs         disable input devices
183   --enable-outdev=NAME     enable output device NAME
184   --disable-outdev=NAME    disable output device NAME
185   --disable-outdevs        disable output devices
186   --disable-devices        disable all devices
187   --enable-filter=NAME     enable filter NAME
188   --disable-filter=NAME    disable filter NAME
189   --disable-filters        disable all filters
190
191 External library support:
192   --enable-avisynth        enable reading of AviSynth script files [no]
193   --disable-bzlib          disable bzlib [autodetect]
194   --enable-fontconfig      enable fontconfig
195   --enable-frei0r          enable frei0r video filtering
196   --enable-gnutls          enable gnutls [no]
197   --disable-iconv          disable iconv [autodetect]
198   --enable-ladspa          enable LADSPA audio filtering
199   --enable-libaacplus      enable AAC+ encoding via libaacplus [no]
200   --enable-libass          enable libass subtitles rendering [no]
201   --enable-libbluray       enable BluRay reading using libbluray [no]
202   --enable-libcaca         enable textual display using libcaca
203   --enable-libcelt         enable CELT decoding via libcelt [no]
204   --enable-libcdio         enable audio CD grabbing with libcdio
205   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
206                            and libraw1394 [no]
207   --enable-libfaac         enable AAC encoding via libfaac [no]
208   --enable-libfdk-aac      enable AAC de/encoding via libfdk-aac [no]
209   --enable-libflite        enable flite (voice synthesis) support via libflite [no]
210   --enable-libfreetype     enable libfreetype [no]
211   --enable-libgme          enable Game Music Emu via libgme [no]
212   --enable-libgsm          enable GSM de/encoding via libgsm [no]
213   --enable-libiec61883     enable iec61883 via libiec61883 [no]
214   --enable-libilbc         enable iLBC de/encoding via libilbc [no]
215   --enable-libmodplug      enable ModPlug via libmodplug [no]
216   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
217   --enable-libnut          enable NUT (de)muxing via libnut,
218                            native (de)muxer exists [no]
219   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
220   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
221   --enable-libopencv       enable video filtering via libopencv [no]
222   --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
223   --enable-libopus         enable Opus decoding via libopus [no]
224   --enable-libpulse        enable Pulseaudio input via libpulse [no]
225   --enable-libquvi         enable quvi input via libquvi [no]
226   --enable-librtmp         enable RTMP[E] support via librtmp [no]
227   --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
228   --enable-libshine        enable fixed-point MP3 encoding via libshine [no]
229   --enable-libsoxr         enable Include libsoxr resampling [no]
230   --enable-libspeex        enable Speex de/encoding via libspeex [no]
231   --enable-libssh          enable SFTP protocol via libssh [no]
232   --enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]
233   --enable-libtheora       enable Theora encoding via libtheora [no]
234   --enable-libtwolame      enable MP2 encoding via libtwolame [no]
235   --enable-libutvideo      enable Ut Video encoding and decoding via libutvideo [no]
236   --enable-libv4l2         enable libv4l2/v4l-utils [no]
237   --enable-libvidstab      enable video stabilization using vid.stab [no]
238   --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
239   --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
240   --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
241                            native implementation exists [no]
242   --enable-libvpx          enable VP8 and VP9 de/encoding via libvpx [no]
243   --enable-libwavpack      enable wavpack encoding via libwavpack [no]
244   --enable-libx264         enable H.264 encoding via x264 [no]
245   --enable-libxavs         enable AVS encoding via xavs [no]
246   --enable-libxvid         enable Xvid encoding via xvidcore,
247                            native MPEG-4/Xvid encoder exists [no]
248   --enable-libzmq          enable message passing via libzmq [no]
249   --enable-libzvbi         enable teletext support via libzvbi [no]
250   --enable-openal          enable OpenAL 1.1 capture support [no]
251   --enable-opencl          enable OpenCL code
252   --enable-openssl         enable openssl [no]
253   --enable-x11grab         enable X11 grabbing [no]
254   --disable-zlib           disable zlib [autodetect]
255
256 Advanced options (experts only):
257   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
258   --enable-cross-compile   assume a cross-compiler is used
259   --sysroot=PATH           root of cross-build tree
260   --sysinclude=PATH        location of cross-build system headers
261   --target-os=OS           compiler targets OS [$target_os]
262   --target-exec=CMD        command to run executables on target
263   --target-path=DIR        path to view of build directory on target
264   --target-samples=DIR     path to samples directory on target
265   --tempprefix=PATH        force fixed dir/prefix instead of mktemp for checks
266   --toolchain=NAME         set tool defaults according to NAME
267   --nm=NM                  use nm tool NM [$nm_default]
268   --ar=AR                  use archive tool AR [$ar_default]
269   --as=AS                  use assembler AS [$as_default]
270   --windres=WINDRES        use windows resource compiler WINDRES [$windres_default]
271   --yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]
272   --cc=CC                  use C compiler CC [$cc_default]
273   --cxx=CXX                use C compiler CXX [$cxx_default]
274   --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
275   --ld=LD                  use linker LD [$ld_default]
276   --host-cc=HOSTCC         use host C compiler HOSTCC
277   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
278   --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
279   --host-ld=HOSTLD         use host linker HOSTLD
280   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
281   --host-libs=HLIBS        use libs HLIBS when linking for host
282   --host-os=OS             compiler host OS [$target_os]
283   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
284   --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
285   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
286   --extra-libs=ELIBS       add ELIBS [$ELIBS]
287   --extra-version=STRING   version string suffix []
288   --optflags=OPTFLAGS      override optimization-related compiler flags
289   --build-suffix=SUFFIX    library name suffix []
290   --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
291   --progs-suffix=SUFFIX    program name suffix []
292   --arch=ARCH              select architecture [$arch]
293   --cpu=CPU                select the minimum required CPU (affects
294                            instruction selection, may crash on older CPUs)
295   --enable-pic             build position-independent code
296   --enable-sram            allow use of on-chip SRAM
297   --enable-thumb           compile for Thumb instruction set
298   --disable-symver         disable symbol versioning
299   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
300   --disable-safe-bitstream-reader
301                            disable buffer boundary checking in bitreaders
302                            (faster, but may crash)
303   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
304   --enable-lto             use link-time optimization
305
306 Optimization options (experts only):
307   --disable-asm            disable all assembler optimizations
308   --disable-altivec        disable AltiVec optimizations
309   --disable-amd3dnow       disable 3DNow! optimizations
310   --disable-amd3dnowext    disable 3DNow! extended optimizations
311   --disable-mmx            disable MMX optimizations
312   --disable-mmxext         disable MMXEXT optimizations
313   --disable-sse            disable SSE optimizations
314   --disable-sse2           disable SSE2 optimizations
315   --disable-sse3           disable SSE3 optimizations
316   --disable-ssse3          disable SSSE3 optimizations
317   --disable-sse4           disable SSE4 optimizations
318   --disable-sse42          disable SSE4.2 optimizations
319   --disable-avx            disable AVX optimizations
320   --disable-fma4           disable FMA4 optimizations
321   --disable-avx2           disable AVX2 optimizations
322   --disable-armv5te        disable armv5te optimizations
323   --disable-armv6          disable armv6 optimizations
324   --disable-armv6t2        disable armv6t2 optimizations
325   --disable-vfp            disable VFP optimizations
326   --disable-neon           disable NEON optimizations
327   --disable-vis            disable VIS optimizations
328   --disable-inline-asm     disable use of inline assembler
329   --disable-yasm           disable use of yasm assembler
330   --disable-mips32r2       disable MIPS32R2 optimizations
331   --disable-mipsdspr1      disable MIPS DSP ASE R1 optimizations
332   --disable-mipsdspr2      disable MIPS DSP ASE R2 optimizations
333   --disable-mipsfpu        disable floating point MIPS optimizations
334   --disable-fast-unaligned consider unaligned accesses slow
335
336 Developer options (useful when working on FFmpeg itself):
337   --disable-debug          disable debugging symbols
338   --enable-debug=LEVEL     set the debug level [$debuglevel]
339   --disable-optimizations  disable compiler optimizations
340   --enable-extra-warnings  enable more compiler warnings
341   --disable-stripping      disable stripping of executables and shared libraries
342   --assert-level=level     0(default), 1 or 2, amount of assertion testing,
343                            2 causes a slowdown at runtime.
344   --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
345   --valgrind=VALGRIND      run "make fate" tests through valgrind to detect memory
346                            leaks and errors, using the specified valgrind binary.
347                            Cannot be combined with --target-exec
348   --enable-ftrapv          Trap arithmetic overflows
349   --samples=PATH           location of test samples for FATE, if not set use
350                            \$FATE_SAMPLES at make invocation time.
351   --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
352                            should be used only for debugging purposes)
353   --enable-random          randomly enable/disable components
354   --disable-random
355   --enable-random=LIST     randomly enable/disable specific components or
356   --disable-random=LIST    component groups. LIST is a comma-separated list
357                            of NAME[:PROB] entries where NAME is a component
358                            (group) and PROB the probability associated with
359                            NAME (default 0.5).
360   --random-seed=VALUE      seed value for --enable/disable-random
361
362 NOTE: Object files are built at the place where configure is launched.
363 EOF
364   exit 0
365 }
366
367 quotes='""'
368
369 log(){
370     echo "$@" >> $logfile
371 }
372
373 log_file(){
374     log BEGIN $1
375     pr -n -t $1 >> $logfile
376     log END $1
377 }
378
379 echolog(){
380     log "$@"
381     echo "$@"
382 }
383
384 warn(){
385     log "WARNING: $*"
386     WARNINGS="${WARNINGS}WARNING: $*\n"
387 }
388
389 die(){
390     echolog "$@"
391     cat <<EOF
392
393 If you think configure made a mistake, make sure you are using the latest
394 version from Git.  If the latest version fails, report the problem to the
395 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
396 EOF
397     if disabled logging; then
398         cat <<EOF
399 Rerun configure with logging enabled (do not use --disable-logging), and
400 include the log this produces with your report.
401 EOF
402     else
403         cat <<EOF
404 Include the log file "$logfile" produced by configure as this will help
405 solving the problem.
406 EOF
407     fi
408     exit 1
409 }
410
411 # Avoid locale weirdness, besides we really just want to translate ASCII.
412 toupper(){
413     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
414 }
415
416 tolower(){
417     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
418 }
419
420 c_escape(){
421     echo "$*" | sed 's/["\\]/\\\0/g'
422 }
423
424 sh_quote(){
425     v=$(echo "$1" | sed "s/'/'\\\\''/g")
426     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
427     echo "$v"
428 }
429
430 cleanws(){
431     echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//;s/\r//g'
432 }
433
434 filter(){
435     pat=$1
436     shift
437     for v; do
438         eval "case $v in $pat) echo $v ;; esac"
439     done
440 }
441
442 filter_out(){
443     pat=$1
444     shift
445     for v; do
446         eval "case $v in $pat) ;; *) echo $v ;; esac"
447     done
448 }
449
450 map(){
451     m=$1
452     shift
453     for v; do eval $m; done
454 }
455
456 add_suffix(){
457     suffix=$1
458     shift
459     for v; do echo ${v}${suffix}; done
460 }
461
462 set_all(){
463     value=$1
464     shift
465     for var in $*; do
466         eval $var=$value
467     done
468 }
469
470 set_weak(){
471     value=$1
472     shift
473     for var; do
474         eval : \${$var:=$value}
475     done
476 }
477
478 sanitize_var_name(){
479     echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
480 }
481
482 set_safe(){
483     var=$1
484     shift
485     eval $(sanitize_var_name "$var")='$*'
486 }
487
488 get_safe(){
489     eval echo \$$(sanitize_var_name "$1")
490 }
491
492 pushvar(){
493     for pvar in $*; do
494         eval level=\${${pvar}_level:=0}
495         eval ${pvar}_${level}="\$$pvar"
496         eval ${pvar}_level=$(($level+1))
497     done
498 }
499
500 popvar(){
501     for pvar in $*; do
502         eval level=\${${pvar}_level:-0}
503         test $level = 0 && continue
504         eval level=$(($level-1))
505         eval $pvar="\${${pvar}_${level}}"
506         eval ${pvar}_level=$level
507         eval unset ${pvar}_${level}
508     done
509 }
510
511 enable(){
512     set_all yes $*
513 }
514
515 disable(){
516     set_all no $*
517 }
518
519 enable_weak(){
520     set_weak yes $*
521 }
522
523 disable_weak(){
524     set_weak no $*
525 }
526
527 enable_safe(){
528     for var; do
529         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
530     done
531 }
532
533 disable_safe(){
534     for var; do
535         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
536     done
537 }
538
539 do_enable_deep(){
540     for var; do
541         enabled $var && continue
542         eval sel="\$${var}_select"
543         eval sgs="\$${var}_suggest"
544         pushvar var sgs
545         enable_deep $sel
546         popvar sgs
547         enable_deep_weak $sgs
548         popvar var
549     done
550 }
551
552 enable_deep(){
553     do_enable_deep $*
554     enable $*
555 }
556
557 enable_deep_weak(){
558     for var; do
559         disabled $var && continue
560         pushvar var
561         do_enable_deep $var
562         popvar var
563         enable_weak $var
564     done
565 }
566
567 enabled(){
568     test "${1#!}" = "$1" && op== || op=!=
569     eval test "x\$${1#!}" $op "xyes"
570 }
571
572 disabled(){
573     test "${1#!}" = "$1" && op== || op=!=
574     eval test "x\$${1#!}" $op "xno"
575 }
576
577 enabled_all(){
578     for opt; do
579         enabled $opt || return 1
580     done
581 }
582
583 disabled_all(){
584     for opt; do
585         disabled $opt || return 1
586     done
587 }
588
589 enabled_any(){
590     for opt; do
591         enabled $opt && return 0
592     done
593 }
594
595 disabled_any(){
596     for opt; do
597         disabled $opt && return 0
598     done
599     return 1
600 }
601
602 set_default(){
603     for opt; do
604         eval : \${$opt:=\$${opt}_default}
605     done
606 }
607
608 is_in(){
609     value=$1
610     shift
611     for var in $*; do
612         [ $var = $value ] && return 0
613     done
614     return 1
615 }
616
617 do_check_deps(){
618     for cfg; do
619         cfg="${cfg#!}"
620         enabled ${cfg}_checking && die "Circular dependency for $cfg."
621         disabled ${cfg}_checking && continue
622         enable ${cfg}_checking
623         append allopts $cfg
624
625         eval dep_all="\$${cfg}_deps"
626         eval dep_any="\$${cfg}_deps_any"
627         eval dep_sel="\$${cfg}_select"
628         eval dep_sgs="\$${cfg}_suggest"
629         eval dep_ifa="\$${cfg}_if"
630         eval dep_ifn="\$${cfg}_if_any"
631
632         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
633         do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
634         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
635
636         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
637         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
638         enabled_all  $dep_all || disable $cfg
639         enabled_any  $dep_any || disable $cfg
640         disabled_any $dep_sel && disable $cfg
641
642         if enabled $cfg; then
643             enable_deep $dep_sel
644             enable_deep_weak $dep_sgs
645         fi
646
647         disable ${cfg}_checking
648     done
649 }
650
651 check_deps(){
652     unset allopts
653
654     do_check_deps "$@"
655
656     for cfg in $allopts; do
657         enabled $cfg || continue
658         eval dep_extralibs="\$${cfg}_extralibs"
659         test -n "$dep_extralibs" && add_extralibs $dep_extralibs
660     done
661 }
662
663 print_config(){
664     pfx=$1
665     files=$2
666     shift 2
667     map 'eval echo "$v \${$v:-no}"' "$@" |
668     awk "BEGIN { split(\"$files\", files) }
669         {
670             c = \"$pfx\" toupper(\$1);
671             v = \$2;
672             sub(/yes/, 1, v);
673             sub(/no/,  0, v);
674             for (f in files) {
675                 file = files[f];
676                 if (file ~ /\\.h\$/) {
677                     printf(\"#define %s %d\\n\", c, v) >>file;
678                 } else if (file ~ /\\.asm\$/) {
679                     printf(\"%%define %s %d\\n\", c, v) >>file;
680                 } else if (file ~ /\\.mak\$/) {
681                     n = -v ? \"\" : \"!\";
682                     printf(\"%s%s=yes\\n\", n, c) >>file;
683                 } else if (file ~ /\\.texi\$/) {
684                     pre = -v ? \"\" : \"@c \";
685                     yesno = \$2;
686                     c2 = tolower(c);
687                     gsub(/_/, \"-\", c2);
688                     printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;
689                 }
690             }
691         }"
692 }
693
694 print_enabled(){
695     suf=$1
696     shift
697     for v; do
698         enabled $v && printf "%s\n" ${v%$suf};
699     done
700 }
701
702 append(){
703     var=$1
704     shift
705     eval "$var=\"\$$var $*\""
706 }
707
708 prepend(){
709     var=$1
710     shift
711     eval "$var=\"$* \$$var\""
712 }
713
714 add_cppflags(){
715     append CPPFLAGS "$@"
716 }
717
718 add_cflags(){
719     append CFLAGS $($cflags_filter "$@")
720 }
721
722 add_cxxflags(){
723     append CXXFLAGS $($cflags_filter "$@")
724 }
725
726 add_asflags(){
727     append ASFLAGS $($asflags_filter "$@")
728 }
729
730 add_ldflags(){
731     append LDFLAGS $($ldflags_filter "$@")
732 }
733
734 add_stripflags(){
735     append ASMSTRIPFLAGS "$@"
736 }
737
738 add_extralibs(){
739     prepend extralibs $($ldflags_filter "$@")
740 }
741
742 add_host_cppflags(){
743     append host_cppflags "$@"
744 }
745
746 add_host_cflags(){
747     append host_cflags $($host_cflags_filter "$@")
748 }
749
750 add_host_ldflags(){
751     append host_ldflags $($host_ldflags_filter "$@")
752 }
753
754 add_compat(){
755     append compat_objs $1
756     shift
757     map 'add_cppflags -D$v' "$@"
758 }
759
760 check_cmd(){
761     log "$@"
762     "$@" >> $logfile 2>&1
763 }
764
765 cc_o(){
766     eval printf '%s\\n' $CC_O
767 }
768
769 cc_e(){
770     eval printf '%s\\n' $CC_E
771 }
772
773 check_cc(){
774     log check_cc "$@"
775     cat > $TMPC
776     log_file $TMPC
777     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
778 }
779
780 check_cxx(){
781     log check_cxx "$@"
782     cat > $TMPCPP
783     log_file $TMPCPP
784     check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
785 }
786
787 check_cpp(){
788     log check_cpp "$@"
789     cat > $TMPC
790     log_file $TMPC
791     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
792 }
793
794 as_o(){
795     eval printf '%s\\n' $AS_O
796 }
797
798 check_as(){
799     log check_as "$@"
800     cat > $TMPS
801     log_file $TMPS
802     check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
803 }
804
805 check_inline_asm(){
806     log check_inline_asm "$@"
807     name="$1"
808     code="$2"
809     shift 2
810     disable $name
811     check_cc "$@" <<EOF && enable $name
812 void foo(void){ __asm__ volatile($code); }
813 EOF
814 }
815
816 check_insn(){
817     log check_insn "$@"
818     check_inline_asm ${1}_inline "\"$2\""
819     echo "$2" | check_as && enable ${1}_external || disable ${1}_external
820 }
821
822 check_yasm(){
823     log check_yasm "$@"
824     echo "$1" > $TMPS
825     log_file $TMPS
826     shift 1
827     check_cmd $yasmexe $YASMFLAGS -Werror "$@" -o $TMPO $TMPS
828 }
829
830 ld_o(){
831     eval printf '%s\\n' $LD_O
832 }
833
834 check_ld(){
835     log check_ld "$@"
836     type=$1
837     shift 1
838     flags=$(filter_out '-l*|*.so' $@)
839     libs=$(filter '-l*|*.so' $@)
840     check_$type $($cflags_filter $flags) || return
841     flags=$($ldflags_filter $flags)
842     libs=$($ldflags_filter $libs)
843     check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
844 }
845
846 check_code(){
847     log check_code "$@"
848     check=$1
849     headers=$2
850     code=$3
851     shift 3
852     {
853         for hdr in $headers; do
854             echo "#include <$hdr>"
855         done
856         echo "int main(void) { $code; return 0; }"
857     } | check_$check "$@"
858 }
859
860 check_cppflags(){
861     log check_cppflags "$@"
862     check_cc "$@" <<EOF && append CPPFLAGS "$@"
863 int x;
864 EOF
865 }
866
867 test_cflags(){
868     log test_cflags "$@"
869     set -- $($cflags_filter "$@")
870     check_cc "$@" <<EOF
871 int x;
872 EOF
873 }
874
875 check_cflags(){
876     log check_cflags "$@"
877     test_cflags "$@" && add_cflags "$@"
878 }
879
880 check_cxxflags(){
881     log check_cxxflags "$@"
882     set -- $($cflags_filter "$@")
883     check_cxx "$@" <<EOF && append CXXFLAGS "$@"
884 int x;
885 EOF
886 }
887
888 test_ldflags(){
889     log test_ldflags "$@"
890     check_ld "cc" "$@" <<EOF
891 int main(void){ return 0; }
892 EOF
893 }
894
895 check_ldflags(){
896     log check_ldflags "$@"
897     test_ldflags "$@" && add_ldflags "$@"
898 }
899
900 test_stripflags(){
901     log test_stripflags "$@"
902     # call check_cc to get a fresh TMPO
903     check_cc <<EOF
904 int main(void) { return 0; }
905 EOF
906     check_cmd $strip $ASMSTRIPFLAGS "$@" $TMPO
907 }
908
909 check_stripflags(){
910     log check_stripflags "$@"
911     test_stripflags "$@" && add_stripflags "$@"
912 }
913
914 check_header(){
915     log check_header "$@"
916     header=$1
917     shift
918     disable_safe $header
919     check_cpp "$@" <<EOF && enable_safe $header
920 #include <$header>
921 int x;
922 EOF
923 }
924
925 check_func(){
926     log check_func "$@"
927     func=$1
928     shift
929     disable $func
930     check_ld "cc" "$@" <<EOF && enable $func
931 extern int $func();
932 int main(void){ $func(); }
933 EOF
934 }
935
936 check_mathfunc(){
937     log check_mathfunc "$@"
938     func=$1
939     narg=$2
940     shift 2
941     test $narg = 2 && args="f, g" || args="f"
942     disable $func
943     check_ld "cc" "$@" <<EOF && enable $func
944 #include <math.h>
945 float foo(float f, float g) { return $func($args); }
946 int main(void){ return (int) foo; }
947 EOF
948 }
949
950 check_func_headers(){
951     log check_func_headers "$@"
952     headers=$1
953     funcs=$2
954     shift 2
955     {
956         for hdr in $headers; do
957             echo "#include <$hdr>"
958         done
959         for func in $funcs; do
960             echo "long check_$func(void) { return (long) $func; }"
961         done
962         echo "int main(void) { return 0; }"
963     } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
964 }
965
966 check_class_headers_cpp(){
967     log check_class_headers_cpp "$@"
968     headers=$1
969     classes=$2
970     shift 2
971     {
972         for hdr in $headers; do
973             echo "#include <$hdr>"
974         done
975         echo "int main(void) { "
976         i=1
977         for class in $classes; do
978             echo "$class obj$i;"
979             i=$(expr $i + 1)
980         done
981         echo "return 0; }"
982     } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
983 }
984
985 check_cpp_condition(){
986     log check_cpp_condition "$@"
987     header=$1
988     condition=$2
989     shift 2
990     check_cpp "$@" <<EOF
991 #include <$header>
992 #if !($condition)
993 #error "unsatisfied condition: $condition"
994 #endif
995 EOF
996 }
997
998 check_lib(){
999     log check_lib "$@"
1000     header="$1"
1001     func="$2"
1002     shift 2
1003     check_header $header && check_func $func "$@" && add_extralibs "$@"
1004 }
1005
1006 check_lib2(){
1007     log check_lib2 "$@"
1008     headers="$1"
1009     funcs="$2"
1010     shift 2
1011     check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
1012 }
1013
1014 check_lib_cpp(){
1015     log check_lib_cpp "$@"
1016     headers="$1"
1017     classes="$2"
1018     shift 2
1019     check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
1020 }
1021
1022 check_pkg_config(){
1023     log check_pkg_config "$@"
1024     pkg="$1"
1025     headers="$2"
1026     funcs="$3"
1027     shift 3
1028     check_cmd $pkg_config --exists --print-errors $pkg || return
1029     pkg_cflags=$($pkg_config --cflags $pkg)
1030     pkg_libs=$($pkg_config --libs $pkg)
1031     check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1032         set_safe ${pkg}_cflags $pkg_cflags   &&
1033         set_safe ${pkg}_libs   $pkg_libs
1034 }
1035
1036 check_exec(){
1037     check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1038 }
1039
1040 check_exec_crash(){
1041     code=$(cat)
1042
1043     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
1044     # are safe but may not be available everywhere.  Thus we use
1045     # raise(SIGTERM) instead.  The check is run in a subshell so we
1046     # can redirect the "Terminated" message from the shell.  SIGBUS
1047     # is not defined by standard C so it is used conditionally.
1048
1049     (check_exec "$@") >> $logfile 2>&1 <<EOF
1050 #include <signal.h>
1051 static void sighandler(int sig){
1052     raise(SIGTERM);
1053 }
1054 int foo(void){
1055     $code
1056 }
1057 int (*func_ptr)(void) = foo;
1058 int main(void){
1059     signal(SIGILL, sighandler);
1060     signal(SIGFPE, sighandler);
1061     signal(SIGSEGV, sighandler);
1062 #ifdef SIGBUS
1063     signal(SIGBUS, sighandler);
1064 #endif
1065     return func_ptr();
1066 }
1067 EOF
1068 }
1069
1070 check_type(){
1071     log check_type "$@"
1072     headers=$1
1073     type=$2
1074     shift 2
1075     disable_safe "$type"
1076     check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1077 }
1078
1079 check_struct(){
1080     log check_struct "$@"
1081     headers=$1
1082     struct=$2
1083     member=$3
1084     shift 3
1085     disable_safe "${struct}_${member}"
1086     check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1087         enable_safe "${struct}_${member}"
1088 }
1089
1090 check_builtin(){
1091     log check_builtin "$@"
1092     name=$1
1093     headers=$2
1094     builtin=$3
1095     shift 3
1096     disable "$name"
1097     check_code ld "$headers" "$builtin" "cc" "$@" && enable "$name"
1098 }
1099
1100 require(){
1101     name="$1"
1102     header="$2"
1103     func="$3"
1104     shift 3
1105     check_lib $header $func "$@" || die "ERROR: $name not found"
1106 }
1107
1108 require2(){
1109     name="$1"
1110     headers="$2"
1111     func="$3"
1112     shift 3
1113     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
1114 }
1115
1116 require_cpp(){
1117     name="$1"
1118     headers="$2"
1119     classes="$3"
1120     shift 3
1121     check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
1122 }
1123
1124 require_pkg_config(){
1125     pkg="$1"
1126     check_pkg_config "$@" || die "ERROR: $pkg not found"
1127     add_cflags    $(get_safe ${pkg}_cflags)
1128     add_extralibs $(get_safe ${pkg}_libs)
1129 }
1130
1131 require_libfreetype(){
1132     log require_libfreetype "$@"
1133     pkg="freetype2"
1134     check_cmd $pkg_config --exists --print-errors $pkg \
1135       || die "ERROR: $pkg not found"
1136     pkg_cflags=$($pkg_config --cflags $pkg)
1137     pkg_libs=$($pkg_config --libs $pkg)
1138     {
1139         echo "#include <ft2build.h>"
1140         echo "#include FT_FREETYPE_H"
1141         echo "long check_func(void) { return (long) FT_Init_FreeType; }"
1142         echo "int main(void) { return 0; }"
1143     } | check_ld "cc" $pkg_cflags $pkg_libs \
1144       && set_safe ${pkg}_cflags $pkg_cflags \
1145       && set_safe ${pkg}_libs   $pkg_libs \
1146       || die "ERROR: $pkg not found"
1147     add_cflags    $(get_safe ${pkg}_cflags)
1148     add_extralibs $(get_safe ${pkg}_libs)
1149 }
1150
1151 hostcc_e(){
1152     eval printf '%s\\n' $HOSTCC_E
1153 }
1154
1155 hostcc_o(){
1156     eval printf '%s\\n' $HOSTCC_O
1157 }
1158
1159 check_host_cc(){
1160     log check_host_cc "$@"
1161     cat > $TMPC
1162     log_file $TMPC
1163     check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1164 }
1165
1166 check_host_cpp(){
1167     log check_host_cpp "$@"
1168     cat > $TMPC
1169     log_file $TMPC
1170     check_cmd $host_cc $HOSTCPPFLAGS $HOSTCFLAGS "$@" $(hostcc_e $TMPO) $TMPC
1171 }
1172
1173 check_host_cppflags(){
1174     log check_host_cppflags "$@"
1175     check_host_cc "$@" <<EOF && append host_cppflags "$@"
1176 int x;
1177 EOF
1178 }
1179
1180 check_host_cflags(){
1181     log check_host_cflags "$@"
1182     set -- $($host_cflags_filter "$@")
1183     check_host_cc "$@" <<EOF && append host_cflags "$@"
1184 int x;
1185 EOF
1186 }
1187
1188 check_host_cpp_condition(){
1189     log check_host_cpp_condition "$@"
1190     header=$1
1191     condition=$2
1192     shift 2
1193     check_host_cpp "$@" <<EOF
1194 #include <$header>
1195 #if !($condition)
1196 #error "unsatisfied condition: $condition"
1197 #endif
1198 EOF
1199 }
1200
1201 apply(){
1202     file=$1
1203     shift
1204     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1205 }
1206
1207 cp_if_changed(){
1208     cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1209     mkdir -p "$(dirname $2)"
1210     $cp_f "$1" "$2"
1211 }
1212
1213 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1214 # system-dependent things.
1215
1216 COMPONENT_LIST="
1217     bsfs
1218     decoders
1219     demuxers
1220     encoders
1221     filters
1222     hwaccels
1223     indevs
1224     muxers
1225     outdevs
1226     parsers
1227     protocols
1228 "
1229
1230 EXAMPLE_LIST="
1231     decoding_encoding_example
1232     demuxing_decoding_example
1233     filtering_audio_example
1234     filtering_video_example
1235     metadata_example
1236     muxing_example
1237     resampling_audio_example
1238     scaling_video_example
1239     transcode_aac_example
1240 "
1241
1242 EXTERNAL_LIBRARY_LIST="
1243     avisynth
1244     bzlib
1245     crystalhd
1246     fontconfig
1247     frei0r
1248     gnutls
1249     iconv
1250     ladspa
1251     libaacplus
1252     libass
1253     libbluray
1254     libcaca
1255     libcdio
1256     libcelt
1257     libdc1394
1258     libfaac
1259     libfdk_aac
1260     libflite
1261     libfreetype
1262     libgme
1263     libgsm
1264     libiec61883
1265     libilbc
1266     libmodplug
1267     libmp3lame
1268     libnut
1269     libopencore_amrnb
1270     libopencore_amrwb
1271     libopencv
1272     libopenjpeg
1273     libopus
1274     libpulse
1275     libquvi
1276     librtmp
1277     libschroedinger
1278     libshine
1279     libsoxr
1280     libspeex
1281     libssh
1282     libstagefright_h264
1283     libtheora
1284     libtwolame
1285     libutvideo
1286     libv4l2
1287     libvidstab
1288     libvo_aacenc
1289     libvo_amrwbenc
1290     libvorbis
1291     libvpx
1292     libwavpack
1293     libx264
1294     libxavs
1295     libxvid
1296     libzmq
1297     libzvbi
1298     openal
1299     opencl
1300     openssl
1301     x11grab
1302     zlib
1303 "
1304
1305 DOCUMENT_LIST="
1306     doc
1307     htmlpages
1308     manpages
1309     podpages
1310     txtpages
1311 "
1312
1313 HWACCEL_LIST="
1314     dxva2
1315     vaapi
1316     vda
1317     vdpau
1318 "
1319
1320 LIBRARY_LIST="
1321     avcodec
1322     avdevice
1323     avfilter
1324     avformat
1325     avresample
1326     avutil
1327     postproc
1328     swresample
1329     swscale
1330 "
1331
1332 PROGRAM_LIST="
1333     ffplay
1334     ffprobe
1335     ffserver
1336     ffmpeg
1337 "
1338
1339 CONFIG_LIST="
1340     $COMPONENT_LIST
1341     $DOCUMENT_LIST
1342     $EXAMPLE_LIST
1343     $EXTERNAL_LIBRARY_LIST
1344     $HWACCEL_LIST
1345     $LIBRARY_LIST
1346     $PROGRAM_LIST
1347     dct
1348     dwt
1349     error_resilience
1350     fast_unaligned
1351     fft
1352     ftrapv
1353     gpl
1354     gray
1355     hardcoded_tables
1356     incompatible_libav_abi
1357     incompatible_fork_abi
1358     lsp
1359     lzo
1360     mdct
1361     memalign_hack
1362     memory_poisoning
1363     network
1364     nonfree
1365     pic
1366     rdft
1367     runtime_cpudetect
1368     safe_bitstream_reader
1369     shared
1370     small
1371     sram
1372     static
1373     swscale_alpha
1374     thumb
1375     version3
1376     xmm_clobber_test
1377 "
1378
1379 THREADS_LIST='
1380     pthreads
1381     w32threads
1382     os2threads
1383 '
1384
1385 ATOMICS_LIST='
1386     atomics_gcc
1387     atomics_suncc
1388     atomics_win32
1389 '
1390
1391 ARCH_LIST='
1392     aarch64
1393     alpha
1394     arm
1395     avr32
1396     avr32_ap
1397     avr32_uc
1398     bfin
1399     ia64
1400     m68k
1401     mips
1402     mips64
1403     parisc
1404     ppc
1405     ppc64
1406     s390
1407     sh4
1408     sparc
1409     sparc64
1410     tilegx
1411     tilepro
1412     tomi
1413     x86
1414     x86_32
1415     x86_64
1416 '
1417
1418 ARCH_EXT_LIST_ARM='
1419     armv5te
1420     armv6
1421     armv6t2
1422     neon
1423     vfp
1424     vfpv3
1425 '
1426
1427 ARCH_EXT_LIST_X86='
1428     amd3dnow
1429     amd3dnowext
1430     avx
1431     avx2
1432     fma4
1433     i686
1434     mmx
1435     mmxext
1436     sse
1437     sse2
1438     sse3
1439     sse4
1440     sse42
1441     ssse3
1442 '
1443
1444 ARCH_EXT_LIST="
1445     $ARCH_EXT_LIST_ARM
1446     $ARCH_EXT_LIST_X86
1447     altivec
1448     ppc4xx
1449     vis
1450     mipsfpu
1451     mips32r2
1452     mipsdspr1
1453     mipsdspr2
1454 "
1455
1456 HAVE_LIST_CMDLINE='
1457     inline_asm
1458     symver
1459     yasm
1460 '
1461
1462 HAVE_LIST_PUB='
1463     bigendian
1464     fast_unaligned
1465     incompatible_libav_abi
1466     incompatible_fork_abi
1467 '
1468
1469 MATH_FUNCS="
1470     atanf
1471     atan2f
1472     cbrt
1473     cbrtf
1474     cosf
1475     exp2
1476     exp2f
1477     expf
1478     isinf
1479     isnan
1480     ldexpf
1481     llrint
1482     llrintf
1483     log2
1484     log2f
1485     log10f
1486     lrint
1487     lrintf
1488     powf
1489     rint
1490     round
1491     roundf
1492     sinf
1493     trunc
1494     truncf
1495 "
1496
1497 HAVE_LIST="
1498     $ARCH_EXT_LIST
1499     $(add_suffix _external $ARCH_EXT_LIST)
1500     $(add_suffix _inline   $ARCH_EXT_LIST)
1501     $HAVE_LIST_CMDLINE
1502     $HAVE_LIST_PUB
1503     $THREADS_LIST
1504     $ATOMICS_LIST
1505     $MATH_FUNCS
1506     access
1507     aligned_malloc
1508     aligned_stack
1509     alsa_asoundlib_h
1510     altivec_h
1511     arpa_inet_h
1512     asm_mod_q
1513     asm_mod_y
1514     asm_types_h
1515     atomic_cas_ptr
1516     atomics_native
1517     attribute_may_alias
1518     attribute_packed
1519     cdio_paranoia_h
1520     cdio_paranoia_paranoia_h
1521     CL_cl_h
1522     clock_gettime
1523     closesocket
1524     CommandLineToArgvW
1525     cpunop
1526     CryptGenRandom
1527     dcbzl
1528     dev_bktr_ioctl_bt848_h
1529     dev_bktr_ioctl_meteor_h
1530     dev_ic_bt8xx_h
1531     dev_video_bktr_ioctl_bt848_h
1532     dev_video_meteor_ioctl_meteor_h
1533     direct_h
1534     dlfcn_h
1535     dlopen
1536     dos_paths
1537     dxva_h
1538     ebp_available
1539     ebx_available
1540     fast_64bit
1541     fast_clz
1542     fast_cmov
1543     fcntl
1544     fork
1545     getaddrinfo
1546     gethrtime
1547     getopt
1548     GetProcessAffinityMask
1549     GetProcessMemoryInfo
1550     GetProcessTimes
1551     GetSystemTimeAsFileTime
1552     getrusage
1553     getservbyport
1554     gettimeofday
1555     glob
1556     gnu_as
1557     gnu_windres
1558     gsm_h
1559     ibm_asm
1560     inet_aton
1561     io_h
1562     inline_asm_labels
1563     isatty
1564     jack_port_get_latency_range
1565     kbhit
1566     ldbrx
1567     libc_msvcrt
1568     libdc1394_1
1569     libdc1394_2
1570     local_aligned_16
1571     local_aligned_8
1572     localtime_r
1573     loongson
1574     lzo1x_999_compress
1575     machine_ioctl_bt848_h
1576     machine_ioctl_meteor_h
1577     machine_rw_barrier
1578     makeinfo
1579     malloc_h
1580     MapViewOfFile
1581     memalign
1582     MemoryBarrier
1583     mkstemp
1584     mm_empty
1585     mmap
1586     mprotect
1587     nanosleep
1588     openjpeg_1_5_openjpeg_h
1589     PeekNamedPipe
1590     perl
1591     pod2man
1592     poll_h
1593     posix_memalign
1594     pragma_deprecated
1595     pthread_cancel
1596     rdtsc
1597     rsync_contimeout
1598     sarestart
1599     sched_getaffinity
1600     sdl
1601     SetConsoleTextAttribute
1602     setmode
1603     setrlimit
1604     Sleep
1605     sndio_h
1606     socklen_t
1607     soundcard_h
1608     strerror_r
1609     struct_addrinfo
1610     struct_group_source_req
1611     struct_ip_mreq_source
1612     struct_ipv6_mreq
1613     struct_pollfd
1614     struct_rusage_ru_maxrss
1615     struct_sctp_event_subscribe
1616     struct_sockaddr_in6
1617     struct_sockaddr_sa_len
1618     struct_sockaddr_storage
1619     struct_stat_st_mtim_tv_nsec
1620     struct_v4l2_frmivalenum_discrete
1621     symver_asm_label
1622     symver_gnu_asm
1623     sync_val_compare_and_swap
1624     sysconf
1625     sysctl
1626     sys_mman_h
1627     sys_param_h
1628     sys_resource_h
1629     sys_select_h
1630     sys_soundcard_h
1631     sys_time_h
1632     sys_un_h
1633     sys_videoio_h
1634     termios_h
1635     texi2html
1636     threads
1637     unistd_h
1638     usleep
1639     vdpau_x11
1640     vfp_args
1641     VirtualAlloc
1642     windows_h
1643     winsock2_h
1644     xform_asm
1645     xlib
1646     xmm_clobbers
1647 "
1648
1649 # options emitted with CONFIG_ prefix but not available on the command line
1650 CONFIG_EXTRA="
1651     aandcttables
1652     ac3dsp
1653     audio_frame_queue
1654     dsputil
1655     exif
1656     frame_thread_encoder
1657     gcrypt
1658     golomb
1659     gplv3
1660     h263dsp
1661     h264chroma
1662     h264dsp
1663     h264pred
1664     h264qpel
1665     hpeldsp
1666     huffman
1667     lgplv3
1668     lpc
1669     mpegaudio
1670     mpegaudiodsp
1671     mpegvideo
1672     mpegvideoenc
1673     nettle
1674     rangecoder
1675     riffdec
1676     riffenc
1677     rtpdec
1678     rtpenc_chain
1679     sinewin
1680     videodsp
1681     vp3dsp
1682 "
1683
1684 CMDLINE_SELECT="
1685     $ARCH_EXT_LIST
1686     $CONFIG_LIST
1687     $HAVE_LIST_CMDLINE
1688     $THREADS_LIST
1689     asm
1690     cross_compile
1691     debug
1692     extra_warnings
1693     logging
1694     lto
1695     optimizations
1696     rpath
1697     stripping
1698 "
1699
1700 PATHS_LIST='
1701     bindir
1702     datadir
1703     docdir
1704     incdir
1705     libdir
1706     mandir
1707     prefix
1708     shlibdir
1709 '
1710
1711 CMDLINE_SET="
1712     $PATHS_LIST
1713     ar
1714     arch
1715     as
1716     assert_level
1717     build_suffix
1718     cc
1719     cpu
1720     cross_prefix
1721     cxx
1722     dep_cc
1723     extra_version
1724     host_cc
1725     host_cflags
1726     host_ld
1727     host_ldflags
1728     host_libs
1729     host_os
1730     install
1731     ld
1732     logfile
1733     malloc_prefix
1734     nm
1735     optflags
1736     pkg_config
1737     progs_suffix
1738     random_seed
1739     samples
1740     strip
1741     sysinclude
1742     sysroot
1743     target_exec
1744     target_os
1745     target_path
1746     target_samples
1747     tempprefix
1748     toolchain
1749     valgrind
1750     yasmexe
1751 "
1752
1753 CMDLINE_APPEND="
1754     extra_cflags
1755     extra_cxxflags
1756     host_cppflags
1757 "
1758
1759 # code dependency declarations
1760
1761 # architecture extensions
1762
1763 armv5te_deps="arm"
1764 armv6_deps="arm"
1765 armv6t2_deps="arm"
1766 neon_deps="arm"
1767 vfp_deps="arm"
1768 vfpv3_deps="vfp"
1769
1770 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1771
1772 mipsfpu_deps="mips"
1773 mips32r2_deps="mips"
1774 mipsdspr1_deps="mips"
1775 mipsdspr2_deps="mips"
1776
1777 altivec_deps="ppc"
1778 ppc4xx_deps="ppc"
1779
1780 vis_deps="sparc"
1781
1782 cpunop_deps="i686"
1783 x86_64_select="i686"
1784 x86_64_suggest="fast_cmov"
1785
1786 amd3dnow_deps="mmx"
1787 amd3dnowext_deps="amd3dnow"
1788 mmx_deps="x86"
1789 mmxext_deps="mmx"
1790 sse_deps="mmxext"
1791 sse2_deps="sse"
1792 sse3_deps="sse2"
1793 ssse3_deps="sse3"
1794 sse4_deps="ssse3"
1795 sse42_deps="sse4"
1796 avx_deps="sse42"
1797 fma4_deps="avx"
1798 avx2_deps="avx"
1799
1800 mmx_external_deps="yasm"
1801 mmx_inline_deps="inline_asm"
1802 mmx_suggest="mmx_external mmx_inline"
1803
1804 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86); do
1805     eval dep=\$${ext}_deps
1806     eval ${ext}_external_deps='"${dep}_external"'
1807     eval ${ext}_inline_deps='"${dep}_inline"'
1808     eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1809 done
1810
1811 aligned_stack_if_any="ppc x86"
1812 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1813 fast_clz_if_any="alpha avr32 mips ppc x86"
1814 fast_unaligned_if_any="ppc x86"
1815
1816 need_memalign="altivec neon sse"
1817
1818 # system capabilities
1819 log2_deps="!libc_msvcrt"
1820
1821 symver_if_any="symver_asm_label symver_gnu_asm"
1822
1823 # threading support
1824 atomics_gcc_if="sync_val_compare_and_swap"
1825 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
1826 atomics_win32_if="MemoryBarrier"
1827 atomics_native_if_any="$ATOMICS_LIST"
1828 threads_if_any="$THREADS_LIST"
1829
1830 # subsystems
1831 dct_select="rdft"
1832 error_resilience_select="dsputil"
1833 frame_thread_encoder_deps="encoders threads"
1834 lpc_select="dsputil"
1835 mdct_select="fft"
1836 rdft_select="fft"
1837 mpegaudio_select="mpegaudiodsp"
1838 mpegaudiodsp_select="dct"
1839 mpegvideo_select="dsputil h264chroma hpeldsp videodsp"
1840 mpegvideoenc_select="mpegvideo"
1841
1842 # decoders / encoders
1843 aac_decoder_select="mdct sinewin"
1844 aac_encoder_select="audio_frame_queue mdct sinewin"
1845 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1846 ac3_decoder_select="mdct ac3dsp ac3_parser dsputil"
1847 ac3_encoder_select="mdct ac3dsp dsputil"
1848 ac3_fixed_encoder_select="mdct ac3dsp dsputil"
1849 aic_decoder_select="dsputil golomb"
1850 alac_encoder_select="lpc"
1851 als_decoder_select="dsputil"
1852 amrnb_decoder_select="lsp"
1853 amrwb_decoder_select="lsp"
1854 amv_decoder_select="dsputil hpeldsp exif"
1855 amv_encoder_select="aandcttables"
1856 ape_decoder_select="dsputil"
1857 asv1_decoder_select="dsputil"
1858 asv1_encoder_select="dsputil"
1859 asv2_decoder_select="dsputil"
1860 asv2_encoder_select="dsputil"
1861 atrac1_decoder_select="mdct sinewin"
1862 atrac3_decoder_select="mdct"
1863 avrn_decoder_select="exif"
1864 bink_decoder_select="dsputil hpeldsp"
1865 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1866 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1867 cavs_decoder_select="dsputil golomb h264chroma videodsp"
1868 cllc_decoder_select="dsputil"
1869 comfortnoise_encoder_select="lpc"
1870 cook_decoder_select="dsputil mdct sinewin"
1871 cscd_decoder_select="lzo"
1872 cscd_decoder_suggest="zlib"
1873 dca_decoder_select="mdct"
1874 dirac_decoder_select="dsputil dwt golomb videodsp"
1875 dnxhd_decoder_select="dsputil"
1876 dnxhd_encoder_select="aandcttables dsputil mpegvideoenc"
1877 dvvideo_decoder_select="dsputil"
1878 dvvideo_encoder_select="dsputil"
1879 dxa_decoder_select="zlib"
1880 eac3_decoder_select="ac3_decoder"
1881 eac3_encoder_select="ac3_encoder"
1882 eamad_decoder_select="aandcttables dsputil mpegvideo"
1883 eatgq_decoder_select="aandcttables"
1884 eatqi_decoder_select="aandcttables error_resilience mpegvideo"
1885 exr_decoder_select="zlib"
1886 ffv1_decoder_select="dsputil golomb rangecoder"
1887 ffv1_encoder_select="dsputil rangecoder"
1888 ffvhuff_decoder_select="dsputil"
1889 ffvhuff_encoder_select="dsputil huffman"
1890 flac_decoder_select="golomb"
1891 flac_encoder_select="dsputil golomb lpc"
1892 flashsv_decoder_select="zlib"
1893 flashsv_encoder_select="zlib"
1894 flashsv2_encoder_select="zlib"
1895 flashsv2_decoder_select="zlib"
1896 flv_decoder_select="h263_decoder"
1897 flv_encoder_select="h263_encoder"
1898 fourxm_decoder_select="dsputil"
1899 fraps_decoder_select="dsputil huffman"
1900 g2m_decoder_select="dsputil zlib"
1901 g729_decoder_select="dsputil"
1902 h261_decoder_select="error_resilience mpegvideo"
1903 h261_encoder_select="aandcttables mpegvideoenc"
1904 h263_decoder_select="error_resilience h263_parser h263dsp mpegvideo"
1905 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
1906 h263i_decoder_select="h263_decoder"
1907 h263p_encoder_select="h263_encoder"
1908 h264_decoder_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
1909 h264_decoder_suggest="error_resilience"
1910 hevc_decoder_select="dsputil golomb videodsp"
1911 huffyuv_decoder_select="dsputil"
1912 huffyuv_encoder_select="dsputil huffman"
1913 iac_decoder_select="dsputil fft mdct sinewin"
1914 imc_decoder_select="dsputil fft mdct sinewin"
1915 indeo3_decoder_select="hpeldsp"
1916 interplay_video_decoder_select="hpeldsp"
1917 jpegls_decoder_select="dsputil golomb hpeldsp exif"
1918 jpegls_encoder_select="golomb"
1919 jv_decoder_select="dsputil"
1920 lagarith_decoder_select="dsputil"
1921 ljpeg_encoder_select="aandcttables mpegvideoenc"
1922 loco_decoder_select="golomb"
1923 mdec_decoder_select="dsputil error_resilience mpegvideo"
1924 metasound_decoder_select="lsp mdct sinewin"
1925 mimic_decoder_select="dsputil hpeldsp"
1926 mjpeg_decoder_select="dsputil hpeldsp exif"
1927 mjpegb_decoder_select="dsputil hpeldsp exif"
1928 mjpeg_encoder_select="aandcttables dsputil mpegvideoenc"
1929 mlp_decoder_select="dsputil mlp_parser"
1930 motionpixels_decoder_select="dsputil"
1931 mp1_decoder_select="mpegaudio"
1932 mp1float_decoder_select="mpegaudio"
1933 mp2_decoder_select="mpegaudio"
1934 mp2float_decoder_select="mpegaudio"
1935 mp3_decoder_select="mpegaudio"
1936 mp3adu_decoder_select="mpegaudio"
1937 mp3adufloat_decoder_select="mpegaudio"
1938 mp3float_decoder_select="mpegaudio"
1939 mp3on4_decoder_select="mpegaudio"
1940 mp3on4float_decoder_select="mpegaudio"
1941 mpc7_decoder_select="dsputil mpegaudiodsp"
1942 mpc8_decoder_select="dsputil mpegaudiodsp"
1943 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1944 mpeg_xvmc_decoder_select="mpeg2video_decoder"
1945 mpeg1video_decoder_select="error_resilience mpegvideo"
1946 mpeg1video_encoder_select="aandcttables mpegvideoenc"
1947 mpeg2video_decoder_select="error_resilience mpegvideo"
1948 mpeg2video_encoder_select="aandcttables mpegvideoenc"
1949 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1950 mpeg4_encoder_select="h263_encoder"
1951 msmpeg4v1_decoder_select="h263_decoder"
1952 msmpeg4v2_decoder_select="h263_decoder"
1953 msmpeg4v2_encoder_select="h263_encoder"
1954 msmpeg4v3_decoder_select="h263_decoder"
1955 msmpeg4v3_encoder_select="h263_encoder"
1956 mss2_decoder_select="error_resilience vc1_decoder"
1957 mxpeg_decoder_select="dsputil hpeldsp exif"
1958 nellymoser_decoder_select="mdct sinewin"
1959 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
1960 nuv_decoder_select="dsputil lzo"
1961 png_decoder_select="zlib"
1962 png_encoder_select="dsputil zlib"
1963 prores_decoder_select="dsputil"
1964 prores_encoder_select="dsputil"
1965 qcelp_decoder_select="lsp"
1966 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1967 ra_144_encoder_select="audio_frame_queue lpc"
1968 ralf_decoder_select="golomb"
1969 rtjpeg_decoder_select="dsputil"
1970 rv10_decoder_select="error_resilience h263_decoder h263dsp"
1971 rv10_encoder_select="h263_encoder"
1972 rv20_decoder_select="error_resilience h263_decoder h263dsp"
1973 rv20_encoder_select="h263_encoder"
1974 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
1975 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
1976 shorten_decoder_select="golomb"
1977 sipr_decoder_select="lsp"
1978 snow_decoder_select="dsputil dwt h264qpel hpeldsp rangecoder"
1979 snow_encoder_select="aandcttables dsputil dwt h264qpel hpeldsp mpegvideoenc rangecoder"
1980 sonic_decoder_select="golomb"
1981 sonic_encoder_select="golomb"
1982 sonic_ls_encoder_select="golomb"
1983 sp5x_decoder_select="dsputil hpeldsp exif"
1984 svq1_decoder_select="hpeldsp"
1985 svq1_encoder_select="aandcttables dsputil hpeldsp mpegvideoenc"
1986 svq3_decoder_select="golomb h264chroma h264dsp h264pred h264qpel hpeldsp mpegvideo videodsp"
1987 svq3_decoder_suggest="error_resilience zlib"
1988 tak_decoder_select="dsputil"
1989 theora_decoder_select="vp3_decoder"
1990 tiff_decoder_suggest="zlib"
1991 tiff_encoder_suggest="zlib"
1992 thp_decoder_select="dsputil hpeldsp exif"
1993 truehd_decoder_select="mlp_parser"
1994 truemotion2_decoder_select="dsputil"
1995 truespeech_decoder_select="dsputil"
1996 tscc_decoder_select="zlib"
1997 twinvq_decoder_select="mdct lsp sinewin"
1998 utvideo_decoder_select="dsputil"
1999 utvideo_encoder_select="dsputil huffman"
2000 vble_decoder_select="dsputil"
2001 vc1_decoder_select="error_resilience h263_decoder h264chroma h264qpel"
2002 vc1image_decoder_select="vc1_decoder"
2003 vorbis_decoder_select="mdct"
2004 vorbis_encoder_select="mdct"
2005 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2006 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
2007 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
2008 vp6a_decoder_select="vp6_decoder"
2009 vp6f_decoder_select="vp6_decoder"
2010 vp8_decoder_select="h264pred videodsp"
2011 vp9_decoder_select="videodsp"
2012 webp_decoder_select="vp8_decoder"
2013 wmapro_decoder_select="mdct sinewin"
2014 wmav1_decoder_select="mdct sinewin"
2015 wmav1_encoder_select="mdct sinewin"
2016 wmav2_decoder_select="mdct sinewin"
2017 wmav2_encoder_select="mdct sinewin"
2018 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2019 wmv1_decoder_select="h263_decoder"
2020 wmv1_encoder_select="h263_encoder"
2021 wmv2_decoder_select="h263_decoder videodsp"
2022 wmv2_encoder_select="h263_encoder"
2023 wmv3_decoder_select="vc1_decoder"
2024 wmv3image_decoder_select="wmv3_decoder"
2025 zerocodec_decoder_select="zlib"
2026 zlib_decoder_select="zlib"
2027 zlib_encoder_select="zlib"
2028 zmbv_decoder_select="zlib"
2029 zmbv_encoder_select="zlib"
2030
2031 # hardware accelerators
2032 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
2033 dxva2_deps="dxva2api_h"
2034 vaapi_deps="va_va_h"
2035 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
2036 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2037 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
2038
2039 h263_vaapi_hwaccel_deps="vaapi"
2040 h263_vaapi_hwaccel_select="h263_decoder"
2041 h263_vdpau_hwaccel_deps="vdpau"
2042 h263_vdpau_hwaccel_select="h263_decoder"
2043 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
2044 h264_dxva2_hwaccel_deps="dxva2"
2045 h264_dxva2_hwaccel_select="h264_decoder"
2046 h264_vaapi_hwaccel_deps="vaapi"
2047 h264_vaapi_hwaccel_select="h264_decoder"
2048 h264_vda_decoder_deps="vda"
2049 h264_vda_decoder_select="h264_decoder"
2050 h264_vda_hwaccel_deps="vda"
2051 h264_vda_hwaccel_select="h264_decoder"
2052 h264_vdpau_decoder_deps="vdpau"
2053 h264_vdpau_decoder_select="h264_decoder"
2054 h264_vdpau_hwaccel_deps="vdpau"
2055 h264_vdpau_hwaccel_select="h264_decoder"
2056 mpeg_vdpau_decoder_deps="vdpau"
2057 mpeg_vdpau_decoder_select="mpeg2video_decoder"
2058 mpeg1_vdpau_decoder_deps="vdpau"
2059 mpeg1_vdpau_decoder_select="mpeg1video_decoder"
2060 mpeg1_vdpau_hwaccel_deps="vdpau"
2061 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2062 mpeg2_crystalhd_decoder_select="crystalhd"
2063 mpeg2_dxva2_hwaccel_deps="dxva2"
2064 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2065 mpeg2_vaapi_hwaccel_deps="vaapi"
2066 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2067 mpeg2_vdpau_hwaccel_deps="vdpau"
2068 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2069 mpeg4_crystalhd_decoder_select="crystalhd"
2070 mpeg4_vaapi_hwaccel_deps="vaapi"
2071 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2072 mpeg4_vdpau_decoder_deps="vdpau"
2073 mpeg4_vdpau_decoder_select="mpeg4_decoder"
2074 mpeg4_vdpau_hwaccel_deps="vdpau"
2075 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2076 msmpeg4_crystalhd_decoder_select="crystalhd"
2077 vc1_crystalhd_decoder_select="crystalhd"
2078 vc1_dxva2_hwaccel_deps="dxva2"
2079 vc1_dxva2_hwaccel_select="vc1_decoder"
2080 vc1_vaapi_hwaccel_deps="vaapi"
2081 vc1_vaapi_hwaccel_select="vc1_decoder"
2082 vc1_vdpau_decoder_deps="vdpau"
2083 vc1_vdpau_decoder_select="vc1_decoder"
2084 vc1_vdpau_hwaccel_deps="vdpau"
2085 vc1_vdpau_hwaccel_select="vc1_decoder"
2086 wmv3_crystalhd_decoder_select="crystalhd"
2087 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2088 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2089 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
2090 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2091
2092 # parsers
2093 h264_parser_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
2094 hevc_parser_select="hevc_decoder"
2095 mpeg4video_parser_select="error_resilience mpegvideo"
2096 mpegvideo_parser_select="error_resilience mpegvideo"
2097 vc1_parser_select="mpegvideo"
2098
2099 # external libraries
2100 libaacplus_encoder_deps="libaacplus"
2101 libcelt_decoder_deps="libcelt"
2102 libfaac_encoder_deps="libfaac"
2103 libfaac_encoder_select="audio_frame_queue"
2104 libfdk_aac_decoder_deps="libfdk_aac"
2105 libfdk_aac_encoder_deps="libfdk_aac"
2106 libfdk_aac_encoder_select="audio_frame_queue"
2107 libgme_demuxer_deps="libgme"
2108 libgsm_decoder_deps="libgsm"
2109 libgsm_encoder_deps="libgsm"
2110 libgsm_ms_decoder_deps="libgsm"
2111 libgsm_ms_encoder_deps="libgsm"
2112 libilbc_decoder_deps="libilbc"
2113 libilbc_encoder_deps="libilbc"
2114 libmodplug_demuxer_deps="libmodplug"
2115 libmp3lame_encoder_deps="libmp3lame"
2116 libmp3lame_encoder_select="audio_frame_queue"
2117 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2118 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2119 libopencore_amrnb_encoder_select="audio_frame_queue"
2120 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2121 libopenjpeg_decoder_deps="libopenjpeg"
2122 libopenjpeg_encoder_deps="libopenjpeg"
2123 libopus_decoder_deps="libopus"
2124 libopus_encoder_deps="libopus"
2125 libopus_encoder_select="audio_frame_queue"
2126 libquvi_demuxer_deps="libquvi"
2127 libschroedinger_decoder_deps="libschroedinger"
2128 libschroedinger_encoder_deps="libschroedinger"
2129 libshine_encoder_deps="libshine"
2130 libshine_encoder_select="audio_frame_queue"
2131 libspeex_decoder_deps="libspeex"
2132 libspeex_encoder_deps="libspeex"
2133 libspeex_encoder_select="audio_frame_queue"
2134 libstagefright_h264_decoder_deps="libstagefright_h264"
2135 libtheora_encoder_deps="libtheora"
2136 libtwolame_encoder_deps="libtwolame"
2137 libvo_aacenc_encoder_deps="libvo_aacenc"
2138 libvo_aacenc_encoder_select="audio_frame_queue"
2139 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2140 libvorbis_decoder_deps="libvorbis"
2141 libvorbis_encoder_deps="libvorbis"
2142 libvorbis_encoder_select="audio_frame_queue"
2143 libvpx_vp8_decoder_deps="libvpx"
2144 libvpx_vp8_encoder_deps="libvpx"
2145 libvpx_vp9_decoder_deps="libvpx"
2146 libvpx_vp9_encoder_deps="libvpx"
2147 libwavpack_encoder_deps="libwavpack"
2148 libx264_encoder_deps="libx264"
2149 libx264rgb_encoder_deps="libx264"
2150 libxavs_encoder_deps="libxavs"
2151 libxvid_encoder_deps="libxvid"
2152 libutvideo_decoder_deps="libutvideo"
2153 libutvideo_encoder_deps="libutvideo"
2154 libzvbi_teletext_decoder_deps="libzvbi"
2155
2156 # demuxers / muxers
2157 ac3_demuxer_select="ac3_parser"
2158 asf_demuxer_select="riffdec"
2159 asf_muxer_select="riffenc"
2160 asf_stream_muxer_select="asf_muxer"
2161 avi_demuxer_select="riffdec"
2162 avi_muxer_select="riffenc"
2163 avisynth_demuxer_deps="avisynth"
2164 avisynth_demuxer_select="riffdec"
2165 caf_demuxer_select="riffdec"
2166 dirac_demuxer_select="dirac_parser"
2167 dts_demuxer_select="dca_parser"
2168 dtshd_demuxer_select="dca_parser"
2169 dxa_demuxer_select="riffdec"
2170 eac3_demuxer_select="ac3_parser"
2171 f4v_muxer_select="mov_muxer"
2172 flac_demuxer_select="flac_parser"
2173 hds_muxer_select="flv_muxer"
2174 hls_muxer_select="mpegts_muxer"
2175 ipod_muxer_select="mov_muxer"
2176 ismv_muxer_select="mov_muxer"
2177 libnut_demuxer_deps="libnut"
2178 libnut_muxer_deps="libnut"
2179 matroska_audio_muxer_select="matroska_muxer"
2180 matroska_demuxer_select="riffdec"
2181 matroska_demuxer_suggest="bzlib lzo zlib"
2182 matroska_muxer_select="riffenc"
2183 mmf_muxer_select="riffenc"
2184 mov_demuxer_select="riffdec"
2185 mov_demuxer_suggest="zlib"
2186 mov_muxer_select="riffenc rtpenc_chain"
2187 mp3_demuxer_select="mpegaudio_parser"
2188 mp4_muxer_select="mov_muxer"
2189 mpegts_muxer_select="adts_muxer latm_muxer"
2190 mpegtsraw_demuxer_select="mpegts_demuxer"
2191 mxf_d10_muxer_select="mxf_muxer"
2192 nut_muxer_select="riffenc"
2193 nuv_demuxer_select="riffdec"
2194 ogg_demuxer_select="golomb"
2195 psp_muxer_select="mov_muxer"
2196 rtp_demuxer_select="sdp_demuxer"
2197 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
2198 rtsp_demuxer_select="http_protocol rtpdec"
2199 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2200 sap_demuxer_select="sdp_demuxer"
2201 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2202 sdp_demuxer_select="rtpdec"
2203 smoothstreaming_muxer_select="ismv_muxer"
2204 spdif_muxer_select="aac_parser"
2205 tak_demuxer_select="tak_parser"
2206 tg2_muxer_select="mov_muxer"
2207 tgp_muxer_select="mov_muxer"
2208 vobsub_demuxer_select="mpegps_demuxer"
2209 w64_demuxer_select="wav_demuxer"
2210 w64_muxer_select="wav_muxer"
2211 wav_demuxer_select="riffdec"
2212 wav_muxer_select="riffenc"
2213 webm_muxer_select="riffenc"
2214 wtv_demuxer_select="riffdec"
2215 xmv_demuxer_select="riffdec"
2216 xwma_demuxer_select="riffdec"
2217
2218 # indevs / outdevs
2219 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2220 alsa_outdev_deps="alsa_asoundlib_h"
2221 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2222 caca_outdev_deps="libcaca"
2223 dshow_indev_deps="IBaseFilter"
2224 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
2225 dv1394_indev_deps="dv1394"
2226 dv1394_indev_select="dv_demuxer"
2227 fbdev_indev_deps="linux_fb_h"
2228 fbdev_outdev_deps="linux_fb_h"
2229 iec61883_indev_deps="libiec61883"
2230 jack_indev_deps="jack_jack_h sem_timedwait"
2231 lavfi_indev_deps="avfilter"
2232 libcdio_indev_deps="libcdio"
2233 libdc1394_indev_deps="libdc1394"
2234 libv4l2_indev_deps="libv4l2"
2235 openal_indev_deps="openal"
2236 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2237 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2238 pulse_indev_deps="libpulse"
2239 pulse_outdev_deps="libpulse"
2240 sdl_outdev_deps="sdl"
2241 sndio_indev_deps="sndio_h"
2242 sndio_outdev_deps="sndio_h"
2243 v4l_indev_deps="linux_videodev_h"
2244 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2245 v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
2246 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2247 vfwcap_indev_extralibs="-lavicap32"
2248 xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
2249 xv_outdev_extralibs="-lXv -lX11 -lXext"
2250 x11grab_indev_deps="x11grab"
2251
2252 # protocols
2253 bluray_protocol_deps="libbluray"
2254 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2255 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
2256 ffrtmpcrypt_protocol_select="tcp_protocol"
2257 ffrtmphttp_protocol_deps="!librtmp_protocol"
2258 ffrtmphttp_protocol_select="http_protocol"
2259 ftp_protocol_select="tcp_protocol"
2260 gopher_protocol_select="network"
2261 httpproxy_protocol_select="tcp_protocol"
2262 http_protocol_select="tcp_protocol"
2263 https_protocol_select="tls_protocol"
2264 librtmp_protocol_deps="librtmp"
2265 librtmpe_protocol_deps="librtmp"
2266 librtmps_protocol_deps="librtmp"
2267 librtmpt_protocol_deps="librtmp"
2268 librtmpte_protocol_deps="librtmp"
2269 libssh_protocol_deps="libssh"
2270 mmsh_protocol_select="http_protocol"
2271 mmst_protocol_select="network"
2272 rtmp_protocol_deps="!librtmp_protocol"
2273 rtmp_protocol_select="tcp_protocol"
2274 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2275 rtmps_protocol_deps="!librtmp_protocol"
2276 rtmps_protocol_select="tls_protocol"
2277 rtmpt_protocol_select="ffrtmphttp_protocol"
2278 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2279 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2280 rtp_protocol_select="udp_protocol"
2281 sctp_protocol_deps="struct_sctp_event_subscribe"
2282 sctp_protocol_select="network"
2283 srtp_protocol_select="rtp_protocol"
2284 tcp_protocol_select="network"
2285 tls_protocol_deps_any="openssl gnutls"
2286 tls_protocol_select="tcp_protocol"
2287 udp_protocol_select="network"
2288 unix_protocol_deps="sys_un_h"
2289 unix_protocol_select="network"
2290
2291 # filters
2292 aconvert_filter_deps="swresample"
2293 amovie_filter_deps="avcodec avformat"
2294 aresample_filter_deps="swresample"
2295 ass_filter_deps="libass"
2296 asyncts_filter_deps="avresample"
2297 atempo_filter_deps="avcodec"
2298 atempo_filter_select="rdft"
2299 azmq_filter_deps="libzmq"
2300 blackframe_filter_deps="gpl"
2301 boxblur_filter_deps="gpl"
2302 colormatrix_filter_deps="gpl"
2303 cropdetect_filter_deps="gpl"
2304 dctdnoiz_filter_deps="avcodec"
2305 dctdnoiz_filter_select="fft"
2306 delogo_filter_deps="gpl"
2307 deshake_filter_deps="avcodec"
2308 deshake_filter_select="dsputil"
2309 drawtext_filter_deps="libfreetype"
2310 ebur128_filter_deps="gpl"
2311 flite_filter_deps="libflite"
2312 frei0r_filter_deps="frei0r dlopen"
2313 frei0r_filter_extralibs='$ldl'
2314 frei0r_src_filter_deps="frei0r dlopen"
2315 frei0r_src_filter_extralibs='$ldl'
2316 geq_filter_deps="gpl"
2317 histeq_filter_deps="gpl"
2318 hqdn3d_filter_deps="gpl"
2319 interlace_filter_deps="gpl"
2320 kerndeint_filter_deps="gpl"
2321 ladspa_filter_deps="ladspa dlopen"
2322 mcdeint_filter_deps="avcodec gpl"
2323 movie_filter_deps="avcodec avformat"
2324 mp_filter_deps="gpl avcodec swscale inline_asm"
2325 mpdecimate_filter_deps="gpl avcodec"
2326 mptestsrc_filter_deps="gpl"
2327 negate_filter_deps="lut_filter"
2328 perspective_filter_deps="gpl"
2329 resample_filter_deps="avresample"
2330 ocv_filter_deps="libopencv"
2331 owdenoise_filter_deps="gpl"
2332 pan_filter_deps="swresample"
2333 phase_filter_deps="gpl"
2334 pp_filter_deps="gpl postproc"
2335 pullup_filter_deps="gpl"
2336 removelogo_filter_deps="avcodec avformat swscale"
2337 sab_filter_deps="gpl swscale"
2338 scale_filter_deps="swscale"
2339 smartblur_filter_deps="gpl swscale"
2340 showspectrum_filter_deps="avcodec"
2341 showspectrum_filter_select="rdft"
2342 spp_filter_deps="gpl avcodec"
2343 spp_filter_select="fft"
2344 stereo3d_filter_deps="gpl"
2345 subtitles_filter_deps="avformat avcodec libass"
2346 super2xsai_filter_deps="gpl"
2347 tinterlace_filter_deps="gpl"
2348 vidstabdetect_filter_deps="libvidstab"
2349 vidstabtransform_filter_deps="libvidstab"
2350 yadif_filter_deps="gpl"
2351 pixfmts_super2xsai_test_deps="super2xsai_filter"
2352 tinterlace_merge_test_deps="tinterlace_filter"
2353 tinterlace_pad_test_deps="tinterlace_filter"
2354 zmq_filter_deps="libzmq"
2355
2356 # examples
2357 decoding_encoding_example_deps="avcodec avutil"
2358 demuxing_decoding_example_deps="avcodec avformat avutil"
2359 filtering_audio_example_deps="avfilter avcodec avformat avutil"
2360 filtering_video_example_deps="avfilter avcodec avformat avutil"
2361 metadata_example_deps="avformat avutil"
2362 muxing_example_deps="avcodec avformat avutil swscale"
2363 resampling_audio_example_deps="avutil swresample"
2364 scaling_video_example_deps="avutil swscale"
2365 transcode_aac_example_deps="avcodec avformat swresample"
2366
2367 # libraries
2368 avcodec_deps="avutil"
2369 avdevice_deps="avutil avcodec avformat"
2370 avfilter_deps="avutil"
2371 avformat_deps="avutil avcodec"
2372 avresample_deps="avutil"
2373 postproc_deps="avutil gpl"
2374 swscale_deps="avutil"
2375
2376 # programs
2377 ffmpeg_deps="avcodec avfilter avformat swresample"
2378 ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
2379                null_filter
2380                setpts_filter trim_filter"
2381 ffplay_deps="avcodec avformat swscale swresample sdl"
2382 ffplay_select="rdft crop_filter"
2383 ffprobe_deps="avcodec avformat"
2384 ffserver_deps="avformat fork sarestart"
2385 ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
2386 ffserver_extralibs='$ldl'
2387
2388 # documentation
2389 podpages_deps="perl"
2390 manpages_deps="perl pod2man"
2391 htmlpages_deps="perl texi2html"
2392 txtpages_deps="perl makeinfo"
2393 doc_deps_any="manpages htmlpages podpages txtpages"
2394
2395 # default parameters
2396
2397 logfile="config.log"
2398
2399 # installation paths
2400 prefix_default="/usr/local"
2401 bindir_default='${prefix}/bin'
2402 datadir_default='${prefix}/share/ffmpeg'
2403 docdir_default='${prefix}/share/doc/ffmpeg'
2404 incdir_default='${prefix}/include'
2405 libdir_default='${prefix}/lib'
2406 mandir_default='${prefix}/share/man'
2407 shlibdir_default="$libdir_default"
2408
2409 # toolchain
2410 ar_default="ar"
2411 cc_default="gcc"
2412 cxx_default="g++"
2413 host_cc_default="gcc"
2414 cp_f="cp -f"
2415 install="install"
2416 ln_s="ln -s -f"
2417 nm_default="nm -g"
2418 objformat="elf"
2419 pkg_config_default=pkg-config
2420 ranlib="ranlib"
2421 strip_default="strip"
2422 yasmexe_default="yasm"
2423 windres_default="windres"
2424
2425 nogas=":"
2426
2427 # machine
2428 arch_default=$(uname -m)
2429 cpu="generic"
2430
2431 # OS
2432 target_os_default=$(tolower $(uname -s))
2433 host_os=$target_os_default
2434
2435 # configurable options
2436 enable $PROGRAM_LIST
2437 enable $DOCUMENT_LIST
2438 enable $EXAMPLE_LIST
2439 enable $(filter_out avresample $LIBRARY_LIST)
2440 enable stripping
2441
2442 enable asm
2443 enable debug
2444 enable doc
2445 enable optimizations
2446 enable runtime_cpudetect
2447 enable safe_bitstream_reader
2448 enable static
2449 enable swscale_alpha
2450
2451 # Enable hwaccels by default.
2452 enable dxva2 vaapi vdpau
2453
2454 # build settings
2455 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2456 LIBPREF="lib"
2457 LIBSUF=".a"
2458 FULLNAME='$(NAME)$(BUILDSUF)'
2459 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2460 SLIBPREF="lib"
2461 SLIBSUF=".so"
2462 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2463 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2464 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2465 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2466 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2467 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2468
2469 asflags_filter=echo
2470 cflags_filter=echo
2471 ldflags_filter=echo
2472
2473 AS_C='-c'
2474 AS_O='-o $@'
2475 CC_C='-c'
2476 CC_E='-E -o $@'
2477 CC_O='-o $@'
2478 CXX_C='-c'
2479 CXX_O='-o $@'
2480 LD_O='-o $@'
2481 LD_LIB='-l%'
2482 LD_PATH='-L'
2483 HOSTCC_C='-c'
2484 HOSTCC_E='-E -o $@'
2485 HOSTCC_O='-o $@'
2486 HOSTLD_O='-o $@'
2487
2488 host_cflags='-O3'
2489 host_cppflags='-D_ISOC99_SOURCE'
2490 host_libs='-lm'
2491 host_cflags_filter=echo
2492 host_ldflags_filter=echo
2493
2494 target_path='$(CURDIR)'
2495
2496 # since the object filename is not given with the -MM flag, the compiler
2497 # is only able to print the basename, and we must add the path ourselves
2498 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2499 DEPFLAGS='-MM'
2500
2501 # find source path
2502 if test -f configure; then
2503     source_path=.
2504 else
2505     source_path=$(cd $(dirname "$0"); pwd)
2506     echo "$source_path" | grep -q '[[:blank:]]' &&
2507         die "Out of tree builds are impossible with whitespace in source path."
2508     test -e "$source_path/config.h" &&
2509         die "Out of tree builds are impossible with config.h in source dir."
2510 fi
2511
2512 for v in "$@"; do
2513     r=${v#*=}
2514     l=${v%"$r"}
2515     r=$(sh_quote "$r")
2516     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2517 done
2518
2519 find_things(){
2520     thing=$1
2521     pattern=$2
2522     file=$source_path/$3
2523     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2524 }
2525
2526 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2527 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2528 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2529 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2530 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2531 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2532 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2533 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2534 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2535 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2536 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2537
2538 ALL_COMPONENTS="
2539     $BSF_LIST
2540     $DECODER_LIST
2541     $DEMUXER_LIST
2542     $ENCODER_LIST
2543     $FILTER_LIST
2544     $HWACCEL_LIST
2545     $INDEV_LIST
2546     $MUXER_LIST
2547     $OUTDEV_LIST
2548     $PARSER_LIST
2549     $PROTOCOL_LIST
2550 "
2551
2552 for n in $COMPONENT_LIST; do
2553     v=$(toupper ${n%s})_LIST
2554     eval enable \$$v
2555     eval ${n}_if_any="\$$v"
2556 done
2557
2558 enable $ARCH_EXT_LIST
2559
2560 die_unknown(){
2561     echo "Unknown option \"$1\"."
2562     echo "See $0 --help for available options."
2563     exit 1
2564 }
2565
2566 print_3_columns() {
2567     cat | tr ' ' '\n' | sort | pr -r -3 -t
2568 }
2569
2570 show_list() {
2571     suffix=_$1
2572     shift
2573     echo $* | sed s/$suffix//g | print_3_columns
2574     exit 0
2575 }
2576
2577 rand_list(){
2578     IFS=', '
2579     set -- $*
2580     unset IFS
2581     for thing; do
2582         comp=${thing%:*}
2583         prob=${thing#$comp}
2584         prob=${prob#:}
2585         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2586         echo "prob ${prob:-0.5}"
2587         printf '%s\n' $comp
2588     done
2589 }
2590
2591 do_random(){
2592     action=$1
2593     shift
2594     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2595     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2596 }
2597
2598 for opt do
2599     optval="${opt#*=}"
2600     case "$opt" in
2601         --extra-ldflags=*)
2602             add_ldflags $optval
2603         ;;
2604         --extra-libs=*)
2605             add_extralibs $optval
2606         ;;
2607         --disable-devices)
2608             disable $INDEV_LIST $OUTDEV_LIST
2609         ;;
2610         --enable-debug=*)
2611             debuglevel="$optval"
2612         ;;
2613         --disable-programs)
2614             disable $PROGRAM_LIST
2615         ;;
2616         --disable-everything)
2617             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2618         ;;
2619         --disable-all)
2620             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2621             disable $LIBRARY_LIST $PROGRAM_LIST doc
2622         ;;
2623         --enable-random|--disable-random)
2624             action=${opt%%-random}
2625             do_random ${action#--} $COMPONENT_LIST
2626         ;;
2627         --enable-random=*|--disable-random=*)
2628             action=${opt%%-random=*}
2629             do_random ${action#--} $optval
2630         ;;
2631         --enable-*=*|--disable-*=*)
2632             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2633             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2634             eval list=\$$(toupper $thing)_LIST
2635             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2636             list=$(filter "$name" $list)
2637             [ "$list" = "" ] && warn "Option $opt did not match anything"
2638             $action $list
2639         ;;
2640         --enable-?*|--disable-?*)
2641             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2642             if is_in $option $COMPONENT_LIST; then
2643                 test $action = disable && action=unset
2644                 eval $action \$$(toupper ${option%s})_LIST
2645             elif is_in $option $CMDLINE_SELECT; then
2646                 $action $option
2647             else
2648                 die_unknown $opt
2649             fi
2650         ;;
2651         --list-*)
2652             NAME="${opt#--list-}"
2653             is_in $NAME $COMPONENT_LIST || die_unknown $opt
2654             NAME=${NAME%s}
2655             eval show_list $NAME \$$(toupper $NAME)_LIST
2656         ;;
2657         --help|-h) show_help
2658         ;;
2659         --fatal-warnings) enable fatal_warnings
2660         ;;
2661         *)
2662             optname="${opt%%=*}"
2663             optname="${optname#--}"
2664             optname=$(echo "$optname" | sed 's/-/_/g')
2665             if is_in $optname $CMDLINE_SET; then
2666                 eval $optname='$optval'
2667             elif is_in $optname $CMDLINE_APPEND; then
2668                 append $optname "$optval"
2669             else
2670                 die_unknown $opt
2671             fi
2672         ;;
2673     esac
2674 done
2675
2676 disabled logging && logfile=/dev/null
2677
2678 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2679 set >> $logfile
2680
2681 test -n "$cross_prefix" && enable cross_compile
2682
2683 if enabled cross_compile; then
2684     test -n "$arch" && test -n "$target_os" ||
2685         die "Must specify target arch and OS when cross-compiling"
2686 fi
2687
2688 ar_default="${cross_prefix}${ar_default}"
2689 cc_default="${cross_prefix}${cc_default}"
2690 cxx_default="${cross_prefix}${cxx_default}"
2691 nm_default="${cross_prefix}${nm_default}"
2692 pkg_config_default="${cross_prefix}${pkg_config_default}"
2693 ranlib="${cross_prefix}${ranlib}"
2694 strip_default="${cross_prefix}${strip_default}"
2695 windres_default="${cross_prefix}${windres_default}"
2696
2697 sysinclude_default="${sysroot}/usr/include"
2698
2699 test -n "$valgrind" && toolchain="valgrind-memcheck"
2700
2701 case "$toolchain" in
2702     clang-asan)
2703         cc_default="clang"
2704         add_cflags  -fsanitize=address
2705         add_ldflags -fsanitize=address
2706     ;;
2707     clang-tsan)
2708         cc_default="clang"
2709         add_cflags  -fsanitize=thread -pie
2710         add_ldflags -fsanitize=thread -pie
2711     ;;
2712     gcc-asan)
2713         cc_default="gcc"
2714         add_cflags  -fsanitize=address
2715         add_ldflags -fsanitize=address
2716     ;;
2717     gcc-tsan)
2718         cc_default="gcc"
2719         add_cflags  -fsanitize=thread -pie -fPIC
2720         add_ldflags -fsanitize=thread -pie -fPIC
2721     ;;
2722     valgrind-massif)
2723         target_exec_default=${valgrind:-"valgrind"}
2724         target_exec_args="--tool=massif --alloc-fn=av_malloc --alloc-fn=av_mallocz --alloc-fn=av_calloc --alloc-fn=av_fast_padded_malloc --alloc-fn=av_fast_malloc --alloc-fn=av_realloc_f --alloc-fn=av_fast_realloc --alloc-fn=av_realloc"
2725     ;;
2726     valgrind-memcheck)
2727         target_exec_default=${valgrind:-"valgrind"}
2728         target_exec_args="--error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions=$source_path/tests/fate-valgrind.supp"
2729     ;;
2730     msvc)
2731         # Check whether the current MSVC version needs the C99 converter.
2732         # From MSVC 2013 (compiler major version 18) onwards, it does actually
2733         # support enough of C99 to build ffmpeg. Default to the new
2734         # behaviour if the regexp was unable to match anything, since this
2735         # successfully parses the version number of existing supported
2736         # versions that require the converter (MSVC 2010 and 2012).
2737         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2738         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
2739             cc_default="cl"
2740         else
2741             cc_default="c99wrap cl"
2742         fi
2743         ld_default="link"
2744         nm_default="dumpbin -symbols"
2745         ar_default="lib"
2746         target_os_default="win32"
2747         # Use a relative path for TMPDIR. This makes sure all the
2748         # ffconf temp files are written with a relative path, avoiding
2749         # issues with msys/win32 path conversion for MSVC parameters
2750         # such as -Fo<file> or -out:<file>.
2751         TMPDIR=.
2752     ;;
2753     icl)
2754         cc_default="icl"
2755         ld_default="xilink"
2756         nm_default="dumpbin -symbols"
2757         ar_default="xilib"
2758         target_os_default="win32"
2759         TMPDIR=.
2760     ;;
2761     gcov)
2762         add_cflags  -fprofile-arcs -ftest-coverage
2763         add_ldflags -fprofile-arcs -ftest-coverage
2764     ;;
2765     hardened)
2766         add_cflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all
2767         add_ldflags -Wl,-z,relro -Wl,-z,now
2768     ;;
2769     ?*)
2770         die "Unknown toolchain $toolchain"
2771     ;;
2772 esac
2773
2774 set_default arch cc cxx pkg_config strip sysinclude target_exec target_os yasmexe
2775 enabled cross_compile || host_cc_default=$cc
2776 set_default host_cc
2777
2778 if ! $pkg_config --version >/dev/null 2>&1; then
2779     warn "$pkg_config not found, library detection may fail."
2780     pkg_config=false
2781 fi
2782
2783 exesuf() {
2784     case $1 in
2785         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2786     esac
2787 }
2788
2789 EXESUF=$(exesuf $target_os)
2790 HOSTEXESUF=$(exesuf $host_os)
2791
2792 # set temporary file name
2793 : ${TMPDIR:=$TEMPDIR}
2794 : ${TMPDIR:=$TMP}
2795 : ${TMPDIR:=/tmp}
2796
2797 if [ -n "$tempprefix" ] ; then
2798     mktemp(){
2799         echo $tempprefix.${HOSTNAME}.${UID}
2800     }
2801 elif ! check_cmd mktemp -u XXXXXX; then
2802     # simple replacement for missing mktemp
2803     # NOT SAFE FOR GENERAL USE
2804     mktemp(){
2805         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2806     }
2807 fi
2808
2809 tmpfile(){
2810     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2811         (set -C; exec > $tmp) 2>/dev/null ||
2812         die "Unable to create temporary file in $TMPDIR."
2813     append TMPFILES $tmp
2814     eval $1=$tmp
2815 }
2816
2817 trap 'rm -f -- $TMPFILES' EXIT
2818
2819 tmpfile TMPASM .asm
2820 tmpfile TMPC   .c
2821 tmpfile TMPCPP .cpp
2822 tmpfile TMPE   $EXESUF
2823 tmpfile TMPH   .h
2824 tmpfile TMPO   .o
2825 tmpfile TMPS   .S
2826 tmpfile TMPSH  .sh
2827 tmpfile TMPV   .ver
2828
2829 unset -f mktemp
2830
2831 chmod +x $TMPE
2832
2833 # make sure we can execute files in $TMPDIR
2834 cat > $TMPSH 2>> $logfile <<EOF
2835 #! /bin/sh
2836 EOF
2837 chmod +x $TMPSH >> $logfile 2>&1
2838 if ! $TMPSH >> $logfile 2>&1; then
2839     cat <<EOF
2840 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2841 variable to another directory and make sure that it is not mounted noexec.
2842 EOF
2843     die "Sanity test failed."
2844 fi
2845
2846 ccc_flags(){
2847     for flag; do
2848         case $flag in
2849             -std=c99)           echo -c99                       ;;
2850             -mcpu=*)            echo -arch ${flag#*=}           ;;
2851             -mieee)             echo -ieee                      ;;
2852             -O*|-fast)          echo $flag                      ;;
2853             -fno-math-errno)    echo -assume nomath_errno       ;;
2854             -g)                 echo -g3                        ;;
2855             -Wall)              echo -msg_enable level2         ;;
2856             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
2857             -Wl,*)              echo $flag                      ;;
2858             -f*|-W*)                                            ;;
2859             *)                  echo $flag                      ;;
2860         esac
2861    done
2862 }
2863
2864 cparser_flags(){
2865     for flag; do
2866         case $flag in
2867             -Wno-switch)             echo -Wno-switch-enum ;;
2868             -Wno-format-zero-length) ;;
2869             -Wdisabled-optimization) ;;
2870             -Wno-pointer-sign)       echo -Wno-other ;;
2871             *)                       echo $flag ;;
2872         esac
2873     done
2874 }
2875
2876 msvc_common_flags(){
2877     for flag; do
2878         case $flag in
2879             # In addition to specifying certain flags under the compiler
2880             # specific filters, they must be specified here as well or else the
2881             # generic catch all at the bottom will print the original flag.
2882             -Wall)                ;;
2883             -std=c99)             ;;
2884             # Common flags
2885             -fomit-frame-pointer) ;;
2886             -g)                   echo -Z7 ;;
2887             -fno-math-errno)      ;;
2888             -fno-common)          ;;
2889             -fno-signed-zeros)    ;;
2890             -fPIC)                ;;
2891             -mthumb)              ;;
2892             -march=*)             ;;
2893             -lz)                  echo zlib.lib ;;
2894             -lavifil32)           echo vfw32.lib ;;
2895             -lavicap32)           echo vfw32.lib user32.lib ;;
2896             -l*)                  echo ${flag#-l}.lib ;;
2897             *)                    echo $flag ;;
2898         esac
2899     done
2900 }
2901
2902 msvc_flags(){
2903     msvc_common_flags "$@"
2904     for flag; do
2905         case $flag in
2906             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
2907                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2908                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2909                                        -wd4554 \
2910                                        -wd4273 ;;
2911         esac
2912     done
2913 }
2914
2915 icl_flags(){
2916     msvc_common_flags "$@"
2917     for flag; do
2918         case $flag in
2919             # Despite what Intel's documentation says -Wall, which is supported
2920             # on Windows, does enable remarks so disable them here.
2921             -Wall)                echo $flag -Qdiag-disable:remark ;;
2922             -std=c99)             echo -Qstd=c99 ;;
2923         esac
2924     done
2925 }
2926
2927 pgi_flags(){
2928     for flag; do
2929         case $flag in
2930             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
2931             -fomit-frame-pointer) echo -Mnoframe ;;
2932             -g)                   echo -gopt ;;
2933             *)                    echo $flag ;;
2934         esac
2935     done
2936 }
2937
2938 suncc_flags(){
2939     for flag; do
2940         case $flag in
2941             -march=*|-mcpu=*)
2942                 case "${flag#*=}" in
2943                     native)                   echo -xtarget=native       ;;
2944                     v9|niagara)               echo -xarch=sparc          ;;
2945                     ultrasparc)               echo -xarch=sparcvis       ;;
2946                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2947                     i586|pentium)             echo -xchip=pentium        ;;
2948                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2949                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2950                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2951                     pentium4*)          echo -xtarget=pentium4           ;;
2952                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2953                     *-sse3)             echo -xarch=sse3                 ;;
2954                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
2955                     corei7)           echo -xarch=sse4_2 -xchip=nehalem  ;;
2956                     corei7-avx)       echo -xarch=avx -xchip=sandybridge ;;
2957                     amdfam10|barcelona)        echo -xtarget=barcelona   ;;
2958                     bdver*)                    echo -xarch=avx           ;;
2959                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
2960                     k8|opteron|athlon64|athlon-fx)
2961                                                echo -xarch=sse2a         ;;
2962                     athlon*)                   echo -xarch=pentium_proa  ;;
2963                 esac
2964                 ;;
2965             -std=c99)             echo -xc99              ;;
2966             -fomit-frame-pointer) echo -xregs=frameptr    ;;
2967             -fPIC)                echo -KPIC -xcode=pic32 ;;
2968             -W*,*)                echo $flag              ;;
2969             -f*-*|-W*|-mimpure-text)                      ;;
2970             -shared)              echo -G                 ;;
2971             *)                    echo $flag              ;;
2972         esac
2973     done
2974 }
2975
2976 tms470_flags(){
2977     for flag; do
2978         case $flag in
2979             -march=*|-mcpu=*)
2980                 case "${flag#*=}" in
2981                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
2982                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
2983                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
2984                     armv6*|arm11*)          echo -mv=6   ;;
2985                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2986                                             echo -mv=5e  ;;
2987                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2988                 esac
2989                 ;;
2990             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2991             -mfpu=vfp)      echo --float_support=vfpv2        ;;
2992             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2993             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
2994             -msoft-float)   echo --float_support=vfplib       ;;
2995             -O[0-3]|-mf=*)  echo $flag                        ;;
2996             -g)             echo -g -mn                       ;;
2997             -pds=*)         echo $flag                        ;;
2998             -D*|-I*)        echo $flag                        ;;
2999             --gcc|--abi=*)  echo $flag                        ;;
3000             -me)            echo $flag                        ;;
3001         esac
3002     done
3003 }
3004
3005 probe_cc(){
3006     pfx=$1
3007     _cc=$2
3008
3009     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3010     unset _ld_o _ldflags _ld_lib _ld_path
3011     unset _depflags _DEPCMD _DEPFLAGS
3012     _flags_filter=echo
3013
3014     if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
3015         true # no-op to avoid reading stdin in following checks
3016     elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3017         _type=llvm_gcc
3018         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
3019         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
3020         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3021         _cflags_speed='-O3'
3022         _cflags_size='-Os'
3023     elif $_cc -v 2>&1 | grep -qi ^gcc; then
3024         _type=gcc
3025         gcc_version=$($_cc --version | head -n1)
3026         gcc_basever=$($_cc -dumpversion)
3027         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3028         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3029         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3030         if ! $_cc -dumpversion | grep -q '^2\.'; then
3031             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3032         fi
3033         _cflags_speed='-O3'
3034         _cflags_size='-Os'
3035     elif $_cc --version 2>/dev/null | grep -q ^icc; then
3036         _type=icc
3037         _ident=$($_cc --version | head -n1)
3038         _depflags='-MMD'
3039         _cflags_speed='-O3'
3040         _cflags_size='-Os'
3041         _cflags_noopt='-O1'
3042     elif $_cc -v 2>&1 | grep -q xlc; then
3043         _type=xlc
3044         _ident=$($_cc -qversion 2>/dev/null | head -n1)
3045         _cflags_speed='-O5'
3046         _cflags_size='-O5 -qcompact'
3047     elif $_cc -V 2>/dev/null | grep -q Compaq; then
3048         _type=ccc
3049         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3050         _DEPFLAGS='-M'
3051         _cflags_speed='-fast'
3052         _cflags_size='-O1'
3053         _flags_filter=ccc_flags
3054     elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
3055         test -d "$sysroot" || die "No valid sysroot specified."
3056         _type=armcc
3057         _ident=$($_cc --vsn | head -n1)
3058         armcc_conf="$PWD/armcc.conf"
3059         $_cc --arm_linux_configure                 \
3060              --arm_linux_config_file="$armcc_conf" \
3061              --configure_sysroot="$sysroot"        \
3062              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3063              die "Error creating armcc configuration file."
3064         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3065         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3066         as_default="${cross_prefix}gcc"
3067         _depflags='-MMD'
3068         _cflags_speed='-O3'
3069         _cflags_size='-Os'
3070     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3071         _type=tms470
3072         _ident=$($_cc -version | head -n1 | tr -s ' ')
3073         _flags='--gcc --abi=eabi -me'
3074         _cc_e='-ppl -fe=$@'
3075         _cc_o='-fe=$@'
3076         _depflags='-ppa -ppd=$(@:.o=.d)'
3077         _cflags_speed='-O3 -mf=5'
3078         _cflags_size='-O3 -mf=2'
3079         _flags_filter=tms470_flags
3080     elif $_cc -v 2>&1 | grep -q clang; then
3081         _type=clang
3082         _ident=$($_cc --version | head -n1)
3083         _depflags='-MMD'
3084         _cflags_speed='-O3'
3085         _cflags_size='-Os'
3086     elif $_cc -V 2>&1 | grep -q Sun; then
3087         _type=suncc
3088         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3089         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3090         _DEPFLAGS='-xM1 -xc99'
3091         _ldflags='-std=c99'
3092         _cflags_speed='-O5'
3093         _cflags_size='-O5 -xspace'
3094         _flags_filter=suncc_flags
3095     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3096         _type=pathscale
3097         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3098         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3099         _cflags_speed='-O2'
3100         _cflags_size='-Os'
3101         _flags_filter='filter_out -Wdisabled-optimization'
3102     elif $_cc -v 2>&1 | grep -q Open64; then
3103         _type=open64
3104         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3105         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3106         _cflags_speed='-O2'
3107         _cflags_size='-Os'
3108         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3109     elif $_cc -V 2>&1 | grep -q Portland; then
3110         _type=pgi
3111         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3112         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3113         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3114         _cflags_size="-O2 -Munroll=c:1 $opt_common"
3115         _cflags_noopt="-O"
3116         _flags_filter=pgi_flags
3117     elif $_cc 2>&1 | grep -q Microsoft; then
3118         _type=msvc
3119         _ident=$($cc 2>&1 | head -n1)
3120         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3121         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3122         _cflags_speed="-O2"
3123         _cflags_size="-O1"
3124         if $_cc 2>&1 | grep -q Linker; then
3125             _ld_o='-out:$@'
3126         else
3127             _ld_o='-Fe$@'
3128         fi
3129         _cc_o='-Fo$@'
3130         _cc_e='-P -Fi$@'
3131         _flags_filter=msvc_flags
3132         _ld_lib='lib%.a'
3133         _ld_path='-libpath:'
3134         _flags='-nologo'
3135         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
3136         if [ $pfx = hostcc ]; then
3137             append _cflags -Dsnprintf=_snprintf
3138         fi
3139         disable stripping
3140     elif $_cc 2>&1 | grep -q Intel; then
3141         _type=icl
3142         _ident=$($cc 2>&1 | head -n1)
3143         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3144         # Not only is O3 broken on 13.x+ but it is slower on all previous
3145         # versions (tested) as well.
3146         _cflags_speed="-O2"
3147         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3148         if $_cc 2>&1 | grep -q Linker; then
3149             _ld_o='-out:$@'
3150         else
3151             _ld_o='-Fe$@'
3152         fi
3153         _cc_o='-Fo$@'
3154         _cc_e='-P'
3155         _flags_filter=icl_flags
3156         _ld_lib='lib%.a'
3157         _ld_path='-libpath:'
3158         # -Qdiag-error to make icl error when seeing certain unknown arguments
3159         _flags='-nologo -Qdiag-error:4044,10157'
3160         # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3161         # with MSVC which enables it by default.
3162         _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
3163         if [ $pfx = hostcc ]; then
3164             append _cflags -Dsnprintf=_snprintf
3165         fi
3166     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3167         _type=cparser
3168         _ident=$($_cc --version | head -n1)
3169         _depflags='-MMD'
3170         _cflags_speed='-O4'
3171         _cflags_size='-O2'
3172         _flags_filter=cparser_flags
3173     fi
3174
3175     eval ${pfx}_type=\$_type
3176     eval ${pfx}_ident=\$_ident
3177 }
3178
3179 set_ccvars(){
3180     eval ${1}_C=\${_cc_c-\${${1}_C}}
3181     eval ${1}_E=\${_cc_e-\${${1}_E}}
3182     eval ${1}_O=\${_cc_o-\${${1}_O}}
3183
3184     if [ -n "$_depflags" ]; then
3185         eval ${1}_DEPFLAGS=\$_depflags
3186     else
3187         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3188         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3189         eval DEP${1}FLAGS=\$_flags
3190     fi
3191 }
3192
3193 probe_cc cc "$cc"
3194 cflags_filter=$_flags_filter
3195 cflags_speed=$_cflags_speed
3196 cflags_size=$_cflags_size
3197 cflags_noopt=$_cflags_noopt
3198 add_cflags $_flags $_cflags
3199 cc_ldflags=$_ldflags
3200 set_ccvars CC
3201
3202 probe_cc hostcc "$host_cc"
3203 host_cflags_filter=$_flags_filter
3204 add_host_cflags  $_flags $_cflags
3205 set_ccvars HOSTCC
3206
3207 test -n "$cc_type" && enable $cc_type ||
3208     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3209
3210 : ${as_default:=$cc}
3211 : ${dep_cc_default:=$cc}
3212 : ${ld_default:=$cc}
3213 : ${host_ld_default:=$host_cc}
3214 set_default ar as dep_cc ld host_ld windres
3215
3216 probe_cc as "$as"
3217 asflags_filter=$_flags_filter
3218 add_asflags $_flags $_cflags
3219 set_ccvars AS
3220
3221 probe_cc ld "$ld"
3222 ldflags_filter=$_flags_filter
3223 add_ldflags $_flags $_ldflags
3224 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3225 LD_O=${_ld_o-$LD_O}
3226 LD_LIB=${_ld_lib-$LD_LIB}
3227 LD_PATH=${_ld_path-$LD_PATH}
3228
3229 probe_cc hostld "$host_ld"
3230 host_ldflags_filter=$_flags_filter
3231 add_host_ldflags $_flags $_ldflags
3232 HOSTLD_O=${_ld_o-$HOSTLD_O}
3233
3234 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3235     probe_cc depcc "$dep_cc"
3236     CCDEP=${_DEPCMD:-$DEPCMD}
3237     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3238     DEPCCFLAGS=$_flags
3239 fi
3240
3241 if $ar 2>&1 | grep -q Microsoft; then
3242     arflags="-nologo"
3243     ar_o='-out:$@'
3244 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3245     arflags="rq"
3246     ar_o='$@'
3247 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3248     arflags='-Xany -r -c'
3249     ar_o='$@'
3250 else
3251     arflags="rc"
3252     ar_o='$@'
3253 fi
3254
3255 add_cflags $extra_cflags
3256 add_cxxflags $extra_cxxflags
3257 add_asflags $extra_cflags
3258
3259 if test -n "$sysroot"; then
3260     case "$cc_type" in
3261         gcc|llvm_gcc|clang)
3262             add_cppflags --sysroot="$sysroot"
3263             add_ldflags --sysroot="$sysroot"
3264         ;;
3265         tms470)
3266             add_cppflags -I"$sysinclude"
3267             add_ldflags  --sysroot="$sysroot"
3268         ;;
3269     esac
3270 fi
3271
3272 if test "$cpu" = host; then
3273     enabled cross_compile &&
3274         die "--cpu=host makes no sense when cross-compiling."
3275
3276     case "$cc_type" in
3277         gcc|llvm_gcc)
3278             check_native(){
3279                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3280                 sed -n "/cc1.*$1=/{
3281                             s/.*$1=\\([^ ]*\\).*/\\1/
3282                             p
3283                             q
3284                         }" $TMPE
3285             }
3286             cpu=$(check_native -march || check_native -mcpu)
3287         ;;
3288     esac
3289
3290     test "${cpu:-host}" = host &&
3291         die "--cpu=host not supported with compiler $cc"
3292 fi
3293
3294 # Deal with common $arch aliases
3295 case "$arch" in
3296     aarch64|arm64)
3297         arch="aarch64"
3298     ;;
3299     arm*|iPad*|iPhone*)
3300         arch="arm"
3301     ;;
3302     mips*|IP*)
3303         arch="mips"
3304     ;;
3305     parisc*|hppa*)
3306         arch="parisc"
3307     ;;
3308     "Power Macintosh"|ppc*|powerpc*)
3309         arch="ppc"
3310     ;;
3311     s390|s390x)
3312         arch="s390"
3313     ;;
3314     sh4|sh)
3315         arch="sh4"
3316     ;;
3317     sun4u|sparc*)
3318         arch="sparc"
3319     ;;
3320     tilegx|tile-gx)
3321         arch="tilegx"
3322     ;;
3323     i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3324         arch="x86"
3325     ;;
3326 esac
3327
3328 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3329 enable $arch
3330
3331 # Add processor-specific flags
3332 if enabled aarch64; then
3333
3334     case $cpu in
3335         armv*)
3336             cpuflags="-march=$cpu"
3337         ;;
3338         *)
3339             cpuflags="-mcpu=$cpu"
3340         ;;
3341     esac
3342
3343 elif enabled alpha; then
3344
3345     cpuflags="-mcpu=$cpu"
3346
3347 elif enabled arm; then
3348
3349     check_arm_arch() {
3350         check_cpp_condition stddef.h \
3351             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3352             $cpuflags
3353     }
3354
3355     probe_arm_arch() {
3356         if   check_arm_arch 4;        then echo armv4;
3357         elif check_arm_arch 4T;       then echo armv4t;
3358         elif check_arm_arch 5;        then echo armv5;
3359         elif check_arm_arch 5E;       then echo armv5e;
3360         elif check_arm_arch 5T;       then echo armv5t;
3361         elif check_arm_arch 5TE;      then echo armv5te;
3362         elif check_arm_arch 5TEJ;     then echo armv5te;
3363         elif check_arm_arch 6;        then echo armv6;
3364         elif check_arm_arch 6J;       then echo armv6j;
3365         elif check_arm_arch 6K;       then echo armv6k;
3366         elif check_arm_arch 6Z;       then echo armv6z;
3367         elif check_arm_arch 6ZK;      then echo armv6zk;
3368         elif check_arm_arch 6T2;      then echo armv6t2;
3369         elif check_arm_arch 7;        then echo armv7;
3370         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3371         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3372         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3373         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3374         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3375         fi
3376     }
3377
3378     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3379
3380     case $cpu in
3381         armv*)
3382             cpuflags="-march=$cpu"
3383             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3384         ;;
3385         *)
3386             cpuflags="-mcpu=$cpu"
3387             case $cpu in
3388                 cortex-a*)                               subarch=armv7a  ;;
3389                 cortex-r*)                               subarch=armv7r  ;;
3390                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3391                 arm11*)                                  subarch=armv6   ;;
3392                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3393                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3394                 *)                             subarch=$(probe_arm_arch) ;;
3395             esac
3396         ;;
3397     esac
3398
3399     case "$subarch" in
3400         armv5t*)    enable fast_clz                ;;
3401         armv[6-8]*) enable fast_clz fast_unaligned ;;
3402     esac
3403
3404 elif enabled avr32; then
3405
3406     case $cpu in
3407         ap7[02]0[0-2])
3408             subarch="avr32_ap"
3409             cpuflags="-mpart=$cpu"
3410         ;;
3411         ap)
3412             subarch="avr32_ap"
3413             cpuflags="-march=$cpu"
3414         ;;
3415         uc3[ab]*)
3416             subarch="avr32_uc"
3417             cpuflags="-mcpu=$cpu"
3418         ;;
3419         uc)
3420             subarch="avr32_uc"
3421             cpuflags="-march=$cpu"
3422         ;;
3423     esac
3424
3425 elif enabled bfin; then
3426
3427     cpuflags="-mcpu=$cpu"
3428
3429 elif enabled mips; then
3430
3431     cpuflags="-march=$cpu"
3432
3433     case $cpu in
3434         24kc)
3435             disable mipsfpu
3436             disable mipsdspr1
3437             disable mipsdspr2
3438         ;;
3439         24kf*)
3440             disable mipsdspr1
3441             disable mipsdspr2
3442         ;;
3443         24kec|34kc|1004kc)
3444             disable mipsfpu
3445             disable mipsdspr2
3446         ;;
3447         24kef*|34kf*|1004kf*)
3448             disable mipsdspr2
3449         ;;
3450         74kc)
3451             disable mipsfpu
3452         ;;
3453     esac
3454
3455 elif enabled ppc; then
3456
3457     case $(tolower $cpu) in
3458         601|ppc601|powerpc601)
3459             cpuflags="-mcpu=601"
3460             disable altivec
3461         ;;
3462         603*|ppc603*|powerpc603*)
3463             cpuflags="-mcpu=603"
3464             disable altivec
3465         ;;
3466         604*|ppc604*|powerpc604*)
3467             cpuflags="-mcpu=604"
3468             disable altivec
3469         ;;
3470         g3|75*|ppc75*|powerpc75*)
3471             cpuflags="-mcpu=750"
3472             disable altivec
3473         ;;
3474         g4|745*|ppc745*|powerpc745*)
3475             cpuflags="-mcpu=7450"
3476         ;;
3477         74*|ppc74*|powerpc74*)
3478             cpuflags="-mcpu=7400"
3479         ;;
3480         g5|970|ppc970|powerpc970)
3481             cpuflags="-mcpu=970"
3482         ;;
3483         power[3-7]*)
3484             cpuflags="-mcpu=$cpu"
3485         ;;
3486         cell)
3487             cpuflags="-mcpu=cell"
3488             enable ldbrx
3489         ;;
3490         e500mc)
3491             cpuflags="-mcpu=e500mc"
3492             disable altivec
3493         ;;
3494         e500v2)
3495             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3496             disable altivec
3497         ;;
3498         e500)
3499             cpuflags="-mcpu=8540 -mhard-float"
3500             disable altivec
3501         ;;
3502     esac
3503
3504 elif enabled sparc; then
3505
3506     case $cpu in
3507         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3508             cpuflags="-mcpu=$cpu"
3509             disable vis
3510         ;;
3511         ultrasparc*|niagara[234])
3512             cpuflags="-mcpu=$cpu"
3513         ;;
3514     esac
3515
3516 elif enabled x86; then
3517
3518     case $cpu in
3519         i[345]86|pentium)
3520             cpuflags="-march=$cpu"
3521             disable mmx
3522         ;;
3523         # targets that do NOT support nopl and conditional mov (cmov)
3524         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3525             cpuflags="-march=$cpu"
3526             disable i686
3527         ;;
3528         # targets that do support nopl and conditional mov (cmov)
3529         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|corei7*|amdfam10|barcelona|atom|bdver*)
3530             cpuflags="-march=$cpu"
3531             enable i686
3532             enable fast_cmov
3533         ;;
3534         # targets that do support conditional mov but on which it's slow
3535         pentium4|pentium4m|prescott|nocona)
3536             cpuflags="-march=$cpu"
3537             enable i686
3538             disable fast_cmov
3539         ;;
3540     esac
3541
3542 fi
3543
3544 if [ "$cpu" != generic ]; then
3545     add_cflags  $cpuflags
3546     add_asflags $cpuflags
3547 fi
3548
3549 # compiler sanity check
3550 check_exec <<EOF
3551 int main(void){ return 0; }
3552 EOF
3553 if test "$?" != 0; then
3554     echo "$cc is unable to create an executable file."
3555     if test -z "$cross_prefix" && ! enabled cross_compile ; then
3556         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3557         echo "Only do this if you know what cross compiling means."
3558     fi
3559     die "C compiler test failed."
3560 fi
3561
3562 add_cppflags -D_ISOC99_SOURCE
3563 add_cxxflags -D__STDC_CONSTANT_MACROS
3564 check_cflags -std=c99
3565 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3566 #include <stdlib.h>
3567 EOF
3568 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3569 #include <stdlib.h>
3570 EOF
3571
3572 check_host_cflags -std=c99
3573 check_host_cflags -Wall
3574
3575 check_64bit(){
3576     arch32=$1
3577     arch64=$2
3578     expr=$3
3579     check_code cc "" "int test[2*($expr) - 1]" &&
3580         subarch=$arch64 || subarch=$arch32
3581 }
3582
3583 case "$arch" in
3584     aarch64|alpha|ia64)
3585         spic=$shared
3586     ;;
3587     mips)
3588         check_64bit mips mips64 '_MIPS_SIM > 1'
3589         spic=$shared
3590     ;;
3591     parisc)
3592         check_64bit parisc parisc64 'sizeof(void *) > 4'
3593         spic=$shared
3594     ;;
3595     ppc)
3596         check_64bit ppc ppc64 'sizeof(void *) > 4'
3597         spic=$shared
3598     ;;
3599     sparc)
3600         check_64bit sparc sparc64 'sizeof(void *) > 4'
3601         spic=$shared
3602     ;;
3603     x86)
3604         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3605         if test "$subarch" = "x86_64"; then
3606             spic=$shared
3607         fi
3608     ;;
3609     ppc)
3610         check_cc <<EOF && subarch="ppc64"
3611         int test[(int)sizeof(char*) - 7];
3612 EOF
3613     ;;
3614 esac
3615
3616 enable $subarch
3617 enabled spic && enable_weak pic
3618
3619 # OS specific
3620 case $target_os in
3621     aix)
3622         SHFLAGS=-shared
3623         add_cppflags '-I\$(SRC_PATH)/compat/aix'
3624         enabled shared && add_ldflags -Wl,-brtl
3625         ;;
3626     haiku)
3627         prefix_default="/boot/common"
3628         network_extralibs="-lnetwork"
3629         host_libs=
3630         ;;
3631     sunos)
3632         SHFLAGS='-shared -Wl,-h,$$(@F)'
3633         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3634         network_extralibs="-lsocket -lnsl"
3635         # When using suncc to build, the Solaris linker will mark
3636         # an executable with each instruction set encountered by
3637         # the Solaris assembler.  As our libraries contain their own
3638         # guards for processor-specific code, instead suppress
3639         # generation of the HWCAPS ELF section on Solaris x86 only.
3640         enabled_all suncc x86 &&
3641             echo "hwcap_1 = OVERRIDE;" > mapfile &&
3642             add_ldflags -Wl,-M,mapfile
3643         nm_default='nm -P -g'
3644         ;;
3645     netbsd)
3646         disable symver
3647         oss_indev_extralibs="-lossaudio"
3648         oss_outdev_extralibs="-lossaudio"
3649         enabled gcc || check_ldflags -Wl,-zmuldefs
3650         ;;
3651     openbsd|bitrig)
3652         disable symver
3653         SHFLAGS='-shared'
3654         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3655         SLIB_INSTALL_LINKS=
3656         oss_indev_extralibs="-lossaudio"
3657         oss_outdev_extralibs="-lossaudio"
3658         ;;
3659     dragonfly)
3660         disable symver
3661         ;;
3662     freebsd)
3663         ;;
3664     bsd/os)
3665         add_extralibs -lpoll -lgnugetopt
3666         strip="strip -d"
3667         ;;
3668     darwin)
3669         gas="gas-preprocessor.pl $cc"
3670         enabled ppc && add_asflags -force_cpusubtype_ALL
3671         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3672         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3673         strip="${strip} -x"
3674         add_ldflags -Wl,-dynamic,-search_paths_first
3675         SLIBSUF=".dylib"
3676         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3677         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3678         objformat="macho"
3679         enabled x86_64 && objformat="macho64"
3680         enabled_any pic shared ||
3681             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3682         ;;
3683     mingw32*)
3684         if test $target_os = "mingw32ce"; then
3685             disable network
3686         else
3687             target_os=mingw32
3688         fi
3689         LIBTARGET=i386
3690         if enabled x86_64; then
3691             LIBTARGET="i386:x86-64"
3692         elif enabled arm; then
3693             LIBTARGET=arm-wince
3694         fi
3695         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
3696         check_ldflags -Wl,--nxcompat
3697         check_ldflags -Wl,--dynamicbase
3698         shlibdir_default="$bindir_default"
3699         SLIBPREF=""
3700         SLIBSUF=".dll"
3701         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3702         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3703         dlltool="${cross_prefix}dlltool"
3704         if check_cmd lib.exe -list; then
3705             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3706             if enabled x86_64; then
3707                 LIBTARGET=x64
3708             fi
3709         elif check_cmd $dlltool --version; then
3710             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); $(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
3711         fi
3712         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3713         SLIB_INSTALL_LINKS=
3714         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3715         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3716         SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.orig.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
3717         objformat="win32"
3718         ranlib=:
3719         enable dos_paths
3720         ;;
3721     win32|win64)
3722         disable symver
3723         if enabled shared; then
3724             # Link to the import library instead of the normal static library
3725             # for shared libs.
3726             LD_LIB='%.lib'
3727             # Cannot build both shared and static libs with MSVC or icl.
3728             disable static
3729         fi
3730         shlibdir_default="$bindir_default"
3731         SLIBPREF=""
3732         SLIBSUF=".dll"
3733         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3734         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3735         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3736         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3737         SLIB_INSTALL_LINKS=
3738         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3739         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3740         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3741         objformat="win32"
3742         ranlib=:
3743         enable dos_paths
3744         ;;
3745     cygwin*)
3746         target_os=cygwin
3747         shlibdir_default="$bindir_default"
3748         SLIBPREF="cyg"
3749         SLIBSUF=".dll"
3750         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3751         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3752         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3753         SLIB_INSTALL_LINKS=
3754         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3755         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3756         objformat="win32"
3757         enable dos_paths
3758         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
3759         ;;
3760     *-dos|freedos|opendos)
3761         network_extralibs="-lsocket"
3762         objformat="coff"
3763         enable dos_paths
3764         add_cppflags -U__STRICT_ANSI__
3765         ;;
3766     linux)
3767         enable dv1394
3768         ;;
3769     irix*)
3770         target_os=irix
3771         ranlib="echo ignoring ranlib"
3772         ;;
3773     os/2*)
3774         strip="lxlite -CS"
3775         ln_s="cp -f"
3776         objformat="aout"
3777         add_cppflags -D_GNU_SOURCE
3778         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3779         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3780         LIBSUF="_s.a"
3781         SLIBPREF=""
3782         SLIBSUF=".dll"
3783         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3784         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3785         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3786             echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3787             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3788             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3789             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3790             emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3791         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3792             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3793         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3794         enable dos_paths
3795         enable_weak os2threads
3796         ;;
3797     gnu/kfreebsd)
3798         add_cppflags -D_BSD_SOURCE
3799         ;;
3800     gnu)
3801         ;;
3802     qnx)
3803         add_cppflags -D_QNX_SOURCE
3804         network_extralibs="-lsocket"
3805         ;;
3806     symbian)
3807         SLIBSUF=".dll"
3808         enable dos_paths
3809         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3810         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3811         add_ldflags -Wl,--target1-abs,--no-undefined \
3812                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3813                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3814         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3815                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3816                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3817         ;;
3818     osf1)
3819         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3820         ;;
3821     minix)
3822         ;;
3823     plan9)
3824         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
3825                      -D_REENTRANT_SOURCE        \
3826                      -D_RESEARCH_SOURCE         \
3827                      -DFD_SETSIZE=96            \
3828                      -DHAVE_SOCK_OPTS
3829         add_compat strtod.o strtod=avpriv_strtod
3830         network_extralibs='-lbsd'
3831         exeobjs=compat/plan9/main.o
3832         disable ffserver
3833         cp_f='cp'
3834         ;;
3835     none)
3836         ;;
3837     *)
3838         die "Unknown OS '$target_os'."
3839         ;;
3840 esac
3841
3842 # determine libc flavour
3843
3844 probe_libc(){
3845     pfx=$1
3846     pfx_no_=${pfx%_}
3847     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3848     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
3849         eval ${pfx}libc_type=uclibc
3850         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3851     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
3852         eval ${pfx}libc_type=glibc
3853         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3854     # MinGW headers can be installed on Cygwin, so check for newlib first.
3855     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3856         eval ${pfx}libc_type=newlib
3857         add_${pfx}cppflags -U__STRICT_ANSI__
3858     # MinGW64 is backwards compatible with MinGW32, so check for it first.
3859     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
3860         eval ${pfx}libc_type=mingw64
3861         if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
3862             add_compat msvcrt/snprintf.o
3863             add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
3864         fi
3865         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3866         eval test \$${pfx_no_}cc_type = "gcc" &&
3867             add_${pfx}cppflags -D__printf__=__gnu_printf__
3868     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
3869          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
3870         eval ${pfx}libc_type=mingw32
3871         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
3872             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3873             die "ERROR: MinGW32 runtime version must be >= 3.15."
3874         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3875         eval test \$${pfx_no_}cc_type = "gcc" &&
3876             add_${pfx}cppflags -D__printf__=__gnu_printf__
3877     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
3878         eval ${pfx}libc_type=msvcrt
3879         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
3880         # 0x601 by default unless something else is set by the user.
3881         # This can easily lead to us detecting functions only present
3882         # in such new versions and producing binaries requiring windows 7.0.
3883         # Therefore explicitly set the default to XP unless the user has
3884         # set something else on the command line.
3885         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
3886             add_${pfx}cppflags -D_WIN32_WINNT=0x0502
3887     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
3888         eval ${pfx}libc_type=klibc
3889     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
3890         eval ${pfx}libc_type=bionic
3891     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
3892         eval ${pfx}libc_type=solaris
3893         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3894     fi
3895 }
3896
3897 probe_libc
3898 test -n "$libc_type" && enable libc_$libc_type
3899 probe_libc host_
3900 test -n "$host_libc_type" && enable host_libc_$host_libc_type
3901
3902 case $libc_type in
3903     bionic)
3904         add_compat strtod.o strtod=avpriv_strtod
3905         ;;
3906     msvcrt)
3907         add_compat strtod.o strtod=avpriv_strtod
3908         add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
3909                                      _snprintf=avpriv_snprintf  \
3910                                      vsnprintf=avpriv_vsnprintf
3911         ;;
3912 esac
3913
3914 # hacks for compiler/libc/os combinations
3915
3916 if enabled_all tms470 libc_glibc; then
3917     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3918     add_cppflags -D__USER_LABEL_PREFIX__=
3919     add_cppflags -D__builtin_memset=memset
3920     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3921     add_cflags   -pds=48    # incompatible redefinition of macro
3922 fi
3923
3924 if enabled_all ccc libc_glibc; then
3925     add_ldflags -Wl,-z,now  # calls to libots crash without this
3926 fi
3927
3928 esc(){
3929     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3930 }
3931
3932 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
3933
3934 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3935
3936 set_default $PATHS_LIST
3937 set_default nm
3938
3939 # we need to build at least one lib type
3940 if ! enabled_any static shared; then
3941     cat <<EOF
3942 At least one library type must be built.
3943 Specify --enable-static to build the static libraries or --enable-shared to
3944 build the shared libraries as well. To only build the shared libraries specify
3945 --disable-static in addition to --enable-shared.
3946 EOF
3947     exit 1;
3948 fi
3949
3950 # backward compatibility layer for incompatible_libav/fork_abi
3951 enabled incompatible_fork_abi  && enable incompatible_libav_abi
3952 enabled incompatible_libav_abi && enable incompatible_fork_abi
3953
3954 die_license_disabled() {
3955     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3956 }
3957
3958 die_license_disabled_gpl() {
3959     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
3960 }
3961
3962 die_license_disabled gpl frei0r
3963 die_license_disabled gpl libcdio
3964 die_license_disabled gpl libutvideo
3965 die_license_disabled gpl libvidstab
3966 die_license_disabled gpl libx264
3967 die_license_disabled gpl libxavs
3968 die_license_disabled gpl libxvid
3969 die_license_disabled gpl libzvbi
3970 die_license_disabled gpl x11grab
3971
3972 die_license_disabled nonfree libaacplus
3973 die_license_disabled nonfree libfaac
3974 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
3975 enabled gpl && die_license_disabled_gpl nonfree openssl
3976
3977 die_license_disabled version3 libopencore_amrnb
3978 die_license_disabled version3 libopencore_amrwb
3979 die_license_disabled version3 libvo_aacenc
3980 die_license_disabled version3 libvo_amrwbenc
3981
3982 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3983
3984 disabled optimizations || check_cflags -fomit-frame-pointer
3985
3986 enable_weak_pic() {
3987     disabled pic && return
3988     enable pic
3989     add_cppflags -DPIC
3990     case "$target_os" in
3991     mingw*|cygwin*)
3992         ;;
3993     *)
3994         add_cflags -fPIC
3995         ;;
3996     esac
3997     add_asflags  -fPIC
3998 }
3999
4000 enabled pic && enable_weak_pic
4001
4002 check_cc <<EOF || die "Symbol mangling check failed."
4003 int ff_extern;
4004 EOF
4005 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4006 extern_prefix=${sym%%ff_extern*}
4007
4008 check_cc <<EOF && enable_weak inline_asm
4009 void foo(void) { __asm__ volatile ("" ::); }
4010 EOF
4011
4012 _restrict=
4013 for restrict_keyword in restrict __restrict__ __restrict; do
4014     check_cc <<EOF && _restrict=$restrict_keyword && break
4015 void foo(char * $restrict_keyword p);
4016 EOF
4017 done
4018
4019 check_cc <<EOF && enable pragma_deprecated
4020 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4021 EOF
4022
4023 check_cc <<EOF && enable attribute_packed
4024 struct { int x; } __attribute__((packed)) x;
4025 EOF
4026
4027 check_cc <<EOF && enable attribute_may_alias
4028 union { int x; } __attribute__((may_alias)) x;
4029 EOF
4030
4031 check_cc <<EOF || die "endian test failed"
4032 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4033 EOF
4034 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4035
4036 check_inline_asm inline_asm_labels '"1:\n"'
4037
4038 if enabled alpha; then
4039
4040     check_cflags -mieee
4041
4042 elif enabled arm; then
4043
4044     check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
4045 float func(float a, float b){ return a+b; }
4046 EOF
4047
4048     enabled thumb && check_cflags -mthumb || check_cflags -marm
4049     nogas=die
4050
4051     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
4052         enable vfp_args
4053     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
4054         case "${cross_prefix:-$cc}" in
4055             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
4056             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4057 __asm__ (".eabi_attribute 28, 1");
4058 int main(void) { return 0; }
4059 EOF
4060         esac
4061         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4062     fi
4063
4064     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4065     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
4066     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4067     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
4068     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
4069     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
4070
4071     [ $target_os = linux ] ||
4072         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4073             $ARCH_EXT_LIST_ARM
4074
4075     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4076     check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
4077
4078     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4079
4080 elif enabled mips; then
4081
4082     check_inline_asm loongson '"dmult.g $1, $2, $3"'
4083     enabled mips32r2  && add_cflags "-mips32r2" && add_asflags "-mips32r2" &&
4084      check_inline_asm mips32r2  '"rotr $t0, $t1, 1"'
4085     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
4086      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
4087     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
4088      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
4089     enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
4090      check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
4091
4092 elif enabled parisc; then
4093
4094     if enabled gcc; then
4095         case $($cc -dumpversion) in
4096             4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
4097         esac
4098     fi
4099
4100 elif enabled ppc; then
4101
4102     enable local_aligned_8 local_aligned_16
4103
4104     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
4105     check_inline_asm ibm_asm   '"add 0, 0, 0"'
4106     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
4107     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4108
4109     # AltiVec flags: The FSF version of GCC differs from the Apple version
4110     if enabled altivec; then
4111         if ! enabled_any pic ppc64; then
4112             nogas=warn
4113         fi
4114         check_cflags -maltivec -mabi=altivec &&
4115         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4116         check_cflags -faltivec
4117
4118         # check if our compiler supports Motorola AltiVec C API
4119         check_cc <<EOF || disable altivec
4120 $inc_altivec_h
4121 int main(void) {
4122     vector signed int v1 = (vector signed int) { 0 };
4123     vector signed int v2 = (vector signed int) { 1 };
4124     v1 = vec_add(v1, v2);
4125     return 0;
4126 }
4127 EOF
4128
4129         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4130     fi
4131
4132 elif enabled sparc; then
4133
4134     enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
4135
4136 elif enabled x86; then
4137
4138     check_builtin rdtsc    intrin.h   "__rdtsc()"
4139     check_builtin mm_empty mmintrin.h "_mm_empty()"
4140
4141     enable local_aligned_8 local_aligned_16
4142
4143     # check whether EBP is available on x86
4144     # As 'i' is stored on the stack, this program will crash
4145     # if the base pointer is used to access it because the
4146     # base pointer is cleared in the inline assembly code.
4147     check_exec_crash <<EOF && enable ebp_available
4148 volatile int i=0;
4149 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4150 return i;
4151 EOF
4152
4153     # check whether EBX is available on x86
4154     check_inline_asm ebx_available '""::"b"(0)' &&
4155         check_inline_asm ebx_available '"":::"%ebx"'
4156
4157     # check whether xmm clobbers are supported
4158     check_inline_asm xmm_clobbers '"":::"%xmm0"'
4159
4160     # check whether binutils is new enough to compile SSSE3/MMXEXT
4161     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
4162     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4163
4164     if ! disabled_any asm mmx yasm; then
4165         if check_cmd $yasmexe --version; then
4166             enabled x86_64 && yasm_extra="-m amd64"
4167             yasm_debug="-g dwarf2"
4168         elif check_cmd nasm -v; then
4169             yasmexe=nasm
4170             yasm_debug="-g -F dwarf"
4171             enabled x86_64 && test "$objformat" = elf && objformat=elf64
4172         fi
4173
4174         YASMFLAGS="-f $objformat $yasm_extra"
4175         enabled pic               && append YASMFLAGS "-DPIC"
4176         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
4177         case "$objformat" in
4178             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4179         esac
4180
4181         check_yasm "movbe ecx, [5]" && enable yasm ||
4182             die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4183         check_yasm "vextractf128 xmm0, ymm0, 0"      || disable avx_external avresample
4184         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4185         check_yasm "CPU amdnop" && enable cpunop
4186     fi
4187
4188     case "$cpu" in
4189         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4190             disable fast_clz
4191         ;;
4192     esac
4193
4194 fi
4195
4196 if enabled asm; then
4197     as=${gas:=$as}
4198     check_as <<EOF && enable gnu_as || \
4199         $nogas "GNU assembler not found, install gas-preprocessor"
4200 .macro m n
4201 \n: .int 0
4202 .endm
4203 m x
4204 EOF
4205 fi
4206
4207 check_ldflags -Wl,--as-needed
4208
4209 if check_func dlopen; then
4210     ldl=
4211 elif check_func dlopen -ldl; then
4212     ldl=-ldl
4213 fi
4214
4215 if ! disabled network; then
4216     check_type "sys/types.h sys/socket.h" socklen_t
4217     check_type netdb.h "struct addrinfo"
4218     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4219     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4220     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4221     check_type netinet/in.h "struct sockaddr_in6"
4222     check_type poll.h "struct pollfd"
4223     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4224     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4225     check_type netinet/sctp.h "struct sctp_event_subscribe"
4226     check_func getaddrinfo $network_extralibs
4227     check_func getservbyport $network_extralibs
4228     # Prefer arpa/inet.h over winsock2
4229     if check_header arpa/inet.h ; then
4230         check_func closesocket
4231     elif check_header winsock2.h ; then
4232         check_func_headers winsock2.h closesocket -lws2 &&
4233             network_extralibs="-lws2" ||
4234         { check_func_headers winsock2.h closesocket -lws2_32 &&
4235             network_extralibs="-lws2_32"; }
4236         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4237         check_type ws2tcpip.h socklen_t
4238         check_type ws2tcpip.h "struct addrinfo"
4239         check_type ws2tcpip.h "struct group_source_req"
4240         check_type ws2tcpip.h "struct ip_mreq_source"
4241         check_type ws2tcpip.h "struct ipv6_mreq"
4242         check_type winsock2.h "struct pollfd"
4243         check_type ws2tcpip.h "struct sockaddr_in6"
4244         check_type ws2tcpip.h "struct sockaddr_storage"
4245         check_struct winsock2.h "struct sockaddr" sa_len
4246     else
4247         disable network
4248     fi
4249 fi
4250
4251 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4252 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
4253
4254 check_func  access
4255 check_func  clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
4256 check_func  fcntl
4257 check_func  fork
4258 check_func_headers stdlib.h getenv
4259 check_func  gethrtime
4260 check_func  getopt
4261 check_func  getrusage
4262 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4263 check_func  gettimeofday
4264 check_func  inet_aton $network_extralibs
4265 check_func  isatty
4266 check_func  localtime_r
4267 check_func  ${malloc_prefix}memalign            && enable memalign
4268 check_func  mkstemp
4269 check_func  mmap
4270 check_func  mprotect
4271 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
4272 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
4273 check_func  setrlimit
4274 check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
4275 check_func  strerror_r
4276 check_func  sched_getaffinity
4277 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4278 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4279 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4280 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4281 check_builtin sarestart signal.h "SA_RESTART"
4282 check_func  sysconf
4283 check_func  sysctl
4284 check_func  usleep
4285 check_func_headers conio.h kbhit
4286 check_func_headers windows.h PeekNamedPipe
4287 check_func_headers io.h setmode
4288 check_func_headers lzo/lzo1x.h lzo1x_999_compress
4289 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4290 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4291 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4292 check_func_headers windows.h GetProcessAffinityMask
4293 check_func_headers windows.h GetProcessTimes
4294 check_func_headers windows.h GetSystemTimeAsFileTime
4295 check_func_headers windows.h MapViewOfFile
4296 check_func_headers windows.h SetConsoleTextAttribute
4297 check_func_headers windows.h Sleep
4298 check_func_headers windows.h VirtualAlloc
4299 check_func_headers glob.h glob
4300 check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
4301
4302 check_header cl/cl.h
4303 check_header direct.h
4304 check_header dlfcn.h
4305 check_header dxva.h
4306 check_header dxva2api.h -D_WIN32_WINNT=0x0600
4307 check_header io.h
4308 check_header libcrystalhd/libcrystalhd_if.h
4309 check_header malloc.h
4310 check_header poll.h
4311 check_header sys/mman.h
4312 check_header sys/param.h
4313 check_header sys/resource.h
4314 check_header sys/select.h
4315 check_header sys/time.h
4316 check_header sys/un.h
4317 check_header termios.h
4318 check_header unistd.h
4319 check_header vdpau/vdpau.h
4320 check_header vdpau/vdpau_x11.h
4321 check_header VideoDecodeAcceleration/VDADecoder.h
4322 check_header windows.h
4323 check_header X11/extensions/XvMClib.h
4324 check_header asm/types.h
4325
4326 if ! disabled w32threads && ! enabled pthreads; then
4327     check_func_headers "windows.h process.h" _beginthreadex && enable w32threads
4328 fi
4329
4330 # check for some common methods of building with pthread support
4331 # do this before the optional library checks as some of them require pthreads
4332 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
4333     enable pthreads
4334     if check_func pthread_join -pthread && check_func pthread_create -pthread; then
4335         add_cflags -pthread
4336         add_extralibs -pthread
4337     elif check_func pthread_join -pthreads && check_func pthread_create -pthreads; then
4338         add_cflags -pthreads
4339         add_extralibs -pthreads
4340     elif check_func pthread_join -lpthreadGC2 && check_func pthread_create -lpthreadGC2; then
4341         add_extralibs -lpthreadGC2
4342     elif check_lib pthread.h pthread_join -lpthread && check_lib pthread.h pthread_create -lpthread; then
4343         :
4344     elif ! check_func pthread_join && ! check_func pthread_create; then
4345         disable pthreads
4346     fi
4347 fi
4348
4349 for thread in $THREADS_LIST; do
4350     if enabled $thread; then
4351         test -n "$thread_type" &&
4352             die "ERROR: Only one thread type must be selected." ||
4353             thread_type="$thread"
4354     fi
4355 done
4356
4357 if enabled pthreads; then
4358   check_func pthread_cancel
4359 fi
4360
4361 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
4362 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
4363
4364 check_lib math.h sin -lm && LIBM="-lm"
4365 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
4366
4367 atan2f_args=2
4368 ldexpf_args=2
4369 powf_args=2
4370
4371 for func in $MATH_FUNCS; do
4372     eval check_mathfunc $func \${${func}_args:-1}
4373 done
4374
4375 # these are off by default, so fail if requested and not available
4376 enabled avisynth          && { { check_lib2 "windows.h" LoadLibrary; } ||
4377                                { check_lib2 "dlfcn.h" dlopen -ldl; } ||
4378                                die "ERROR: LoadLibrary/dlopen not found for avisynth"; }
4379 enabled fontconfig        && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
4380 enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
4381 enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4382 enabled ladspa            && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
4383 enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
4384 enabled libaacplus        && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
4385 enabled libass            && require_pkg_config libass ass/ass.h ass_library_init
4386 enabled libbluray         && require libbluray libbluray/bluray.h bd_open -lbluray
4387 enabled libcelt           && require libcelt celt/celt.h celt_decode -lcelt0 &&
4388                              { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
4389                                die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
4390 enabled libcaca           && require_pkg_config caca caca.h caca_create_canvas
4391 enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4392 enabled libfdk_aac        && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
4393 flite_libs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
4394 enabled libflite          && require2 libflite "flite/flite.h" flite_init $flite_libs
4395 enabled libfreetype       && require_libfreetype
4396 enabled libgme            && require  libgme gme/gme.h gme_new_emu -lgme -lstdc++
4397 enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
4398                                    check_lib "${gsm_hdr}" gsm_create -lgsm && break;
4399                                done || die "ERROR: libgsm not found"; }
4400 enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4401 enabled libmodplug        && require libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
4402 enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4403 enabled libnut            && require libnut libnut.h nut_demuxer_init -lnut
4404 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
4405 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
4406 enabled libopencv         && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
4407 enabled libopenjpeg       && { check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg ||
4408                                check_lib openjpeg.h opj_version -lopenjpeg ||
4409                                die "ERROR: libopenjpeg not found"; }
4410 enabled libopus           && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
4411 enabled libpulse          && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
4412 enabled libquvi           && require_pkg_config libquvi quvi/quvi.h quvi_init
4413 enabled librtmp           && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
4414 enabled libschroedinger   && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
4415 enabled libshine          && require_pkg_config shine shine/layer3.h shine_encode_buffer
4416 enabled libsoxr           && require libsoxr soxr.h soxr_create -lsoxr
4417 enabled libssh            && require_pkg_config libssh libssh/sftp.h sftp_init
4418 enabled libspeex          && require libspeex speex/speex.h speex_decoder_init -lspeex
4419 enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
4420     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
4421     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
4422 enabled libtheora         && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
4423 enabled libtwolame        && require libtwolame twolame.h twolame_init -ltwolame &&
4424                              { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
4425                                die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
4426 enabled libutvideo        && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
4427 enabled libv4l2           && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
4428 enabled libvidstab        && require_pkg_config vidstab vid.stab/libvidstab.h vsMotionDetectInit
4429 enabled libvo_aacenc      && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
4430 enabled libvo_amrwbenc    && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
4431 enabled libvorbis         && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
4432 enabled libvpx            && {
4433     enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
4434                                     die "ERROR: libvpx decoder version must be >=0.9.1"; }
4435     enabled libvpx_vp8_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
4436                                     die "ERROR: libvpx encoder version must be >=0.9.7"; }
4437     enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
4438     enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VP9E_SET_SVC" -lvpx || disable libvpx_vp9_encoder; } }
4439 enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
4440 enabled libx264           && require libx264 x264.h x264_encoder_encode -lx264 &&
4441                              { check_cpp_condition x264.h "X264_BUILD >= 118" ||
4442                                die "ERROR: libx264 must be installed and version must be >= 0.118."; }
4443 enabled libxavs           && require libxavs xavs.h xavs_encoder_encode -lxavs
4444 enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
4445 enabled libzmq            && require_pkg_config libzmq zmq.h zmq_ctx_new
4446 enabled libzvbi           && require libzvbi libzvbi.h vbi_decoder_new -lzvbi
4447 enabled openal            && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
4448                                check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
4449                                die "ERROR: openal not found"; } &&
4450                              { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
4451                                die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
4452 enabled opencl            && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
4453                                check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
4454                                die "ERROR: opencl not found"; } &&
4455                              { ! enabled_any w32threads os2threads ||
4456                                die "opencl currently needs --enable-pthreads or --disable-w32threads"; } &&
4457                              { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
4458                                check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
4459                                die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
4460 enabled openssl           && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
4461                                check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
4462                                check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
4463                                die "ERROR: openssl not found"; }
4464
4465 if enabled gnutls; then
4466     { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
4467     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
4468 fi
4469
4470 # libdc1394 check
4471 if enabled libdc1394; then
4472     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
4473         enable libdc1394_2; } ||
4474     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
4475         enable libdc1394_1; } ||
4476     die "ERROR: No version of libdc1394 found "
4477 fi
4478
4479 SDL_CONFIG="${cross_prefix}sdl-config"
4480 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
4481     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4482     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4483     enable sdl
4484 else
4485   if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
4486     sdl_cflags=$("${SDL_CONFIG}" --cflags)
4487     sdl_libs=$("${SDL_CONFIG}" --libs)
4488     check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
4489     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4490     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4491     enable sdl
4492   fi
4493 fi
4494 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
4495
4496 texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
4497 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
4498 perl -v            > /dev/null 2>&1 && enable perl      || disable perl
4499 pod2man --help     > /dev/null 2>&1 && enable pod2man   || disable pod2man
4500 rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
4501
4502 check_header linux/fb.h
4503 check_header linux/videodev.h
4504 check_header linux/videodev2.h
4505 check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
4506
4507 check_header sys/videoio.h
4508
4509 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
4510 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
4511 # w32api 3.12 had it defined wrong
4512 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
4513
4514 check_type "dshow.h" IBaseFilter
4515
4516 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
4517 { check_header dev/bktr/ioctl_meteor.h &&
4518   check_header dev/bktr/ioctl_bt848.h; } ||
4519 { check_header machine/ioctl_meteor.h &&
4520   check_header machine/ioctl_bt848.h; } ||
4521 { check_header dev/video/meteor/ioctl_meteor.h &&
4522   check_header dev/video/bktr/ioctl_bt848.h; } ||
4523 check_header dev/ic/bt8xx.h
4524
4525 check_header sndio.h
4526 if check_struct sys/soundcard.h audio_buf_info bytes; then
4527     enable_safe sys/soundcard.h
4528 else
4529     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
4530     #include <sys/soundcard.h>
4531     audio_buf_info abc;
4532 EOF
4533 fi
4534 check_header soundcard.h
4535
4536 enabled_any alsa_indev alsa_outdev &&
4537     check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
4538
4539 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
4540     check_func jack_port_get_latency_range -ljack
4541
4542 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
4543
4544 if enabled libcdio; then
4545     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4546     check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4547     die "ERROR: libcdio-paranoia not found"
4548 fi
4549
4550 check_lib X11/Xlib.h XOpenDisplay -lX11 && enable xlib
4551
4552 enabled x11grab                                           &&
4553 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
4554 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes &&
4555 { enabled xlib || die "ERROR: Xlib not found"; }
4556
4557 enabled vaapi &&
4558     check_lib va/va.h vaInitialize -lva ||
4559     disable vaapi
4560
4561 enabled vdpau &&
4562     check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
4563     disable vdpau
4564
4565 enabled vdpau && enabled xlib &&
4566     check_lib2 "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
4567     enable vdpau_x11
4568
4569 # Funny iconv installations are not unusual, so check it after all flags have been set
4570 disabled iconv || check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || disable iconv
4571
4572 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
4573
4574 # add some useful compiler flags if supported
4575 check_cflags -Wdeclaration-after-statement
4576 check_cflags -Wall
4577 check_cflags -Wdisabled-optimization
4578 check_cflags -Wpointer-arith
4579 check_cflags -Wredundant-decls
4580 check_cflags -Wwrite-strings
4581 check_cflags -Wtype-limits
4582 check_cflags -Wundef
4583 check_cflags -Wmissing-prototypes
4584 check_cflags -Wno-pointer-to-int-cast
4585 check_cflags -Wstrict-prototypes
4586 enabled extra_warnings && check_cflags -Winline
4587
4588 check_disable_warning(){
4589     warning_flag=-W${1#-Wno-}
4590     test_cflags $warning_flag && add_cflags $1
4591 }
4592
4593 check_disable_warning -Wno-parentheses
4594 check_disable_warning -Wno-switch
4595 check_disable_warning -Wno-format-zero-length
4596 check_disable_warning -Wno-pointer-sign
4597
4598 # add some linker flags
4599 check_ldflags -Wl,--warn-common
4600 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
4601 enabled rpath && add_ldflags -Wl,-rpath=$libdir
4602 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
4603
4604 # add some strip flags
4605 # -wN '..@*' is more selective than -x, but not available everywhere.
4606 check_stripflags -wN \'..@*\' || check_stripflags -x
4607
4608 enabled xmm_clobber_test &&
4609     check_ldflags -Wl,--wrap,avcodec_open2              \
4610                   -Wl,--wrap,avcodec_decode_audio4      \
4611                   -Wl,--wrap,avcodec_decode_video2      \
4612                   -Wl,--wrap,avcodec_decode_subtitle2   \
4613                   -Wl,--wrap,avcodec_encode_audio2      \
4614                   -Wl,--wrap,avcodec_encode_video       \
4615                   -Wl,--wrap,avcodec_encode_video2      \
4616                   -Wl,--wrap,avcodec_encode_subtitle    \
4617                   -Wl,--wrap,sws_scale ||
4618     disable xmm_clobber_test
4619
4620 echo "X{};" > $TMPV
4621 if test_ldflags -Wl,--version-script,$TMPV; then
4622     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
4623     check_cc <<EOF && enable symver_asm_label
4624 void ff_foo(void) __asm__ ("av_foo@VERSION");
4625 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
4626 EOF
4627     check_cc <<EOF && enable symver_gnu_asm
4628 __asm__(".symver ff_foo,av_foo@VERSION");
4629 void ff_foo(void) {}
4630 EOF
4631 fi
4632
4633 if [ -z "$optflags" ]; then
4634     if enabled small; then
4635         optflags=$cflags_size
4636     elif enabled optimizations; then
4637         optflags=$cflags_speed
4638     else
4639         optflags=$cflags_noopt
4640     fi
4641 fi
4642
4643 check_optflags(){
4644     check_cflags "$@"
4645     enabled lto && check_ldflags "$@"
4646 }
4647
4648
4649 if enabled lto; then
4650     test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
4651     check_cflags  -flto
4652     check_ldflags -flto $cpuflags
4653 fi
4654
4655 check_optflags $optflags
4656 check_optflags -fno-math-errno
4657 check_optflags -fno-signed-zeros
4658
4659 enabled ftrapv && check_cflags -ftrapv
4660
4661 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
4662 int x;
4663 EOF
4664
4665
4666 if enabled icc; then
4667     # Just warnings, no remarks
4668     check_cflags -w1
4669     # -wd: Disable following warnings
4670     # 144, 167, 556: -Wno-pointer-sign
4671     # 188: enumerated type mixed with another type
4672     # 1292: attribute "foo" ignored
4673     # 1419: external declaration in primary source file
4674     # 10006: ignoring unknown option -fno-signed-zeros
4675     # 10148: ignoring unknown option -Wno-parentheses
4676     # 10156: ignoring option '-W'; no argument required
4677     check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156
4678     # 11030: Warning unknown option --as-needed
4679     # 10156: ignoring option '-export'; no argument required
4680     check_ldflags -wd10156,11030
4681     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
4682     enable ebp_available
4683     if enabled x86_32; then
4684         icc_version=$($cc -dumpversion)
4685         test ${icc_version%%.*} -ge 11 &&
4686             check_cflags -falign-stack=maintain-16-byte ||
4687             disable aligned_stack
4688     fi
4689 elif enabled ccc; then
4690     # disable some annoying warnings
4691     add_cflags -msg_disable bitnotint
4692     add_cflags -msg_disable mixfuncvoid
4693     add_cflags -msg_disable nonstandcast
4694     add_cflags -msg_disable unsupieee
4695 elif enabled gcc; then
4696     check_optflags -fno-tree-vectorize
4697     check_cflags -Werror=implicit-function-declaration
4698     check_cflags -Werror=missing-prototypes
4699     check_cflags -Werror=return-type
4700     check_cflags -Werror=vla
4701     enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
4702 elif enabled llvm_gcc; then
4703     check_cflags -mllvm -stack-alignment=16
4704 elif enabled clang; then
4705     check_cflags -mllvm -stack-alignment=16
4706     check_cflags -Qunused-arguments
4707     check_cflags -Werror=implicit-function-declaration
4708     check_cflags -Werror=missing-prototypes
4709     check_cflags -Werror=return-type
4710 elif enabled cparser; then
4711     add_cflags -Wno-missing-variable-declarations
4712     add_cflags -Wno-empty-statement
4713 elif enabled armcc; then
4714     # 2523: use of inline assembler is deprecated
4715     add_cflags -W${armcc_opt},--diag_suppress=2523
4716     add_cflags -W${armcc_opt},--diag_suppress=1207
4717     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
4718     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
4719     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
4720     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
4721 elif enabled tms470; then
4722     add_cflags -pds=824 -pds=837
4723     disable inline_asm
4724 elif enabled pathscale; then
4725     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
4726 elif enabled_any msvc icl; then
4727     enabled x86_32 && disable aligned_stack
4728     enabled_all x86_32 debug && add_cflags -Oy-
4729     enabled debug && add_ldflags -debug
4730     enable pragma_deprecated
4731     if enabled icl; then
4732         # -Qansi-alias is basically -fstrict-aliasing, but does not work
4733         # (correctly) on icl 13.x.
4734         check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
4735             add_cflags -Qansi-alias
4736         # icl will pass the inline asm tests but inline asm is currently
4737         # not supported (build will fail)
4738         disabled inline_asm || warn "inline asm disabled due to issues with it in ICL"
4739         disable inline_asm
4740     fi
4741 fi
4742
4743 case $target_os in
4744     osf1)
4745         enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
4746     ;;
4747     plan9)
4748         add_cppflags -Dmain=plan9_main
4749     ;;
4750 esac
4751
4752 enable frame_thread_encoder
4753
4754 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
4755
4756 check_deps $CONFIG_LIST       \
4757            $CONFIG_EXTRA      \
4758            $HAVE_LIST         \
4759            $ALL_COMPONENTS    \
4760
4761 enabled threads && ! enabled pthreads && ! enabled atomics_native && die "non pthread threading without atomics not supported, try adding --enable-pthreads or --cpu=i486 or higher if you are on x86"
4762
4763
4764 if test $target_os = "haiku"; then
4765     disable memalign
4766     disable posix_memalign
4767 fi
4768
4769 ! enabled_any memalign posix_memalign aligned_malloc &&
4770     enabled_any $need_memalign && enable memalign_hack
4771
4772 # add_dep lib dep
4773 # -> enable ${lib}_deps_${dep}
4774 # -> add $dep to ${lib}_deps only once
4775 add_dep() {
4776     lib=$1
4777     dep=$2
4778     enabled "${lib}_deps_${dep}" && return 0
4779     enable  "${lib}_deps_${dep}"
4780     prepend "${lib}_deps" $dep
4781 }
4782
4783 # merge deps lib components
4784 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
4785 merge_deps() {
4786     lib=$1
4787     shift
4788     for comp in $*; do
4789         enabled $comp || continue
4790         eval "dep=\"\$${comp}_deps\""
4791         for d in $dep; do
4792             add_dep $lib $d
4793         done
4794     done
4795 }
4796
4797 merge_deps libavfilter $FILTER_LIST
4798
4799 echo "install prefix            $prefix"
4800 echo "source path               $source_path"
4801 echo "C compiler                $cc"
4802 echo "C library                 $libc_type"
4803 if test "$host_cc" != "$cc"; then
4804     echo "host C compiler           $host_cc"
4805     echo "host C library            $host_libc_type"
4806 fi
4807 echo "ARCH                      $arch ($cpu)"
4808 if test "$build_suffix" != ""; then
4809     echo "build suffix              $build_suffix"
4810 fi
4811 if test "$progs_suffix" != ""; then
4812     echo "progs suffix              $progs_suffix"
4813 fi
4814 if test "$extra_version" != ""; then
4815     echo "version string suffix     $extra_version"
4816 fi
4817 echo "big-endian                ${bigendian-no}"
4818 echo "runtime cpu detection     ${runtime_cpudetect-no}"
4819 if enabled x86; then
4820     echo "${yasmexe}                      ${yasm-no}"
4821     echo "MMX enabled               ${mmx-no}"
4822     echo "MMXEXT enabled            ${mmxext-no}"
4823     echo "3DNow! enabled            ${amd3dnow-no}"
4824     echo "3DNow! extended enabled   ${amd3dnowext-no}"
4825     echo "SSE enabled               ${sse-no}"
4826     echo "SSSE3 enabled             ${ssse3-no}"
4827     echo "AVX enabled               ${avx-no}"
4828     echo "FMA4 enabled              ${fma4-no}"
4829     echo "i686 features enabled     ${i686-no}"
4830     echo "CMOV is fast              ${fast_cmov-no}"
4831     echo "EBX available             ${ebx_available-no}"
4832     echo "EBP available             ${ebp_available-no}"
4833 fi
4834 if enabled arm; then
4835     echo "ARMv5TE enabled           ${armv5te-no}"
4836     echo "ARMv6 enabled             ${armv6-no}"
4837     echo "ARMv6T2 enabled           ${armv6t2-no}"
4838     echo "VFP enabled               ${vfp-no}"
4839     echo "NEON enabled              ${neon-no}"
4840     echo "THUMB enabled             ${thumb-no}"
4841 fi
4842 if enabled mips; then
4843     echo "MIPS FPU enabled          ${mipsfpu-no}"
4844     echo "MIPS32R2 enabled          ${mips32r2-no}"
4845     echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"
4846     echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
4847 fi
4848 if enabled ppc; then
4849     echo "AltiVec enabled           ${altivec-no}"
4850     echo "PPC 4xx optimizations     ${ppc4xx-no}"
4851     echo "dcbzl available           ${dcbzl-no}"
4852 fi
4853 if enabled sparc; then
4854     echo "VIS enabled               ${vis-no}"
4855 fi
4856 echo "debug symbols             ${debug-no}"
4857 echo "strip symbols             ${stripping-no}"
4858 echo "optimize for size         ${small-no}"
4859 echo "optimizations             ${optimizations-no}"
4860 echo "static                    ${static-no}"
4861 echo "shared                    ${shared-no}"
4862 echo "postprocessing support    ${postproc-no}"
4863 echo "new filter support        ${avfilter-no}"
4864 echo "network support           ${network-no}"
4865 echo "threading support         ${thread_type-no}"
4866 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
4867 echo "SDL support               ${sdl-no}"
4868 echo "opencl enabled            ${opencl-no}"
4869 echo "libzvbi enabled           ${libzvbi-no}"
4870 echo "texi2html enabled         ${texi2html-no}"
4871 echo "perl enabled              ${perl-no}"
4872 echo "pod2man enabled           ${pod2man-no}"
4873 echo "makeinfo enabled          ${makeinfo-no}"
4874 test -n "$random_seed" &&
4875     echo "random seed               ${random_seed}"
4876 echo
4877
4878 echo "External libraries:"
4879 print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
4880 echo
4881
4882 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
4883     echo "Enabled ${type}s:"
4884     eval list=\$$(toupper $type)_LIST
4885     print_enabled '_*' $list | print_3_columns
4886     echo
4887 done
4888
4889 license="LGPL version 2.1 or later"
4890 if enabled nonfree; then
4891     license="nonfree and unredistributable"
4892 elif enabled gplv3; then
4893     license="GPL version 3 or later"
4894 elif enabled lgplv3; then
4895     license="LGPL version 3 or later"
4896 elif enabled gpl; then
4897     license="GPL version 2 or later"
4898 fi
4899
4900 echo "License: $license"
4901
4902 echo "Creating config.mak, config.h, and doc/config.texi..."
4903
4904 test -e Makefile || echo "include $source_path/Makefile" > Makefile
4905
4906 enabled stripping || strip="echo skipping strip"
4907
4908 config_files="$TMPH config.mak doc/config.texi"
4909
4910 cat > config.mak <<EOF
4911 # Automatically generated by configure - do not modify!
4912 ifndef FFMPEG_CONFIG_MAK
4913 FFMPEG_CONFIG_MAK=1
4914 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
4915 prefix=$prefix
4916 LIBDIR=\$(DESTDIR)$libdir
4917 SHLIBDIR=\$(DESTDIR)$shlibdir
4918 INCDIR=\$(DESTDIR)$incdir
4919 BINDIR=\$(DESTDIR)$bindir
4920 DATADIR=\$(DESTDIR)$datadir
4921 DOCDIR=\$(DESTDIR)$docdir
4922 MANDIR=\$(DESTDIR)$mandir
4923 SRC_PATH=$source_path
4924 ifndef MAIN_MAKEFILE
4925 SRC_PATH:=\$(SRC_PATH:.%=..%)
4926 endif
4927 CC_IDENT=$cc_ident
4928 ARCH=$arch
4929 CC=$cc
4930 CXX=$cxx
4931 AS=$as
4932 LD=$ld
4933 DEPCC=$dep_cc
4934 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
4935 DEPAS=$as
4936 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
4937 YASM=$yasmexe
4938 DEPYASM=$yasmexe
4939 AR=$ar
4940 ARFLAGS=$arflags
4941 AR_O=$ar_o
4942 RANLIB=$ranlib
4943 STRIP=$strip
4944 CP=cp -p
4945 LN_S=$ln_s
4946 CPPFLAGS=$CPPFLAGS
4947 CFLAGS=$CFLAGS
4948 CXXFLAGS=$CXXFLAGS
4949 ASFLAGS=$ASFLAGS
4950 AS_C=$AS_C
4951 AS_O=$AS_O
4952 CC_C=$CC_C
4953 CC_E=$CC_E
4954 CC_O=$CC_O
4955 CXX_C=$CXX_C
4956 CXX_O=$CXX_O
4957 LD_O=$LD_O
4958 LD_LIB=$LD_LIB
4959 LD_PATH=$LD_PATH
4960 DLLTOOL=$dlltool
4961 WINDRES=$windres
4962 DEPWINDRES=$dep_cc
4963 LDFLAGS=$LDFLAGS
4964 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
4965 ASMSTRIPFLAGS=$ASMSTRIPFLAGS
4966 YASMFLAGS=$YASMFLAGS
4967 BUILDSUF=$build_suffix
4968 PROGSSUF=$progs_suffix
4969 FULLNAME=$FULLNAME
4970 LIBPREF=$LIBPREF
4971 LIBSUF=$LIBSUF
4972 LIBNAME=$LIBNAME
4973 SLIBPREF=$SLIBPREF
4974 SLIBSUF=$SLIBSUF
4975 EXESUF=$EXESUF
4976 EXTRA_VERSION=$extra_version
4977 CCDEP=$CCDEP
4978 CXXDEP=$CXXDEP
4979 CCDEP_FLAGS=$CCDEP_FLAGS
4980 ASDEP=$ASDEP
4981 ASDEP_FLAGS=$ASDEP_FLAGS
4982 CC_DEPFLAGS=$CC_DEPFLAGS
4983 AS_DEPFLAGS=$AS_DEPFLAGS
4984 HOSTCC=$host_cc
4985 HOSTLD=$host_ld
4986 HOSTCFLAGS=$host_cflags
4987 HOSTCPPFLAGS=$host_cppflags
4988 HOSTEXESUF=$HOSTEXESUF
4989 HOSTLDFLAGS=$host_ldflags
4990 HOSTLIBS=$host_libs
4991 DEPHOSTCC=$host_cc
4992 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
4993 HOSTCCDEP=$HOSTCCDEP
4994 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
4995 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
4996 HOSTCC_C=$HOSTCC_C
4997 HOSTCC_O=$HOSTCC_O
4998 HOSTLD_O=$HOSTLD_O
4999 TARGET_EXEC=$target_exec $target_exec_args
5000 TARGET_PATH=$target_path
5001 TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
5002 LIBS-ffplay=$sdl_libs
5003 CFLAGS-ffplay=$sdl_cflags
5004 ZLIB=$($ldflags_filter -lz)
5005 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
5006 EXTRALIBS=$extralibs
5007 COMPAT_OBJS=$compat_objs
5008 EXEOBJS=$exeobjs
5009 INSTALL=$install
5010 LIBTARGET=${LIBTARGET}
5011 SLIBNAME=${SLIBNAME}
5012 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
5013 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
5014 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
5015 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
5016 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
5017 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
5018 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
5019 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
5020 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
5021 NOREDZONE_FLAGS=$noredzone_flags
5022 EOF
5023
5024 get_version(){
5025     lcname=lib${1}
5026     name=$(toupper $lcname)
5027     file=$source_path/$lcname/version.h
5028     eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
5029     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
5030     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
5031     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
5032     eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
5033 }
5034
5035 map 'get_version $v' $LIBRARY_LIST
5036
5037 cat > $TMPH <<EOF
5038 /* Automatically generated by configure - do not modify! */
5039 #ifndef FFMPEG_CONFIG_H
5040 #define FFMPEG_CONFIG_H
5041 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
5042 #define FFMPEG_LICENSE "$(c_escape $license)"
5043 #define CONFIG_THIS_YEAR 2013
5044 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
5045 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
5046 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
5047 #define av_restrict $_restrict
5048 #define EXTERN_PREFIX "${extern_prefix}"
5049 #define EXTERN_ASM ${extern_prefix}
5050 #define BUILDSUF "$build_suffix"
5051 #define SLIBSUF "$SLIBSUF"
5052 #define HAVE_MMX2 HAVE_MMXEXT
5053 EOF
5054
5055 test -n "$assert_level" &&
5056     echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
5057
5058 test -n "$malloc_prefix" &&
5059     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
5060
5061 if enabled yasm; then
5062     append config_files $TMPASM
5063     printf '' >$TMPASM
5064 fi
5065
5066 enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
5067
5068
5069 mkdir -p doc
5070 echo "@c auto-generated by configure" > doc/config.texi
5071
5072 print_config ARCH_   "$config_files" $ARCH_LIST
5073 print_config HAVE_   "$config_files" $HAVE_LIST
5074 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
5075                                      $CONFIG_EXTRA      \
5076                                      $ALL_COMPONENTS    \
5077
5078 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
5079 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
5080
5081 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
5082 cp_if_changed $TMPH config.h
5083 touch .config
5084
5085 enabled yasm && cp_if_changed $TMPASM config.asm
5086
5087 cat > $TMPH <<EOF
5088 /* Generated by ffconf */
5089 #ifndef AVUTIL_AVCONFIG_H
5090 #define AVUTIL_AVCONFIG_H
5091 EOF
5092
5093 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
5094
5095 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
5096
5097 cp_if_changed $TMPH libavutil/avconfig.h
5098
5099 if test -n "$WARNINGS"; then
5100     printf "\n$WARNINGS"
5101     enabled fatal_warnings && exit 1
5102 fi
5103
5104 # build pkg-config files
5105
5106 pkgconfig_generate(){
5107     name=$1
5108     shortname=${name#lib}${build_suffix}
5109     comment=$2
5110     version=$3
5111     libs=$4
5112     requires=$5
5113     enabled ${name#lib} || return 0
5114     mkdir -p $name
5115     cat <<EOF > $name/$name${build_suffix}.pc
5116 prefix=$prefix
5117 exec_prefix=\${prefix}
5118 libdir=$libdir
5119 includedir=$incdir
5120
5121 Name: $name
5122 Description: $comment
5123 Version: $version
5124 Requires: $(enabled shared || echo $requires)
5125 Requires.private: $(enabled shared && echo $requires)
5126 Conflicts:
5127 Libs: -L\${libdir} $(enabled rpath && echo "-Wl,-rpath,\${libdir}") -l${shortname} $(enabled shared || echo $libs)
5128 Libs.private: $(enabled shared && echo $libs)
5129 Cflags: -I\${includedir}
5130 EOF
5131
5132 mkdir -p doc/examples/pc-uninstalled
5133 includedir=${source_path}
5134 [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
5135     cat <<EOF > doc/examples/pc-uninstalled/$name.pc
5136 prefix=
5137 exec_prefix=
5138 libdir=\${pcfiledir}/../../../$name
5139 includedir=${includedir}
5140
5141 Name: $name
5142 Description: $comment
5143 Version: $version
5144 Requires: $requires
5145 Conflicts:
5146 Libs: -L\${libdir} -Wl,-rpath,\${libdir} -l${shortname} $(enabled shared || echo $libs)
5147 Cflags: -I\${includedir}
5148 EOF
5149 }
5150
5151 lavfi_libs="libavutil${build_suffix} = $LIBAVUTIL_VERSION"
5152 enabled libavfilter_deps_avcodec    && prepend lavfi_libs "libavcodec${build_suffix} = $LIBAVCODEC_VERSION,"
5153 enabled libavfilter_deps_avformat   && prepend lavfi_libs "libavformat${build_suffix} = $LIBAVFORMAT_VERSION,"
5154 enabled libavfilter_deps_avresample && prepend lavfi_libs "libavresample${build_suffix} = $LIBAVRESAMPLE_VERSION,"
5155 enabled libavfilter_deps_swscale    && prepend lavfi_libs "libswscale${build_suffix} = $LIBSWSCALE_VERSION,"
5156 enabled libavfilter_deps_swresample && prepend lavfi_libs "libswresample${build_suffix} = $LIBSWRESAMPLE_VERSION,"
5157 enabled libavfilter_deps_postproc   && prepend lavfi_libs "libpostproc${build_suffix} = $LIBPOSTPROC_VERSION,"
5158 lavfi_libs=${lavfi_libs%, }
5159
5160 lavd_libs="libavformat${build_suffix} = $LIBAVFORMAT_VERSION"
5161 enabled lavfi_indev && prepend lavd_libs "libavfilter${build_suffix} = $LIBAVFILTER_VERSION,"
5162
5163 pkgconfig_generate libavutil     "FFmpeg utility library"               "$LIBAVUTIL_VERSION"     "$LIBM"
5164 pkgconfig_generate libavcodec    "FFmpeg codec library"                 "$LIBAVCODEC_VERSION"    "$extralibs" "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
5165 pkgconfig_generate libavformat   "FFmpeg container format library"      "$LIBAVFORMAT_VERSION"   "$extralibs" "libavcodec${build_suffix} = $LIBAVCODEC_VERSION"
5166 pkgconfig_generate libavdevice   "FFmpeg device handling library"       "$LIBAVDEVICE_VERSION"   "$extralibs" "$lavd_libs"
5167 pkgconfig_generate libavfilter   "FFmpeg audio/video filtering library" "$LIBAVFILTER_VERSION"   "$extralibs" "$lavfi_libs"
5168 pkgconfig_generate libpostproc   "FFmpeg postprocessing library"        "$LIBPOSTPROC_VERSION"   ""           "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
5169 pkgconfig_generate libavresample "Libav audio resampling library"       "$LIBAVRESAMPLE_VERSION" "$extralibs" "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
5170 pkgconfig_generate libswscale    "FFmpeg image rescaling library"       "$LIBSWSCALE_VERSION"    "$LIBM"      "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
5171 pkgconfig_generate libswresample "FFmpeg audio resampling library"      "$LIBSWRESAMPLE_VERSION" "$LIBM"      "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
5172
5173 fix_ffmpeg_remote(){
5174     git_remote_from=$1
5175     git_remote_to=$2
5176     fixme_remote=$(git --git-dir=$source_path/.git --work-tree=$source_path remote -v | grep $git_remote_from | cut -f 1 | sort | uniq)
5177     if [ "$fixme_remote" != "" ]; then
5178         echolog "
5179 Outdated domain in git config, the official domain for ffmpeg git is since
5180 November 2011, source.ffmpeg.org, both the old and the new point to the same
5181 repository and server. To update it enter the following commands:
5182 "
5183         for remote in $fixme_remote; do
5184             echolog "git remote set-url $remote $git_remote_to"
5185         done
5186     fi
5187 }
5188
5189 if test -f "$source_path/.git/config"; then
5190     remote_from=git.videolan.org
5191     remote_to=source.ffmpeg.org
5192     fix_ffmpeg_remote git@$remote_from:ffmpeg   git@$remote_to:ffmpeg
5193     fix_ffmpeg_remote git://$remote_from/ffmpeg git://$remote_to/ffmpeg
5194 fi