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