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