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