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