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