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