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