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