lavfi/overlay: add yuv422 format mode
[ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
31     export FF_CONF_EXEC
32     if test "0$FF_CONF_EXEC" -lt 1; then
33         FF_CONF_EXEC=1
34         try_exec bash "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 2; then
37         FF_CONF_EXEC=2
38         try_exec ksh "$0" "$@"
39     fi
40     if test "0$FF_CONF_EXEC" -lt 3; then
41         FF_CONF_EXEC=3
42         try_exec /usr/xpg4/bin/sh "$0" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
47     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48     echo "Instead, install a working POSIX-compatible shell."
49     echo "Disabling this configure test will create a broken FFmpeg."
50     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51         echo "This bash version ($BASH_VERSION) is broken on your platform."
52         echo "Upgrade to a later version if available."
53     fi
54     exit 1
55 fi
56
57 test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
58
59 show_help(){
60     cat <<EOF
61 Usage: configure [options]
62 Options: [defaults in brackets after descriptions]
63
64 Help options:
65   --help                   print this message
66   --list-decoders          show all available decoders
67   --list-encoders          show all available encoders
68   --list-hwaccels          show all available hardware accelerators
69   --list-demuxers          show all available demuxers
70   --list-muxers            show all available muxers
71   --list-parsers           show all available parsers
72   --list-protocols         show all available protocols
73   --list-bsfs              show all available bitstream filters
74   --list-indevs            show all available input devices
75   --list-outdevs           show all available output devices
76   --list-filters           show all available filters
77
78 Standard options:
79   --logfile=FILE           log tests and output to FILE [config.log]
80   --disable-logging        do not log configure debug information
81   --fatal-warnings         fail if any configure warning is generated
82   --prefix=PREFIX          install in PREFIX [$prefix]
83   --bindir=DIR             install binaries in DIR [PREFIX/bin]
84   --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
85   --docdir=DIR             install documentation in DIR [PREFIX/share/doc/ffmpeg]
86   --libdir=DIR             install libs in DIR [PREFIX/lib]
87   --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
88   --incdir=DIR             install includes in DIR [PREFIX/include]
89   --mandir=DIR             install man page in DIR [PREFIX/share/man]
90   --enable-rpath           use rpath to allow installing libraries in paths
91                            not part of the dynamic linker search path
92
93 Licensing options:
94   --enable-gpl             allow use of GPL code, the resulting libs
95                            and binaries will be under GPL [no]
96   --enable-version3        upgrade (L)GPL to version 3 [no]
97   --enable-nonfree         allow use of nonfree code, the resulting libs
98                            and binaries will be unredistributable [no]
99
100 Configuration options:
101   --disable-static         do not build static libraries [no]
102   --enable-shared          build shared libraries [no]
103   --enable-small           optimize for size instead of speed
104   --disable-runtime-cpudetect disable detecting cpu capabilities at runtime (smaller binary)
105   --enable-gray            enable full grayscale support (slower color)
106   --disable-swscale-alpha  disable alpha channel support in swscale
107   --disable-all            disable building components, libraries and programs
108   --enable-incompatible-libav-abi enable incompatible Libav fork ABI [no]
109   --enable-incompatible-fork-abi  enable incompatible Libav fork ABI (deprecated) [no]
110   --enable-raise-major     increase major version numbers in sonames [no]
111
112 Program options:
113   --disable-programs       do not build command line programs
114   --disable-ffmpeg         disable ffmpeg build
115   --disable-ffplay         disable ffplay build
116   --disable-ffprobe        disable ffprobe build
117   --disable-ffserver       disable ffserver build
118
119 Documentation options:
120   --disable-doc            do not build documentation
121   --disable-htmlpages      do not build HTML documentation pages
122   --disable-manpages       do not build man documentation pages
123   --disable-podpages       do not build POD documentation pages
124   --disable-txtpages       do not build text documentation pages
125
126 Component options:
127   --disable-avdevice       disable libavdevice build
128   --disable-avcodec        disable libavcodec build
129   --disable-avformat       disable libavformat build
130   --disable-avutil         disable libavutil build
131   --disable-swresample     disable libswresample build
132   --disable-swscale        disable libswscale build
133   --disable-postproc       disable libpostproc build
134   --disable-avfilter       disable libavfilter build
135   --enable-avresample      enable libavresample build [no]
136   --disable-pthreads       disable pthreads [auto]
137   --disable-w32threads     disable Win32 threads [auto]
138   --disable-os2threads     disable OS/2 threads [auto]
139   --disable-network        disable network support [no]
140   --disable-dct            disable DCT code
141   --disable-dwt            disable DWT code
142   --disable-error-resilience disable error resilience code
143   --disable-lsp            disable LSP code
144   --disable-lzo            disable LZO decoder code
145   --disable-mdct           disable MDCT code
146   --disable-rdft           disable RDFT code
147   --disable-fft            disable FFT code
148
149 Hardware accelerators:
150   --disable-dxva2          disable DXVA2 code [autodetect]
151   --disable-vaapi          disable VAAPI code [autodetect]
152   --enable-vda             enable VDA code
153   --disable-vdpau          disable VDPAU code [autodetect]
154
155 Individual component options:
156   --disable-everything     disable all components listed below
157   --disable-encoder=NAME   disable encoder NAME
158   --enable-encoder=NAME    enable encoder NAME
159   --disable-encoders       disable all encoders
160   --disable-decoder=NAME   disable decoder NAME
161   --enable-decoder=NAME    enable decoder NAME
162   --disable-decoders       disable all decoders
163   --disable-hwaccel=NAME   disable hwaccel NAME
164   --enable-hwaccel=NAME    enable hwaccel NAME
165   --disable-hwaccels       disable all hwaccels
166   --disable-muxer=NAME     disable muxer NAME
167   --enable-muxer=NAME      enable muxer NAME
168   --disable-muxers         disable all muxers
169   --disable-demuxer=NAME   disable demuxer NAME
170   --enable-demuxer=NAME    enable demuxer NAME
171   --disable-demuxers       disable all demuxers
172   --enable-parser=NAME     enable parser NAME
173   --disable-parser=NAME    disable parser NAME
174   --disable-parsers        disable all parsers
175   --enable-bsf=NAME        enable bitstream filter NAME
176   --disable-bsf=NAME       disable bitstream filter NAME
177   --disable-bsfs           disable all bitstream filters
178   --enable-protocol=NAME   enable protocol NAME
179   --disable-protocol=NAME  disable protocol NAME
180   --disable-protocols      disable all protocols
181   --enable-indev=NAME      enable input device NAME
182   --disable-indev=NAME     disable input device NAME
183   --disable-indevs         disable input devices
184   --enable-outdev=NAME     enable output device NAME
185   --disable-outdev=NAME    disable output device NAME
186   --disable-outdevs        disable output devices
187   --disable-devices        disable all devices
188   --enable-filter=NAME     enable filter NAME
189   --disable-filter=NAME    disable filter NAME
190   --disable-filters        disable all filters
191
192 External library support:
193   --enable-avisynth        enable reading of AviSynth script files [no]
194   --disable-bzlib          disable bzlib [autodetect]
195   --enable-fontconfig      enable fontconfig
196   --enable-frei0r          enable frei0r video filtering
197   --enable-gnutls          enable gnutls [no]
198   --disable-iconv          disable iconv [autodetect]
199   --enable-ladspa          enable LADSPA audio filtering
200   --enable-libaacplus      enable AAC+ encoding via libaacplus [no]
201   --enable-libass          enable libass subtitles rendering [no]
202   --enable-libbluray       enable BluRay reading using libbluray [no]
203   --enable-libcaca         enable textual display using libcaca
204   --enable-libcelt         enable CELT decoding via libcelt [no]
205   --enable-libcdio         enable audio CD grabbing with libcdio
206   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
207                            and libraw1394 [no]
208   --enable-libfaac         enable AAC encoding via libfaac [no]
209   --enable-libfdk-aac      enable AAC de/encoding via libfdk-aac [no]
210   --enable-libflite        enable flite (voice synthesis) support via libflite [no]
211   --enable-libfreetype     enable libfreetype [no]
212   --enable-libgme          enable Game Music Emu via libgme [no]
213   --enable-libgsm          enable GSM de/encoding via libgsm [no]
214   --enable-libiec61883     enable iec61883 via libiec61883 [no]
215   --enable-libilbc         enable iLBC de/encoding via libilbc [no]
216   --enable-libmodplug      enable ModPlug via libmodplug [no]
217   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
218   --enable-libnut          enable NUT (de)muxing via libnut,
219                            native (de)muxer exists [no]
220   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
221   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
222   --enable-libopencv       enable video filtering via libopencv [no]
223   --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
224   --enable-libopus         enable Opus decoding via libopus [no]
225   --enable-libpulse        enable Pulseaudio input via libpulse [no]
226   --enable-libquvi         enable quvi input via libquvi [no]
227   --enable-librtmp         enable RTMP[E] support via librtmp [no]
228   --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
229   --enable-libshine        enable fixed-point MP3 encoding via libshine [no]
230   --enable-libsoxr         enable Include libsoxr resampling [no]
231   --enable-libspeex        enable Speex de/encoding via libspeex [no]
232   --enable-libssh          enable SFTP protocol via libssh [no]
233   --enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]
234   --enable-libtheora       enable Theora encoding via libtheora [no]
235   --enable-libtwolame      enable MP2 encoding via libtwolame [no]
236   --enable-libutvideo      enable Ut Video encoding and decoding via libutvideo [no]
237   --enable-libv4l2         enable libv4l2/v4l-utils [no]
238   --enable-libvidstab      enable video stabilization using vid.stab [no]
239   --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
240   --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
241   --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
242                            native implementation exists [no]
243   --enable-libvpx          enable VP8 and VP9 de/encoding via libvpx [no]
244   --enable-libwavpack      enable wavpack encoding via libwavpack [no]
245   --enable-libwebp         enable WebP encoding via libwebp [no]
246   --enable-libx264         enable H.264 encoding via x264 [no]
247   --enable-libxavs         enable AVS encoding via xavs [no]
248   --enable-libxvid         enable Xvid encoding via xvidcore,
249                            native MPEG-4/Xvid encoder exists [no]
250   --enable-libzmq          enable message passing via libzmq [no]
251   --enable-libzvbi         enable teletext support via libzvbi [no]
252   --enable-openal          enable OpenAL 1.1 capture support [no]
253   --enable-opencl          enable OpenCL code
254   --enable-opengl          enable OpenGL rendering [no]
255   --enable-openssl         enable openssl [no]
256   --enable-x11grab         enable X11 grabbing [no]
257   --disable-zlib           disable zlib [autodetect]
258
259 Advanced options (experts only):
260   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
261   --enable-cross-compile   assume a cross-compiler is used
262   --sysroot=PATH           root of cross-build tree
263   --sysinclude=PATH        location of cross-build system headers
264   --target-os=OS           compiler targets OS [$target_os]
265   --target-exec=CMD        command to run executables on target
266   --target-path=DIR        path to view of build directory on target
267   --target-samples=DIR     path to samples directory on target
268   --tempprefix=PATH        force fixed dir/prefix instead of mktemp for checks
269   --toolchain=NAME         set tool defaults according to NAME
270   --nm=NM                  use nm tool NM [$nm_default]
271   --ar=AR                  use archive tool AR [$ar_default]
272   --as=AS                  use assembler AS [$as_default]
273   --windres=WINDRES        use windows resource compiler WINDRES [$windres_default]
274   --yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]
275   --cc=CC                  use C compiler CC [$cc_default]
276   --cxx=CXX                use C compiler CXX [$cxx_default]
277   --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
278   --ld=LD                  use linker LD [$ld_default]
279   --host-cc=HOSTCC         use host C compiler HOSTCC
280   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
281   --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
282   --host-ld=HOSTLD         use host linker HOSTLD
283   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
284   --host-libs=HLIBS        use libs HLIBS when linking for host
285   --host-os=OS             compiler host OS [$target_os]
286   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
287   --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
288   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
289   --extra-libs=ELIBS       add ELIBS [$ELIBS]
290   --extra-version=STRING   version string suffix []
291   --optflags=OPTFLAGS      override optimization-related compiler flags
292   --build-suffix=SUFFIX    library name suffix []
293   --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
294   --progs-suffix=SUFFIX    program name suffix []
295   --arch=ARCH              select architecture [$arch]
296   --cpu=CPU                select the minimum required CPU (affects
297                            instruction selection, may crash on older CPUs)
298   --enable-pic             build position-independent code
299   --enable-sram            allow use of on-chip SRAM
300   --enable-thumb           compile for Thumb instruction set
301   --disable-symver         disable symbol versioning
302   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
303   --disable-safe-bitstream-reader
304                            disable buffer boundary checking in bitreaders
305                            (faster, but may crash)
306   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
307   --enable-lto             use link-time optimization
308
309 Optimization options (experts only):
310   --disable-asm            disable all assembler optimizations
311   --disable-altivec        disable AltiVec optimizations
312   --disable-amd3dnow       disable 3DNow! optimizations
313   --disable-amd3dnowext    disable 3DNow! extended optimizations
314   --disable-mmx            disable MMX optimizations
315   --disable-mmxext         disable MMXEXT optimizations
316   --disable-sse            disable SSE optimizations
317   --disable-sse2           disable SSE2 optimizations
318   --disable-sse3           disable SSE3 optimizations
319   --disable-ssse3          disable SSSE3 optimizations
320   --disable-sse4           disable SSE4 optimizations
321   --disable-sse42          disable SSE4.2 optimizations
322   --disable-avx            disable AVX optimizations
323   --disable-fma4           disable FMA4 optimizations
324   --disable-avx2           disable AVX2 optimizations
325   --disable-armv5te        disable armv5te optimizations
326   --disable-armv6          disable armv6 optimizations
327   --disable-armv6t2        disable armv6t2 optimizations
328   --disable-vfp            disable VFP optimizations
329   --disable-neon           disable NEON optimizations
330   --disable-vis            disable VIS optimizations
331   --disable-inline-asm     disable use of inline assembler
332   --disable-yasm           disable use of yasm assembler
333   --disable-mips32r2       disable MIPS32R2 optimizations
334   --disable-mipsdspr1      disable MIPS DSP ASE R1 optimizations
335   --disable-mipsdspr2      disable MIPS DSP ASE R2 optimizations
336   --disable-mipsfpu        disable floating point MIPS optimizations
337   --disable-fast-unaligned consider unaligned accesses slow
338
339 Developer options (useful when working on FFmpeg itself):
340   --disable-debug          disable debugging symbols
341   --enable-debug=LEVEL     set the debug level [$debuglevel]
342   --disable-optimizations  disable compiler optimizations
343   --enable-extra-warnings  enable more compiler warnings
344   --disable-stripping      disable stripping of executables and shared libraries
345   --assert-level=level     0(default), 1 or 2, amount of assertion testing,
346                            2 causes a slowdown at runtime.
347   --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
348   --valgrind=VALGRIND      run "make fate" tests through valgrind to detect memory
349                            leaks and errors, using the specified valgrind binary.
350                            Cannot be combined with --target-exec
351   --enable-ftrapv          Trap arithmetic overflows
352   --samples=PATH           location of test samples for FATE, if not set use
353                            \$FATE_SAMPLES at make invocation time.
354   --enable-neon-clobber-test check NEON registers for clobbering (should be
355                            used only for debugging purposes)
356   --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
357                            should be used only for debugging purposes)
358   --enable-random          randomly enable/disable components
359   --disable-random
360   --enable-random=LIST     randomly enable/disable specific components or
361   --disable-random=LIST    component groups. LIST is a comma-separated list
362                            of NAME[:PROB] entries where NAME is a component
363                            (group) and PROB the probability associated with
364                            NAME (default 0.5).
365   --random-seed=VALUE      seed value for --enable/disable-random
366
367 NOTE: Object files are built at the place where configure is launched.
368 EOF
369   exit 0
370 }
371
372 quotes='""'
373
374 log(){
375     echo "$@" >> $logfile
376 }
377
378 log_file(){
379     log BEGIN $1
380     pr -n -t $1 >> $logfile
381     log END $1
382 }
383
384 echolog(){
385     log "$@"
386     echo "$@"
387 }
388
389 warn(){
390     log "WARNING: $*"
391     WARNINGS="${WARNINGS}WARNING: $*\n"
392 }
393
394 die(){
395     echolog "$@"
396     cat <<EOF
397
398 If you think configure made a mistake, make sure you are using the latest
399 version from Git.  If the latest version fails, report the problem to the
400 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
401 EOF
402     if disabled logging; then
403         cat <<EOF
404 Rerun configure with logging enabled (do not use --disable-logging), and
405 include the log this produces with your report.
406 EOF
407     else
408         cat <<EOF
409 Include the log file "$logfile" produced by configure as this will help
410 solving the problem.
411 EOF
412     fi
413     exit 1
414 }
415
416 # Avoid locale weirdness, besides we really just want to translate ASCII.
417 toupper(){
418     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
419 }
420
421 tolower(){
422     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
423 }
424
425 c_escape(){
426     echo "$*" | sed 's/["\\]/\\\0/g'
427 }
428
429 sh_quote(){
430     v=$(echo "$1" | sed "s/'/'\\\\''/g")
431     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
432     echo "$v"
433 }
434
435 cleanws(){
436     echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//;s/\r//g'
437 }
438
439 filter(){
440     pat=$1
441     shift
442     for v; do
443         eval "case $v in $pat) echo $v ;; esac"
444     done
445 }
446
447 filter_out(){
448     pat=$1
449     shift
450     for v; do
451         eval "case $v in $pat) ;; *) echo $v ;; esac"
452     done
453 }
454
455 map(){
456     m=$1
457     shift
458     for v; do eval $m; done
459 }
460
461 add_suffix(){
462     suffix=$1
463     shift
464     for v; do echo ${v}${suffix}; done
465 }
466
467 set_all(){
468     value=$1
469     shift
470     for var in $*; do
471         eval $var=$value
472     done
473 }
474
475 set_weak(){
476     value=$1
477     shift
478     for var; do
479         eval : \${$var:=$value}
480     done
481 }
482
483 sanitize_var_name(){
484     echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
485 }
486
487 set_safe(){
488     var=$1
489     shift
490     eval $(sanitize_var_name "$var")='$*'
491 }
492
493 get_safe(){
494     eval echo \$$(sanitize_var_name "$1")
495 }
496
497 pushvar(){
498     for pvar in $*; do
499         eval level=\${${pvar}_level:=0}
500         eval ${pvar}_${level}="\$$pvar"
501         eval ${pvar}_level=$(($level+1))
502     done
503 }
504
505 popvar(){
506     for pvar in $*; do
507         eval level=\${${pvar}_level:-0}
508         test $level = 0 && continue
509         eval level=$(($level-1))
510         eval $pvar="\${${pvar}_${level}}"
511         eval ${pvar}_level=$level
512         eval unset ${pvar}_${level}
513     done
514 }
515
516 enable(){
517     set_all yes $*
518 }
519
520 disable(){
521     set_all no $*
522 }
523
524 enable_weak(){
525     set_weak yes $*
526 }
527
528 disable_weak(){
529     set_weak no $*
530 }
531
532 enable_safe(){
533     for var; do
534         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
535     done
536 }
537
538 disable_safe(){
539     for var; do
540         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
541     done
542 }
543
544 do_enable_deep(){
545     for var; do
546         enabled $var && continue
547         eval sel="\$${var}_select"
548         eval sgs="\$${var}_suggest"
549         pushvar var sgs
550         enable_deep $sel
551         popvar sgs
552         enable_deep_weak $sgs
553         popvar var
554     done
555 }
556
557 enable_deep(){
558     do_enable_deep $*
559     enable $*
560 }
561
562 enable_deep_weak(){
563     for var; do
564         disabled $var && continue
565         pushvar var
566         do_enable_deep $var
567         popvar var
568         enable_weak $var
569     done
570 }
571
572 enabled(){
573     test "${1#!}" = "$1" && op== || op=!=
574     eval test "x\$${1#!}" $op "xyes"
575 }
576
577 disabled(){
578     test "${1#!}" = "$1" && op== || op=!=
579     eval test "x\$${1#!}" $op "xno"
580 }
581
582 enabled_all(){
583     for opt; do
584         enabled $opt || return 1
585     done
586 }
587
588 disabled_all(){
589     for opt; do
590         disabled $opt || return 1
591     done
592 }
593
594 enabled_any(){
595     for opt; do
596         enabled $opt && return 0
597     done
598 }
599
600 disabled_any(){
601     for opt; do
602         disabled $opt && return 0
603     done
604     return 1
605 }
606
607 set_default(){
608     for opt; do
609         eval : \${$opt:=\$${opt}_default}
610     done
611 }
612
613 is_in(){
614     value=$1
615     shift
616     for var in $*; do
617         [ $var = $value ] && return 0
618     done
619     return 1
620 }
621
622 do_check_deps(){
623     for cfg; do
624         cfg="${cfg#!}"
625         enabled ${cfg}_checking && die "Circular dependency for $cfg."
626         disabled ${cfg}_checking && continue
627         enable ${cfg}_checking
628         append allopts $cfg
629
630         eval dep_all="\$${cfg}_deps"
631         eval dep_any="\$${cfg}_deps_any"
632         eval dep_sel="\$${cfg}_select"
633         eval dep_sgs="\$${cfg}_suggest"
634         eval dep_ifa="\$${cfg}_if"
635         eval dep_ifn="\$${cfg}_if_any"
636
637         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
638         do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
639         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
640
641         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
642         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
643         enabled_all  $dep_all || disable $cfg
644         enabled_any  $dep_any || disable $cfg
645         disabled_any $dep_sel && disable $cfg
646
647         if enabled $cfg; then
648             enable_deep $dep_sel
649             enable_deep_weak $dep_sgs
650         fi
651
652         disable ${cfg}_checking
653     done
654 }
655
656 check_deps(){
657     unset allopts
658
659     do_check_deps "$@"
660
661     for cfg in $allopts; do
662         enabled $cfg || continue
663         eval dep_extralibs="\$${cfg}_extralibs"
664         test -n "$dep_extralibs" && add_extralibs $dep_extralibs
665     done
666 }
667
668 print_config(){
669     pfx=$1
670     files=$2
671     shift 2
672     map 'eval echo "$v \${$v:-no}"' "$@" |
673     awk "BEGIN { split(\"$files\", files) }
674         {
675             c = \"$pfx\" toupper(\$1);
676             v = \$2;
677             sub(/yes/, 1, v);
678             sub(/no/,  0, v);
679             for (f in files) {
680                 file = files[f];
681                 if (file ~ /\\.h\$/) {
682                     printf(\"#define %s %d\\n\", c, v) >>file;
683                 } else if (file ~ /\\.asm\$/) {
684                     printf(\"%%define %s %d\\n\", c, v) >>file;
685                 } else if (file ~ /\\.mak\$/) {
686                     n = -v ? \"\" : \"!\";
687                     printf(\"%s%s=yes\\n\", n, c) >>file;
688                 } else if (file ~ /\\.texi\$/) {
689                     pre = -v ? \"\" : \"@c \";
690                     yesno = \$2;
691                     c2 = tolower(c);
692                     gsub(/_/, \"-\", c2);
693                     printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;
694                 }
695             }
696         }"
697 }
698
699 print_enabled(){
700     suf=$1
701     shift
702     for v; do
703         enabled $v && printf "%s\n" ${v%$suf};
704     done
705 }
706
707 append(){
708     var=$1
709     shift
710     eval "$var=\"\$$var $*\""
711 }
712
713 prepend(){
714     var=$1
715     shift
716     eval "$var=\"$* \$$var\""
717 }
718
719 add_cppflags(){
720     append CPPFLAGS "$@"
721 }
722
723 add_cflags(){
724     append CFLAGS $($cflags_filter "$@")
725 }
726
727 add_cxxflags(){
728     append CXXFLAGS $($cflags_filter "$@")
729 }
730
731 add_asflags(){
732     append ASFLAGS $($asflags_filter "$@")
733 }
734
735 add_ldflags(){
736     append LDFLAGS $($ldflags_filter "$@")
737 }
738
739 add_stripflags(){
740     append ASMSTRIPFLAGS "$@"
741 }
742
743 add_extralibs(){
744     prepend extralibs $($ldflags_filter "$@")
745 }
746
747 add_host_cppflags(){
748     append host_cppflags "$@"
749 }
750
751 add_host_cflags(){
752     append host_cflags $($host_cflags_filter "$@")
753 }
754
755 add_host_ldflags(){
756     append host_ldflags $($host_ldflags_filter "$@")
757 }
758
759 add_compat(){
760     append compat_objs $1
761     shift
762     map 'add_cppflags -D$v' "$@"
763 }
764
765 check_cmd(){
766     log "$@"
767     "$@" >> $logfile 2>&1
768 }
769
770 cc_o(){
771     eval printf '%s\\n' $CC_O
772 }
773
774 cc_e(){
775     eval printf '%s\\n' $CC_E
776 }
777
778 check_cc(){
779     log check_cc "$@"
780     cat > $TMPC
781     log_file $TMPC
782     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
783 }
784
785 check_cxx(){
786     log check_cxx "$@"
787     cat > $TMPCPP
788     log_file $TMPCPP
789     check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
790 }
791
792 check_cpp(){
793     log check_cpp "$@"
794     cat > $TMPC
795     log_file $TMPC
796     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
797 }
798
799 as_o(){
800     eval printf '%s\\n' $AS_O
801 }
802
803 check_as(){
804     log check_as "$@"
805     cat > $TMPS
806     log_file $TMPS
807     check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
808 }
809
810 check_inline_asm(){
811     log check_inline_asm "$@"
812     name="$1"
813     code="$2"
814     shift 2
815     disable $name
816     check_cc "$@" <<EOF && enable $name
817 void foo(void){ __asm__ volatile($code); }
818 EOF
819 }
820
821 check_insn(){
822     log check_insn "$@"
823     check_inline_asm ${1}_inline "\"$2\""
824     echo "$2" | check_as && enable ${1}_external || disable ${1}_external
825 }
826
827 check_yasm(){
828     log check_yasm "$@"
829     echo "$1" > $TMPS
830     log_file $TMPS
831     shift 1
832     check_cmd $yasmexe $YASMFLAGS -Werror "$@" -o $TMPO $TMPS
833 }
834
835 ld_o(){
836     eval printf '%s\\n' $LD_O
837 }
838
839 check_ld(){
840     log check_ld "$@"
841     type=$1
842     shift 1
843     flags=$(filter_out '-l*|*.so' $@)
844     libs=$(filter '-l*|*.so' $@)
845     check_$type $($cflags_filter $flags) || return
846     flags=$($ldflags_filter $flags)
847     libs=$($ldflags_filter $libs)
848     check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
849 }
850
851 print_include(){
852     hdr=$1
853     test "${hdr%.h}" = "${hdr}" &&
854         echo "#include $hdr"    ||
855         echo "#include <$hdr>"
856 }
857
858 check_code(){
859     log check_code "$@"
860     check=$1
861     headers=$2
862     code=$3
863     shift 3
864     {
865         for hdr in $headers; do
866             print_include $hdr
867         done
868         echo "int main(void) { $code; return 0; }"
869     } | check_$check "$@"
870 }
871
872 check_cppflags(){
873     log check_cppflags "$@"
874     check_cc "$@" <<EOF && append CPPFLAGS "$@"
875 int x;
876 EOF
877 }
878
879 test_cflags(){
880     log test_cflags "$@"
881     set -- $($cflags_filter "$@")
882     check_cc "$@" <<EOF
883 int x;
884 EOF
885 }
886
887 check_cflags(){
888     log check_cflags "$@"
889     test_cflags "$@" && add_cflags "$@"
890 }
891
892 check_cxxflags(){
893     log check_cxxflags "$@"
894     set -- $($cflags_filter "$@")
895     check_cxx "$@" <<EOF && append CXXFLAGS "$@"
896 int x;
897 EOF
898 }
899
900 test_ldflags(){
901     log test_ldflags "$@"
902     check_ld "cc" "$@" <<EOF
903 int main(void){ return 0; }
904 EOF
905 }
906
907 check_ldflags(){
908     log check_ldflags "$@"
909     test_ldflags "$@" && add_ldflags "$@"
910 }
911
912 test_stripflags(){
913     log test_stripflags "$@"
914     # call check_cc to get a fresh TMPO
915     check_cc <<EOF
916 int main(void) { return 0; }
917 EOF
918     check_cmd $strip $ASMSTRIPFLAGS "$@" $TMPO
919 }
920
921 check_stripflags(){
922     log check_stripflags "$@"
923     test_stripflags "$@" && add_stripflags "$@"
924 }
925
926 check_header(){
927     log check_header "$@"
928     header=$1
929     shift
930     disable_safe $header
931     check_cpp "$@" <<EOF && enable_safe $header
932 #include <$header>
933 int x;
934 EOF
935 }
936
937 check_func(){
938     log check_func "$@"
939     func=$1
940     shift
941     disable $func
942     check_ld "cc" "$@" <<EOF && enable $func
943 extern int $func();
944 int main(void){ $func(); }
945 EOF
946 }
947
948 check_mathfunc(){
949     log check_mathfunc "$@"
950     func=$1
951     narg=$2
952     shift 2
953     test $narg = 2 && args="f, g" || args="f"
954     disable $func
955     check_ld "cc" "$@" <<EOF && enable $func
956 #include <math.h>
957 float foo(float f, float g) { return $func($args); }
958 int main(void){ return (int) foo; }
959 EOF
960 }
961
962 check_func_headers(){
963     log check_func_headers "$@"
964     headers=$1
965     funcs=$2
966     shift 2
967     {
968         for hdr in $headers; do
969             print_include $hdr
970         done
971         for func in $funcs; do
972             echo "long check_$func(void) { return (long) $func; }"
973         done
974         echo "int main(void) { return 0; }"
975     } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
976 }
977
978 check_class_headers_cpp(){
979     log check_class_headers_cpp "$@"
980     headers=$1
981     classes=$2
982     shift 2
983     {
984         for hdr in $headers; do
985             echo "#include <$hdr>"
986         done
987         echo "int main(void) { "
988         i=1
989         for class in $classes; do
990             echo "$class obj$i;"
991             i=$(expr $i + 1)
992         done
993         echo "return 0; }"
994     } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
995 }
996
997 check_cpp_condition(){
998     log check_cpp_condition "$@"
999     header=$1
1000     condition=$2
1001     shift 2
1002     check_cpp "$@" <<EOF
1003 #include <$header>
1004 #if !($condition)
1005 #error "unsatisfied condition: $condition"
1006 #endif
1007 EOF
1008 }
1009
1010 check_lib(){
1011     log check_lib "$@"
1012     header="$1"
1013     func="$2"
1014     shift 2
1015     check_header $header && check_func $func "$@" && add_extralibs "$@"
1016 }
1017
1018 check_lib2(){
1019     log check_lib2 "$@"
1020     headers="$1"
1021     funcs="$2"
1022     shift 2
1023     check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
1024 }
1025
1026 check_lib_cpp(){
1027     log check_lib_cpp "$@"
1028     headers="$1"
1029     classes="$2"
1030     shift 2
1031     check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
1032 }
1033
1034 check_pkg_config(){
1035     log check_pkg_config "$@"
1036     pkgandversion="$1"
1037     pkg="${1%% *}"
1038     headers="$2"
1039     funcs="$3"
1040     shift 3
1041     check_cmd $pkg_config --exists --print-errors $pkgandversion || return
1042     pkg_cflags=$($pkg_config --cflags $pkg)
1043     pkg_libs=$($pkg_config --libs $pkg)
1044     check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1045         set_safe ${pkg}_cflags $pkg_cflags   &&
1046         set_safe ${pkg}_libs   $pkg_libs
1047 }
1048
1049 check_exec(){
1050     check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1051 }
1052
1053 check_exec_crash(){
1054     code=$(cat)
1055
1056     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
1057     # are safe but may not be available everywhere.  Thus we use
1058     # raise(SIGTERM) instead.  The check is run in a subshell so we
1059     # can redirect the "Terminated" message from the shell.  SIGBUS
1060     # is not defined by standard C so it is used conditionally.
1061
1062     (check_exec "$@") >> $logfile 2>&1 <<EOF
1063 #include <signal.h>
1064 static void sighandler(int sig){
1065     raise(SIGTERM);
1066 }
1067 int foo(void){
1068     $code
1069 }
1070 int (*func_ptr)(void) = foo;
1071 int main(void){
1072     signal(SIGILL, sighandler);
1073     signal(SIGFPE, sighandler);
1074     signal(SIGSEGV, sighandler);
1075 #ifdef SIGBUS
1076     signal(SIGBUS, sighandler);
1077 #endif
1078     return func_ptr();
1079 }
1080 EOF
1081 }
1082
1083 check_type(){
1084     log check_type "$@"
1085     headers=$1
1086     type=$2
1087     shift 2
1088     disable_safe "$type"
1089     check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1090 }
1091
1092 check_struct(){
1093     log check_struct "$@"
1094     headers=$1
1095     struct=$2
1096     member=$3
1097     shift 3
1098     disable_safe "${struct}_${member}"
1099     check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1100         enable_safe "${struct}_${member}"
1101 }
1102
1103 check_builtin(){
1104     log check_builtin "$@"
1105     name=$1
1106     headers=$2
1107     builtin=$3
1108     shift 3
1109     disable "$name"
1110     check_code ld "$headers" "$builtin" "cc" "$@" && enable "$name"
1111 }
1112
1113 require(){
1114     name="$1"
1115     header="$2"
1116     func="$3"
1117     shift 3
1118     check_lib $header $func "$@" || die "ERROR: $name not found"
1119 }
1120
1121 require2(){
1122     name="$1"
1123     headers="$2"
1124     func="$3"
1125     shift 3
1126     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
1127 }
1128
1129 require_cpp(){
1130     name="$1"
1131     headers="$2"
1132     classes="$3"
1133     shift 3
1134     check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
1135 }
1136
1137 require_pkg_config(){
1138     pkg="$1"
1139     check_pkg_config "$@" || die "ERROR: $pkg not found"
1140     add_cflags    $(get_safe ${pkg}_cflags)
1141     add_extralibs $(get_safe ${pkg}_libs)
1142 }
1143
1144 require_libfreetype(){
1145     log require_libfreetype "$@"
1146     pkg="freetype2"
1147     check_cmd $pkg_config --exists --print-errors $pkg \
1148       || die "ERROR: $pkg not found"
1149     pkg_cflags=$($pkg_config --cflags $pkg)
1150     pkg_libs=$($pkg_config --libs $pkg)
1151     {
1152         echo "#include <ft2build.h>"
1153         echo "#include FT_FREETYPE_H"
1154         echo "long check_func(void) { return (long) FT_Init_FreeType; }"
1155         echo "int main(void) { return 0; }"
1156     } | check_ld "cc" $pkg_cflags $pkg_libs \
1157       && set_safe ${pkg}_cflags $pkg_cflags \
1158       && set_safe ${pkg}_libs   $pkg_libs \
1159       || die "ERROR: $pkg not found"
1160     add_cflags    $(get_safe ${pkg}_cflags)
1161     add_extralibs $(get_safe ${pkg}_libs)
1162 }
1163
1164 hostcc_e(){
1165     eval printf '%s\\n' $HOSTCC_E
1166 }
1167
1168 hostcc_o(){
1169     eval printf '%s\\n' $HOSTCC_O
1170 }
1171
1172 check_host_cc(){
1173     log check_host_cc "$@"
1174     cat > $TMPC
1175     log_file $TMPC
1176     check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1177 }
1178
1179 check_host_cpp(){
1180     log check_host_cpp "$@"
1181     cat > $TMPC
1182     log_file $TMPC
1183     check_cmd $host_cc $HOSTCPPFLAGS $HOSTCFLAGS "$@" $(hostcc_e $TMPO) $TMPC
1184 }
1185
1186 check_host_cppflags(){
1187     log check_host_cppflags "$@"
1188     check_host_cc "$@" <<EOF && append host_cppflags "$@"
1189 int x;
1190 EOF
1191 }
1192
1193 check_host_cflags(){
1194     log check_host_cflags "$@"
1195     set -- $($host_cflags_filter "$@")
1196     check_host_cc "$@" <<EOF && append host_cflags "$@"
1197 int x;
1198 EOF
1199 }
1200
1201 check_host_cpp_condition(){
1202     log check_host_cpp_condition "$@"
1203     header=$1
1204     condition=$2
1205     shift 2
1206     check_host_cpp "$@" <<EOF
1207 #include <$header>
1208 #if !($condition)
1209 #error "unsatisfied condition: $condition"
1210 #endif
1211 EOF
1212 }
1213
1214 apply(){
1215     file=$1
1216     shift
1217     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1218 }
1219
1220 cp_if_changed(){
1221     cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1222     mkdir -p "$(dirname $2)"
1223     $cp_f "$1" "$2"
1224 }
1225
1226 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1227 # system-dependent things.
1228
1229 COMPONENT_LIST="
1230     bsfs
1231     decoders
1232     demuxers
1233     encoders
1234     filters
1235     hwaccels
1236     indevs
1237     muxers
1238     outdevs
1239     parsers
1240     protocols
1241 "
1242
1243 EXAMPLE_LIST="
1244     decoding_encoding_example
1245     demuxing_decoding_example
1246     filtering_audio_example
1247     filtering_video_example
1248     metadata_example
1249     muxing_example
1250     remuxing_example
1251     resampling_audio_example
1252     scaling_video_example
1253     transcode_aac_example
1254 "
1255
1256 EXTERNAL_LIBRARY_LIST="
1257     avisynth
1258     bzlib
1259     crystalhd
1260     fontconfig
1261     frei0r
1262     gnutls
1263     iconv
1264     ladspa
1265     libaacplus
1266     libass
1267     libbluray
1268     libcaca
1269     libcdio
1270     libcelt
1271     libdc1394
1272     libfaac
1273     libfdk_aac
1274     libflite
1275     libfreetype
1276     libgme
1277     libgsm
1278     libiec61883
1279     libilbc
1280     libmodplug
1281     libmp3lame
1282     libnut
1283     libopencore_amrnb
1284     libopencore_amrwb
1285     libopencv
1286     libopenjpeg
1287     libopus
1288     libpulse
1289     libquvi
1290     librtmp
1291     libschroedinger
1292     libshine
1293     libsoxr
1294     libspeex
1295     libssh
1296     libstagefright_h264
1297     libtheora
1298     libtwolame
1299     libutvideo
1300     libv4l2
1301     libvidstab
1302     libvo_aacenc
1303     libvo_amrwbenc
1304     libvorbis
1305     libvpx
1306     libwavpack
1307     libwebp
1308     libx264
1309     libxavs
1310     libxvid
1311     libzmq
1312     libzvbi
1313     openal
1314     opencl
1315     opengl
1316     openssl
1317     x11grab
1318     zlib
1319 "
1320
1321 DOCUMENT_LIST="
1322     doc
1323     htmlpages
1324     manpages
1325     podpages
1326     txtpages
1327 "
1328
1329 HWACCEL_LIST="
1330     dxva2
1331     vaapi
1332     vda
1333     vdpau
1334     xvmc
1335 "
1336
1337 LIBRARY_LIST="
1338     avcodec
1339     avdevice
1340     avfilter
1341     avformat
1342     avresample
1343     avutil
1344     postproc
1345     swresample
1346     swscale
1347 "
1348
1349 PROGRAM_LIST="
1350     ffplay
1351     ffprobe
1352     ffserver
1353     ffmpeg
1354 "
1355
1356 CONFIG_LIST="
1357     $COMPONENT_LIST
1358     $DOCUMENT_LIST
1359     $EXAMPLE_LIST
1360     $EXTERNAL_LIBRARY_LIST
1361     $HWACCEL_LIST
1362     $LIBRARY_LIST
1363     $PROGRAM_LIST
1364     dct
1365     dwt
1366     error_resilience
1367     fast_unaligned
1368     fft
1369     ftrapv
1370     gpl
1371     gray
1372     hardcoded_tables
1373     incompatible_libav_abi
1374     incompatible_fork_abi
1375     lsp
1376     lzo
1377     mdct
1378     memalign_hack
1379     memory_poisoning
1380     neon_clobber_test
1381     network
1382     nonfree
1383     pic
1384     raise_major
1385     rdft
1386     runtime_cpudetect
1387     safe_bitstream_reader
1388     shared
1389     small
1390     sram
1391     static
1392     swscale_alpha
1393     thumb
1394     version3
1395     xmm_clobber_test
1396 "
1397
1398 THREADS_LIST='
1399     pthreads
1400     w32threads
1401     os2threads
1402 '
1403
1404 ATOMICS_LIST='
1405     atomics_gcc
1406     atomics_suncc
1407     atomics_win32
1408 '
1409
1410 ARCH_LIST='
1411     aarch64
1412     alpha
1413     arm
1414     avr32
1415     avr32_ap
1416     avr32_uc
1417     bfin
1418     ia64
1419     m68k
1420     mips
1421     mips64
1422     parisc
1423     ppc
1424     ppc64
1425     s390
1426     sh4
1427     sparc
1428     sparc64
1429     tilegx
1430     tilepro
1431     tomi
1432     x86
1433     x86_32
1434     x86_64
1435 '
1436
1437 ARCH_EXT_LIST_ARM='
1438     armv5te
1439     armv6
1440     armv6t2
1441     neon
1442     vfp
1443     vfpv3
1444 '
1445
1446 ARCH_EXT_LIST_X86='
1447     amd3dnow
1448     amd3dnowext
1449     avx
1450     avx2
1451     fma4
1452     i686
1453     mmx
1454     mmxext
1455     sse
1456     sse2
1457     sse3
1458     sse4
1459     sse42
1460     ssse3
1461 '
1462
1463 ARCH_EXT_LIST="
1464     $ARCH_EXT_LIST_ARM
1465     $ARCH_EXT_LIST_X86
1466     altivec
1467     ppc4xx
1468     vis
1469     mipsfpu
1470     mips32r2
1471     mipsdspr1
1472     mipsdspr2
1473 "
1474
1475 HAVE_LIST_CMDLINE='
1476     inline_asm
1477     symver
1478     yasm
1479 '
1480
1481 HAVE_LIST_PUB='
1482     bigendian
1483     fast_unaligned
1484     incompatible_libav_abi
1485     incompatible_fork_abi
1486 '
1487
1488 MATH_FUNCS="
1489     atanf
1490     atan2f
1491     cbrt
1492     cbrtf
1493     cosf
1494     exp2
1495     exp2f
1496     expf
1497     isinf
1498     isnan
1499     ldexpf
1500     llrint
1501     llrintf
1502     log2
1503     log2f
1504     log10f
1505     lrint
1506     lrintf
1507     powf
1508     rint
1509     round
1510     roundf
1511     sinf
1512     trunc
1513     truncf
1514 "
1515
1516 HAVE_LIST="
1517     $ARCH_EXT_LIST
1518     $(add_suffix _external $ARCH_EXT_LIST)
1519     $(add_suffix _inline   $ARCH_EXT_LIST)
1520     $HAVE_LIST_CMDLINE
1521     $HAVE_LIST_PUB
1522     $THREADS_LIST
1523     $ATOMICS_LIST
1524     $MATH_FUNCS
1525     access
1526     aligned_malloc
1527     aligned_stack
1528     alsa_asoundlib_h
1529     altivec_h
1530     arpa_inet_h
1531     asm_mod_q
1532     asm_mod_y
1533     asm_types_h
1534     atomic_cas_ptr
1535     atomics_native
1536     attribute_may_alias
1537     attribute_packed
1538     cdio_paranoia_h
1539     cdio_paranoia_paranoia_h
1540     CL_cl_h
1541     clock_gettime
1542     closesocket
1543     CommandLineToArgvW
1544     cpunop
1545     CryptGenRandom
1546     dcbzl
1547     dev_bktr_ioctl_bt848_h
1548     dev_bktr_ioctl_meteor_h
1549     dev_ic_bt8xx_h
1550     dev_video_bktr_ioctl_bt848_h
1551     dev_video_meteor_ioctl_meteor_h
1552     direct_h
1553     dlfcn_h
1554     dlopen
1555     dos_paths
1556     dxva_h
1557     ebp_available
1558     ebx_available
1559     ES2_gl_h
1560     fast_64bit
1561     fast_clz
1562     fast_cmov
1563     fcntl
1564     fork
1565     getaddrinfo
1566     gethrtime
1567     getopt
1568     GetProcessAffinityMask
1569     GetProcessMemoryInfo
1570     GetProcessTimes
1571     GetSystemTimeAsFileTime
1572     getrusage
1573     getservbyport
1574     gettimeofday
1575     glob
1576     glXGetProcAddress
1577     gnu_as
1578     gnu_windres
1579     gsm_h
1580     ibm_asm
1581     inet_aton
1582     io_h
1583     inline_asm_labels
1584     isatty
1585     jack_port_get_latency_range
1586     kbhit
1587     ldbrx
1588     libc_msvcrt
1589     libdc1394_1
1590     libdc1394_2
1591     local_aligned_16
1592     local_aligned_8
1593     localtime_r
1594     loongson
1595     lzo1x_999_compress
1596     machine_ioctl_bt848_h
1597     machine_ioctl_meteor_h
1598     machine_rw_barrier
1599     makeinfo
1600     malloc_h
1601     MapViewOfFile
1602     memalign
1603     MemoryBarrier
1604     mkstemp
1605     mm_empty
1606     mmap
1607     mprotect
1608     nanosleep
1609     openjpeg_1_5_openjpeg_h
1610     OpenGL_gl3_h
1611     PeekNamedPipe
1612     perl
1613     pod2man
1614     poll_h
1615     posix_memalign
1616     pragma_deprecated
1617     pthread_cancel
1618     rdtsc
1619     rsync_contimeout
1620     sarestart
1621     sched_getaffinity
1622     sdl
1623     SetConsoleTextAttribute
1624     setmode
1625     setrlimit
1626     Sleep
1627     sndio_h
1628     socklen_t
1629     soundcard_h
1630     strerror_r
1631     struct_addrinfo
1632     struct_group_source_req
1633     struct_ip_mreq_source
1634     struct_ipv6_mreq
1635     struct_pollfd
1636     struct_rusage_ru_maxrss
1637     struct_sctp_event_subscribe
1638     struct_sockaddr_in6
1639     struct_sockaddr_sa_len
1640     struct_sockaddr_storage
1641     struct_stat_st_mtim_tv_nsec
1642     struct_v4l2_frmivalenum_discrete
1643     symver_asm_label
1644     symver_gnu_asm
1645     sync_val_compare_and_swap
1646     sysconf
1647     sysctl
1648     sys_mman_h
1649     sys_param_h
1650     sys_resource_h
1651     sys_select_h
1652     sys_soundcard_h
1653     sys_time_h
1654     sys_un_h
1655     sys_videoio_h
1656     termios_h
1657     texi2html
1658     threads
1659     unistd_h
1660     usleep
1661     vdpau_x11
1662     vfp_args
1663     VirtualAlloc
1664     wglGetProcAddress
1665     windows_h
1666     winsock2_h
1667     xform_asm
1668     xlib
1669     xmm_clobbers
1670 "
1671
1672 # options emitted with CONFIG_ prefix but not available on the command line
1673 CONFIG_EXTRA="
1674     aandcttables
1675     ac3dsp
1676     audio_frame_queue
1677     dsputil
1678     exif
1679     frame_thread_encoder
1680     gcrypt
1681     golomb
1682     gplv3
1683     h263dsp
1684     h264chroma
1685     h264dsp
1686     h264pred
1687     h264qpel
1688     hpeldsp
1689     huffman
1690     intrax8
1691     lgplv3
1692     llviddsp
1693     lpc
1694     mpegaudio
1695     mpegaudiodsp
1696     mpegvideo
1697     mpegvideoenc
1698     nettle
1699     rangecoder
1700     riffdec
1701     riffenc
1702     rtpdec
1703     rtpenc_chain
1704     sinewin
1705     videodsp
1706     vp3dsp
1707 "
1708
1709 CMDLINE_SELECT="
1710     $ARCH_EXT_LIST
1711     $CONFIG_LIST
1712     $HAVE_LIST_CMDLINE
1713     $THREADS_LIST
1714     asm
1715     cross_compile
1716     debug
1717     extra_warnings
1718     logging
1719     lto
1720     optimizations
1721     rpath
1722     stripping
1723 "
1724
1725 PATHS_LIST='
1726     bindir
1727     datadir
1728     docdir
1729     incdir
1730     libdir
1731     mandir
1732     prefix
1733     shlibdir
1734 '
1735
1736 CMDLINE_SET="
1737     $PATHS_LIST
1738     ar
1739     arch
1740     as
1741     assert_level
1742     build_suffix
1743     cc
1744     cpu
1745     cross_prefix
1746     cxx
1747     dep_cc
1748     extra_version
1749     host_cc
1750     host_cflags
1751     host_ld
1752     host_ldflags
1753     host_libs
1754     host_os
1755     install
1756     ld
1757     logfile
1758     malloc_prefix
1759     nm
1760     optflags
1761     pkg_config
1762     progs_suffix
1763     random_seed
1764     samples
1765     strip
1766     sysinclude
1767     sysroot
1768     target_exec
1769     target_os
1770     target_path
1771     target_samples
1772     tempprefix
1773     toolchain
1774     valgrind
1775     yasmexe
1776 "
1777
1778 CMDLINE_APPEND="
1779     extra_cflags
1780     extra_cxxflags
1781     host_cppflags
1782 "
1783
1784 # code dependency declarations
1785
1786 # architecture extensions
1787
1788 armv5te_deps="arm"
1789 armv6_deps="arm"
1790 armv6t2_deps="arm"
1791 neon_deps_any="aarch64 arm"
1792 vfp_deps_any="aarch64 arm"
1793 vfpv3_deps="vfp"
1794
1795 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1796
1797 mipsfpu_deps="mips"
1798 mips32r2_deps="mips"
1799 mipsdspr1_deps="mips"
1800 mipsdspr2_deps="mips"
1801
1802 altivec_deps="ppc"
1803 ppc4xx_deps="ppc"
1804
1805 vis_deps="sparc"
1806
1807 cpunop_deps="i686"
1808 x86_64_select="i686"
1809 x86_64_suggest="fast_cmov"
1810
1811 amd3dnow_deps="mmx"
1812 amd3dnowext_deps="amd3dnow"
1813 i686_deps="x86"
1814 mmx_deps="x86"
1815 mmxext_deps="mmx"
1816 sse_deps="mmxext"
1817 sse2_deps="sse"
1818 sse3_deps="sse2"
1819 ssse3_deps="sse3"
1820 sse4_deps="ssse3"
1821 sse42_deps="sse4"
1822 avx_deps="sse42"
1823 fma4_deps="avx"
1824 avx2_deps="avx"
1825
1826 mmx_external_deps="yasm"
1827 mmx_inline_deps="inline_asm"
1828 mmx_suggest="mmx_external mmx_inline"
1829
1830 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86); do
1831     eval dep=\$${ext}_deps
1832     eval ${ext}_external_deps='"${dep}_external"'
1833     eval ${ext}_inline_deps='"${dep}_inline"'
1834     eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1835 done
1836
1837 aligned_stack_if_any="aarch64 ppc x86"
1838 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1839 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
1840 fast_unaligned_if_any="aarch64 ppc x86"
1841
1842 need_memalign="altivec neon sse"
1843
1844 # system capabilities
1845 log2_deps="!libc_msvcrt"
1846
1847 symver_if_any="symver_asm_label symver_gnu_asm"
1848
1849 # threading support
1850 atomics_gcc_if="sync_val_compare_and_swap"
1851 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
1852 atomics_win32_if="MemoryBarrier"
1853 atomics_native_if_any="$ATOMICS_LIST"
1854 threads_if_any="$THREADS_LIST"
1855
1856 # subsystems
1857 dct_select="rdft"
1858 error_resilience_select="dsputil"
1859 frame_thread_encoder_deps="encoders threads"
1860 lpc_select="dsputil"
1861 mdct_select="fft"
1862 rdft_select="fft"
1863 mpegaudio_select="mpegaudiodsp"
1864 mpegaudiodsp_select="dct"
1865 mpegvideo_select="dsputil h264chroma hpeldsp videodsp"
1866 mpegvideoenc_select="mpegvideo"
1867
1868 # decoders / encoders
1869 aac_decoder_select="mdct sinewin"
1870 aac_encoder_select="audio_frame_queue mdct sinewin"
1871 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1872 ac3_decoder_select="mdct ac3dsp ac3_parser dsputil"
1873 ac3_encoder_select="mdct ac3dsp dsputil"
1874 ac3_fixed_encoder_select="mdct ac3dsp dsputil"
1875 aic_decoder_select="dsputil golomb"
1876 alac_encoder_select="lpc"
1877 als_decoder_select="dsputil"
1878 amrnb_decoder_select="lsp"
1879 amrwb_decoder_select="lsp"
1880 amv_decoder_select="dsputil hpeldsp exif"
1881 amv_encoder_select="aandcttables"
1882 ape_decoder_select="dsputil"
1883 asv1_decoder_select="dsputil"
1884 asv1_encoder_select="dsputil"
1885 asv2_decoder_select="dsputil"
1886 asv2_encoder_select="dsputil"
1887 atrac1_decoder_select="mdct sinewin"
1888 atrac3_decoder_select="mdct"
1889 atrac3p_decoder_select="mdct sinewin"
1890 avrn_decoder_select="exif"
1891 bink_decoder_select="dsputil hpeldsp"
1892 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1893 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1894 cavs_decoder_select="dsputil golomb h264chroma videodsp"
1895 cllc_decoder_select="dsputil"
1896 comfortnoise_encoder_select="lpc"
1897 cook_decoder_select="dsputil mdct sinewin"
1898 cscd_decoder_select="lzo"
1899 cscd_decoder_suggest="zlib"
1900 dca_decoder_select="mdct"
1901 dirac_decoder_select="dsputil dwt golomb videodsp"
1902 dnxhd_decoder_select="dsputil"
1903 dnxhd_encoder_select="aandcttables dsputil mpegvideoenc"
1904 dvvideo_decoder_select="dsputil"
1905 dvvideo_encoder_select="dsputil"
1906 dxa_decoder_select="zlib"
1907 eac3_decoder_select="ac3_decoder"
1908 eac3_encoder_select="ac3_encoder"
1909 eamad_decoder_select="aandcttables dsputil mpegvideo"
1910 eatgq_decoder_select="aandcttables"
1911 eatqi_decoder_select="aandcttables error_resilience mpegvideo"
1912 exr_decoder_select="zlib"
1913 ffv1_decoder_select="dsputil golomb rangecoder"
1914 ffv1_encoder_select="dsputil rangecoder"
1915 ffvhuff_decoder_select="dsputil llviddsp"
1916 ffvhuff_encoder_select="dsputil huffman llviddsp"
1917 flac_decoder_select="golomb"
1918 flac_encoder_select="dsputil golomb lpc"
1919 flashsv_decoder_select="zlib"
1920 flashsv_encoder_select="zlib"
1921 flashsv2_encoder_select="zlib"
1922 flashsv2_decoder_select="zlib"
1923 flv_decoder_select="h263_decoder"
1924 flv_encoder_select="h263_encoder"
1925 fourxm_decoder_select="dsputil"
1926 fraps_decoder_select="dsputil huffman"
1927 g2m_decoder_select="dsputil zlib"
1928 g729_decoder_select="dsputil"
1929 h261_decoder_select="error_resilience mpegvideo"
1930 h261_encoder_select="aandcttables mpegvideoenc"
1931 h263_decoder_select="error_resilience h263_parser h263dsp mpegvideo"
1932 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
1933 h263i_decoder_select="h263_decoder"
1934 h263p_encoder_select="h263_encoder"
1935 h264_decoder_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
1936 h264_decoder_suggest="error_resilience"
1937 hevc_decoder_select="dsputil golomb videodsp"
1938 huffyuv_decoder_select="dsputil llviddsp"
1939 huffyuv_encoder_select="dsputil huffman llviddsp"
1940 iac_decoder_select="dsputil fft mdct sinewin"
1941 imc_decoder_select="dsputil fft mdct sinewin"
1942 indeo3_decoder_select="hpeldsp"
1943 interplay_video_decoder_select="hpeldsp"
1944 jpegls_decoder_select="dsputil golomb hpeldsp exif"
1945 jpegls_encoder_select="golomb"
1946 jv_decoder_select="dsputil"
1947 lagarith_decoder_select="dsputil"
1948 ljpeg_encoder_select="aandcttables mpegvideoenc"
1949 loco_decoder_select="golomb"
1950 mdec_decoder_select="dsputil error_resilience mpegvideo"
1951 metasound_decoder_select="lsp mdct sinewin"
1952 mimic_decoder_select="dsputil hpeldsp"
1953 mjpeg_decoder_select="dsputil hpeldsp exif"
1954 mjpegb_decoder_select="dsputil hpeldsp exif"
1955 mjpeg_encoder_select="aandcttables dsputil mpegvideoenc"
1956 mlp_decoder_select="dsputil mlp_parser"
1957 motionpixels_decoder_select="dsputil"
1958 mp1_decoder_select="mpegaudio"
1959 mp1float_decoder_select="mpegaudio"
1960 mp2_decoder_select="mpegaudio"
1961 mp2float_decoder_select="mpegaudio"
1962 mp3_decoder_select="mpegaudio"
1963 mp3adu_decoder_select="mpegaudio"
1964 mp3adufloat_decoder_select="mpegaudio"
1965 mp3float_decoder_select="mpegaudio"
1966 mp3on4_decoder_select="mpegaudio"
1967 mp3on4float_decoder_select="mpegaudio"
1968 mpc7_decoder_select="dsputil mpegaudiodsp"
1969 mpc8_decoder_select="dsputil mpegaudiodsp"
1970 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1971 mpeg_xvmc_decoder_select="mpeg2video_decoder"
1972 mpeg1video_decoder_select="error_resilience mpegvideo"
1973 mpeg1video_encoder_select="aandcttables mpegvideoenc h263dsp"
1974 mpeg2video_decoder_select="error_resilience mpegvideo"
1975 mpeg2video_encoder_select="aandcttables mpegvideoenc h263dsp"
1976 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1977 mpeg4_encoder_select="h263_encoder"
1978 msmpeg4v1_decoder_select="h263_decoder"
1979 msmpeg4v2_decoder_select="h263_decoder"
1980 msmpeg4v2_encoder_select="h263_encoder"
1981 msmpeg4v3_decoder_select="h263_decoder"
1982 msmpeg4v3_encoder_select="h263_encoder"
1983 mss2_decoder_select="error_resilience vc1_decoder"
1984 mxpeg_decoder_select="dsputil hpeldsp exif"
1985 nellymoser_decoder_select="mdct sinewin"
1986 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
1987 nuv_decoder_select="dsputil lzo"
1988 png_decoder_select="zlib"
1989 png_encoder_select="dsputil zlib"
1990 prores_decoder_select="dsputil"
1991 prores_encoder_select="dsputil"
1992 qcelp_decoder_select="lsp"
1993 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1994 ra_144_encoder_select="audio_frame_queue lpc"
1995 ralf_decoder_select="golomb"
1996 rtjpeg_decoder_select="dsputil"
1997 rv10_decoder_select="error_resilience h263_decoder h263dsp"
1998 rv10_encoder_select="h263_encoder"
1999 rv20_decoder_select="error_resilience h263_decoder h263dsp"
2000 rv20_encoder_select="h263_encoder"
2001 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
2002 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
2003 shorten_decoder_select="golomb"
2004 sipr_decoder_select="lsp"
2005 snow_decoder_select="dsputil dwt h264qpel hpeldsp rangecoder"
2006 snow_encoder_select="aandcttables dsputil dwt h264qpel hpeldsp mpegvideoenc rangecoder"
2007 sonic_decoder_select="golomb rangecoder"
2008 sonic_encoder_select="golomb rangecoder"
2009 sonic_ls_encoder_select="golomb"
2010 sp5x_decoder_select="dsputil hpeldsp exif"
2011 svq1_decoder_select="hpeldsp"
2012 svq1_encoder_select="aandcttables dsputil hpeldsp mpegvideoenc"
2013 svq3_decoder_select="golomb h264chroma h264dsp h264pred h264qpel hpeldsp mpegvideo videodsp"
2014 svq3_decoder_suggest="error_resilience zlib"
2015 tak_decoder_select="dsputil"
2016 theora_decoder_select="vp3_decoder"
2017 tiff_decoder_suggest="zlib"
2018 tiff_encoder_suggest="zlib"
2019 thp_decoder_select="dsputil hpeldsp exif"
2020 truehd_decoder_select="mlp_parser"
2021 truemotion2_decoder_select="dsputil"
2022 truespeech_decoder_select="dsputil"
2023 tscc_decoder_select="zlib"
2024 twinvq_decoder_select="mdct lsp sinewin"
2025 utvideo_decoder_select="dsputil"
2026 utvideo_encoder_select="dsputil huffman"
2027 vble_decoder_select="dsputil"
2028 vc1_decoder_select="error_resilience h263_decoder h264chroma h264qpel intrax8"
2029 vc1image_decoder_select="vc1_decoder"
2030 vorbis_decoder_select="mdct"
2031 vorbis_encoder_select="mdct"
2032 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2033 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
2034 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
2035 vp6a_decoder_select="vp6_decoder"
2036 vp6f_decoder_select="vp6_decoder"
2037 vp8_decoder_select="h264pred videodsp"
2038 vp9_decoder_select="videodsp"
2039 webp_decoder_select="vp8_decoder"
2040 wmapro_decoder_select="mdct sinewin"
2041 wmav1_decoder_select="mdct sinewin"
2042 wmav1_encoder_select="mdct sinewin"
2043 wmav2_decoder_select="mdct sinewin"
2044 wmav2_encoder_select="mdct sinewin"
2045 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2046 wmv1_decoder_select="h263_decoder"
2047 wmv1_encoder_select="h263_encoder"
2048 wmv2_decoder_select="h263_decoder intrax8 videodsp"
2049 wmv2_encoder_select="h263_encoder"
2050 wmv3_decoder_select="vc1_decoder"
2051 wmv3image_decoder_select="wmv3_decoder"
2052 zerocodec_decoder_select="zlib"
2053 zlib_decoder_select="zlib"
2054 zlib_encoder_select="zlib"
2055 zmbv_decoder_select="zlib"
2056 zmbv_encoder_select="zlib"
2057
2058 # hardware accelerators
2059 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
2060 dxva2_deps="dxva2api_h"
2061 vaapi_deps="va_va_h"
2062 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
2063 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2064 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
2065 xvmc_deps="X11_extensions_XvMClib_h"
2066
2067 h263_vaapi_hwaccel_deps="vaapi"
2068 h263_vaapi_hwaccel_select="h263_decoder"
2069 h263_vdpau_hwaccel_deps="vdpau"
2070 h263_vdpau_hwaccel_select="h263_decoder"
2071 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
2072 h264_dxva2_hwaccel_deps="dxva2"
2073 h264_dxva2_hwaccel_select="h264_decoder"
2074 h264_vaapi_hwaccel_deps="vaapi"
2075 h264_vaapi_hwaccel_select="h264_decoder"
2076 h264_vda_decoder_deps="vda"
2077 h264_vda_decoder_select="h264_decoder"
2078 h264_vda_hwaccel_deps="vda"
2079 h264_vda_hwaccel_select="h264_decoder"
2080 h264_vdpau_decoder_deps="vdpau"
2081 h264_vdpau_decoder_select="h264_decoder"
2082 h264_vdpau_hwaccel_deps="vdpau"
2083 h264_vdpau_hwaccel_select="h264_decoder"
2084 mpeg_vdpau_decoder_deps="vdpau"
2085 mpeg_vdpau_decoder_select="mpeg2video_decoder"
2086 mpeg_xvmc_hwaccel_deps="xvmc"
2087 mpeg_xvmc_hwaccel_select="mpeg2video_decoder"
2088 mpeg1_vdpau_decoder_deps="vdpau"
2089 mpeg1_vdpau_decoder_select="mpeg1video_decoder"
2090 mpeg1_vdpau_hwaccel_deps="vdpau"
2091 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2092 mpeg1_xvmc_hwaccel_deps="xvmc"
2093 mpeg1_xvmc_hwaccel_select="mpeg1video_decoder"
2094 mpeg2_crystalhd_decoder_select="crystalhd"
2095 mpeg2_dxva2_hwaccel_deps="dxva2"
2096 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2097 mpeg2_vaapi_hwaccel_deps="vaapi"
2098 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2099 mpeg2_vdpau_hwaccel_deps="vdpau"
2100 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2101 mpeg2_xvmc_hwaccel_deps="xvmc"
2102 mpeg2_xvmc_hwaccel_select="mpeg2video_decoder"
2103 mpeg4_crystalhd_decoder_select="crystalhd"
2104 mpeg4_vaapi_hwaccel_deps="vaapi"
2105 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2106 mpeg4_vdpau_decoder_deps="vdpau"
2107 mpeg4_vdpau_decoder_select="mpeg4_decoder"
2108 mpeg4_vdpau_hwaccel_deps="vdpau"
2109 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2110 msmpeg4_crystalhd_decoder_select="crystalhd"
2111 vc1_crystalhd_decoder_select="crystalhd"
2112 vc1_dxva2_hwaccel_deps="dxva2"
2113 vc1_dxva2_hwaccel_select="vc1_decoder"
2114 vc1_vaapi_hwaccel_deps="vaapi"
2115 vc1_vaapi_hwaccel_select="vc1_decoder"
2116 vc1_vdpau_decoder_deps="vdpau"
2117 vc1_vdpau_decoder_select="vc1_decoder"
2118 vc1_vdpau_hwaccel_deps="vdpau"
2119 vc1_vdpau_hwaccel_select="vc1_decoder"
2120 wmv3_crystalhd_decoder_select="crystalhd"
2121 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2122 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2123 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
2124 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2125
2126 # parsers
2127 h264_parser_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
2128 hevc_parser_select="hevc_decoder"
2129 mpeg4video_parser_select="error_resilience mpegvideo"
2130 mpegvideo_parser_select="error_resilience mpegvideo"
2131 vc1_parser_select="mpegvideo"
2132
2133 # external libraries
2134 libaacplus_encoder_deps="libaacplus"
2135 libcelt_decoder_deps="libcelt"
2136 libfaac_encoder_deps="libfaac"
2137 libfaac_encoder_select="audio_frame_queue"
2138 libfdk_aac_decoder_deps="libfdk_aac"
2139 libfdk_aac_encoder_deps="libfdk_aac"
2140 libfdk_aac_encoder_select="audio_frame_queue"
2141 libgme_demuxer_deps="libgme"
2142 libgsm_decoder_deps="libgsm"
2143 libgsm_encoder_deps="libgsm"
2144 libgsm_ms_decoder_deps="libgsm"
2145 libgsm_ms_encoder_deps="libgsm"
2146 libilbc_decoder_deps="libilbc"
2147 libilbc_encoder_deps="libilbc"
2148 libmodplug_demuxer_deps="libmodplug"
2149 libmp3lame_encoder_deps="libmp3lame"
2150 libmp3lame_encoder_select="audio_frame_queue"
2151 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2152 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2153 libopencore_amrnb_encoder_select="audio_frame_queue"
2154 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2155 libopenjpeg_decoder_deps="libopenjpeg"
2156 libopenjpeg_encoder_deps="libopenjpeg"
2157 libopus_decoder_deps="libopus"
2158 libopus_encoder_deps="libopus"
2159 libopus_encoder_select="audio_frame_queue"
2160 libquvi_demuxer_deps="libquvi"
2161 libschroedinger_decoder_deps="libschroedinger"
2162 libschroedinger_encoder_deps="libschroedinger"
2163 libshine_encoder_deps="libshine"
2164 libshine_encoder_select="audio_frame_queue"
2165 libspeex_decoder_deps="libspeex"
2166 libspeex_encoder_deps="libspeex"
2167 libspeex_encoder_select="audio_frame_queue"
2168 libstagefright_h264_decoder_deps="libstagefright_h264"
2169 libtheora_encoder_deps="libtheora"
2170 libtwolame_encoder_deps="libtwolame"
2171 libvo_aacenc_encoder_deps="libvo_aacenc"
2172 libvo_aacenc_encoder_select="audio_frame_queue"
2173 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2174 libvorbis_decoder_deps="libvorbis"
2175 libvorbis_encoder_deps="libvorbis"
2176 libvorbis_encoder_select="audio_frame_queue"
2177 libvpx_vp8_decoder_deps="libvpx"
2178 libvpx_vp8_encoder_deps="libvpx"
2179 libvpx_vp9_decoder_deps="libvpx"
2180 libvpx_vp9_encoder_deps="libvpx"
2181 libwavpack_encoder_deps="libwavpack"
2182 libwebp_encoder_deps="libwebp"
2183 libx264_encoder_deps="libx264"
2184 libx264rgb_encoder_deps="libx264"
2185 libxavs_encoder_deps="libxavs"
2186 libxvid_encoder_deps="libxvid"
2187 libutvideo_decoder_deps="libutvideo"
2188 libutvideo_encoder_deps="libutvideo"
2189 libzvbi_teletext_decoder_deps="libzvbi"
2190
2191 # demuxers / muxers
2192 ac3_demuxer_select="ac3_parser"
2193 asf_demuxer_select="riffdec"
2194 asf_muxer_select="riffenc"
2195 asf_stream_muxer_select="asf_muxer"
2196 avi_demuxer_select="riffdec"
2197 avi_muxer_select="riffenc"
2198 avisynth_demuxer_deps="avisynth"
2199 avisynth_demuxer_select="riffdec"
2200 caf_demuxer_select="riffdec"
2201 dirac_demuxer_select="dirac_parser"
2202 dts_demuxer_select="dca_parser"
2203 dtshd_demuxer_select="dca_parser"
2204 dxa_demuxer_select="riffdec"
2205 eac3_demuxer_select="ac3_parser"
2206 f4v_muxer_select="mov_muxer"
2207 flac_demuxer_select="flac_parser"
2208 hds_muxer_select="flv_muxer"
2209 hls_muxer_select="mpegts_muxer"
2210 ipod_muxer_select="mov_muxer"
2211 ismv_muxer_select="mov_muxer"
2212 libnut_demuxer_deps="libnut"
2213 libnut_muxer_deps="libnut"
2214 matroska_audio_muxer_select="matroska_muxer"
2215 matroska_demuxer_select="riffdec"
2216 matroska_demuxer_suggest="bzlib lzo zlib"
2217 matroska_muxer_select="riffenc"
2218 mmf_muxer_select="riffenc"
2219 mov_demuxer_select="riffdec"
2220 mov_demuxer_suggest="zlib"
2221 mov_muxer_select="riffenc rtpenc_chain"
2222 mp3_demuxer_select="mpegaudio_parser"
2223 mp4_muxer_select="mov_muxer"
2224 mpegts_muxer_select="adts_muxer latm_muxer"
2225 mpegtsraw_demuxer_select="mpegts_demuxer"
2226 mxf_d10_muxer_select="mxf_muxer"
2227 nut_muxer_select="riffenc"
2228 nuv_demuxer_select="riffdec"
2229 ogg_demuxer_select="golomb"
2230 psp_muxer_select="mov_muxer"
2231 rtp_demuxer_select="sdp_demuxer"
2232 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
2233 rtsp_demuxer_select="http_protocol rtpdec"
2234 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2235 sap_demuxer_select="sdp_demuxer"
2236 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2237 sdp_demuxer_select="rtpdec"
2238 smoothstreaming_muxer_select="ismv_muxer"
2239 spdif_muxer_select="aac_parser"
2240 tak_demuxer_select="tak_parser"
2241 tg2_muxer_select="mov_muxer"
2242 tgp_muxer_select="mov_muxer"
2243 vobsub_demuxer_select="mpegps_demuxer"
2244 w64_demuxer_select="wav_demuxer"
2245 w64_muxer_select="wav_muxer"
2246 wav_demuxer_select="riffdec"
2247 wav_muxer_select="riffenc"
2248 webm_muxer_select="riffenc"
2249 wtv_demuxer_select="riffdec"
2250 wtv_muxer_select="riffenc"
2251 xmv_demuxer_select="riffdec"
2252 xwma_demuxer_select="riffdec"
2253
2254 # indevs / outdevs
2255 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2256 alsa_outdev_deps="alsa_asoundlib_h"
2257 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2258 caca_outdev_deps="libcaca"
2259 dshow_indev_deps="IBaseFilter"
2260 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
2261 dv1394_indev_deps="dv1394"
2262 dv1394_indev_select="dv_demuxer"
2263 fbdev_indev_deps="linux_fb_h"
2264 fbdev_outdev_deps="linux_fb_h"
2265 iec61883_indev_deps="libiec61883"
2266 jack_indev_deps="jack_jack_h sem_timedwait"
2267 lavfi_indev_deps="avfilter"
2268 libcdio_indev_deps="libcdio"
2269 libdc1394_indev_deps="libdc1394"
2270 libv4l2_indev_deps="libv4l2"
2271 openal_indev_deps="openal"
2272 opengl_outdev_deps="opengl"
2273 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2274 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2275 pulse_indev_deps="libpulse"
2276 pulse_outdev_deps="libpulse"
2277 sdl_outdev_deps="sdl"
2278 sndio_indev_deps="sndio_h"
2279 sndio_outdev_deps="sndio_h"
2280 v4l_indev_deps="linux_videodev_h"
2281 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2282 v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
2283 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2284 vfwcap_indev_extralibs="-lavicap32"
2285 xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
2286 xv_outdev_extralibs="-lXv -lX11 -lXext"
2287 x11grab_indev_deps="x11grab"
2288
2289 # protocols
2290 bluray_protocol_deps="libbluray"
2291 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2292 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
2293 ffrtmpcrypt_protocol_select="tcp_protocol"
2294 ffrtmphttp_protocol_deps="!librtmp_protocol"
2295 ffrtmphttp_protocol_select="http_protocol"
2296 ftp_protocol_select="tcp_protocol"
2297 gopher_protocol_select="network"
2298 httpproxy_protocol_select="tcp_protocol"
2299 http_protocol_select="tcp_protocol"
2300 https_protocol_select="tls_protocol"
2301 librtmp_protocol_deps="librtmp"
2302 librtmpe_protocol_deps="librtmp"
2303 librtmps_protocol_deps="librtmp"
2304 librtmpt_protocol_deps="librtmp"
2305 librtmpte_protocol_deps="librtmp"
2306 libssh_protocol_deps="libssh"
2307 mmsh_protocol_select="http_protocol"
2308 mmst_protocol_select="network"
2309 rtmp_protocol_deps="!librtmp_protocol"
2310 rtmp_protocol_select="tcp_protocol"
2311 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2312 rtmps_protocol_deps="!librtmp_protocol"
2313 rtmps_protocol_select="tls_protocol"
2314 rtmpt_protocol_select="ffrtmphttp_protocol"
2315 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2316 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2317 rtp_protocol_select="udp_protocol"
2318 sctp_protocol_deps="struct_sctp_event_subscribe"
2319 sctp_protocol_select="network"
2320 srtp_protocol_select="rtp_protocol"
2321 tcp_protocol_select="network"
2322 tls_protocol_deps_any="openssl gnutls"
2323 tls_protocol_select="tcp_protocol"
2324 udp_protocol_select="network"
2325 unix_protocol_deps="sys_un_h"
2326 unix_protocol_select="network"
2327
2328 # filters
2329 aconvert_filter_deps="swresample"
2330 amovie_filter_deps="avcodec avformat"
2331 aresample_filter_deps="swresample"
2332 ass_filter_deps="libass"
2333 asyncts_filter_deps="avresample"
2334 atempo_filter_deps="avcodec"
2335 atempo_filter_select="rdft"
2336 azmq_filter_deps="libzmq"
2337 blackframe_filter_deps="gpl"
2338 boxblur_filter_deps="gpl"
2339 colormatrix_filter_deps="gpl"
2340 cropdetect_filter_deps="gpl"
2341 dctdnoiz_filter_deps="avcodec"
2342 dctdnoiz_filter_select="fft"
2343 delogo_filter_deps="gpl"
2344 deshake_filter_deps="avcodec"
2345 deshake_filter_select="dsputil"
2346 drawtext_filter_deps="libfreetype"
2347 ebur128_filter_deps="gpl"
2348 flite_filter_deps="libflite"
2349 frei0r_filter_deps="frei0r dlopen"
2350 frei0r_filter_extralibs='$ldl'
2351 frei0r_src_filter_deps="frei0r dlopen"
2352 frei0r_src_filter_extralibs='$ldl'
2353 geq_filter_deps="gpl"
2354 histeq_filter_deps="gpl"
2355 hqdn3d_filter_deps="gpl"
2356 interlace_filter_deps="gpl"
2357 kerndeint_filter_deps="gpl"
2358 ladspa_filter_deps="ladspa dlopen"
2359 mcdeint_filter_deps="avcodec gpl"
2360 movie_filter_deps="avcodec avformat"
2361 mp_filter_deps="gpl avcodec swscale inline_asm"
2362 mpdecimate_filter_deps="gpl avcodec"
2363 mptestsrc_filter_deps="gpl"
2364 negate_filter_deps="lut_filter"
2365 perspective_filter_deps="gpl"
2366 resample_filter_deps="avresample"
2367 ocv_filter_deps="libopencv"
2368 owdenoise_filter_deps="gpl"
2369 pan_filter_deps="swresample"
2370 phase_filter_deps="gpl"
2371 pp_filter_deps="gpl postproc"
2372 pullup_filter_deps="gpl"
2373 removelogo_filter_deps="avcodec avformat swscale"
2374 sab_filter_deps="gpl swscale"
2375 scale_filter_deps="swscale"
2376 smartblur_filter_deps="gpl swscale"
2377 showspectrum_filter_deps="avcodec"
2378 showspectrum_filter_select="rdft"
2379 spp_filter_deps="gpl avcodec"
2380 spp_filter_select="fft"
2381 stereo3d_filter_deps="gpl"
2382 subtitles_filter_deps="avformat avcodec libass"
2383 super2xsai_filter_deps="gpl"
2384 tinterlace_filter_deps="gpl"
2385 vidstabdetect_filter_deps="libvidstab"
2386 vidstabtransform_filter_deps="libvidstab"
2387 pixfmts_super2xsai_test_deps="super2xsai_filter"
2388 tinterlace_merge_test_deps="tinterlace_filter"
2389 tinterlace_pad_test_deps="tinterlace_filter"
2390 zmq_filter_deps="libzmq"
2391
2392 # examples
2393 decoding_encoding_example_deps="avcodec avutil"
2394 demuxing_decoding_example_deps="avcodec avformat avutil"
2395 filtering_audio_example_deps="avfilter avcodec avformat avutil"
2396 filtering_video_example_deps="avfilter avcodec avformat avutil"
2397 metadata_example_deps="avformat avutil"
2398 muxing_example_deps="avcodec avformat avutil swscale"
2399 remuxing_example_deps="avcodec avformat avutil"
2400 resampling_audio_example_deps="avutil swresample"
2401 scaling_video_example_deps="avutil swscale"
2402 transcode_aac_example_deps="avcodec avformat swresample"
2403
2404 # libraries
2405 avcodec_deps="avutil"
2406 avdevice_deps="avutil avcodec avformat"
2407 avfilter_deps="avutil"
2408 avformat_deps="avutil avcodec"
2409 avresample_deps="avutil"
2410 postproc_deps="avutil gpl"
2411 swscale_deps="avutil"
2412
2413 # programs
2414 ffmpeg_deps="avcodec avfilter avformat swresample"
2415 ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
2416                null_filter
2417                setpts_filter trim_filter"
2418 ffplay_deps="avcodec avformat swscale swresample sdl"
2419 ffplay_select="rdft crop_filter"
2420 ffprobe_deps="avcodec avformat"
2421 ffserver_deps="avformat fork sarestart"
2422 ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
2423 ffserver_extralibs='$ldl'
2424
2425 # documentation
2426 podpages_deps="perl"
2427 manpages_deps="perl pod2man"
2428 htmlpages_deps="perl texi2html"
2429 txtpages_deps="perl makeinfo"
2430 doc_deps_any="manpages htmlpages podpages txtpages"
2431
2432 # default parameters
2433
2434 logfile="config.log"
2435
2436 # installation paths
2437 prefix_default="/usr/local"
2438 bindir_default='${prefix}/bin'
2439 datadir_default='${prefix}/share/ffmpeg'
2440 docdir_default='${prefix}/share/doc/ffmpeg'
2441 incdir_default='${prefix}/include'
2442 libdir_default='${prefix}/lib'
2443 mandir_default='${prefix}/share/man'
2444 shlibdir_default="$libdir_default"
2445
2446 # toolchain
2447 ar_default="ar"
2448 cc_default="gcc"
2449 cxx_default="g++"
2450 host_cc_default="gcc"
2451 cp_f="cp -f"
2452 install="install"
2453 ln_s="ln -s -f"
2454 nm_default="nm -g"
2455 objformat="elf"
2456 pkg_config_default=pkg-config
2457 ranlib="ranlib"
2458 strip_default="strip"
2459 yasmexe_default="yasm"
2460 windres_default="windres"
2461
2462 nogas=":"
2463
2464 # machine
2465 arch_default=$(uname -m)
2466 cpu="generic"
2467
2468 # OS
2469 target_os_default=$(tolower $(uname -s))
2470 host_os=$target_os_default
2471
2472 # configurable options
2473 enable $PROGRAM_LIST
2474 enable $DOCUMENT_LIST
2475 enable $EXAMPLE_LIST
2476 enable $(filter_out avresample $LIBRARY_LIST)
2477 enable stripping
2478
2479 enable asm
2480 enable debug
2481 enable doc
2482 enable optimizations
2483 enable runtime_cpudetect
2484 enable safe_bitstream_reader
2485 enable static
2486 enable swscale_alpha
2487
2488 # Enable hwaccels by default.
2489 enable dxva2 vaapi vdpau xvmc
2490
2491 # build settings
2492 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2493 LIBPREF="lib"
2494 LIBSUF=".a"
2495 FULLNAME='$(NAME)$(BUILDSUF)'
2496 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2497 SLIBPREF="lib"
2498 SLIBSUF=".so"
2499 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2500 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2501 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2502 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2503 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2504 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2505
2506 asflags_filter=echo
2507 cflags_filter=echo
2508 ldflags_filter=echo
2509
2510 AS_C='-c'
2511 AS_O='-o $@'
2512 CC_C='-c'
2513 CC_E='-E -o $@'
2514 CC_O='-o $@'
2515 CXX_C='-c'
2516 CXX_O='-o $@'
2517 LD_O='-o $@'
2518 LD_LIB='-l%'
2519 LD_PATH='-L'
2520 HOSTCC_C='-c'
2521 HOSTCC_E='-E -o $@'
2522 HOSTCC_O='-o $@'
2523 HOSTLD_O='-o $@'
2524
2525 host_libs='-lm'
2526 host_cflags_filter=echo
2527 host_ldflags_filter=echo
2528
2529 target_path='$(CURDIR)'
2530
2531 # since the object filename is not given with the -MM flag, the compiler
2532 # is only able to print the basename, and we must add the path ourselves
2533 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2534 DEPFLAGS='-MM'
2535
2536 # find source path
2537 if test -f configure; then
2538     source_path=.
2539 else
2540     source_path=$(cd $(dirname "$0"); pwd)
2541     echo "$source_path" | grep -q '[[:blank:]]' &&
2542         die "Out of tree builds are impossible with whitespace in source path."
2543     test -e "$source_path/config.h" &&
2544         die "Out of tree builds are impossible with config.h in source dir."
2545 fi
2546
2547 for v in "$@"; do
2548     r=${v#*=}
2549     l=${v%"$r"}
2550     r=$(sh_quote "$r")
2551     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2552 done
2553
2554 find_things(){
2555     thing=$1
2556     pattern=$2
2557     file=$source_path/$3
2558     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2559 }
2560
2561 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2562 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2563 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2564 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2565 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2566 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2567 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2568 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2569 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2570 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2571 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2572
2573 ALL_COMPONENTS="
2574     $BSF_LIST
2575     $DECODER_LIST
2576     $DEMUXER_LIST
2577     $ENCODER_LIST
2578     $FILTER_LIST
2579     $HWACCEL_LIST
2580     $INDEV_LIST
2581     $MUXER_LIST
2582     $OUTDEV_LIST
2583     $PARSER_LIST
2584     $PROTOCOL_LIST
2585 "
2586
2587 for n in $COMPONENT_LIST; do
2588     v=$(toupper ${n%s})_LIST
2589     eval enable \$$v
2590     eval ${n}_if_any="\$$v"
2591 done
2592
2593 enable $ARCH_EXT_LIST
2594
2595 die_unknown(){
2596     echo "Unknown option \"$1\"."
2597     echo "See $0 --help for available options."
2598     exit 1
2599 }
2600
2601 print_3_columns() {
2602     cat | tr ' ' '\n' | sort | pr -r -3 -t
2603 }
2604
2605 show_list() {
2606     suffix=_$1
2607     shift
2608     echo $* | sed s/$suffix//g | print_3_columns
2609     exit 0
2610 }
2611
2612 rand_list(){
2613     IFS=', '
2614     set -- $*
2615     unset IFS
2616     for thing; do
2617         comp=${thing%:*}
2618         prob=${thing#$comp}
2619         prob=${prob#:}
2620         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2621         echo "prob ${prob:-0.5}"
2622         printf '%s\n' $comp
2623     done
2624 }
2625
2626 do_random(){
2627     action=$1
2628     shift
2629     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2630     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2631 }
2632
2633 for opt do
2634     optval="${opt#*=}"
2635     case "$opt" in
2636         --extra-ldflags=*)
2637             add_ldflags $optval
2638         ;;
2639         --extra-libs=*)
2640             add_extralibs $optval
2641         ;;
2642         --disable-devices)
2643             disable $INDEV_LIST $OUTDEV_LIST
2644         ;;
2645         --enable-debug=*)
2646             debuglevel="$optval"
2647         ;;
2648         --disable-programs)
2649             disable $PROGRAM_LIST
2650         ;;
2651         --disable-everything)
2652             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2653         ;;
2654         --disable-all)
2655             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2656             disable $LIBRARY_LIST $PROGRAM_LIST doc
2657         ;;
2658         --enable-random|--disable-random)
2659             action=${opt%%-random}
2660             do_random ${action#--} $COMPONENT_LIST
2661         ;;
2662         --enable-random=*|--disable-random=*)
2663             action=${opt%%-random=*}
2664             do_random ${action#--} $optval
2665         ;;
2666         --enable-*=*|--disable-*=*)
2667             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2668             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2669             eval list=\$$(toupper $thing)_LIST
2670             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2671             list=$(filter "$name" $list)
2672             [ "$list" = "" ] && warn "Option $opt did not match anything"
2673             $action $list
2674         ;;
2675         --enable-?*|--disable-?*)
2676             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2677             if is_in $option $COMPONENT_LIST; then
2678                 test $action = disable && action=unset
2679                 eval $action \$$(toupper ${option%s})_LIST
2680             elif is_in $option $CMDLINE_SELECT; then
2681                 $action $option
2682             else
2683                 die_unknown $opt
2684             fi
2685         ;;
2686         --list-*)
2687             NAME="${opt#--list-}"
2688             is_in $NAME $COMPONENT_LIST || die_unknown $opt
2689             NAME=${NAME%s}
2690             eval show_list $NAME \$$(toupper $NAME)_LIST
2691         ;;
2692         --help|-h) show_help
2693         ;;
2694         --fatal-warnings) enable fatal_warnings
2695         ;;
2696         *)
2697             optname="${opt%%=*}"
2698             optname="${optname#--}"
2699             optname=$(echo "$optname" | sed 's/-/_/g')
2700             if is_in $optname $CMDLINE_SET; then
2701                 eval $optname='$optval'
2702             elif is_in $optname $CMDLINE_APPEND; then
2703                 append $optname "$optval"
2704             else
2705                 die_unknown $opt
2706             fi
2707         ;;
2708     esac
2709 done
2710
2711 disabled logging && logfile=/dev/null
2712
2713 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2714 set >> $logfile
2715
2716 test -n "$cross_prefix" && enable cross_compile
2717
2718 if enabled cross_compile; then
2719     test -n "$arch" && test -n "$target_os" ||
2720         die "Must specify target arch and OS when cross-compiling"
2721 fi
2722
2723 ar_default="${cross_prefix}${ar_default}"
2724 cc_default="${cross_prefix}${cc_default}"
2725 cxx_default="${cross_prefix}${cxx_default}"
2726 nm_default="${cross_prefix}${nm_default}"
2727 pkg_config_default="${cross_prefix}${pkg_config_default}"
2728 ranlib="${cross_prefix}${ranlib}"
2729 strip_default="${cross_prefix}${strip_default}"
2730 windres_default="${cross_prefix}${windres_default}"
2731
2732 sysinclude_default="${sysroot}/usr/include"
2733
2734 test -n "$valgrind" && toolchain="valgrind-memcheck"
2735
2736 case "$toolchain" in
2737     clang-asan)
2738         cc_default="clang"
2739         add_cflags  -fsanitize=address
2740         add_ldflags -fsanitize=address
2741     ;;
2742     clang-tsan)
2743         cc_default="clang"
2744         add_cflags  -fsanitize=thread -pie
2745         add_ldflags -fsanitize=thread -pie
2746     ;;
2747     gcc-asan)
2748         cc_default="gcc"
2749         add_cflags  -fsanitize=address
2750         add_ldflags -fsanitize=address
2751     ;;
2752     gcc-tsan)
2753         cc_default="gcc"
2754         add_cflags  -fsanitize=thread -pie -fPIC
2755         add_ldflags -fsanitize=thread -pie -fPIC
2756     ;;
2757     valgrind-massif)
2758         target_exec_default=${valgrind:-"valgrind"}
2759         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"
2760     ;;
2761     valgrind-memcheck)
2762         target_exec_default=${valgrind:-"valgrind"}
2763         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"
2764     ;;
2765     msvc)
2766         # Check whether the current MSVC version needs the C99 converter.
2767         # From MSVC 2013 (compiler major version 18) onwards, it does actually
2768         # support enough of C99 to build ffmpeg. Default to the new
2769         # behaviour if the regexp was unable to match anything, since this
2770         # successfully parses the version number of existing supported
2771         # versions that require the converter (MSVC 2010 and 2012).
2772         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2773         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
2774             cc_default="cl"
2775         else
2776             cc_default="c99wrap cl"
2777         fi
2778         ld_default="link"
2779         nm_default="dumpbin -symbols"
2780         ar_default="lib"
2781         target_os_default="win32"
2782         # Use a relative path for TMPDIR. This makes sure all the
2783         # ffconf temp files are written with a relative path, avoiding
2784         # issues with msys/win32 path conversion for MSVC parameters
2785         # such as -Fo<file> or -out:<file>.
2786         TMPDIR=.
2787     ;;
2788     icl)
2789         cc_default="icl"
2790         ld_default="xilink"
2791         nm_default="dumpbin -symbols"
2792         ar_default="xilib"
2793         target_os_default="win32"
2794         TMPDIR=.
2795     ;;
2796     gcov)
2797         add_cflags  -fprofile-arcs -ftest-coverage
2798         add_ldflags -fprofile-arcs -ftest-coverage
2799     ;;
2800     hardened)
2801         add_cflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all
2802         add_ldflags -Wl,-z,relro -Wl,-z,now
2803     ;;
2804     ?*)
2805         die "Unknown toolchain $toolchain"
2806     ;;
2807 esac
2808
2809 set_default arch cc cxx pkg_config strip sysinclude target_exec target_os yasmexe
2810 enabled cross_compile || host_cc_default=$cc
2811 set_default host_cc
2812
2813 if ! $pkg_config --version >/dev/null 2>&1; then
2814     warn "$pkg_config not found, library detection may fail."
2815     pkg_config=false
2816 fi
2817
2818 exesuf() {
2819     case $1 in
2820         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2821     esac
2822 }
2823
2824 EXESUF=$(exesuf $target_os)
2825 HOSTEXESUF=$(exesuf $host_os)
2826
2827 # set temporary file name
2828 : ${TMPDIR:=$TEMPDIR}
2829 : ${TMPDIR:=$TMP}
2830 : ${TMPDIR:=/tmp}
2831
2832 if [ -n "$tempprefix" ] ; then
2833     mktemp(){
2834         echo $tempprefix.${HOSTNAME}.${UID}
2835     }
2836 elif ! check_cmd mktemp -u XXXXXX; then
2837     # simple replacement for missing mktemp
2838     # NOT SAFE FOR GENERAL USE
2839     mktemp(){
2840         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2841     }
2842 fi
2843
2844 tmpfile(){
2845     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2846         (set -C; exec > $tmp) 2>/dev/null ||
2847         die "Unable to create temporary file in $TMPDIR."
2848     append TMPFILES $tmp
2849     eval $1=$tmp
2850 }
2851
2852 trap 'rm -f -- $TMPFILES' EXIT
2853
2854 tmpfile TMPASM .asm
2855 tmpfile TMPC   .c
2856 tmpfile TMPCPP .cpp
2857 tmpfile TMPE   $EXESUF
2858 tmpfile TMPH   .h
2859 tmpfile TMPO   .o
2860 tmpfile TMPS   .S
2861 tmpfile TMPSH  .sh
2862 tmpfile TMPV   .ver
2863
2864 unset -f mktemp
2865
2866 chmod +x $TMPE
2867
2868 # make sure we can execute files in $TMPDIR
2869 cat > $TMPSH 2>> $logfile <<EOF
2870 #! /bin/sh
2871 EOF
2872 chmod +x $TMPSH >> $logfile 2>&1
2873 if ! $TMPSH >> $logfile 2>&1; then
2874     cat <<EOF
2875 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2876 variable to another directory and make sure that it is not mounted noexec.
2877 EOF
2878     die "Sanity test failed."
2879 fi
2880
2881 ccc_flags(){
2882     for flag; do
2883         case $flag in
2884             -std=c99)           echo -c99                       ;;
2885             -mcpu=*)            echo -arch ${flag#*=}           ;;
2886             -mieee)             echo -ieee                      ;;
2887             -O*|-fast)          echo $flag                      ;;
2888             -fno-math-errno)    echo -assume nomath_errno       ;;
2889             -g)                 echo -g3                        ;;
2890             -Wall)              echo -msg_enable level2         ;;
2891             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
2892             -Wl,*)              echo $flag                      ;;
2893             -f*|-W*)                                            ;;
2894             *)                  echo $flag                      ;;
2895         esac
2896    done
2897 }
2898
2899 cparser_flags(){
2900     for flag; do
2901         case $flag in
2902             -Wno-switch)             echo -Wno-switch-enum ;;
2903             -Wno-format-zero-length) ;;
2904             -Wdisabled-optimization) ;;
2905             -Wno-pointer-sign)       echo -Wno-other ;;
2906             *)                       echo $flag ;;
2907         esac
2908     done
2909 }
2910
2911 msvc_common_flags(){
2912     for flag; do
2913         case $flag in
2914             # In addition to specifying certain flags under the compiler
2915             # specific filters, they must be specified here as well or else the
2916             # generic catch all at the bottom will print the original flag.
2917             -Wall)                ;;
2918             -std=c99)             ;;
2919             # Common flags
2920             -fomit-frame-pointer) ;;
2921             -g)                   echo -Z7 ;;
2922             -fno-math-errno)      ;;
2923             -fno-common)          ;;
2924             -fno-signed-zeros)    ;;
2925             -fPIC)                ;;
2926             -mthumb)              ;;
2927             -march=*)             ;;
2928             -lz)                  echo zlib.lib ;;
2929             -lavifil32)           echo vfw32.lib ;;
2930             -lavicap32)           echo vfw32.lib user32.lib ;;
2931             -l*)                  echo ${flag#-l}.lib ;;
2932             *)                    echo $flag ;;
2933         esac
2934     done
2935 }
2936
2937 msvc_flags(){
2938     msvc_common_flags "$@"
2939     for flag; do
2940         case $flag in
2941             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
2942                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2943                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2944                                        -wd4554 \
2945                                        -wd4273 ;;
2946         esac
2947     done
2948 }
2949
2950 icl_flags(){
2951     msvc_common_flags "$@"
2952     for flag; do
2953         case $flag in
2954             # Despite what Intel's documentation says -Wall, which is supported
2955             # on Windows, does enable remarks so disable them here.
2956             -Wall)                echo $flag -Qdiag-disable:remark ;;
2957             -std=c99)             echo -Qstd=c99 ;;
2958         esac
2959     done
2960 }
2961
2962 pgi_flags(){
2963     for flag; do
2964         case $flag in
2965             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
2966             -fomit-frame-pointer) echo -Mnoframe ;;
2967             -g)                   echo -gopt ;;
2968             *)                    echo $flag ;;
2969         esac
2970     done
2971 }
2972
2973 suncc_flags(){
2974     for flag; do
2975         case $flag in
2976             -march=*|-mcpu=*)
2977                 case "${flag#*=}" in
2978                     native)                   echo -xtarget=native       ;;
2979                     v9|niagara)               echo -xarch=sparc          ;;
2980                     ultrasparc)               echo -xarch=sparcvis       ;;
2981                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2982                     i586|pentium)             echo -xchip=pentium        ;;
2983                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2984                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2985                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2986                     pentium4*)          echo -xtarget=pentium4           ;;
2987                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2988                     *-sse3)             echo -xarch=sse3                 ;;
2989                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
2990                     corei7)           echo -xarch=sse4_2 -xchip=nehalem  ;;
2991                     corei7-avx)       echo -xarch=avx -xchip=sandybridge ;;
2992                     amdfam10|barcelona)        echo -xtarget=barcelona   ;;
2993                     bdver*)                    echo -xarch=avx           ;;
2994                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
2995                     k8|opteron|athlon64|athlon-fx)
2996                                                echo -xarch=sse2a         ;;
2997                     athlon*)                   echo -xarch=pentium_proa  ;;
2998                 esac
2999                 ;;
3000             -std=c99)             echo -xc99              ;;
3001             -fomit-frame-pointer) echo -xregs=frameptr    ;;
3002             -fPIC)                echo -KPIC -xcode=pic32 ;;
3003             -W*,*)                echo $flag              ;;
3004             -f*-*|-W*|-mimpure-text)                      ;;
3005             -shared)              echo -G                 ;;
3006             *)                    echo $flag              ;;
3007         esac
3008     done
3009 }
3010
3011 tms470_flags(){
3012     for flag; do
3013         case $flag in
3014             -march=*|-mcpu=*)
3015                 case "${flag#*=}" in
3016                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
3017                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
3018                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
3019                     armv6*|arm11*)          echo -mv=6   ;;
3020                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3021                                             echo -mv=5e  ;;
3022                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
3023                 esac
3024                 ;;
3025             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
3026             -mfpu=vfp)      echo --float_support=vfpv2        ;;
3027             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
3028             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
3029             -msoft-float)   echo --float_support=vfplib       ;;
3030             -O[0-3]|-mf=*)  echo $flag                        ;;
3031             -g)             echo -g -mn                       ;;
3032             -pds=*)         echo $flag                        ;;
3033             -D*|-I*)        echo $flag                        ;;
3034             --gcc|--abi=*)  echo $flag                        ;;
3035             -me)            echo $flag                        ;;
3036         esac
3037     done
3038 }
3039
3040 probe_cc(){
3041     pfx=$1
3042     _cc=$2
3043
3044     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3045     unset _ld_o _ldflags _ld_lib _ld_path
3046     unset _depflags _DEPCMD _DEPFLAGS
3047     _flags_filter=echo
3048
3049     if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
3050         true # no-op to avoid reading stdin in following checks
3051     elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3052         _type=llvm_gcc
3053         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
3054         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
3055         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3056         _cflags_speed='-O3'
3057         _cflags_size='-Os'
3058     elif $_cc -v 2>&1 | grep -qi ^gcc; then
3059         _type=gcc
3060         gcc_version=$($_cc --version | head -n1)
3061         gcc_basever=$($_cc -dumpversion)
3062         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3063         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3064         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3065         if ! $_cc -dumpversion | grep -q '^2\.'; then
3066             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3067         fi
3068         _cflags_speed='-O3'
3069         _cflags_size='-Os'
3070     elif $_cc --version 2>/dev/null | grep -q ^icc; then
3071         _type=icc
3072         _ident=$($_cc --version | head -n1)
3073         _depflags='-MMD'
3074         _cflags_speed='-O3'
3075         _cflags_size='-Os'
3076         _cflags_noopt='-O1'
3077     elif $_cc -v 2>&1 | grep -q xlc; then
3078         _type=xlc
3079         _ident=$($_cc -qversion 2>/dev/null | head -n1)
3080         _cflags_speed='-O5'
3081         _cflags_size='-O5 -qcompact'
3082     elif $_cc -V 2>/dev/null | grep -q Compaq; then
3083         _type=ccc
3084         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3085         _DEPFLAGS='-M'
3086         _cflags_speed='-fast'
3087         _cflags_size='-O1'
3088         _flags_filter=ccc_flags
3089     elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
3090         test -d "$sysroot" || die "No valid sysroot specified."
3091         _type=armcc
3092         _ident=$($_cc --vsn | head -n1)
3093         armcc_conf="$PWD/armcc.conf"
3094         $_cc --arm_linux_configure                 \
3095              --arm_linux_config_file="$armcc_conf" \
3096              --configure_sysroot="$sysroot"        \
3097              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3098              die "Error creating armcc configuration file."
3099         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3100         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3101         as_default="${cross_prefix}gcc"
3102         _depflags='-MMD'
3103         _cflags_speed='-O3'
3104         _cflags_size='-Os'
3105     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3106         _type=tms470
3107         _ident=$($_cc -version | head -n1 | tr -s ' ')
3108         _flags='--gcc --abi=eabi -me'
3109         _cc_e='-ppl -fe=$@'
3110         _cc_o='-fe=$@'
3111         _depflags='-ppa -ppd=$(@:.o=.d)'
3112         _cflags_speed='-O3 -mf=5'
3113         _cflags_size='-O3 -mf=2'
3114         _flags_filter=tms470_flags
3115     elif $_cc -v 2>&1 | grep -q clang; then
3116         _type=clang
3117         _ident=$($_cc --version | head -n1)
3118         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3119         _cflags_speed='-O3'
3120         _cflags_size='-Os'
3121     elif $_cc -V 2>&1 | grep -q Sun; then
3122         _type=suncc
3123         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3124         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3125         _DEPFLAGS='-xM1 -xc99'
3126         _ldflags='-std=c99'
3127         _cflags_speed='-O5'
3128         _cflags_size='-O5 -xspace'
3129         _flags_filter=suncc_flags
3130     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3131         _type=pathscale
3132         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3133         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3134         _cflags_speed='-O2'
3135         _cflags_size='-Os'
3136         _flags_filter='filter_out -Wdisabled-optimization'
3137     elif $_cc -v 2>&1 | grep -q Open64; then
3138         _type=open64
3139         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3140         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3141         _cflags_speed='-O2'
3142         _cflags_size='-Os'
3143         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3144     elif $_cc -V 2>&1 | grep -q Portland; then
3145         _type=pgi
3146         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3147         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3148         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3149         _cflags_size="-O2 -Munroll=c:1 $opt_common"
3150         _cflags_noopt="-O"
3151         _flags_filter=pgi_flags
3152     elif $_cc 2>&1 | grep -q Microsoft; then
3153         _type=msvc
3154         _ident=$($cc 2>&1 | head -n1)
3155         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3156         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3157         _cflags_speed="-O2"
3158         _cflags_size="-O1"
3159         if $_cc 2>&1 | grep -q Linker; then
3160             _ld_o='-out:$@'
3161         else
3162             _ld_o='-Fe$@'
3163         fi
3164         _cc_o='-Fo$@'
3165         _cc_e='-P -Fi$@'
3166         _flags_filter=msvc_flags
3167         _ld_lib='lib%.a'
3168         _ld_path='-libpath:'
3169         _flags='-nologo'
3170         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
3171         if [ $pfx = hostcc ]; then
3172             append _cflags -Dsnprintf=_snprintf
3173         fi
3174         disable stripping
3175     elif $_cc 2>&1 | grep -q Intel; then
3176         _type=icl
3177         _ident=$($cc 2>&1 | head -n1)
3178         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3179         # Not only is O3 broken on 13.x+ but it is slower on all previous
3180         # versions (tested) as well.
3181         _cflags_speed="-O2"
3182         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3183         if $_cc 2>&1 | grep -q Linker; then
3184             _ld_o='-out:$@'
3185         else
3186             _ld_o='-Fe$@'
3187         fi
3188         _cc_o='-Fo$@'
3189         _cc_e='-P'
3190         _flags_filter=icl_flags
3191         _ld_lib='lib%.a'
3192         _ld_path='-libpath:'
3193         # -Qdiag-error to make icl error when seeing certain unknown arguments
3194         _flags='-nologo -Qdiag-error:4044,10157'
3195         # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3196         # with MSVC which enables it by default.
3197         _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
3198         if [ $pfx = hostcc ]; then
3199             append _cflags -Dsnprintf=_snprintf
3200         fi
3201     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3202         _type=cparser
3203         _ident=$($_cc --version | head -n1)
3204         _depflags='-MMD'
3205         _cflags_speed='-O4'
3206         _cflags_size='-O2'
3207         _flags_filter=cparser_flags
3208     fi
3209
3210     eval ${pfx}_type=\$_type
3211     eval ${pfx}_ident=\$_ident
3212 }
3213
3214 set_ccvars(){
3215     eval ${1}_C=\${_cc_c-\${${1}_C}}
3216     eval ${1}_E=\${_cc_e-\${${1}_E}}
3217     eval ${1}_O=\${_cc_o-\${${1}_O}}
3218
3219     if [ -n "$_depflags" ]; then
3220         eval ${1}_DEPFLAGS=\$_depflags
3221     else
3222         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3223         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3224         eval DEP${1}FLAGS=\$_flags
3225     fi
3226 }
3227
3228 probe_cc cc "$cc"
3229 cflags_filter=$_flags_filter
3230 cflags_speed=$_cflags_speed
3231 cflags_size=$_cflags_size
3232 cflags_noopt=$_cflags_noopt
3233 add_cflags $_flags $_cflags
3234 cc_ldflags=$_ldflags
3235 set_ccvars CC
3236
3237 probe_cc hostcc "$host_cc"
3238 host_cflags_filter=$_flags_filter
3239 add_host_cflags  $_flags $_cflags
3240 set_ccvars HOSTCC
3241
3242 test -n "$cc_type" && enable $cc_type ||
3243     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3244
3245 : ${as_default:=$cc}
3246 : ${dep_cc_default:=$cc}
3247 : ${ld_default:=$cc}
3248 : ${host_ld_default:=$host_cc}
3249 set_default ar as dep_cc ld host_ld windres
3250
3251 probe_cc as "$as"
3252 asflags_filter=$_flags_filter
3253 add_asflags $_flags $_cflags
3254 set_ccvars AS
3255
3256 probe_cc ld "$ld"
3257 ldflags_filter=$_flags_filter
3258 add_ldflags $_flags $_ldflags
3259 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3260 LD_O=${_ld_o-$LD_O}
3261 LD_LIB=${_ld_lib-$LD_LIB}
3262 LD_PATH=${_ld_path-$LD_PATH}
3263
3264 probe_cc hostld "$host_ld"
3265 host_ldflags_filter=$_flags_filter
3266 add_host_ldflags $_flags $_ldflags
3267 HOSTLD_O=${_ld_o-$HOSTLD_O}
3268
3269 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3270     probe_cc depcc "$dep_cc"
3271     CCDEP=${_DEPCMD:-$DEPCMD}
3272     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3273     DEPCCFLAGS=$_flags
3274 fi
3275
3276 if $ar 2>&1 | grep -q Microsoft; then
3277     arflags="-nologo"
3278     ar_o='-out:$@'
3279 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3280     arflags="rq"
3281     ar_o='$@'
3282 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3283     arflags='-Xany -r -c'
3284     ar_o='$@'
3285 else
3286     arflags="rc"
3287     ar_o='$@'
3288 fi
3289
3290 add_cflags $extra_cflags
3291 add_cxxflags $extra_cxxflags
3292 add_asflags $extra_cflags
3293
3294 if test -n "$sysroot"; then
3295     case "$cc_type" in
3296         gcc|llvm_gcc|clang)
3297             add_cppflags --sysroot="$sysroot"
3298             add_ldflags --sysroot="$sysroot"
3299         ;;
3300         tms470)
3301             add_cppflags -I"$sysinclude"
3302             add_ldflags  --sysroot="$sysroot"
3303         ;;
3304     esac
3305 fi
3306
3307 if test "$cpu" = host; then
3308     enabled cross_compile &&
3309         die "--cpu=host makes no sense when cross-compiling."
3310
3311     case "$cc_type" in
3312         gcc|llvm_gcc)
3313             check_native(){
3314                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3315                 sed -n "/cc1.*$1=/{
3316                             s/.*$1=\\([^ ]*\\).*/\\1/
3317                             p
3318                             q
3319                         }" $TMPE
3320             }
3321             cpu=$(check_native -march || check_native -mcpu)
3322         ;;
3323     esac
3324
3325     test "${cpu:-host}" = host &&
3326         die "--cpu=host not supported with compiler $cc"
3327 fi
3328
3329 # Deal with common $arch aliases
3330 case "$arch" in
3331     aarch64|arm64)
3332         arch="aarch64"
3333     ;;
3334     arm*|iPad*|iPhone*)
3335         arch="arm"
3336     ;;
3337     mips*|IP*)
3338         arch="mips"
3339     ;;
3340     parisc*|hppa*)
3341         arch="parisc"
3342     ;;
3343     "Power Macintosh"|ppc*|powerpc*)
3344         arch="ppc"
3345     ;;
3346     s390|s390x)
3347         arch="s390"
3348     ;;
3349     sh4|sh)
3350         arch="sh4"
3351     ;;
3352     sun4u|sparc*)
3353         arch="sparc"
3354     ;;
3355     tilegx|tile-gx)
3356         arch="tilegx"
3357     ;;
3358     i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3359         arch="x86"
3360     ;;
3361 esac
3362
3363 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3364 enable $arch
3365
3366 # Add processor-specific flags
3367 if enabled aarch64; then
3368
3369     case $cpu in
3370         armv*)
3371             cpuflags="-march=$cpu"
3372         ;;
3373         *)
3374             cpuflags="-mcpu=$cpu"
3375         ;;
3376     esac
3377
3378 elif enabled alpha; then
3379
3380     cpuflags="-mcpu=$cpu"
3381
3382 elif enabled arm; then
3383
3384     check_arm_arch() {
3385         check_cpp_condition stddef.h \
3386             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3387             $cpuflags
3388     }
3389
3390     probe_arm_arch() {
3391         if   check_arm_arch 4;        then echo armv4;
3392         elif check_arm_arch 4T;       then echo armv4t;
3393         elif check_arm_arch 5;        then echo armv5;
3394         elif check_arm_arch 5E;       then echo armv5e;
3395         elif check_arm_arch 5T;       then echo armv5t;
3396         elif check_arm_arch 5TE;      then echo armv5te;
3397         elif check_arm_arch 5TEJ;     then echo armv5te;
3398         elif check_arm_arch 6;        then echo armv6;
3399         elif check_arm_arch 6J;       then echo armv6j;
3400         elif check_arm_arch 6K;       then echo armv6k;
3401         elif check_arm_arch 6Z;       then echo armv6z;
3402         elif check_arm_arch 6ZK;      then echo armv6zk;
3403         elif check_arm_arch 6T2;      then echo armv6t2;
3404         elif check_arm_arch 7;        then echo armv7;
3405         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3406         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3407         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3408         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3409         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3410         fi
3411     }
3412
3413     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3414
3415     case $cpu in
3416         armv*)
3417             cpuflags="-march=$cpu"
3418             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3419         ;;
3420         *)
3421             cpuflags="-mcpu=$cpu"
3422             case $cpu in
3423                 cortex-a*)                               subarch=armv7a  ;;
3424                 cortex-r*)                               subarch=armv7r  ;;
3425                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3426                 arm11*)                                  subarch=armv6   ;;
3427                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3428                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3429                 *)                             subarch=$(probe_arm_arch) ;;
3430             esac
3431         ;;
3432     esac
3433
3434     case "$subarch" in
3435         armv5t*)    enable fast_clz                ;;
3436         armv[6-8]*) enable fast_clz fast_unaligned ;;
3437     esac
3438
3439 elif enabled avr32; then
3440
3441     case $cpu in
3442         ap7[02]0[0-2])
3443             subarch="avr32_ap"
3444             cpuflags="-mpart=$cpu"
3445         ;;
3446         ap)
3447             subarch="avr32_ap"
3448             cpuflags="-march=$cpu"
3449         ;;
3450         uc3[ab]*)
3451             subarch="avr32_uc"
3452             cpuflags="-mcpu=$cpu"
3453         ;;
3454         uc)
3455             subarch="avr32_uc"
3456             cpuflags="-march=$cpu"
3457         ;;
3458     esac
3459
3460 elif enabled bfin; then
3461
3462     cpuflags="-mcpu=$cpu"
3463
3464 elif enabled mips; then
3465
3466     cpuflags="-march=$cpu"
3467
3468     case $cpu in
3469         24kc)
3470             disable mipsfpu
3471             disable mipsdspr1
3472             disable mipsdspr2
3473         ;;
3474         24kf*)
3475             disable mipsdspr1
3476             disable mipsdspr2
3477         ;;
3478         24kec|34kc|1004kc)
3479             disable mipsfpu
3480             disable mipsdspr2
3481         ;;
3482         24kef*|34kf*|1004kf*)
3483             disable mipsdspr2
3484         ;;
3485         74kc)
3486             disable mipsfpu
3487         ;;
3488     esac
3489
3490 elif enabled ppc; then
3491
3492     case $(tolower $cpu) in
3493         601|ppc601|powerpc601)
3494             cpuflags="-mcpu=601"
3495             disable altivec
3496         ;;
3497         603*|ppc603*|powerpc603*)
3498             cpuflags="-mcpu=603"
3499             disable altivec
3500         ;;
3501         604*|ppc604*|powerpc604*)
3502             cpuflags="-mcpu=604"
3503             disable altivec
3504         ;;
3505         g3|75*|ppc75*|powerpc75*)
3506             cpuflags="-mcpu=750"
3507             disable altivec
3508         ;;
3509         g4|745*|ppc745*|powerpc745*)
3510             cpuflags="-mcpu=7450"
3511         ;;
3512         74*|ppc74*|powerpc74*)
3513             cpuflags="-mcpu=7400"
3514         ;;
3515         g5|970|ppc970|powerpc970)
3516             cpuflags="-mcpu=970"
3517         ;;
3518         power[3-7]*)
3519             cpuflags="-mcpu=$cpu"
3520         ;;
3521         cell)
3522             cpuflags="-mcpu=cell"
3523             enable ldbrx
3524         ;;
3525         e500mc)
3526             cpuflags="-mcpu=e500mc"
3527             disable altivec
3528         ;;
3529         e500v2)
3530             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3531             disable altivec
3532         ;;
3533         e500)
3534             cpuflags="-mcpu=8540 -mhard-float"
3535             disable altivec
3536         ;;
3537     esac
3538
3539 elif enabled sparc; then
3540
3541     case $cpu in
3542         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3543             cpuflags="-mcpu=$cpu"
3544             disable vis
3545         ;;
3546         ultrasparc*|niagara[234])
3547             cpuflags="-mcpu=$cpu"
3548         ;;
3549     esac
3550
3551 elif enabled x86; then
3552
3553     case $cpu in
3554         i[345]86|pentium)
3555             cpuflags="-march=$cpu"
3556             disable mmx
3557         ;;
3558         # targets that do NOT support nopl and conditional mov (cmov)
3559         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3560             cpuflags="-march=$cpu"
3561             disable i686
3562         ;;
3563         # targets that do support nopl and conditional mov (cmov)
3564         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|corei7*|amdfam10|barcelona|atom|bdver*)
3565             cpuflags="-march=$cpu"
3566             enable i686
3567             enable fast_cmov
3568         ;;
3569         # targets that do support conditional mov but on which it's slow
3570         pentium4|pentium4m|prescott|nocona)
3571             cpuflags="-march=$cpu"
3572             enable i686
3573             disable fast_cmov
3574         ;;
3575     esac
3576
3577 fi
3578
3579 if [ "$cpu" != generic ]; then
3580     add_cflags  $cpuflags
3581     add_asflags $cpuflags
3582 fi
3583
3584 # compiler sanity check
3585 check_exec <<EOF
3586 int main(void){ return 0; }
3587 EOF
3588 if test "$?" != 0; then
3589     echo "$cc is unable to create an executable file."
3590     if test -z "$cross_prefix" && ! enabled cross_compile ; then
3591         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3592         echo "Only do this if you know what cross compiling means."
3593     fi
3594     die "C compiler test failed."
3595 fi
3596
3597 add_cppflags -D_ISOC99_SOURCE
3598 add_cxxflags -D__STDC_CONSTANT_MACROS
3599 check_cflags -std=c99
3600 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3601 #include <stdlib.h>
3602 EOF
3603 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3604 #include <stdlib.h>
3605 EOF
3606
3607 add_host_cppflags -D_ISOC99_SOURCE
3608 check_host_cflags -std=c99
3609 check_host_cflags -Wall
3610 check_host_cflags -O3
3611
3612 check_64bit(){
3613     arch32=$1
3614     arch64=$2
3615     expr=$3
3616     check_code cc "" "int test[2*($expr) - 1]" &&
3617         subarch=$arch64 || subarch=$arch32
3618 }
3619
3620 case "$arch" in
3621     aarch64|alpha|ia64)
3622         spic=$shared
3623     ;;
3624     mips)
3625         check_64bit mips mips64 '_MIPS_SIM > 1'
3626         spic=$shared
3627     ;;
3628     parisc)
3629         check_64bit parisc parisc64 'sizeof(void *) > 4'
3630         spic=$shared
3631     ;;
3632     ppc)
3633         check_64bit ppc ppc64 'sizeof(void *) > 4'
3634         spic=$shared
3635     ;;
3636     sparc)
3637         check_64bit sparc sparc64 'sizeof(void *) > 4'
3638         spic=$shared
3639     ;;
3640     x86)
3641         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3642         if test "$subarch" = "x86_64"; then
3643             spic=$shared
3644         fi
3645     ;;
3646     ppc)
3647         check_cc <<EOF && subarch="ppc64"
3648         int test[(int)sizeof(char*) - 7];
3649 EOF
3650     ;;
3651 esac
3652
3653 enable $subarch
3654 enabled spic && enable_weak pic
3655
3656 # OS specific
3657 case $target_os in
3658     aix)
3659         SHFLAGS=-shared
3660         add_cppflags '-I\$(SRC_PATH)/compat/aix'
3661         enabled shared && add_ldflags -Wl,-brtl
3662         ;;
3663     haiku)
3664         prefix_default="/boot/common"
3665         network_extralibs="-lnetwork"
3666         host_libs=
3667         ;;
3668     sunos)
3669         SHFLAGS='-shared -Wl,-h,$$(@F)'
3670         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3671         network_extralibs="-lsocket -lnsl"
3672         # When using suncc to build, the Solaris linker will mark
3673         # an executable with each instruction set encountered by
3674         # the Solaris assembler.  As our libraries contain their own
3675         # guards for processor-specific code, instead suppress
3676         # generation of the HWCAPS ELF section on Solaris x86 only.
3677         enabled_all suncc x86 &&
3678             echo "hwcap_1 = OVERRIDE;" > mapfile &&
3679             add_ldflags -Wl,-M,mapfile
3680         nm_default='nm -P -g'
3681         ;;
3682     netbsd)
3683         disable symver
3684         oss_indev_extralibs="-lossaudio"
3685         oss_outdev_extralibs="-lossaudio"
3686         enabled gcc || check_ldflags -Wl,-zmuldefs
3687         ;;
3688     openbsd|bitrig)
3689         disable symver
3690         SHFLAGS='-shared'
3691         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3692         SLIB_INSTALL_LINKS=
3693         oss_indev_extralibs="-lossaudio"
3694         oss_outdev_extralibs="-lossaudio"
3695         ;;
3696     dragonfly)
3697         disable symver
3698         ;;
3699     freebsd)
3700         ;;
3701     bsd/os)
3702         add_extralibs -lpoll -lgnugetopt
3703         strip="strip -d"
3704         ;;
3705     darwin)
3706         gas="gas-preprocessor.pl $cc"
3707         enabled ppc && add_asflags -force_cpusubtype_ALL
3708         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3709         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3710         strip="${strip} -x"
3711         add_ldflags -Wl,-dynamic,-search_paths_first
3712         SLIBSUF=".dylib"
3713         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3714         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3715         objformat="macho"
3716         enabled x86_64 && objformat="macho64"
3717         enabled_any pic shared ||
3718             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3719         ;;
3720     mingw32*)
3721         if test $target_os = "mingw32ce"; then
3722             disable network
3723         else
3724             target_os=mingw32
3725         fi
3726         LIBTARGET=i386
3727         if enabled x86_64; then
3728             LIBTARGET="i386:x86-64"
3729         elif enabled arm; then
3730             LIBTARGET=arm-wince
3731         fi
3732         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
3733         check_ldflags -Wl,--nxcompat
3734         check_ldflags -Wl,--dynamicbase
3735         shlibdir_default="$bindir_default"
3736         SLIBPREF=""
3737         SLIBSUF=".dll"
3738         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3739         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3740         dlltool="${cross_prefix}dlltool"
3741         if check_cmd lib.exe -list; then
3742             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3743             if enabled x86_64; then
3744                 LIBTARGET=x64
3745             fi
3746         elif check_cmd $dlltool --version; then
3747             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)'
3748         fi
3749         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3750         SLIB_INSTALL_LINKS=
3751         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3752         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3753         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'
3754         objformat="win32"
3755         ranlib=:
3756         enable dos_paths
3757         ;;
3758     win32|win64)
3759         disable symver
3760         if enabled shared; then
3761             # Link to the import library instead of the normal static library
3762             # for shared libs.
3763             LD_LIB='%.lib'
3764             # Cannot build both shared and static libs with MSVC or icl.
3765             disable static
3766         fi
3767         shlibdir_default="$bindir_default"
3768         SLIBPREF=""
3769         SLIBSUF=".dll"
3770         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3771         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3772         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3773         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3774         SLIB_INSTALL_LINKS=
3775         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3776         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3777         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3778         objformat="win32"
3779         ranlib=:
3780         enable dos_paths
3781         ;;
3782     cygwin*)
3783         target_os=cygwin
3784         shlibdir_default="$bindir_default"
3785         SLIBPREF="cyg"
3786         SLIBSUF=".dll"
3787         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3788         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3789         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3790         SLIB_INSTALL_LINKS=
3791         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3792         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3793         objformat="win32"
3794         enable dos_paths
3795         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
3796         ;;
3797     *-dos|freedos|opendos)
3798         network_extralibs="-lsocket"
3799         objformat="coff"
3800         enable dos_paths
3801         add_cppflags -U__STRICT_ANSI__
3802         ;;
3803     linux)
3804         enable dv1394
3805         ;;
3806     irix*)
3807         target_os=irix
3808         ranlib="echo ignoring ranlib"
3809         ;;
3810     os/2*)
3811         strip="lxlite -CS"
3812         ln_s="cp -f"
3813         objformat="aout"
3814         add_cppflags -D_GNU_SOURCE
3815         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3816         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3817         LIBSUF="_s.a"
3818         SLIBPREF=""
3819         SLIBSUF=".dll"
3820         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3821         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3822         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3823             echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3824             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3825             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3826             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3827             emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3828         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3829             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3830         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3831         enable dos_paths
3832         enable_weak os2threads
3833         ;;
3834     gnu/kfreebsd)
3835         add_cppflags -D_BSD_SOURCE
3836         ;;
3837     gnu)
3838         ;;
3839     qnx)
3840         add_cppflags -D_QNX_SOURCE
3841         network_extralibs="-lsocket"
3842         ;;
3843     symbian)
3844         SLIBSUF=".dll"
3845         enable dos_paths
3846         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3847         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3848         add_ldflags -Wl,--target1-abs,--no-undefined \
3849                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3850                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3851         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3852                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3853                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3854         ;;
3855     osf1)
3856         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3857         ;;
3858     minix)
3859         ;;
3860     plan9)
3861         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
3862                      -D_REENTRANT_SOURCE        \
3863                      -D_RESEARCH_SOURCE         \
3864                      -DFD_SETSIZE=96            \
3865                      -DHAVE_SOCK_OPTS
3866         add_compat strtod.o strtod=avpriv_strtod
3867         network_extralibs='-lbsd'
3868         exeobjs=compat/plan9/main.o
3869         disable ffserver
3870         cp_f='cp'
3871         ;;
3872     none)
3873         ;;
3874     *)
3875         die "Unknown OS '$target_os'."
3876         ;;
3877 esac
3878
3879 # determine libc flavour
3880
3881 probe_libc(){
3882     pfx=$1
3883     pfx_no_=${pfx%_}
3884     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3885     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
3886         eval ${pfx}libc_type=uclibc
3887         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3888     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
3889         eval ${pfx}libc_type=glibc
3890         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3891     # MinGW headers can be installed on Cygwin, so check for newlib first.
3892     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3893         eval ${pfx}libc_type=newlib
3894         add_${pfx}cppflags -U__STRICT_ANSI__
3895     # MinGW64 is backwards compatible with MinGW32, so check for it first.
3896     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
3897         eval ${pfx}libc_type=mingw64
3898         if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
3899             add_compat msvcrt/snprintf.o
3900             add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
3901         fi
3902         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3903         eval test \$${pfx_no_}cc_type = "gcc" &&
3904             add_${pfx}cppflags -D__printf__=__gnu_printf__
3905     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
3906          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
3907         eval ${pfx}libc_type=mingw32
3908         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
3909             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3910             die "ERROR: MinGW32 runtime version must be >= 3.15."
3911         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3912         eval test \$${pfx_no_}cc_type = "gcc" &&
3913             add_${pfx}cppflags -D__printf__=__gnu_printf__
3914     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
3915         eval ${pfx}libc_type=msvcrt
3916         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
3917         # 0x601 by default unless something else is set by the user.
3918         # This can easily lead to us detecting functions only present
3919         # in such new versions and producing binaries requiring windows 7.0.
3920         # Therefore explicitly set the default to XP unless the user has
3921         # set something else on the command line.
3922         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
3923             add_${pfx}cppflags -D_WIN32_WINNT=0x0502
3924     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
3925         eval ${pfx}libc_type=klibc
3926     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
3927         eval ${pfx}libc_type=bionic
3928     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
3929         eval ${pfx}libc_type=solaris
3930         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3931     fi
3932 }
3933
3934 probe_libc
3935 test -n "$libc_type" && enable libc_$libc_type
3936 probe_libc host_
3937 test -n "$host_libc_type" && enable host_libc_$host_libc_type
3938
3939 case $libc_type in
3940     bionic)
3941         add_compat strtod.o strtod=avpriv_strtod
3942         ;;
3943     msvcrt)
3944         add_compat strtod.o strtod=avpriv_strtod
3945         add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
3946                                      _snprintf=avpriv_snprintf  \
3947                                      vsnprintf=avpriv_vsnprintf
3948         ;;
3949 esac
3950
3951 # hacks for compiler/libc/os combinations
3952
3953 if enabled_all tms470 libc_glibc; then
3954     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3955     add_cppflags -D__USER_LABEL_PREFIX__=
3956     add_cppflags -D__builtin_memset=memset
3957     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3958     add_cflags   -pds=48    # incompatible redefinition of macro
3959 fi
3960
3961 if enabled_all ccc libc_glibc; then
3962     add_ldflags -Wl,-z,now  # calls to libots crash without this
3963 fi
3964
3965 esc(){
3966     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3967 }
3968
3969 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
3970
3971 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3972
3973 set_default $PATHS_LIST
3974 set_default nm
3975
3976 # we need to build at least one lib type
3977 if ! enabled_any static shared; then
3978     cat <<EOF
3979 At least one library type must be built.
3980 Specify --enable-static to build the static libraries or --enable-shared to
3981 build the shared libraries as well. To only build the shared libraries specify
3982 --disable-static in addition to --enable-shared.
3983 EOF
3984     exit 1;
3985 fi
3986
3987 # backward compatibility layer for incompatible_libav/fork_abi
3988 enabled incompatible_fork_abi  && enable incompatible_libav_abi
3989 enabled incompatible_libav_abi && enable incompatible_fork_abi
3990
3991 die_license_disabled() {
3992     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3993 }
3994
3995 die_license_disabled_gpl() {
3996     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
3997 }
3998
3999 die_license_disabled gpl frei0r
4000 die_license_disabled gpl libcdio
4001 die_license_disabled gpl libutvideo
4002 die_license_disabled gpl libvidstab
4003 die_license_disabled gpl libx264
4004 die_license_disabled gpl libxavs
4005 die_license_disabled gpl libxvid
4006 die_license_disabled gpl libzvbi
4007 die_license_disabled gpl x11grab
4008
4009 die_license_disabled nonfree libaacplus
4010 die_license_disabled nonfree libfaac
4011 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
4012 enabled gpl && die_license_disabled_gpl nonfree openssl
4013
4014 die_license_disabled version3 libopencore_amrnb
4015 die_license_disabled version3 libopencore_amrwb
4016 die_license_disabled version3 libvo_aacenc
4017 die_license_disabled version3 libvo_amrwbenc
4018
4019 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
4020
4021 disabled optimizations || check_cflags -fomit-frame-pointer
4022
4023 enable_weak_pic() {
4024     disabled pic && return
4025     enable pic
4026     add_cppflags -DPIC
4027     case "$target_os" in
4028     mingw*|cygwin*)
4029         ;;
4030     *)
4031         add_cflags -fPIC
4032         ;;
4033     esac
4034     add_asflags  -fPIC
4035 }
4036
4037 enabled pic && enable_weak_pic
4038
4039 check_cc <<EOF || die "Symbol mangling check failed."
4040 int ff_extern;
4041 EOF
4042 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4043 extern_prefix=${sym%%ff_extern*}