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