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