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