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