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