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