]> git.sesse.net Git - ffmpeg/blob - configure
Merge commit '3a149e23d37f06d49ab0bb013a3b9cb0224bba5c'
[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'
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     pfx_no_=${pfx%_}
3840     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3841     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
3842         eval ${pfx}libc_type=uclibc
3843         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3844     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
3845         eval ${pfx}libc_type=glibc
3846         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3847     # MinGW headers can be installed on Cygwin, so check for newlib first.
3848     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3849         eval ${pfx}libc_type=newlib
3850         add_${pfx}cppflags -U__STRICT_ANSI__
3851     # MinGW64 is backwards compatible with MinGW32, so check for it first.
3852     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
3853         eval ${pfx}libc_type=mingw64
3854         if check_${pfx}cpp_condition _mingw.h "__MINGW64_VERSION_MAJOR < 3"; then
3855             add_compat msvcrt/snprintf.o
3856             add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
3857         fi
3858         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3859         eval test \$${pfx_no_}cc_type = "gcc" &&
3860             add_${pfx}cppflags -D__printf__=__gnu_printf__
3861     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
3862          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
3863         eval ${pfx}libc_type=mingw32
3864         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
3865             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3866             die "ERROR: MinGW32 runtime version must be >= 3.15."
3867         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3868         eval test \$${pfx_no_}cc_type = "gcc" &&
3869             add_${pfx}cppflags -D__printf__=__gnu_printf__
3870     elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
3871         eval ${pfx}libc_type=msvcrt
3872         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
3873         # 0x601 by default unless something else is set by the user.
3874         # This can easily lead to us detecting functions only present
3875         # in such new versions and producing binaries requiring windows 7.0.
3876         # Therefore explicitly set the default to XP unless the user has
3877         # set something else on the command line.
3878         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
3879             add_${pfx}cppflags -D_WIN32_WINNT=0x0502
3880     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
3881         eval ${pfx}libc_type=klibc
3882     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
3883         eval ${pfx}libc_type=bionic
3884     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
3885         eval ${pfx}libc_type=solaris
3886         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3887     fi
3888 }
3889
3890 probe_libc
3891 test -n "$libc_type" && enable libc_$libc_type
3892 probe_libc host_
3893 test -n "$host_libc_type" && enable host_libc_$host_libc_type
3894
3895 case $libc_type in
3896     bionic)
3897         add_compat strtod.o strtod=avpriv_strtod
3898         ;;
3899     msvcrt)
3900         add_compat strtod.o strtod=avpriv_strtod
3901         add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
3902                                      _snprintf=avpriv_snprintf  \
3903                                      vsnprintf=avpriv_vsnprintf
3904         ;;
3905 esac
3906
3907 # hacks for compiler/libc/os combinations
3908
3909 if enabled_all tms470 libc_glibc; then
3910     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3911     add_cppflags -D__USER_LABEL_PREFIX__=
3912     add_cppflags -D__builtin_memset=memset
3913     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3914     add_cflags   -pds=48    # incompatible redefinition of macro
3915 fi
3916
3917 if enabled_all ccc libc_glibc; then
3918     add_ldflags -Wl,-z,now  # calls to libots crash without this
3919 fi
3920
3921 esc(){
3922     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3923 }
3924
3925 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
3926
3927 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3928
3929 set_default $PATHS_LIST
3930 set_default nm
3931
3932 # we need to build at least one lib type
3933 if ! enabled_any static shared; then
3934     cat <<EOF
3935 At least one library type must be built.
3936 Specify --enable-static to build the static libraries or --enable-shared to
3937 build the shared libraries as well. To only build the shared libraries specify
3938 --disable-static in addition to --enable-shared.
3939 EOF
3940     exit 1;
3941 fi
3942
3943 # backward compatibility layer for incompatible_libav/fork_abi
3944 enabled incompatible_fork_abi  && enable incompatible_libav_abi
3945 enabled incompatible_libav_abi && enable incompatible_fork_abi
3946
3947 die_license_disabled() {
3948     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3949 }
3950
3951 die_license_disabled_gpl() {
3952     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
3953 }
3954
3955 die_license_disabled gpl frei0r
3956 die_license_disabled gpl libcdio
3957 die_license_disabled gpl libutvideo
3958 die_license_disabled gpl libvidstab
3959 die_license_disabled gpl libx264
3960 die_license_disabled gpl libxavs
3961 die_license_disabled gpl libxvid
3962 die_license_disabled gpl libzvbi
3963 die_license_disabled gpl x11grab
3964
3965 die_license_disabled nonfree libaacplus
3966 die_license_disabled nonfree libfaac
3967 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
3968 enabled gpl && die_license_disabled_gpl nonfree openssl
3969
3970 die_license_disabled version3 libopencore_amrnb
3971 die_license_disabled version3 libopencore_amrwb
3972 die_license_disabled version3 libvo_aacenc
3973 die_license_disabled version3 libvo_amrwbenc
3974
3975 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3976
3977 disabled optimizations || check_cflags -fomit-frame-pointer
3978
3979 enable_weak_pic() {
3980     disabled pic && return
3981     enable pic
3982     add_cppflags -DPIC
3983     case "$target_os" in
3984     mingw*|cygwin*)
3985         ;;
3986     *)
3987         add_cflags -fPIC
3988         ;;
3989     esac
3990     add_asflags  -fPIC
3991 }
3992
3993 enabled pic && enable_weak_pic
3994
3995 check_cc <<EOF || die "Symbol mangling check failed."
3996 int ff_extern;
3997 EOF
3998 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3999 extern_prefix=${sym%%ff_extern*}
4000
4001 check_cc <<EOF && enable_weak inline_asm
4002 void foo(void) { __asm__ volatile ("" ::); }
4003 EOF
4004
4005 _restrict=
4006 for restrict_keyword in restrict __restrict__ __restrict; do
4007     check_cc <<EOF && _restrict=$restrict_keyword && break
4008 void foo(char * $restrict_keyword p);
4009 EOF
4010 done
4011
4012 check_cc <<EOF && enable pragma_deprecated
4013 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4014 EOF
4015
4016 check_cc <<EOF && enable attribute_packed
4017 struct { int x; } __attribute__((packed)) x;
4018 EOF
4019
4020 check_cc <<EOF && enable attribute_may_alias
4021 union { int x; } __attribute__((may_alias)) x;
4022 EOF
4023
4024 check_cc <<EOF || die "endian test failed"
4025 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
4026 EOF
4027 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4028
4029 check_inline_asm inline_asm_labels '"1:\n"'
4030
4031 if enabled alpha; then
4032
4033     check_cflags -mieee
4034
4035 elif enabled arm; then
4036
4037     check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
4038 float func(float a, float b){ return a+b; }
4039 EOF
4040
4041     enabled thumb && check_cflags -mthumb || check_cflags -marm
4042     nogas=die
4043
4044     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
4045         enable vfp_args
4046     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
4047         case "${cross_prefix:-$cc}" in
4048             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
4049             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4050 __asm__ (".eabi_attribute 28, 1");
4051 int main(void) { return 0; }
4052 EOF
4053         esac
4054         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
4055     fi
4056
4057     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
4058     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
4059     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
4060     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
4061     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
4062     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
4063
4064     [ $target_os = linux ] ||
4065         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
4066             $ARCH_EXT_LIST_ARM
4067
4068     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4069     check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
4070
4071     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4072
4073 elif enabled mips; then
4074
4075     check_inline_asm loongson '"dmult.g $1, $2, $3"'
4076     enabled mips32r2  && add_cflags "-mips32r2" && add_asflags "-mips32r2" &&
4077      check_inline_asm mips32r2  '"rotr $t0, $t1, 1"'
4078     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
4079      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
4080     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
4081      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
4082     enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
4083      check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
4084
4085 elif enabled parisc; then
4086
4087     if enabled gcc; then
4088         case $($cc -dumpversion) in
4089             4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
4090         esac
4091     fi
4092
4093 elif enabled ppc; then
4094
4095     enable local_aligned_8 local_aligned_16
4096
4097     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
4098     check_inline_asm ibm_asm   '"add 0, 0, 0"'
4099     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
4100     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4101
4102     # AltiVec flags: The FSF version of GCC differs from the Apple version
4103     if enabled altivec; then
4104         if ! enabled_any pic ppc64; then
4105             nogas=warn
4106         fi
4107         check_cflags -maltivec -mabi=altivec &&
4108         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
4109         check_cflags -faltivec
4110
4111         # check if our compiler supports Motorola AltiVec C API
4112         check_cc <<EOF || disable altivec
4113 $inc_altivec_h
4114 int main(void) {
4115     vector signed int v1 = (vector signed int) { 0 };
4116     vector signed int v2 = (vector signed int) { 1 };
4117     v1 = vec_add(v1, v2);
4118     return 0;
4119 }
4120 EOF
4121
4122         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4123     fi
4124
4125 elif enabled sparc; then
4126
4127     enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
4128
4129 elif enabled x86; then
4130
4131     check_builtin rdtsc    intrin.h   "__rdtsc()"
4132     check_builtin mm_empty mmintrin.h "_mm_empty()"
4133
4134     enable local_aligned_8 local_aligned_16
4135
4136     # check whether EBP is available on x86
4137     # As 'i' is stored on the stack, this program will crash
4138     # if the base pointer is used to access it because the
4139     # base pointer is cleared in the inline assembly code.
4140     check_exec_crash <<EOF && enable ebp_available
4141 volatile int i=0;
4142 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
4143 return i;
4144 EOF
4145
4146     # check whether EBX is available on x86
4147     check_inline_asm ebx_available '""::"b"(0)' &&
4148         check_inline_asm ebx_available '"":::"%ebx"'
4149
4150     # check whether xmm clobbers are supported
4151     check_inline_asm xmm_clobbers '"":::"%xmm0"'
4152
4153     # check whether binutils is new enough to compile SSSE3/MMXEXT
4154     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
4155     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4156
4157     if ! disabled_any asm mmx yasm; then
4158         if check_cmd $yasmexe --version; then
4159             enabled x86_64 && yasm_extra="-m amd64"
4160             yasm_debug="-g dwarf2"
4161         elif check_cmd nasm -v; then
4162             yasmexe=nasm
4163             yasm_debug="-g -F dwarf"
4164             enabled x86_64 && test "$objformat" = elf && objformat=elf64
4165         fi
4166
4167         YASMFLAGS="-f $objformat $yasm_extra"
4168         enabled pic               && append YASMFLAGS "-DPIC"
4169         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
4170         case "$objformat" in
4171             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4172         esac
4173
4174         check_yasm "movbe ecx, [5]" && enable yasm ||
4175             die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4176         check_yasm "vextractf128 xmm0, ymm0, 0"      || disable avx_external avresample
4177         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4178         check_yasm "CPU amdnop" && enable cpunop
4179     fi
4180
4181     case "$cpu" in
4182         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4183             disable fast_clz
4184         ;;
4185     esac
4186
4187 fi
4188
4189 if enabled asm; then
4190     as=${gas:=$as}
4191     check_as <<EOF && enable gnu_as || \
4192         $nogas "GNU assembler not found, install gas-preprocessor"
4193 .macro m n
4194 \n: .int 0
4195 .endm
4196 m x
4197 EOF
4198 fi
4199
4200 check_ldflags -Wl,--as-needed
4201
4202 if check_func dlopen; then
4203     ldl=
4204 elif check_func dlopen -ldl; then
4205     ldl=-ldl
4206 fi
4207
4208 if ! disabled network; then
4209     check_type "sys/types.h sys/socket.h" socklen_t
4210     check_type netdb.h "struct addrinfo"
4211     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4212     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4213     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4214     check_type netinet/in.h "struct sockaddr_in6"
4215     check_type poll.h "struct pollfd"
4216     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
4217     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4218     check_type netinet/sctp.h "struct sctp_event_subscribe"
4219     check_func getaddrinfo $network_extralibs
4220     check_func getservbyport $network_extralibs
4221     # Prefer arpa/inet.h over winsock2
4222     if check_header arpa/inet.h ; then
4223         check_func closesocket
4224     elif check_header winsock2.h ; then
4225         check_func_headers winsock2.h closesocket -lws2 &&
4226             network_extralibs="-lws2" ||
4227         { check_func_headers winsock2.h closesocket -lws2_32 &&
4228             network_extralibs="-lws2_32"; }
4229         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4230         check_type ws2tcpip.h socklen_t
4231         check_type ws2tcpip.h "struct addrinfo"
4232         check_type ws2tcpip.h "struct group_source_req"
4233         check_type ws2tcpip.h "struct ip_mreq_source"
4234         check_type ws2tcpip.h "struct ipv6_mreq"
4235         check_type winsock2.h "struct pollfd"
4236         check_type ws2tcpip.h "struct sockaddr_in6"
4237         check_type ws2tcpip.h "struct sockaddr_storage"
4238         check_struct winsock2.h "struct sockaddr" sa_len
4239     else
4240         disable network
4241     fi
4242 fi
4243
4244 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4245 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
4246
4247 check_func  access
4248 check_func  clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
4249 check_func  fcntl
4250 check_func  fork
4251 check_func_headers stdlib.h getenv
4252 check_func  gethrtime
4253 check_func  getopt
4254 check_func  getrusage
4255 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4256 check_func  gettimeofday
4257 check_func  inet_aton $network_extralibs
4258 check_func  isatty
4259 check_func  localtime_r
4260 check_func  ${malloc_prefix}memalign            && enable memalign
4261 check_func  mkstemp
4262 check_func  mmap
4263 check_func  mprotect
4264 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
4265 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
4266 check_func  setrlimit
4267 check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
4268 check_func  strerror_r
4269 check_func  sched_getaffinity
4270 check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4271 check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4272 check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4273 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4274 check_builtin sarestart signal.h "SA_RESTART"
4275 check_func  sysconf
4276 check_func  sysctl
4277 check_func  usleep
4278 check_func_headers conio.h kbhit
4279 check_func_headers windows.h PeekNamedPipe
4280 check_func_headers io.h setmode
4281 check_func_headers lzo/lzo1x.h lzo1x_999_compress
4282 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4283 check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4284 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4285 check_func_headers windows.h GetProcessAffinityMask
4286 check_func_headers windows.h GetProcessTimes
4287 check_func_headers windows.h GetSystemTimeAsFileTime
4288 check_func_headers windows.h MapViewOfFile
4289 check_func_headers windows.h SetConsoleTextAttribute
4290 check_func_headers windows.h Sleep
4291 check_func_headers windows.h VirtualAlloc
4292 check_func_headers glob.h glob
4293 check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
4294
4295 check_header cl/cl.h
4296 check_header direct.h
4297 check_header dlfcn.h
4298 check_header dxva.h
4299 check_header dxva2api.h -D_WIN32_WINNT=0x0600
4300 check_header io.h
4301 check_header libcrystalhd/libcrystalhd_if.h
4302 check_header malloc.h
4303 check_header poll.h
4304 check_header sys/mman.h
4305 check_header sys/param.h
4306 check_header sys/resource.h
4307 check_header sys/select.h
4308 check_header sys/time.h
4309 check_header sys/un.h
4310 check_header termios.h
4311 check_header unistd.h
4312 check_header vdpau/vdpau.h
4313 check_header vdpau/vdpau_x11.h
4314 check_header VideoDecodeAcceleration/VDADecoder.h
4315 check_header windows.h
4316 check_header X11/extensions/XvMClib.h
4317 check_header asm/types.h
4318
4319 if ! disabled w32threads && ! enabled pthreads; then
4320     check_func_headers "windows.h process.h" _beginthreadex && enable w32threads
4321 fi
4322
4323 # check for some common methods of building with pthread support
4324 # do this before the optional library checks as some of them require pthreads
4325 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
4326     enable pthreads
4327     if check_func pthread_join -pthread && check_func pthread_create -pthread; then
4328         add_cflags -pthread
4329         add_extralibs -pthread
4330     elif check_func pthread_join -pthreads && check_func pthread_create -pthreads; then
4331         add_cflags -pthreads
4332         add_extralibs -pthreads
4333     elif check_func pthread_join -lpthreadGC2 && check_func pthread_create -lpthreadGC2; then
4334         add_extralibs -lpthreadGC2
4335     elif check_lib pthread.h pthread_join -lpthread && check_lib pthread.h pthread_create -lpthread; then
4336         :
4337     elif ! check_func pthread_join && ! check_func pthread_create; then
4338         disable pthreads
4339     fi
4340 fi
4341
4342 for thread in $THREADS_LIST; do
4343     if enabled $thread; then
4344         test -n "$thread_type" &&
4345             die "ERROR: Only one thread type must be selected." ||
4346             thread_type="$thread"
4347     fi
4348 done
4349
4350 if enabled pthreads; then
4351   check_func pthread_cancel
4352 fi
4353
4354 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
4355 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
4356
4357 enabled sync_val_compare_and_swap && enable atomics_gcc
4358 enabled_all atomic_cas_ptr machine_rw_barrier && enable atomics_suncc
4359 enabled MemoryBarrier && enable atomics_win32
4360
4361 check_lib math.h sin -lm && LIBM="-lm"
4362 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
4363
4364 atan2f_args=2
4365 ldexpf_args=2
4366 powf_args=2
4367
4368 for func in $MATH_FUNCS; do
4369     eval check_mathfunc $func \${${func}_args:-1}
4370 done
4371
4372 # these are off by default, so fail if requested and not available
4373 enabled avisynth          && { { check_lib2 "windows.h" LoadLibrary; } ||
4374                                { check_lib2 "dlfcn.h" dlopen -ldl; } ||
4375                                die "ERROR: LoadLibrary/dlopen not found for avisynth"; }
4376 enabled fontconfig        && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
4377 enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
4378 enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4379 enabled ladspa            && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
4380 enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
4381 enabled libaacplus        && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
4382 enabled libass            && require_pkg_config libass ass/ass.h ass_library_init
4383 enabled libbluray         && require libbluray libbluray/bluray.h bd_open -lbluray
4384 enabled libcelt           && require libcelt celt/celt.h celt_decode -lcelt0 &&
4385                              { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
4386                                die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
4387 enabled libcaca           && require_pkg_config caca caca.h caca_create_canvas
4388 enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4389 enabled libfdk_aac        && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
4390 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"
4391 enabled libflite          && require2 libflite "flite/flite.h" flite_init $flite_libs
4392 enabled libfreetype       && require_libfreetype
4393 enabled libgme            && require  libgme gme/gme.h gme_new_emu -lgme -lstdc++
4394 enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
4395                                    check_lib "${gsm_hdr}" gsm_create -lgsm && break;
4396                                done || die "ERROR: libgsm not found"; }
4397 enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4398 enabled libmodplug        && require libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
4399 enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4400 enabled libnut            && require libnut libnut.h nut_demuxer_init -lnut
4401 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
4402 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
4403 enabled libopencv         && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
4404 enabled libopenjpeg       && { check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg ||
4405                                check_lib openjpeg.h opj_version -lopenjpeg ||
4406                                die "ERROR: libopenjpeg not found"; }
4407 enabled libopus           && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
4408 enabled libpulse          && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
4409 enabled libquvi           && require_pkg_config libquvi quvi/quvi.h quvi_init
4410 enabled librtmp           && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
4411 enabled libschroedinger   && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
4412 enabled libshine          && require_pkg_config shine shine/layer3.h shine_encode_buffer
4413 enabled libsoxr           && require libsoxr soxr.h soxr_create -lsoxr
4414 enabled libssh            && require_pkg_config libssh libssh/sftp.h sftp_init
4415 enabled libspeex          && require libspeex speex/speex.h speex_decoder_init -lspeex
4416 enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
4417     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
4418     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
4419 enabled libtheora         && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
4420 enabled libtwolame        && require libtwolame twolame.h twolame_init -ltwolame &&
4421                              { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
4422                                die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
4423 enabled libutvideo        && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
4424 enabled libv4l2           && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
4425 enabled libvidstab        && require_pkg_config vidstab vid.stab/libvidstab.h vsMotionDetectInit
4426 enabled libvo_aacenc      && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
4427 enabled libvo_amrwbenc    && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
4428 enabled libvorbis         && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
4429 enabled libvpx            && {
4430     enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
4431                                     die "ERROR: libvpx decoder version must be >=0.9.1"; }
4432     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 ||
4433                                     die "ERROR: libvpx encoder version must be >=0.9.7"; }
4434     enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
4435     enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VP9E_SET_SVC" -lvpx || disable libvpx_vp9_encoder; } }
4436 enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
4437 enabled libx264           && require libx264 x264.h x264_encoder_encode -lx264 &&
4438                              { check_cpp_condition x264.h "X264_BUILD >= 118" ||
4439                                die "ERROR: libx264 must be installed and version must be >= 0.118."; }
4440 enabled libxavs           && require libxavs xavs.h xavs_encoder_encode -lxavs
4441 enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
4442 enabled libzmq            && require_pkg_config libzmq zmq.h zmq_ctx_new
4443 enabled libzvbi           && require libzvbi libzvbi.h vbi_decoder_new -lzvbi
4444 enabled openal            && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
4445                                check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
4446                                die "ERROR: openal not found"; } &&
4447                              { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
4448                                die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
4449 enabled opencl            && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
4450                                check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
4451                                die "ERROR: opencl not found"; } &&
4452                              { ! enabled_any w32threads os2threads ||
4453                                die "opencl currently needs --enable-pthreads or --disable-w32threads"; } &&
4454                              { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
4455                                check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
4456                                die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
4457 enabled openssl           && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
4458                                check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
4459                                check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
4460                                die "ERROR: openssl not found"; }
4461
4462 if enabled gnutls; then
4463     { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
4464     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
4465 fi
4466
4467 # libdc1394 check
4468 if enabled libdc1394; then
4469     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
4470         enable libdc1394_2; } ||
4471     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
4472         enable libdc1394_1; } ||
4473     die "ERROR: No version of libdc1394 found "
4474 fi
4475
4476 SDL_CONFIG="${cross_prefix}sdl-config"
4477 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
4478     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4479     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4480     enable sdl
4481 else
4482   if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
4483     sdl_cflags=$("${SDL_CONFIG}" --cflags)
4484     sdl_libs=$("${SDL_CONFIG}" --libs)
4485     check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
4486     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4487     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
4488     enable sdl
4489   fi
4490 fi
4491 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
4492
4493 texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
4494 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
4495 perl -v            > /dev/null 2>&1 && enable perl      || disable perl
4496 pod2man --help     > /dev/null 2>&1 && enable pod2man   || disable pod2man
4497 rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
4498
4499 check_header linux/fb.h
4500 check_header linux/videodev.h
4501 check_header linux/videodev2.h
4502 check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
4503
4504 check_header sys/videoio.h
4505
4506 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
4507 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
4508 # w32api 3.12 had it defined wrong
4509 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
4510
4511 check_type "dshow.h" IBaseFilter
4512
4513 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
4514 { check_header dev/bktr/ioctl_meteor.h &&
4515   check_header dev/bktr/ioctl_bt848.h; } ||
4516 { check_header machine/ioctl_meteor.h &&
4517   check_header machine/ioctl_bt848.h; } ||
4518 { check_header dev/video/meteor/ioctl_meteor.h &&
4519   check_header dev/video/bktr/ioctl_bt848.h; } ||
4520 check_header dev/ic/bt8xx.h
4521
4522 check_header sndio.h
4523 if check_struct sys/soundcard.h audio_buf_info bytes; then
4524     enable_safe sys/soundcard.h
4525 else
4526     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
4527     #include <sys/soundcard.h>
4528     audio_buf_info abc;
4529 EOF
4530 fi
4531 check_header soundcard.h
4532
4533 enabled_any alsa_indev alsa_outdev &&
4534     check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
4535
4536 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
4537     check_func jack_port_get_latency_range -ljack
4538
4539 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
4540
4541 if enabled libcdio; then
4542     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4543     check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4544     die "ERROR: libcdio-paranoia not found"
4545 fi
4546
4547 check_lib X11/Xlib.h XOpenDisplay -lX11 && enable xlib
4548
4549 enabled x11grab                                           &&
4550 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
4551 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes &&
4552 { enabled xlib || die "ERROR: Xlib not found"; }
4553
4554 enabled vaapi &&
4555     check_lib va/va.h vaInitialize -lva ||
4556     disable vaapi
4557
4558 enabled vdpau &&
4559     check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
4560     disable vdpau
4561
4562 enabled vdpau && enabled xlib &&
4563     check_lib2 "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
4564     enable vdpau_x11
4565
4566 # Funny iconv installations are not unusual, so check it after all flags have been set
4567 disabled iconv || check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || disable iconv
4568
4569 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
4570
4571 # add some useful compiler flags if supported
4572 check_cflags -Wdeclaration-after-statement
4573 check_cflags -Wall
4574 check_cflags -Wdisabled-optimization
4575 check_cflags -Wpointer-arith
4576 check_cflags -Wredundant-decls
4577 check_cflags -Wwrite-strings
4578 check_cflags -Wtype-limits
4579 check_cflags -Wundef
4580 check_cflags -Wmissing-prototypes
4581 check_cflags -Wno-pointer-to-int-cast
4582 check_cflags -Wstrict-prototypes
4583 enabled extra_warnings && check_cflags -Winline
4584
4585 check_disable_warning(){
4586     warning_flag=-W${1#-Wno-}
4587     test_cflags $warning_flag && add_cflags $1
4588 }
4589
4590 check_disable_warning -Wno-parentheses
4591 check_disable_warning -Wno-switch
4592 check_disable_warning -Wno-format-zero-length
4593 check_disable_warning -Wno-pointer-sign
4594
4595 # add some linker flags
4596 check_ldflags -Wl,--warn-common
4597 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
4598 enabled rpath && add_ldflags -Wl,-rpath=$libdir
4599 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
4600
4601 # add some strip flags
4602 # -wN '..@*' is more selective than -x, but not available everywhere.
4603 check_stripflags -wN \'..@*\' || check_stripflags -x
4604
4605 enabled xmm_clobber_test &&
4606     check_ldflags -Wl,--wrap,avcodec_open2              \
4607                   -Wl,--wrap,avcodec_decode_audio4      \
4608                   -Wl,--wrap,avcodec_decode_video2      \
4609                   -Wl,--wrap,avcodec_decode_subtitle2   \
4610                   -Wl,--wrap,avcodec_encode_audio2      \
4611                   -Wl,--wrap,avcodec_encode_video       \
4612                   -Wl,--wrap,avcodec_encode_video2      \
4613                   -Wl,--wrap,avcodec_encode_subtitle    \
4614                   -Wl,--wrap,sws_scale ||
4615     disable xmm_clobber_test
4616
4617 echo "X{};" > $TMPV
4618 if test_ldflags -Wl,--version-script,$TMPV; then
4619     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
4620     check_cc <<EOF && enable symver_asm_label
4621 void ff_foo(void) __asm__ ("av_foo@VERSION");
4622 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
4623 EOF
4624     check_cc <<EOF && enable symver_gnu_asm
4625 __asm__(".symver ff_foo,av_foo@VERSION");
4626 void ff_foo(void) {}
4627 EOF
4628 fi
4629
4630 if [ -z "$optflags" ]; then
4631     if enabled small; then
4632         optflags=$cflags_size
4633     elif enabled optimizations; then
4634         optflags=$cflags_speed
4635     else
4636         optflags=$cflags_noopt
4637     fi
4638 fi
4639
4640 check_optflags(){
4641     check_cflags "$@"
4642     enabled lto && check_ldflags "$@"
4643 }
4644
4645
4646 if enabled lto; then
4647     test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
4648     check_cflags  -flto
4649     check_ldflags -flto $cpuflags
4650 fi
4651
4652 check_optflags $optflags
4653 check_optflags -fno-math-errno
4654 check_optflags -fno-signed-zeros
4655
4656 enabled ftrapv && check_cflags -ftrapv
4657
4658 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
4659 int x;
4660 EOF
4661
4662
4663 if enabled icc; then
4664     # Just warnings, no remarks
4665     check_cflags -w1
4666     # -wd: Disable following warnings
4667     # 144, 167, 556: -Wno-pointer-sign
4668     # 188: enumerated type mixed with another type
4669     # 1292: attribute "foo" ignored
4670     # 1419: external declaration in primary source file
4671     # 10006: ignoring unknown option -fno-signed-zeros
4672     # 10148: ignoring unknown option -Wno-parentheses
4673     # 10156: ignoring option '-W'; no argument required
4674     check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156
4675     # 11030: Warning unknown option --as-needed
4676     # 10156: ignoring option '-export'; no argument required
4677     check_ldflags -wd10156,11030
4678     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
4679     enable ebp_available
4680     if enabled x86_32; then
4681         icc_version=$($cc -dumpversion)
4682         test ${icc_version%%.*} -ge 11 &&
4683             check_cflags -falign-stack=maintain-16-byte ||
4684             disable aligned_stack
4685     fi
4686 elif enabled ccc; then
4687     # disable some annoying warnings
4688     add_cflags -msg_disable bitnotint
4689     add_cflags -msg_disable mixfuncvoid
4690     add_cflags -msg_disable nonstandcast
4691     add_cflags -msg_disable unsupieee
4692 elif enabled gcc; then
4693     check_optflags -fno-tree-vectorize
4694     check_cflags -Werror=implicit-function-declaration
4695     check_cflags -Werror=missing-prototypes
4696     check_cflags -Werror=return-type
4697     check_cflags -Werror=vla
4698     enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
4699 elif enabled llvm_gcc; then
4700     check_cflags -mllvm -stack-alignment=16
4701 elif enabled clang; then
4702     check_cflags -mllvm -stack-alignment=16
4703     check_cflags -Qunused-arguments
4704     check_cflags -Werror=implicit-function-declaration
4705     check_cflags -Werror=missing-prototypes
4706     check_cflags -Werror=return-type
4707 elif enabled cparser; then
4708     add_cflags -Wno-missing-variable-declarations
4709     add_cflags -Wno-empty-statement
4710 elif enabled armcc; then
4711     # 2523: use of inline assembler is deprecated
4712     add_cflags -W${armcc_opt},--diag_suppress=2523
4713     add_cflags -W${armcc_opt},--diag_suppress=1207
4714     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
4715     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
4716     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
4717     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
4718 elif enabled tms470; then
4719     add_cflags -pds=824 -pds=837
4720     disable inline_asm
4721 elif enabled pathscale; then
4722     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
4723 elif enabled_any msvc icl; then
4724     enabled x86_32 && disable aligned_stack
4725     enabled_all x86_32 debug && add_cflags -Oy-
4726     enabled debug && add_ldflags -debug
4727     enable pragma_deprecated
4728     if enabled icl; then
4729         # -Qansi-alias is basically -fstrict-aliasing, but does not work
4730         # (correctly) on icl 13.x.
4731         check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
4732             add_cflags -Qansi-alias
4733         # icl will pass the inline asm tests but inline asm is currently
4734         # not supported (build will fail)
4735         disabled inline_asm || warn "inline asm disabled due to issues with it in ICL"
4736         disable inline_asm
4737     fi
4738 fi
4739
4740 case $target_os in
4741     osf1)
4742         enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
4743     ;;
4744     plan9)
4745         add_cppflags -Dmain=plan9_main
4746     ;;
4747 esac
4748
4749 enable frame_thread_encoder
4750 enabled_any $THREADS_LIST      && enable threads
4751 enabled_any $ATOMICS_LIST      && enable atomics_native
4752
4753 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"
4754
4755 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
4756
4757 check_deps $CONFIG_LIST       \
4758            $CONFIG_EXTRA      \
4759            $HAVE_LIST         \
4760            $ALL_COMPONENTS    \
4761
4762
4763 if test $target_os = "haiku"; then
4764     disable memalign
4765     disable posix_memalign
4766 fi
4767
4768 ! enabled_any memalign posix_memalign aligned_malloc &&
4769     enabled_any $need_memalign && enable memalign_hack
4770
4771 # add_dep lib dep
4772 # -> enable ${lib}_deps_${dep}
4773 # -> add $dep to ${lib}_deps only once
4774 add_dep() {
4775     lib=$1
4776     dep=$2
4777     enabled "${lib}_deps_${dep}" && return 0
4778     enable  "${lib}_deps_${dep}"
4779     prepend "${lib}_deps" $dep
4780 }
4781
4782 # merge deps lib components
4783 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
4784 merge_deps() {
4785     lib=$1
4786     shift
4787     for comp in $*; do
4788         enabled $comp || continue
4789         eval "dep=\"\$${comp}_deps\""
4790         for d in $dep; do
4791             add_dep $lib $d
4792         done
4793     done
4794 }
4795
4796 merge_deps libavfilter $FILTER_LIST
4797
4798 echo "install prefix            $prefix"
4799 echo "source path               $source_path"
4800 echo "C compiler                $cc"
4801 echo "C library                 $libc_type"
4802 if test "$host_cc" != "$cc"; then
4803     echo "host C compiler           $host_cc"
4804     echo "host C library            $host_libc_type"
4805 fi
4806 echo "ARCH                      $arch ($cpu)"
4807 if test "$build_suffix" != ""; then
4808     echo "build suffix              $build_suffix"
4809 fi
4810 if test "$progs_suffix" != ""; then
4811     echo "progs suffix              $progs_suffix"
4812 fi
4813 if test "$extra_version" != ""; then
4814     echo "version string suffix     $extra_version"
4815 fi
4816 echo "big-endian                ${bigendian-no}"
4817 echo "runtime cpu detection     ${runtime_cpudetect-no}"
4818 if enabled x86; then
4819     echo "${yasmexe}                      ${yasm-no}"
4820     echo "MMX enabled               ${mmx-no}"
4821     echo "MMXEXT enabled            ${mmxext-no}"
4822     echo "3DNow! enabled            ${amd3dnow-no}"
4823     echo "3DNow! extended enabled   ${amd3dnowext-no}"
4824     echo "SSE enabled               ${sse-no}"
4825     echo "SSSE3 enabled             ${ssse3-no}"
4826     echo "AVX enabled               ${avx-no}"
4827     echo "FMA4 enabled              ${fma4-no}"
4828     echo "i686 features enabled     ${i686-no}"
4829     echo "CMOV is fast              ${fast_cmov-no}"
4830     echo "EBX available             ${ebx_available-no}"
4831     echo "EBP available             ${ebp_available-no}"
4832 fi
4833 if enabled arm; then
4834     echo "ARMv5TE enabled           ${armv5te-no}"
4835     echo "ARMv6 enabled             ${armv6-no}"
4836     echo "ARMv6T2 enabled           ${armv6t2-no}"
4837     echo "VFP enabled               ${vfp-no}"
4838     echo "NEON enabled              ${neon-no}"
4839     echo "THUMB enabled             ${thumb-no}"
4840 fi
4841 if enabled mips; then
4842     echo "MIPS FPU enabled          ${mipsfpu-no}"
4843     echo "MIPS32R2 enabled          ${mips32r2-no}"
4844     echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"
4845     echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
4846 fi
4847 if enabled ppc; then
4848     echo "AltiVec enabled           ${altivec-no}"
4849     echo "PPC 4xx optimizations     ${ppc4xx-no}"
4850     echo "dcbzl available           ${dcbzl-no}"
4851 fi
4852 if enabled sparc; then
4853     echo "VIS enabled               ${vis-no}"
4854 fi
4855 echo "debug symbols             ${debug-no}"
4856 echo "strip symbols             ${stripping-no}"
4857 echo "optimize for size         ${small-no}"
4858 echo "optimizations             ${optimizations-no}"
4859 echo "static                    ${static-no}"
4860 echo "shared                    ${shared-no}"
4861 echo "postprocessing support    ${postproc-no}"
4862 echo "new filter support        ${avfilter-no}"
4863 echo "network support           ${network-no}"
4864 echo "threading support         ${thread_type-no}"
4865 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
4866 echo "SDL support               ${sdl-no}"
4867 echo "opencl enabled            ${opencl-no}"
4868 echo "libzvbi enabled           ${libzvbi-no}"
4869 echo "texi2html enabled         ${texi2html-no}"
4870 echo "perl enabled              ${perl-no}"
4871 echo "pod2man enabled           ${pod2man-no}"
4872 echo "makeinfo enabled          ${makeinfo-no}"
4873 test -n "$random_seed" &&
4874     echo "random seed               ${random_seed}"
4875 echo
4876
4877 echo "External libraries:"
4878 print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
4879 echo
4880
4881 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
4882     echo "Enabled ${type}s:"
4883     eval list=\$$(toupper $type)_LIST
4884     print_enabled '_*' $list | print_3_columns
4885     echo
4886 done
4887
4888 license="LGPL version 2.1 or later"
4889 if enabled nonfree; then
4890     license="nonfree and unredistributable"
4891 elif enabled gplv3; then
4892     license="GPL version 3 or later"
4893 elif enabled lgplv3; then
4894     license="LGPL version 3 or later"
4895 elif enabled gpl; then
4896     license="GPL version 2 or later"
4897 fi
4898
4899 echo "License: $license"
4900
4901 echo "Creating config.mak, config.h, and doc/config.texi..."
4902
4903 test -e Makefile || echo "include $source_path/Makefile" > Makefile
4904
4905 enabled stripping || strip="echo skipping strip"
4906
4907 config_files="$TMPH config.mak doc/config.texi"
4908
4909 cat > config.mak <<EOF
4910 # Automatically generated by configure - do not modify!
4911 ifndef FFMPEG_CONFIG_MAK
4912 FFMPEG_CONFIG_MAK=1
4913 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
4914 prefix=$prefix
4915 LIBDIR=\$(DESTDIR)$libdir
4916 SHLIBDIR=\$(DESTDIR)$shlibdir
4917 INCDIR=\$(DESTDIR)$incdir
4918 BINDIR=\$(DESTDIR)$bindir
4919 DATADIR=\$(DESTDIR)$datadir
4920 DOCDIR=\$(DESTDIR)$docdir
4921 MANDIR=\$(DESTDIR)$mandir
4922 SRC_PATH=$source_path
4923 ifndef MAIN_MAKEFILE
4924 SRC_PATH:=\$(SRC_PATH:.%=..%)
4925 endif
4926 CC_IDENT=$cc_ident
4927 ARCH=$arch
4928 CC=$cc
4929 CXX=$cxx
4930 AS=$as
4931 LD=$ld
4932 DEPCC=$dep_cc
4933 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
4934 DEPAS=$as
4935 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
4936 YASM=$yasmexe
4937 DEPYASM=$yasmexe
4938 AR=$ar
4939 ARFLAGS=$arflags
4940 AR_O=$ar_o
4941 RANLIB=$ranlib
4942 STRIP=$strip
4943 CP=cp -p
4944 LN_S=$ln_s
4945 CPPFLAGS=$CPPFLAGS
4946 CFLAGS=$CFLAGS
4947 CXXFLAGS=$CXXFLAGS
4948 ASFLAGS=$ASFLAGS
4949 AS_C=$AS_C
4950 AS_O=$AS_O
4951 CC_C=$CC_C
4952 CC_E=$CC_E
4953 CC_O=$CC_O
4954 CXX_C=$CXX_C
4955 CXX_O=$CXX_O
4956 LD_O=$LD_O
4957 LD_LIB=$LD_LIB
4958 LD_PATH=$LD_PATH
4959 DLLTOOL=$dlltool
4960 WINDRES=$windres
4961 DEPWINDRES=$dep_cc
4962 LDFLAGS=$LDFLAGS
4963 SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
4964 ASMSTRIPFLAGS=$ASMSTRIPFLAGS
4965 YASMFLAGS=$YASMFLAGS
4966 BUILDSUF=$build_suffix
4967 PROGSSUF=$progs_suffix
4968 FULLNAME=$FULLNAME
4969 LIBPREF=$LIBPREF
4970 LIBSUF=$LIBSUF
4971 LIBNAME=$LIBNAME
4972 SLIBPREF=$SLIBPREF
4973 SLIBSUF=$SLIBSUF
4974 EXESUF=$EXESUF
4975 EXTRA_VERSION=$extra_version
4976 CCDEP=$CCDEP
4977 CXXDEP=$CXXDEP
4978 CCDEP_FLAGS=$CCDEP_FLAGS
4979 ASDEP=$ASDEP
4980 ASDEP_FLAGS=$ASDEP_FLAGS
4981 CC_DEPFLAGS=$CC_DEPFLAGS
4982 AS_DEPFLAGS=$AS_DEPFLAGS
4983 HOSTCC=$host_cc
4984 HOSTLD=$host_ld
4985 HOSTCFLAGS=$host_cflags
4986 HOSTCPPFLAGS=$host_cppflags
4987 HOSTEXESUF=$HOSTEXESUF
4988 HOSTLDFLAGS=$host_ldflags
4989 HOSTLIBS=$host_libs
4990 DEPHOSTCC=$host_cc
4991 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
4992 HOSTCCDEP=$HOSTCCDEP
4993 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
4994 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
4995 HOSTCC_C=$HOSTCC_C
4996 HOSTCC_O=$HOSTCC_O
4997 HOSTLD_O=$HOSTLD_O
4998 TARGET_EXEC=$target_exec $target_exec_args
4999 TARGET_PATH=$target_path
5000 TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
5001 LIBS-ffplay=$sdl_libs
5002 CFLAGS-ffplay=$sdl_cflags
5003 ZLIB=$($ldflags_filter -lz)
5004 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
5005 EXTRALIBS=$extralibs
5006 COMPAT_OBJS=$compat_objs
5007 EXEOBJS=$exeobjs
5008 INSTALL=$install
5009 LIBTARGET=${LIBTARGET}
5010 SLIBNAME=${SLIBNAME}
5011 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
5012 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
5013 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
5014 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
5015 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
5016 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
5017 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
5018 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
5019 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
5020 NOREDZONE_FLAGS=$noredzone_flags
5021 EOF
5022
5023 get_version(){
5024     lcname=lib${1}
5025     name=$(toupper $lcname)
5026     file=$source_path/$lcname/version.h
5027     eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
5028     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
5029     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
5030     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
5031     eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
5032 }
5033
5034 map 'get_version $v' $LIBRARY_LIST
5035
5036 cat > $TMPH <<EOF
5037 /* Automatically generated by configure - do not modify! */
5038 #ifndef FFMPEG_CONFIG_H
5039 #define FFMPEG_CONFIG_H
5040 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
5041 #define FFMPEG_LICENSE "$(c_escape $license)"
5042 #define CONFIG_THIS_YEAR 2013
5043 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
5044 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
5045 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
5046 #define av_restrict $_restrict
5047 #define EXTERN_PREFIX "${extern_prefix}"
5048 #define EXTERN_ASM ${extern_prefix}
5049 #define BUILDSUF "$build_suffix"
5050 #define SLIBSUF "$SLIBSUF"
5051 #define HAVE_MMX2 HAVE_MMXEXT
5052 EOF
5053
5054 test -n "$assert_level" &&
5055     echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
5056
5057 test -n "$malloc_prefix" &&
5058     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
5059
5060 if enabled yasm; then
5061     append config_files $TMPASM
5062     printf '' >$TMPASM
5063 fi
5064
5065 enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
5066
5067
5068 mkdir -p doc
5069 echo "@c auto-generated by configure" > doc/config.texi
5070
5071 print_config ARCH_   "$config_files" $ARCH_LIST
5072 print_config HAVE_   "$config_files" $HAVE_LIST
5073 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
5074                                      $CONFIG_EXTRA      \
5075                                      $ALL_COMPONENTS    \
5076
5077 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
5078 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
5079
5080 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
5081 cp_if_changed $TMPH config.h
5082 touch .config
5083
5084 enabled yasm && cp_if_changed $TMPASM config.asm
5085
5086 cat > $TMPH <<EOF
5087 /* Generated by ffconf */
5088 #ifndef AVUTIL_AVCONFIG_H
5089 #define AVUTIL_AVCONFIG_H
5090 EOF
5091
5092 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
5093
5094 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
5095
5096 cp_if_changed $TMPH libavutil/avconfig.h
5097
5098 if test -n "$WARNINGS"; then
5099     printf "\n$WARNINGS"
5100     enabled fatal_warnings && exit 1
5101 fi
5102
5103 # build pkg-config files
5104
5105 pkgconfig_generate(){
5106     name=$1
5107     shortname=${name#lib}${build_suffix}
5108     comment=$2
5109     version=$3
5110     libs=$4
5111     requires=$5
5112     enabled ${name#lib} || return 0
5113     mkdir -p $name
5114     cat <<EOF > $name/$name${build_suffix}.pc
5115 prefix=$prefix
5116 exec_prefix=\${prefix}
5117 libdir=$libdir
5118 includedir=$incdir
5119
5120 Name: $name
5121 Description: $comment
5122 Version: $version
5123 Requires: $(enabled shared || echo $requires)
5124 Requires.private: $(enabled shared && echo $requires)
5125 Conflicts:
5126 Libs: -L\${libdir} $(enabled rpath && echo "-Wl,-rpath,\${libdir}") -l${shortname} $(enabled shared || echo $libs)
5127 Libs.private: $(enabled shared && echo $libs)
5128 Cflags: -I\${includedir}
5129 EOF
5130
5131 mkdir -p doc/examples/pc-uninstalled
5132 includedir=${source_path}
5133 [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
5134     cat <<EOF > doc/examples/pc-uninstalled/$name.pc
5135 prefix=
5136 exec_prefix=
5137 libdir=\${pcfiledir}/../../../$name
5138 includedir=${includedir}
5139
5140 Name: $name
5141 Description: $comment
5142 Version: $version
5143 Requires: $requires
5144 Conflicts:
5145 Libs: -L\${libdir} -Wl,-rpath,\${libdir} -l${shortname} $(enabled shared || echo $libs)
5146 Cflags: -I\${includedir}
5147 EOF
5148 }
5149
5150 lavfi_libs="libavutil${build_suffix} = $LIBAVUTIL_VERSION"
5151 enabled libavfilter_deps_avcodec    && prepend lavfi_libs "libavcodec${build_suffix} = $LIBAVCODEC_VERSION,"
5152 enabled libavfilter_deps_avformat   && prepend lavfi_libs "libavformat${build_suffix} = $LIBAVFORMAT_VERSION,"
5153 enabled libavfilter_deps_avresample && prepend lavfi_libs "libavresample${build_suffix} = $LIBAVRESAMPLE_VERSION,"
5154 enabled libavfilter_deps_swscale    && prepend lavfi_libs "libswscale${build_suffix} = $LIBSWSCALE_VERSION,"
5155 enabled libavfilter_deps_swresample && prepend lavfi_libs "libswresample${build_suffix} = $LIBSWRESAMPLE_VERSION,"
5156 enabled libavfilter_deps_postproc   && prepend lavfi_libs "libpostproc${build_suffix} = $LIBPOSTPROC_VERSION,"
5157 lavfi_libs=${lavfi_libs%, }
5158
5159 lavd_libs="libavformat${build_suffix} = $LIBAVFORMAT_VERSION"
5160 enabled lavfi_indev && prepend lavd_libs "libavfilter${build_suffix} = $LIBAVFILTER_VERSION,"
5161
5162 pkgconfig_generate libavutil     "FFmpeg utility library"               "$LIBAVUTIL_VERSION"     "$LIBM"
5163 pkgconfig_generate libavcodec    "FFmpeg codec library"                 "$LIBAVCODEC_VERSION"    "$extralibs" "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
5164 pkgconfig_generate libavformat   "FFmpeg container format library"      "$LIBAVFORMAT_VERSION"   "$extralibs" "libavcodec${build_suffix} = $LIBAVCODEC_VERSION"
5165 pkgconfig_generate libavdevice   "FFmpeg device handling library"       "$LIBAVDEVICE_VERSION"   "$extralibs" "$lavd_libs"
5166 pkgconfig_generate libavfilter   "FFmpeg audio/video filtering library" "$LIBAVFILTER_VERSION"   "$extralibs" "$lavfi_libs"
5167 pkgconfig_generate libpostproc   "FFmpeg postprocessing library"        "$LIBPOSTPROC_VERSION"   ""           "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
5168 pkgconfig_generate libavresample "Libav audio resampling library"       "$LIBAVRESAMPLE_VERSION" "$extralibs" "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
5169 pkgconfig_generate libswscale    "FFmpeg image rescaling library"       "$LIBSWSCALE_VERSION"    "$LIBM"      "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
5170 pkgconfig_generate libswresample "FFmpeg audio resampling library"      "$LIBSWRESAMPLE_VERSION" "$LIBM"      "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
5171
5172 fix_ffmpeg_remote(){
5173     git_remote_from=$1
5174     git_remote_to=$2
5175     fixme_remote=$(git --git-dir=$source_path/.git --work-tree=$source_path remote -v | grep $git_remote_from | cut -f 1 | sort | uniq)
5176     if [ "$fixme_remote" != "" ]; then
5177         echolog "
5178 Outdated domain in git config, the official domain for ffmpeg git is since
5179 November 2011, source.ffmpeg.org, both the old and the new point to the same
5180 repository and server. To update it enter the following commands:
5181 "
5182         for remote in $fixme_remote; do
5183             echolog "git remote set-url $remote $git_remote_to"
5184         done
5185     fi
5186 }
5187
5188 if test -f "$source_path/.git/config"; then
5189     remote_from=git.videolan.org
5190     remote_to=source.ffmpeg.org
5191     fix_ffmpeg_remote git@$remote_from:ffmpeg   git@$remote_to:ffmpeg
5192     fix_ffmpeg_remote git://$remote_from/ffmpeg git://$remote_to/ffmpeg
5193 fi