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