lavfi: rename asrc_aevalsrc.c to aeval.c
[ffmpeg.git] / 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 hostcc_o(){
1132     eval printf '%s\\n' $HOSTCC_O
1133 }
1134
1135 check_host_cc(){
1136     log check_host_cc "$@"
1137     cat > $TMPC
1138     log_file $TMPC
1139     check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1140 }
1141
1142 check_host_cppflags(){
1143     log check_host_cppflags "$@"
1144     check_host_cc "$@" <<EOF && append host_cppflags "$@"
1145 int x;
1146 EOF
1147 }
1148
1149 check_host_cflags(){
1150     log check_host_cflags "$@"
1151     set -- $($host_cflags_filter "$@")
1152     check_host_cc "$@" <<EOF && append host_cflags "$@"
1153 int x;
1154 EOF
1155 }
1156
1157 apply(){
1158     file=$1
1159     shift
1160     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1161 }
1162
1163 cp_if_changed(){
1164     cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1165     mkdir -p "$(dirname $2)"
1166     $cp_f "$1" "$2"
1167 }
1168
1169 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1170 # system-dependent things.
1171
1172 COMPONENT_LIST="
1173     bsfs
1174     decoders
1175     demuxers
1176     encoders
1177     filters
1178     hwaccels
1179     indevs
1180     muxers
1181     outdevs
1182     parsers
1183     protocols
1184 "
1185
1186 EXAMPLE_LIST="
1187     decoding_encoding_example
1188     demuxing_decoding_example
1189     filtering_audio_example
1190     filtering_video_example
1191     metadata_example
1192     muxing_example
1193     resampling_audio_example
1194     scaling_video_example
1195     transcode_aac_example
1196 "
1197
1198 EXTERNAL_LIBRARY_LIST="
1199     avisynth
1200     bzlib
1201     crystalhd
1202     fontconfig
1203     frei0r
1204     gnutls
1205     iconv
1206     ladspa
1207     libaacplus
1208     libass
1209     libbluray
1210     libcaca
1211     libcdio
1212     libcelt
1213     libdc1394
1214     libfaac
1215     libfdk_aac
1216     libflite
1217     libfreetype
1218     libgme
1219     libgsm
1220     libiec61883
1221     libilbc
1222     libmodplug
1223     libmp3lame
1224     libnut
1225     libopencore_amrnb
1226     libopencore_amrwb
1227     libopencv
1228     libopenjpeg
1229     libopus
1230     libpulse
1231     libquvi
1232     librtmp
1233     libschroedinger
1234     libshine
1235     libsoxr
1236     libspeex
1237     libssh
1238     libstagefright_h264
1239     libtheora
1240     libtwolame
1241     libutvideo
1242     libv4l2
1243     libvidstab
1244     libvo_aacenc
1245     libvo_amrwbenc
1246     libvorbis
1247     libvpx
1248     libwavpack
1249     libx264
1250     libxavs
1251     libxvid
1252     libzmq
1253     libzvbi
1254     openal
1255     opencl
1256     openssl
1257     x11grab
1258     zlib
1259 "
1260
1261 DOCUMENT_LIST="
1262     doc
1263     htmlpages
1264     manpages
1265     podpages
1266     txtpages
1267 "
1268
1269 HWACCEL_LIST="
1270     dxva2
1271     vaapi
1272     vda
1273     vdpau
1274 "
1275
1276 LIBRARY_LIST="
1277     avcodec
1278     avdevice
1279     avfilter
1280     avformat
1281     avresample
1282     avutil
1283     postproc
1284     swresample
1285     swscale
1286 "
1287
1288 PROGRAM_LIST="
1289     ffplay
1290     ffprobe
1291     ffserver
1292     ffmpeg
1293 "
1294
1295 CONFIG_LIST="
1296     $COMPONENT_LIST
1297     $DOCUMENT_LIST
1298     $EXAMPLE_LIST
1299     $EXTERNAL_LIBRARY_LIST
1300     $HWACCEL_LIST
1301     $LIBRARY_LIST
1302     $PROGRAM_LIST
1303     dct
1304     dwt
1305     error_resilience
1306     fast_unaligned
1307     fft
1308     ftrapv
1309     gpl
1310     gray
1311     hardcoded_tables
1312     incompatible_libav_abi
1313     incompatible_fork_abi
1314     lsp
1315     lzo
1316     mdct
1317     memalign_hack
1318     memory_poisoning
1319     network
1320     nonfree
1321     pic
1322     rdft
1323     runtime_cpudetect
1324     safe_bitstream_reader
1325     shared
1326     small
1327     sram
1328     static
1329     swscale_alpha
1330     thumb
1331     version3
1332     xmm_clobber_test
1333 "
1334
1335 THREADS_LIST='
1336     pthreads
1337     w32threads
1338     os2threads
1339 '
1340
1341 ATOMICS_LIST='
1342     atomics_gcc
1343     atomics_suncc
1344     atomics_win32
1345 '
1346
1347 ARCH_LIST='
1348     aarch64
1349     alpha
1350     arm
1351     avr32
1352     avr32_ap
1353     avr32_uc
1354     bfin
1355     ia64
1356     m68k
1357     mips
1358     mips64
1359     parisc
1360     ppc
1361     ppc64
1362     s390
1363     sh4
1364     sparc
1365     sparc64
1366     tilegx
1367     tilepro
1368     tomi
1369     x86
1370     x86_32
1371     x86_64
1372 '
1373
1374 ARCH_EXT_LIST_ARM='
1375     armv5te
1376     armv6
1377     armv6t2
1378     neon
1379     vfp
1380     vfpv3
1381 '
1382
1383 ARCH_EXT_LIST_X86='
1384     amd3dnow
1385     amd3dnowext
1386     avx
1387     avx2
1388     fma4
1389     i686
1390     mmx
1391     mmxext
1392     sse
1393     sse2
1394     sse3
1395     sse4
1396     sse42
1397     ssse3
1398 '
1399
1400 ARCH_EXT_LIST="
1401     $ARCH_EXT_LIST_ARM
1402     $ARCH_EXT_LIST_X86
1403     altivec
1404     ppc4xx
1405     vis
1406     mipsfpu
1407     mips32r2
1408     mipsdspr1
1409     mipsdspr2
1410 "
1411
1412 HAVE_LIST_CMDLINE='
1413     inline_asm
1414     symver
1415     yasm
1416 '
1417
1418 HAVE_LIST_PUB='
1419     bigendian
1420     fast_unaligned
1421     incompatible_libav_abi
1422     incompatible_fork_abi
1423 '
1424
1425 MATH_FUNCS="
1426     atanf
1427     atan2f
1428     cbrt
1429     cbrtf
1430     cosf
1431     exp2
1432     exp2f
1433     expf
1434     isinf
1435     isnan
1436     ldexpf
1437     llrint
1438     llrintf
1439     log2
1440     log2f
1441     log10f
1442     lrint
1443     lrintf
1444     powf
1445     rint
1446     round
1447     roundf
1448     sinf
1449     trunc
1450     truncf
1451 "
1452
1453 HAVE_LIST="
1454     $ARCH_EXT_LIST
1455     $(add_suffix _external $ARCH_EXT_LIST)
1456     $(add_suffix _inline   $ARCH_EXT_LIST)
1457     $HAVE_LIST_CMDLINE
1458     $HAVE_LIST_PUB
1459     $THREADS_LIST
1460     $ATOMICS_LIST
1461     $MATH_FUNCS
1462     access
1463     aligned_malloc
1464     aligned_stack
1465     alsa_asoundlib_h
1466     altivec_h
1467     arpa_inet_h
1468     asm_mod_q
1469     asm_mod_y
1470     asm_types_h
1471     atomic_cas_ptr
1472     atomics_native
1473     attribute_may_alias
1474     attribute_packed
1475     cdio_paranoia_h
1476     cdio_paranoia_paranoia_h
1477     CL_cl_h
1478     clock_gettime
1479     closesocket
1480     CommandLineToArgvW
1481     cpunop
1482     CryptGenRandom
1483     dcbzl
1484     dev_bktr_ioctl_bt848_h
1485     dev_bktr_ioctl_meteor_h
1486     dev_ic_bt8xx_h
1487     dev_video_bktr_ioctl_bt848_h
1488     dev_video_meteor_ioctl_meteor_h
1489     direct_h
1490     dlfcn_h
1491     dlopen
1492     dos_paths
1493     dxva_h
1494     ebp_available
1495     ebx_available
1496     fast_64bit
1497     fast_clz
1498     fast_cmov
1499     fcntl
1500     fork
1501     getaddrinfo
1502     gethrtime
1503     getopt
1504     GetProcessAffinityMask
1505     GetProcessMemoryInfo
1506     GetProcessTimes
1507     GetSystemTimeAsFileTime
1508     getrusage
1509     getservbyport
1510     gettimeofday
1511     glob
1512     gnu_as
1513     gnu_windres
1514     gsm_h
1515     ibm_asm
1516     inet_aton
1517     io_h
1518     inline_asm_labels
1519     isatty
1520     jack_port_get_latency_range
1521     kbhit
1522     ldbrx
1523     libdc1394_1
1524     libdc1394_2
1525     local_aligned_16
1526     local_aligned_8
1527     localtime_r
1528     loongson
1529     lzo1x_999_compress
1530     machine_ioctl_bt848_h
1531     machine_ioctl_meteor_h
1532     machine_rw_barrier
1533     makeinfo
1534     malloc_h
1535     MapViewOfFile
1536     memalign
1537     MemoryBarrier
1538     mkstemp
1539     mm_empty
1540     mmap
1541     mprotect
1542     msvcrt
1543     nanosleep
1544     openjpeg_1_5_openjpeg_h
1545     PeekNamedPipe
1546     perl
1547     pod2man
1548     poll_h
1549     posix_memalign
1550     pragma_deprecated
1551     pthread_cancel
1552     rdtsc
1553     rsync_contimeout
1554     sarestart
1555     sched_getaffinity
1556     sdl
1557     SetConsoleTextAttribute
1558     setmode
1559     setrlimit
1560     Sleep
1561     sndio_h
1562     socklen_t
1563     soundcard_h
1564     strerror_r
1565     struct_addrinfo
1566     struct_group_source_req
1567     struct_ip_mreq_source
1568     struct_ipv6_mreq
1569     struct_pollfd
1570     struct_rusage_ru_maxrss
1571     struct_sctp_event_subscribe
1572     struct_sockaddr_in6
1573     struct_sockaddr_sa_len
1574     struct_sockaddr_storage
1575     struct_stat_st_mtim_tv_nsec
1576     struct_v4l2_frmivalenum_discrete
1577     symver_asm_label
1578     symver_gnu_asm
1579     sync_val_compare_and_swap
1580     sysconf
1581     sysctl
1582     sys_mman_h
1583     sys_param_h
1584     sys_resource_h
1585     sys_select_h
1586     sys_soundcard_h
1587     sys_time_h
1588     sys_un_h
1589     sys_videoio_h
1590     termios_h
1591     texi2html
1592     threads
1593     unistd_h
1594     usleep
1595     vdpau_x11
1596     vfp_args
1597     VirtualAlloc
1598     windows_h
1599     winsock2_h
1600     xform_asm
1601     xlib
1602     xmm_clobbers
1603 "
1604
1605 # options emitted with CONFIG_ prefix but not available on the command line
1606 CONFIG_EXTRA="
1607     aandcttables
1608     ac3dsp
1609     audio_frame_queue
1610     dsputil
1611     exif
1612     frame_thread_encoder
1613     gcrypt
1614     golomb
1615     gplv3
1616     h263dsp
1617     h264chroma
1618     h264dsp
1619     h264pred
1620     h264qpel
1621     hpeldsp
1622     huffman
1623     lgplv3
1624     lpc
1625     mpegaudio
1626     mpegaudiodsp
1627     mpegvideo
1628     mpegvideoenc
1629     nettle
1630     rangecoder
1631     riffdec
1632     riffenc
1633     rtpdec
1634     rtpenc_chain
1635     sinewin
1636     videodsp
1637     vp3dsp
1638 "
1639
1640 CMDLINE_SELECT="
1641     $ARCH_EXT_LIST
1642     $CONFIG_LIST
1643     $HAVE_LIST_CMDLINE
1644     $THREADS_LIST
1645     asm
1646     cross_compile
1647     debug
1648     extra_warnings
1649     logging
1650     lto
1651     optimizations
1652     rpath
1653     stripping
1654 "
1655
1656 PATHS_LIST='
1657     bindir
1658     datadir
1659     docdir
1660     incdir
1661     libdir
1662     mandir
1663     prefix
1664     shlibdir
1665 '
1666
1667 CMDLINE_SET="
1668     $PATHS_LIST
1669     ar
1670     arch
1671     as
1672     assert_level
1673     build_suffix
1674     cc
1675     cpu
1676     cross_prefix
1677     cxx
1678     dep_cc
1679     extra_version
1680     host_cc
1681     host_cflags
1682     host_ld
1683     host_ldflags
1684     host_libs
1685     host_os
1686     install
1687     ld
1688     logfile
1689     malloc_prefix
1690     nm
1691     optflags
1692     pkg_config
1693     progs_suffix
1694     random_seed
1695     samples
1696     strip
1697     sysinclude
1698     sysroot
1699     target_exec
1700     target_os
1701     target_path
1702     target_samples
1703     tempprefix
1704     toolchain
1705     valgrind
1706     yasmexe
1707 "
1708
1709 CMDLINE_APPEND="
1710     extra_cflags
1711     extra_cxxflags
1712     host_cppflags
1713 "
1714
1715 # code dependency declarations
1716
1717 # architecture extensions
1718
1719 armv5te_deps="arm"
1720 armv6_deps="arm"
1721 armv6t2_deps="arm"
1722 neon_deps="arm"
1723 vfp_deps="arm"
1724 vfpv3_deps="vfp"
1725
1726 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1727
1728 mipsfpu_deps="mips"
1729 mips32r2_deps="mips"
1730 mipsdspr1_deps="mips"
1731 mipsdspr2_deps="mips"
1732
1733 altivec_deps="ppc"
1734 ppc4xx_deps="ppc"
1735
1736 vis_deps="sparc"
1737
1738 cpunop_deps="i686"
1739 x86_64_select="i686"
1740 x86_64_suggest="fast_cmov"
1741
1742 amd3dnow_deps="mmx"
1743 amd3dnowext_deps="amd3dnow"
1744 mmx_deps="x86"
1745 mmxext_deps="mmx"
1746 sse_deps="mmxext"
1747 sse2_deps="sse"
1748 sse3_deps="sse2"
1749 ssse3_deps="sse3"
1750 sse4_deps="ssse3"
1751 sse42_deps="sse4"
1752 avx_deps="sse42"
1753 fma4_deps="avx"
1754 avx2_deps="avx"
1755
1756 mmx_external_deps="yasm"
1757 mmx_inline_deps="inline_asm"
1758 mmx_suggest="mmx_external mmx_inline"
1759
1760 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86); do
1761     eval dep=\$${ext}_deps
1762     eval ${ext}_external_deps='"${dep}_external"'
1763     eval ${ext}_inline_deps='"${dep}_inline"'
1764     eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1765 done
1766
1767 aligned_stack_if_any="ppc x86"
1768 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1769 fast_clz_if_any="alpha avr32 mips ppc x86"
1770 fast_unaligned_if_any="ppc x86"
1771
1772 inline_asm_deps="!tms470"
1773 need_memalign="altivec neon sse"
1774
1775 symver_if_any="symver_asm_label symver_gnu_asm"
1776
1777 log2_deps="!msvcrt"
1778
1779 # subsystems
1780 dct_select="rdft"
1781 error_resilience_select="dsputil"
1782 frame_thread_encoder_deps="encoders threads"
1783 lpc_select="dsputil"
1784 mdct_select="fft"
1785 rdft_select="fft"
1786 mpegaudio_select="mpegaudiodsp"
1787 mpegaudiodsp_select="dct"
1788 mpegvideo_select="dsputil h264chroma hpeldsp videodsp"
1789 mpegvideoenc_select="mpegvideo"
1790
1791 # decoders / encoders
1792 aac_decoder_select="mdct sinewin"
1793 aac_encoder_select="audio_frame_queue mdct sinewin"
1794 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1795 ac3_decoder_select="mdct ac3dsp ac3_parser dsputil"
1796 ac3_encoder_select="mdct ac3dsp dsputil"
1797 ac3_fixed_encoder_select="mdct ac3dsp dsputil"
1798 aic_decoder_select="dsputil golomb"
1799 alac_encoder_select="lpc"
1800 als_decoder_select="dsputil"
1801 amrnb_decoder_select="lsp"
1802 amrwb_decoder_select="lsp"
1803 amv_decoder_select="dsputil hpeldsp exif"
1804 amv_encoder_select="aandcttables"
1805 ape_decoder_select="dsputil"
1806 asv1_decoder_select="dsputil"
1807 asv1_encoder_select="dsputil"
1808 asv2_decoder_select="dsputil"
1809 asv2_encoder_select="dsputil"
1810 atrac1_decoder_select="mdct sinewin"
1811 atrac3_decoder_select="mdct"
1812 avrn_decoder_select="exif"
1813 bink_decoder_select="dsputil hpeldsp"
1814 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1815 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1816 cavs_decoder_select="dsputil golomb h264chroma videodsp"
1817 cllc_decoder_select="dsputil"
1818 comfortnoise_encoder_select="lpc"
1819 cook_decoder_select="dsputil mdct sinewin"
1820 cscd_decoder_select="lzo"
1821 cscd_decoder_suggest="zlib"
1822 dca_decoder_select="mdct"
1823 dirac_decoder_select="dsputil dwt golomb videodsp"
1824 dnxhd_decoder_select="dsputil"
1825 dnxhd_encoder_select="aandcttables dsputil mpegvideoenc"
1826 dvvideo_decoder_select="dsputil"
1827 dvvideo_encoder_select="dsputil"
1828 dxa_decoder_select="zlib"
1829 eac3_decoder_select="ac3_decoder"
1830 eac3_encoder_select="ac3_encoder"
1831 eamad_decoder_select="aandcttables dsputil mpegvideo"
1832 eatgq_decoder_select="aandcttables"
1833 eatqi_decoder_select="aandcttables error_resilience mpegvideo"
1834 exr_decoder_select="zlib"
1835 ffv1_decoder_select="dsputil golomb rangecoder"
1836 ffv1_encoder_select="dsputil rangecoder"
1837 ffvhuff_decoder_select="dsputil"
1838 ffvhuff_encoder_select="dsputil huffman"
1839 flac_decoder_select="golomb"
1840 flac_encoder_select="dsputil golomb lpc"
1841 flashsv_decoder_select="zlib"
1842 flashsv_encoder_select="zlib"
1843 flashsv2_encoder_select="zlib"
1844 flashsv2_decoder_select="zlib"
1845 flv_decoder_select="h263_decoder"
1846 flv_encoder_select="h263_encoder"
1847 fourxm_decoder_select="dsputil"
1848 fraps_decoder_select="dsputil huffman"
1849 g2m_decoder_select="dsputil zlib"
1850 g729_decoder_select="dsputil"
1851 h261_decoder_select="error_resilience mpegvideo"
1852 h261_encoder_select="aandcttables mpegvideoenc"
1853 h263_decoder_select="error_resilience h263_parser h263dsp mpegvideo"
1854 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
1855 h263i_decoder_select="h263_decoder"
1856 h263p_encoder_select="h263_encoder"
1857 h264_decoder_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
1858 h264_decoder_suggest="error_resilience"
1859 hevc_decoder_select="dsputil golomb videodsp"
1860 huffyuv_decoder_select="dsputil"
1861 huffyuv_encoder_select="dsputil huffman"
1862 iac_decoder_select="dsputil fft mdct sinewin"
1863 imc_decoder_select="dsputil fft mdct sinewin"
1864 indeo3_decoder_select="hpeldsp"
1865 interplay_video_decoder_select="hpeldsp"
1866 jpegls_decoder_select="dsputil golomb hpeldsp exif"
1867 jpegls_encoder_select="golomb"
1868 jv_decoder_select="dsputil"
1869 lagarith_decoder_select="dsputil"
1870 ljpeg_encoder_select="aandcttables mpegvideoenc"
1871 loco_decoder_select="golomb"
1872 mdec_decoder_select="dsputil error_resilience mpegvideo"
1873 metasound_decoder_select="lsp mdct sinewin"
1874 mimic_decoder_select="dsputil hpeldsp"
1875 mjpeg_decoder_select="dsputil hpeldsp exif"
1876 mjpegb_decoder_select="dsputil hpeldsp exif"
1877 mjpeg_encoder_select="aandcttables dsputil mpegvideoenc"
1878 mlp_decoder_select="dsputil mlp_parser"
1879 motionpixels_decoder_select="dsputil"
1880 mp1_decoder_select="mpegaudio"
1881 mp1float_decoder_select="mpegaudio"
1882 mp2_decoder_select="mpegaudio"
1883 mp2float_decoder_select="mpegaudio"
1884 mp3_decoder_select="mpegaudio"
1885 mp3adu_decoder_select="mpegaudio"
1886 mp3adufloat_decoder_select="mpegaudio"
1887 mp3float_decoder_select="mpegaudio"
1888 mp3on4_decoder_select="mpegaudio"
1889 mp3on4float_decoder_select="mpegaudio"
1890 mpc7_decoder_select="dsputil mpegaudiodsp"
1891 mpc8_decoder_select="dsputil mpegaudiodsp"
1892 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1893 mpeg_xvmc_decoder_select="mpeg2video_decoder"
1894 mpeg1video_decoder_select="error_resilience mpegvideo"
1895 mpeg1video_encoder_select="aandcttables mpegvideoenc"
1896 mpeg2video_decoder_select="error_resilience mpegvideo"
1897 mpeg2video_encoder_select="aandcttables mpegvideoenc"
1898 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1899 mpeg4_encoder_select="h263_encoder"
1900 msmpeg4v1_decoder_select="h263_decoder"
1901 msmpeg4v2_decoder_select="h263_decoder"
1902 msmpeg4v2_encoder_select="h263_encoder"
1903 msmpeg4v3_decoder_select="h263_decoder"
1904 msmpeg4v3_encoder_select="h263_encoder"
1905 mss2_decoder_select="error_resilience vc1_decoder"
1906 mxpeg_decoder_select="dsputil hpeldsp exif"
1907 nellymoser_decoder_select="mdct sinewin"
1908 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
1909 nuv_decoder_select="dsputil lzo"
1910 png_decoder_select="zlib"
1911 png_encoder_select="dsputil zlib"
1912 prores_decoder_select="dsputil"
1913 prores_encoder_select="dsputil"
1914 qcelp_decoder_select="lsp"
1915 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1916 ra_144_encoder_select="audio_frame_queue lpc"
1917 ralf_decoder_select="golomb"
1918 rtjpeg_decoder_select="dsputil"
1919 rv10_decoder_select="error_resilience h263_decoder h263dsp"
1920 rv10_encoder_select="h263_encoder"
1921 rv20_decoder_select="error_resilience h263_decoder h263dsp"
1922 rv20_encoder_select="h263_encoder"
1923 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
1924 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
1925 shorten_decoder_select="golomb"
1926 sipr_decoder_select="lsp"
1927 snow_decoder_select="dsputil dwt h264qpel hpeldsp rangecoder"
1928 snow_encoder_select="aandcttables dsputil dwt h264qpel hpeldsp mpegvideoenc rangecoder"
1929 sonic_decoder_select="golomb"
1930 sonic_encoder_select="golomb"
1931 sonic_ls_encoder_select="golomb"
1932 sp5x_decoder_select="dsputil hpeldsp exif"
1933 svq1_decoder_select="hpeldsp"
1934 svq1_encoder_select="aandcttables dsputil hpeldsp mpegvideoenc"
1935 svq3_decoder_select="golomb h264chroma h264dsp h264pred h264qpel hpeldsp mpegvideo videodsp"
1936 svq3_decoder_suggest="error_resilience zlib"
1937 tak_decoder_select="dsputil"
1938 theora_decoder_select="vp3_decoder"
1939 tiff_decoder_suggest="zlib"
1940 tiff_encoder_suggest="zlib"
1941 thp_decoder_select="dsputil hpeldsp exif"
1942 truehd_decoder_select="mlp_parser"
1943 truemotion2_decoder_select="dsputil"
1944 truespeech_decoder_select="dsputil"
1945 tscc_decoder_select="zlib"
1946 twinvq_decoder_select="mdct lsp sinewin"
1947 utvideo_decoder_select="dsputil"
1948 utvideo_encoder_select="dsputil huffman"
1949 vble_decoder_select="dsputil"
1950 vc1_decoder_select="error_resilience h263_decoder h264chroma h264qpel"
1951 vc1image_decoder_select="vc1_decoder"
1952 vorbis_decoder_select="mdct"
1953 vorbis_encoder_select="mdct"
1954 vp3_decoder_select="hpeldsp vp3dsp videodsp"
1955 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
1956 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
1957 vp6a_decoder_select="vp6_decoder"
1958 vp6f_decoder_select="vp6_decoder"
1959 vp8_decoder_select="h264pred videodsp"
1960 vp9_decoder_select="videodsp"
1961 webp_decoder_select="vp8_decoder"
1962 wmapro_decoder_select="mdct sinewin"
1963 wmav1_decoder_select="mdct sinewin"
1964 wmav1_encoder_select="mdct sinewin"
1965 wmav2_decoder_select="mdct sinewin"
1966 wmav2_encoder_select="mdct sinewin"
1967 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1968 wmv1_decoder_select="h263_decoder"
1969 wmv1_encoder_select="h263_encoder"
1970 wmv2_decoder_select="h263_decoder videodsp"
1971 wmv2_encoder_select="h263_encoder"
1972 wmv3_decoder_select="vc1_decoder"
1973 wmv3image_decoder_select="wmv3_decoder"
1974 zerocodec_decoder_select="zlib"
1975 zlib_decoder_select="zlib"
1976 zlib_encoder_select="zlib"
1977 zmbv_decoder_select="zlib"
1978 zmbv_encoder_select="zlib"
1979
1980 # hardware accelerators
1981 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1982 dxva2_deps="dxva2api_h"
1983 vaapi_deps="va_va_h"
1984 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1985 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
1986 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1987
1988 h263_vaapi_hwaccel_deps="vaapi"
1989 h263_vaapi_hwaccel_select="h263_decoder"
1990 h263_vdpau_hwaccel_deps="vdpau"
1991 h263_vdpau_hwaccel_select="h263_decoder"
1992 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
1993 h264_dxva2_hwaccel_deps="dxva2"
1994 h264_dxva2_hwaccel_select="h264_decoder"
1995 h264_vaapi_hwaccel_deps="vaapi"
1996 h264_vaapi_hwaccel_select="h264_decoder"
1997 h264_vda_decoder_deps="vda"
1998 h264_vda_decoder_select="h264_decoder"
1999 h264_vda_hwaccel_deps="vda"
2000 h264_vda_hwaccel_select="h264_decoder"
2001 h264_vdpau_decoder_deps="vdpau"
2002 h264_vdpau_decoder_select="h264_decoder"
2003 h264_vdpau_hwaccel_deps="vdpau"
2004 h264_vdpau_hwaccel_select="h264_decoder"
2005 mpeg_vdpau_decoder_deps="vdpau"
2006 mpeg_vdpau_decoder_select="mpeg2video_decoder"
2007 mpeg1_vdpau_decoder_deps="vdpau"
2008 mpeg1_vdpau_decoder_select="mpeg1video_decoder"
2009 mpeg1_vdpau_hwaccel_deps="vdpau"
2010 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2011 mpeg2_crystalhd_decoder_select="crystalhd"
2012 mpeg2_dxva2_hwaccel_deps="dxva2"
2013 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2014 mpeg2_vaapi_hwaccel_deps="vaapi"
2015 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2016 mpeg2_vdpau_hwaccel_deps="vdpau"
2017 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2018 mpeg4_crystalhd_decoder_select="crystalhd"
2019 mpeg4_vaapi_hwaccel_deps="vaapi"
2020 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2021 mpeg4_vdpau_decoder_deps="vdpau"
2022 mpeg4_vdpau_decoder_select="mpeg4_decoder"
2023 mpeg4_vdpau_hwaccel_deps="vdpau"
2024 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2025 msmpeg4_crystalhd_decoder_select="crystalhd"
2026 vc1_crystalhd_decoder_select="crystalhd"
2027 vc1_dxva2_hwaccel_deps="dxva2"
2028 vc1_dxva2_hwaccel_select="vc1_decoder"
2029 vc1_vaapi_hwaccel_deps="vaapi"
2030 vc1_vaapi_hwaccel_select="vc1_decoder"
2031 vc1_vdpau_decoder_deps="vdpau"
2032 vc1_vdpau_decoder_select="vc1_decoder"
2033 vc1_vdpau_hwaccel_deps="vdpau"
2034 vc1_vdpau_hwaccel_select="vc1_decoder"
2035 wmv3_crystalhd_decoder_select="crystalhd"
2036 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2037 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2038 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
2039 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2040
2041 # parsers
2042 h264_parser_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
2043 hevc_parser_select="hevc_decoder"
2044 mpeg4video_parser_select="error_resilience mpegvideo"
2045 mpegvideo_parser_select="error_resilience mpegvideo"
2046 vc1_parser_select="mpegvideo"
2047
2048 # external libraries
2049 libaacplus_encoder_deps="libaacplus"
2050 libcelt_decoder_deps="libcelt"
2051 libfaac_encoder_deps="libfaac"
2052 libfaac_encoder_select="audio_frame_queue"
2053 libfdk_aac_decoder_deps="libfdk_aac"
2054 libfdk_aac_encoder_deps="libfdk_aac"
2055 libfdk_aac_encoder_select="audio_frame_queue"
2056 libgme_demuxer_deps="libgme"
2057 libgsm_decoder_deps="libgsm"
2058 libgsm_encoder_deps="libgsm"
2059 libgsm_ms_decoder_deps="libgsm"
2060 libgsm_ms_encoder_deps="libgsm"
2061 libilbc_decoder_deps="libilbc"
2062 libilbc_encoder_deps="libilbc"
2063 libmodplug_demuxer_deps="libmodplug"
2064 libmp3lame_encoder_deps="libmp3lame"
2065 libmp3lame_encoder_select="audio_frame_queue"
2066 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2067 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2068 libopencore_amrnb_encoder_select="audio_frame_queue"
2069 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2070 libopenjpeg_decoder_deps="libopenjpeg"
2071 libopenjpeg_encoder_deps="libopenjpeg"
2072 libopus_decoder_deps="libopus"
2073 libopus_encoder_deps="libopus"
2074 libopus_encoder_select="audio_frame_queue"
2075 libquvi_demuxer_deps="libquvi"
2076 libschroedinger_decoder_deps="libschroedinger"
2077 libschroedinger_encoder_deps="libschroedinger"
2078 libshine_encoder_deps="libshine"
2079 libshine_encoder_select="audio_frame_queue"
2080 libspeex_decoder_deps="libspeex"
2081 libspeex_encoder_deps="libspeex"
2082 libspeex_encoder_select="audio_frame_queue"
2083 libstagefright_h264_decoder_deps="libstagefright_h264"
2084 libtheora_encoder_deps="libtheora"
2085 libtwolame_encoder_deps="libtwolame"
2086 libvo_aacenc_encoder_deps="libvo_aacenc"
2087 libvo_aacenc_encoder_select="audio_frame_queue"
2088 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2089 libvorbis_decoder_deps="libvorbis"
2090 libvorbis_encoder_deps="libvorbis"
2091 libvorbis_encoder_select="audio_frame_queue"
2092 libvpx_vp8_decoder_deps="libvpx"
2093 libvpx_vp8_encoder_deps="libvpx"
2094 libvpx_vp9_decoder_deps="libvpx"
2095 libvpx_vp9_encoder_deps="libvpx"
2096 libwavpack_encoder_deps="libwavpack"
2097 libx264_encoder_deps="libx264"
2098 libx264rgb_encoder_deps="libx264"
2099 libxavs_encoder_deps="libxavs"
2100 libxvid_encoder_deps="libxvid"
2101 libutvideo_decoder_deps="libutvideo"
2102 libutvideo_encoder_deps="libutvideo"
2103 libzvbi_teletext_decoder_deps="libzvbi"
2104
2105 # demuxers / muxers
2106 ac3_demuxer_select="ac3_parser"
2107 asf_demuxer_select="riffdec"
2108 asf_muxer_select="riffenc"
2109 asf_stream_muxer_select="asf_muxer"
2110 avi_demuxer_select="riffdec"
2111 avi_muxer_select="riffenc"
2112 avisynth_demuxer_deps="avisynth"
2113 avisynth_demuxer_select="riffdec"
2114 caf_demuxer_select="riffdec"
2115 dirac_demuxer_select="dirac_parser"
2116 dts_demuxer_select="dca_parser"
2117 dtshd_demuxer_select="dca_parser"
2118 dxa_demuxer_select="riffdec"
2119 eac3_demuxer_select="ac3_parser"
2120 f4v_muxer_select="mov_muxer"
2121 flac_demuxer_select="flac_parser"
2122 hds_muxer_select="flv_muxer"
2123 hls_muxer_select="mpegts_muxer"
2124 ipod_muxer_select="mov_muxer"
2125 ismv_muxer_select="mov_muxer"
2126 libnut_demuxer_deps="libnut"
2127 libnut_muxer_deps="libnut"
2128 matroska_audio_muxer_select="matroska_muxer"
2129 matroska_demuxer_select="riffdec"
2130 matroska_demuxer_suggest="bzlib lzo zlib"
2131 matroska_muxer_select="riffenc"
2132 mmf_muxer_select="riffenc"
2133 mov_demuxer_select="riffdec"
2134 mov_demuxer_suggest="zlib"
2135 mov_muxer_select="riffenc rtpenc_chain"
2136 mp3_demuxer_select="mpegaudio_parser"
2137 mp4_muxer_select="mov_muxer"
2138 mpegts_muxer_select="adts_muxer latm_muxer"
2139 mpegtsraw_demuxer_select="mpegts_demuxer"
2140 mxf_d10_muxer_select="mxf_muxer"
2141 nut_muxer_select="riffenc"
2142 nuv_demuxer_select="riffdec"
2143 ogg_demuxer_select="golomb"
2144 psp_muxer_select="mov_muxer"
2145 rtp_demuxer_select="sdp_demuxer"
2146 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
2147 rtsp_demuxer_select="http_protocol rtpdec"
2148 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2149 sap_demuxer_select="sdp_demuxer"
2150 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2151 sdp_demuxer_select="rtpdec"
2152 smoothstreaming_muxer_select="ismv_muxer"
2153 spdif_muxer_select="aac_parser"
2154 tak_demuxer_select="tak_parser"
2155 tg2_muxer_select="mov_muxer"
2156 tgp_muxer_select="mov_muxer"
2157 vobsub_demuxer_select="mpegps_demuxer"
2158 w64_demuxer_select="wav_demuxer"
2159 w64_muxer_select="wav_muxer"
2160 wav_demuxer_select="riffdec"
2161 wav_muxer_select="riffenc"
2162 webm_muxer_select="riffenc"
2163 wtv_demuxer_select="riffdec"
2164 xmv_demuxer_select="riffdec"
2165 xwma_demuxer_select="riffdec"
2166
2167 # indevs / outdevs
2168 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2169 alsa_outdev_deps="alsa_asoundlib_h"
2170 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2171 caca_outdev_deps="libcaca"
2172 dshow_indev_deps="IBaseFilter"
2173 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
2174 dv1394_indev_deps="dv1394"
2175 dv1394_indev_select="dv_demuxer"
2176 fbdev_indev_deps="linux_fb_h"
2177 fbdev_outdev_deps="linux_fb_h"
2178 iec61883_indev_deps="libiec61883"
2179 jack_indev_deps="jack_jack_h sem_timedwait"
2180 lavfi_indev_deps="avfilter"
2181 libcdio_indev_deps="libcdio"
2182 libdc1394_indev_deps="libdc1394"
2183 libv4l2_indev_deps="libv4l2"
2184 openal_indev_deps="openal"
2185 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2186 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2187 pulse_indev_deps="libpulse"
2188 pulse_outdev_deps="libpulse"
2189 sdl_outdev_deps="sdl"
2190 sndio_indev_deps="sndio_h"
2191 sndio_outdev_deps="sndio_h"
2192 v4l_indev_deps="linux_videodev_h"
2193 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2194 v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
2195 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2196 vfwcap_indev_extralibs="-lavicap32"
2197 xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
2198 xv_outdev_extralibs="-lXv -lX11 -lXext"
2199 x11grab_indev_deps="x11grab"
2200
2201 # protocols
2202 bluray_protocol_deps="libbluray"
2203 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2204 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
2205 ffrtmpcrypt_protocol_select="tcp_protocol"
2206 ffrtmphttp_protocol_deps="!librtmp_protocol"
2207 ffrtmphttp_protocol_select="http_protocol"
2208 ftp_protocol_select="tcp_protocol"
2209 gopher_protocol_select="network"
2210 httpproxy_protocol_select="tcp_protocol"
2211 http_protocol_select="tcp_protocol"
2212 https_protocol_select="tls_protocol"
2213 librtmp_protocol_deps="librtmp"
2214 librtmpe_protocol_deps="librtmp"
2215 librtmps_protocol_deps="librtmp"
2216 librtmpt_protocol_deps="librtmp"
2217 librtmpte_protocol_deps="librtmp"
2218 libssh_protocol_deps="libssh"
2219 mmsh_protocol_select="http_protocol"
2220 mmst_protocol_select="network"
2221 rtmp_protocol_deps="!librtmp_protocol"
2222 rtmp_protocol_select="tcp_protocol"
2223 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2224 rtmps_protocol_deps="!librtmp_protocol"
2225 rtmps_protocol_select="tls_protocol"
2226 rtmpt_protocol_select="ffrtmphttp_protocol"
2227 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2228 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2229 rtp_protocol_select="udp_protocol"
2230 sctp_protocol_deps="struct_sctp_event_subscribe"
2231 sctp_protocol_select="network"
2232 srtp_protocol_select="rtp_protocol"
2233 tcp_protocol_select="network"
2234 tls_protocol_deps_any="openssl gnutls"
2235 tls_protocol_select="tcp_protocol"
2236 udp_protocol_select="network"
2237 unix_protocol_deps="sys_un_h"
2238 unix_protocol_select="network"
2239
2240 # filters
2241 aconvert_filter_deps="swresample"
2242 amovie_filter_deps="avcodec avformat"
2243 aresample_filter_deps="swresample"
2244 ass_filter_deps="libass"
2245 asyncts_filter_deps="avresample"
2246 atempo_filter_deps="avcodec"
2247 atempo_filter_select="rdft"
2248 azmq_filter_deps="libzmq"
2249 blackframe_filter_deps="gpl"
2250 boxblur_filter_deps="gpl"
2251 colormatrix_filter_deps="gpl"
2252 cropdetect_filter_deps="gpl"
2253 dctdnoiz_filter_deps="avcodec"
2254 dctdnoiz_filter_select="fft"
2255 delogo_filter_deps="gpl"
2256 deshake_filter_deps="avcodec"
2257 deshake_filter_select="dsputil"
2258 drawtext_filter_deps="libfreetype"
2259 ebur128_filter_deps="gpl"
2260 flite_filter_deps="libflite"
2261 frei0r_filter_deps="frei0r dlopen"
2262 frei0r_filter_extralibs='$ldl'
2263 frei0r_src_filter_deps="frei0r dlopen"
2264 frei0r_src_filter_extralibs='$ldl'
2265 geq_filter_deps="gpl"
2266 histeq_filter_deps="gpl"
2267 hqdn3d_filter_deps="gpl"
2268 interlace_filter_deps="gpl"
2269 kerndeint_filter_deps="gpl"
2270 ladspa_filter_deps="ladspa dlopen"
2271 mcdeint_filter_deps="avcodec gpl"
2272 movie_filter_deps="avcodec avformat"
2273 mp_filter_deps="gpl avcodec swscale inline_asm"
2274 mpdecimate_filter_deps="gpl avcodec"
2275 mptestsrc_filter_deps="gpl"
2276 negate_filter_deps="lut_filter"
2277 perspective_filter_deps="gpl"
2278 resample_filter_deps="avresample"
2279 ocv_filter_deps="libopencv"
2280 owdenoise_filter_deps="gpl"
2281 pan_filter_deps="swresample"
2282 phase_filter_deps="gpl"
2283 pp_filter_deps="gpl postproc"
2284 pullup_filter_deps="gpl"
2285 removelogo_filter_deps="avcodec avformat swscale"
2286 sab_filter_deps="gpl swscale"
2287 scale_filter_deps="swscale"
2288 smartblur_filter_deps="gpl swscale"
2289 showspectrum_filter_deps="avcodec"
2290 showspectrum_filter_select="rdft"
2291 spp_filter_deps="gpl avcodec"
2292 spp_filter_select="fft"
2293 stereo3d_filter_deps="gpl"
2294 subtitles_filter_deps="avformat avcodec libass"
2295 super2xsai_filter_deps="gpl"
2296 tinterlace_filter_deps="gpl"
2297 vidstabdetect_filter_deps="libvidstab"
2298 vidstabtransform_filter_deps="libvidstab"
2299 yadif_filter_deps="gpl"
2300 pixfmts_super2xsai_test_deps="super2xsai_filter"
2301 tinterlace_merge_test_deps="tinterlace_filter"
2302 tinterlace_pad_test_deps="tinterlace_filter"
2303 zmq_filter_deps="libzmq"
2304
2305 # examples
2306 decoding_encoding_example_deps="avcodec avutil"
2307 demuxing_decoding_example_deps="avcodec avformat avutil"
2308 filtering_audio_example_deps="avfilter avcodec avformat avutil"
2309 filtering_video_example_deps="avfilter avcodec avformat avutil"
2310 metadata_example_deps="avformat avutil"
2311 muxing_example_deps="avcodec avformat avutil swscale"
2312 resampling_audio_example_deps="avutil swresample"
2313 scaling_video_example_deps="avutil swscale"
2314 transcode_aac_example_deps="avcodec avformat swresample"
2315
2316 # libraries
2317 avcodec_deps="avutil"
2318 avdevice_deps="avutil avcodec avformat"
2319 avfilter_deps="avutil"
2320 avformat_deps="avutil avcodec"
2321 avresample_deps="avutil"
2322 postproc_deps="avutil gpl"
2323 swscale_deps="avutil"
2324
2325 # programs
2326 ffmpeg_deps="avcodec avfilter avformat swresample"
2327 ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
2328                null_filter
2329                setpts_filter trim_filter"
2330 ffplay_deps="avcodec avformat swscale swresample sdl"
2331 ffplay_select="rdft crop_filter"
2332 ffprobe_deps="avcodec avformat"
2333 ffserver_deps="avformat fork sarestart"
2334 ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
2335 ffserver_extralibs='$ldl'
2336
2337 # documentation
2338 podpages_deps="perl"
2339 manpages_deps="perl pod2man"
2340 htmlpages_deps="perl texi2html"
2341 txtpages_deps="perl makeinfo"
2342 doc_deps_any="manpages htmlpages podpages txtpages"
2343
2344 # default parameters
2345
2346 logfile="config.log"
2347
2348 # installation paths
2349 prefix_default="/usr/local"
2350 bindir_default='${prefix}/bin'
2351 datadir_default='${prefix}/share/ffmpeg'
2352 docdir_default='${prefix}/share/doc/ffmpeg'
2353 incdir_default='${prefix}/include'
2354 libdir_default='${prefix}/lib'
2355 mandir_default='${prefix}/share/man'
2356 shlibdir_default="$libdir_default"
2357
2358 # toolchain
2359 ar_default="ar"
2360 cc_default="gcc"
2361 cxx_default="g++"
2362 host_cc_default="gcc"
2363 cp_f="cp -f"
2364 install="install"
2365 ln_s="ln -s -f"
2366 nm_default="nm -g"
2367 objformat="elf"
2368 pkg_config_default=pkg-config
2369 ranlib="ranlib"
2370 strip_default="strip"
2371 yasmexe_default="yasm"
2372 windres_default="windres"
2373
2374 nogas=":"
2375
2376 # machine
2377 arch_default=$(uname -m)
2378 cpu="generic"
2379
2380 # OS
2381 target_os_default=$(tolower $(uname -s))
2382 host_os=$target_os_default
2383
2384 # configurable options
2385 enable $PROGRAM_LIST
2386 enable $DOCUMENT_LIST
2387 enable $EXAMPLE_LIST
2388 enable $(filter_out avresample $LIBRARY_LIST)
2389 enable stripping
2390
2391 enable asm
2392 enable debug
2393 enable doc
2394 enable optimizations
2395 enable runtime_cpudetect
2396 enable safe_bitstream_reader
2397 enable static
2398 enable swscale_alpha
2399
2400 # Enable hwaccels by default.
2401 enable dxva2 vaapi vdpau
2402
2403 # build settings
2404 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2405 LIBPREF="lib"
2406 LIBSUF=".a"
2407 FULLNAME='$(NAME)$(BUILDSUF)'
2408 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2409 SLIBPREF="lib"
2410 SLIBSUF=".so"
2411 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2412 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2413 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2414 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2415 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2416 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2417
2418 asflags_filter=echo
2419 cflags_filter=echo
2420 ldflags_filter=echo
2421
2422 AS_C='-c'
2423 AS_O='-o $@'
2424 CC_C='-c'
2425 CC_E='-E -o $@'
2426 CC_O='-o $@'
2427 CXX_C='-c'
2428 CXX_O='-o $@'
2429 LD_O='-o $@'
2430 LD_LIB='-l%'
2431 LD_PATH='-L'
2432 HOSTCC_C='-c'
2433 HOSTCC_O='-o $@'
2434 HOSTLD_O='-o $@'
2435
2436 host_cflags='-O3 -g'
2437 host_cppflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600'
2438 host_libs='-lm'
2439 host_cflags_filter=echo
2440 host_ldflags_filter=echo
2441
2442 target_path='$(CURDIR)'
2443
2444 # since the object filename is not given with the -MM flag, the compiler
2445 # is only able to print the basename, and we must add the path ourselves
2446 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2447 DEPFLAGS='-MM'
2448
2449 # find source path
2450 if test -f configure; then
2451     source_path=.
2452 else
2453     source_path=$(cd $(dirname "$0"); pwd)
2454     echo "$source_path" | grep -q '[[:blank:]]' &&
2455         die "Out of tree builds are impossible with whitespace in source path."
2456     test -e "$source_path/config.h" &&
2457         die "Out of tree builds are impossible with config.h in source dir."
2458 fi
2459
2460 for v in "$@"; do
2461     r=${v#*=}
2462     l=${v%"$r"}
2463     r=$(sh_quote "$r")
2464     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2465 done
2466
2467 find_things(){
2468     thing=$1
2469     pattern=$2
2470     file=$source_path/$3
2471     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2472 }
2473
2474 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2475 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2476 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2477 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2478 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2479 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2480 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2481 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2482 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2483 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2484 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2485
2486 ALL_COMPONENTS="
2487     $BSF_LIST
2488     $DECODER_LIST
2489     $DEMUXER_LIST
2490     $ENCODER_LIST
2491     $FILTER_LIST
2492     $HWACCEL_LIST
2493     $INDEV_LIST
2494     $MUXER_LIST
2495     $OUTDEV_LIST
2496     $PARSER_LIST
2497     $PROTOCOL_LIST
2498 "
2499
2500 for n in $COMPONENT_LIST; do
2501     v=$(toupper ${n%s})_LIST
2502     eval enable \$$v
2503     eval ${n}_if_any="\$$v"
2504 done
2505
2506 enable $ARCH_EXT_LIST
2507
2508 die_unknown(){
2509     echo "Unknown option \"$1\"."
2510     echo "See $0 --help for available options."
2511     exit 1
2512 }
2513
2514 print_3_columns() {
2515     cat | tr ' ' '\n' | sort | pr -r -3 -t
2516 }
2517
2518 show_list() {
2519     suffix=_$1
2520     shift
2521     echo $* | sed s/$suffix//g | print_3_columns
2522     exit 0
2523 }
2524
2525 rand_list(){
2526     IFS=', '
2527     set -- $*
2528     unset IFS
2529     for thing; do
2530         comp=${thing%:*}
2531         prob=${thing#$comp}
2532         prob=${prob#:}
2533         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2534         echo "prob ${prob:-0.5}"
2535         printf '%s\n' $comp
2536     done
2537 }
2538
2539 do_random(){
2540     action=$1
2541     shift
2542     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2543     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2544 }
2545
2546 for opt do
2547     optval="${opt#*=}"
2548     case "$opt" in
2549         --extra-ldflags=*)
2550             add_ldflags $optval
2551         ;;
2552         --extra-libs=*)
2553             add_extralibs $optval
2554         ;;
2555         --disable-devices)
2556             disable $INDEV_LIST $OUTDEV_LIST
2557         ;;
2558         --enable-debug=*)
2559             debuglevel="$optval"
2560         ;;
2561         --disable-programs)
2562             disable $PROGRAM_LIST
2563         ;;
2564         --disable-everything)
2565             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2566         ;;
2567         --disable-all)
2568             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2569             disable $LIBRARY_LIST $PROGRAM_LIST doc
2570         ;;
2571         --enable-random|--disable-random)
2572             action=${opt%%-random}
2573             do_random ${action#--} $COMPONENT_LIST
2574         ;;
2575         --enable-random=*|--disable-random=*)
2576             action=${opt%%-random=*}
2577             do_random ${action#--} $optval
2578         ;;
2579         --enable-*=*|--disable-*=*)
2580             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2581             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2582             eval list=\$$(toupper $thing)_LIST
2583             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2584             list=$(filter "$name" $list)
2585             [ "$list" = "" ] && warn "Option $opt did not match anything"
2586             $action $list
2587         ;;
2588         --enable-?*|--disable-?*)
2589             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2590             if is_in $option $COMPONENT_LIST; then
2591                 test $action = disable && action=unset
2592                 eval $action \$$(toupper ${option%s})_LIST
2593             elif is_in $option $CMDLINE_SELECT; then
2594                 $action $option
2595             else
2596                 die_unknown $opt
2597             fi
2598         ;;
2599         --list-*)
2600             NAME="${opt#--list-}"
2601             is_in $NAME $COMPONENT_LIST || die_unknown $opt
2602             NAME=${NAME%s}
2603             eval show_list $NAME \$$(toupper $NAME)_LIST
2604         ;;
2605         --help|-h) show_help
2606         ;;
2607         --fatal-warnings) enable fatal_warnings
2608         ;;
2609         *)
2610             optname="${opt%%=*}"
2611             optname="${optname#--}"
2612             optname=$(echo "$optname" | sed 's/-/_/g')
2613             if is_in $optname $CMDLINE_SET; then
2614                 eval $optname='$optval'
2615             elif is_in $optname $CMDLINE_APPEND; then
2616                 append $optname "$optval"
2617             else
2618                 die_unknown $opt
2619             fi
2620         ;;
2621     esac
2622 done
2623
2624 disabled logging && logfile=/dev/null
2625
2626 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2627 set >> $logfile
2628
2629 test -n "$cross_prefix" && enable cross_compile
2630
2631 if enabled cross_compile; then
2632     test -n "$arch" && test -n "$target_os" ||
2633         die "Must specify target arch and OS when cross-compiling"
2634 fi
2635
2636 ar_default="${cross_prefix}${ar_default}"
2637 cc_default="${cross_prefix}${cc_default}"
2638 cxx_default="${cross_prefix}${cxx_default}"
2639 nm_default="${cross_prefix}${nm_default}"
2640 pkg_config_default="${cross_prefix}${pkg_config_default}"
2641 ranlib="${cross_prefix}${ranlib}"
2642 strip_default="${cross_prefix}${strip_default}"
2643 windres_default="${cross_prefix}${windres_default}"
2644
2645 sysinclude_default="${sysroot}/usr/include"
2646
2647 test -n "$valgrind" && toolchain="valgrind-memcheck"
2648
2649 case "$toolchain" in
2650     clang-asan)
2651         cc_default="clang"
2652         add_cflags  -fsanitize=address
2653         add_ldflags -fsanitize=address
2654     ;;
2655     clang-tsan)
2656         cc_default="clang"
2657         add_cflags  -fsanitize=thread -pie
2658         add_ldflags -fsanitize=thread -pie
2659     ;;
2660     gcc-asan)
2661         cc_default="gcc"
2662         add_cflags  -fsanitize=address
2663         add_ldflags -fsanitize=address
2664     ;;
2665     gcc-tsan)
2666         cc_default="gcc"
2667         add_cflags  -fsanitize=thread -pie -fPIC
2668         add_ldflags -fsanitize=thread -pie -fPIC
2669     ;;
2670     valgrind-massif)
2671         target_exec_default=${valgrind:-"valgrind"}
2672         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"
2673     ;;
2674     valgrind-memcheck)
2675         target_exec_default=${valgrind:-"valgrind"}
2676         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"
2677     ;;
2678     msvc)
2679         # Check whether the current MSVC version needs the C99 converter.
2680         # From MSVC 2013 (compiler major version 18) onwards, it does actually
2681         # support enough of C99 to build ffmpeg. Default to the new
2682         # behaviour if the regexp was unable to match anything, since this
2683         # successfully parses the version number of existing supported
2684         # versions that require the converter (MSVC 2010 and 2012).
2685         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2686         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
2687             cc_default="cl"
2688         else
2689             cc_default="c99wrap cl"
2690         fi
2691         ld_default="link"
2692         nm_default="dumpbin -symbols"
2693         ar_default="lib"
2694         target_os_default="win32"
2695         # Use a relative path for TMPDIR. This makes sure all the
2696         # ffconf temp files are written with a relative path, avoiding
2697         # issues with msys/win32 path conversion for MSVC parameters
2698         # such as -Fo<file> or -out:<file>.
2699         TMPDIR=.
2700     ;;
2701     icl)
2702         cc_default="icl"
2703         ld_default="xilink"
2704         nm_default="dumpbin -symbols"
2705         ar_default="xilib"
2706         target_os_default="win32"
2707         TMPDIR=.
2708     ;;
2709     gcov)
2710         add_cflags  -fprofile-arcs -ftest-coverage
2711         add_ldflags -fprofile-arcs -ftest-coverage
2712     ;;
2713     hardened)
2714         add_cflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all
2715         add_ldflags -Wl,-z,relro -Wl,-z,now
2716     ;;
2717     ?*)
2718         die "Unknown toolchain $toolchain"
2719     ;;
2720 esac
2721
2722 set_default arch cc cxx pkg_config strip sysinclude target_exec target_os yasmexe
2723 enabled cross_compile || host_cc_default=$cc
2724 set_default host_cc
2725
2726 if ! $pkg_config --version >/dev/null 2>&1; then
2727     warn "$pkg_config not found, library detection may fail."
2728     pkg_config=false
2729 fi
2730
2731 exesuf() {
2732     case $1 in
2733         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2734     esac
2735 }
2736
2737 EXESUF=$(exesuf $target_os)
2738 HOSTEXESUF=$(exesuf $host_os)
2739
2740 # set temporary file name
2741 : ${TMPDIR:=$TEMPDIR}
2742 : ${TMPDIR:=$TMP}
2743 : ${TMPDIR:=/tmp}
2744
2745 if [ -n "$tempprefix" ] ; then
2746     mktemp(){
2747         echo $tempprefix.${HOSTNAME}.${UID}
2748     }
2749 elif ! check_cmd mktemp -u XXXXXX; then
2750     # simple replacement for missing mktemp
2751     # NOT SAFE FOR GENERAL USE
2752     mktemp(){
2753         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2754     }
2755 fi
2756
2757 tmpfile(){
2758     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2759         (set -C; exec > $tmp) 2>/dev/null ||
2760         die "Unable to create temporary file in $TMPDIR."
2761     append TMPFILES $tmp
2762     eval $1=$tmp
2763 }
2764
2765 trap 'rm -f -- $TMPFILES' EXIT
2766
2767 tmpfile TMPASM .asm
2768 tmpfile TMPC   .c
2769 tmpfile TMPCPP .cpp
2770 tmpfile TMPE   $EXESUF
2771 tmpfile TMPH   .h
2772 tmpfile TMPO   .o
2773 tmpfile TMPS   .S
2774 tmpfile TMPSH  .sh
2775 tmpfile TMPV   .ver
2776
2777 unset -f mktemp
2778
2779 chmod +x $TMPE
2780
2781 # make sure we can execute files in $TMPDIR
2782 cat > $TMPSH 2>> $logfile <<EOF
2783 #! /bin/sh
2784 EOF
2785 chmod +x $TMPSH >> $logfile 2>&1
2786 if ! $TMPSH >> $logfile 2>&1; then
2787     cat <<EOF
2788 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2789 variable to another directory and make sure that it is not mounted noexec.
2790 EOF
2791     die "Sanity test failed."
2792 fi
2793
2794 ccc_flags(){
2795     for flag; do
2796         case $flag in
2797             -std=c99)           echo -c99                       ;;
2798             -mcpu=*)            echo -arch ${flag#*=}           ;;
2799             -mieee)             echo -ieee                      ;;
2800             -O*|-fast)          echo $flag                      ;;
2801             -fno-math-errno)    echo -assume nomath_errno       ;;
2802             -g)                 echo -g3                        ;;
2803             -Wall)              echo -msg_enable level2         ;;
2804             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
2805             -Wl,*)              echo $flag                      ;;
2806             -f*|-W*)                                            ;;
2807             *)                  echo $flag                      ;;
2808         esac
2809    done
2810 }
2811
2812 cparser_flags(){
2813     for flag; do
2814         case $flag in
2815             -Wno-switch)             echo -Wno-switch-enum ;;
2816             -Wno-format-zero-length) ;;
2817             -Wdisabled-optimization) ;;
2818             -Wno-pointer-sign)       echo -Wno-other ;;
2819             *)                       echo $flag ;;
2820         esac
2821     done
2822 }
2823
2824 msvc_common_flags(){
2825     for flag; do
2826         case $flag in
2827             # In addition to specifying certain flags under the compiler
2828             # specific filters, they must be specified here as well or else the
2829             # generic catch all at the bottom will print the original flag.
2830             -Wall)                ;;
2831             -std=c99)             ;;
2832             # Common flags
2833             -fomit-frame-pointer) ;;
2834             -g)                   echo -Z7 ;;
2835             -fno-math-errno)      ;;
2836             -fno-common)          ;;
2837             -fno-signed-zeros)    ;;
2838             -fPIC)                ;;
2839             -mthumb)              ;;
2840             -march=*)             ;;
2841             -lz)                  echo zlib.lib ;;
2842             -lavifil32)           echo vfw32.lib ;;
2843             -lavicap32)           echo vfw32.lib user32.lib ;;
2844             -l*)                  echo ${flag#-l}.lib ;;
2845             *)                    echo $flag ;;
2846         esac
2847     done
2848 }
2849
2850 msvc_flags(){
2851     msvc_common_flags "$@"
2852     for flag; do
2853         case $flag in
2854             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
2855                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2856                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2857                                        -wd4554 \
2858                                        -wd4273 ;;
2859         esac
2860     done
2861 }
2862
2863 icl_flags(){
2864     msvc_common_flags "$@"
2865     for flag; do
2866         case $flag in
2867             # Despite what Intel's documentation says -Wall, which is supported
2868             # on Windows, does enable remarks so disable them here.
2869             -Wall)                echo $flag -Qdiag-disable:remark ;;
2870             -std=c99)             echo -Qstd=c99 ;;
2871         esac
2872     done
2873 }
2874
2875 pgi_flags(){
2876     for flag; do
2877         case $flag in
2878             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
2879             -fomit-frame-pointer) echo -Mnoframe ;;
2880             -g)                   echo -gopt ;;
2881             *)                    echo $flag ;;
2882         esac
2883     done
2884 }
2885
2886 suncc_flags(){
2887     for flag; do
2888         case $flag in
2889             -march=*|-mcpu=*)
2890                 case "${flag#*=}" in
2891                     native)                   echo -xtarget=native       ;;
2892                     v9|niagara)               echo -xarch=sparc          ;;
2893                     ultrasparc)               echo -xarch=sparcvis       ;;
2894                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2895                     i586|pentium)             echo -xchip=pentium        ;;
2896                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2897                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2898                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2899                     pentium4*)          echo -xtarget=pentium4           ;;
2900                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2901                     *-sse3)             echo -xarch=sse3                 ;;
2902                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
2903                     corei7)           echo -xarch=sse4_2 -xchip=nehalem  ;;
2904                     corei7-avx)       echo -xarch=avx -xchip=sandybridge ;;
2905                     amdfam10|barcelona)        echo -xtarget=barcelona   ;;
2906                     bdver*)                    echo -xarch=avx           ;;
2907                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
2908                     k8|opteron|athlon64|athlon-fx)
2909                                                echo -xarch=sse2a         ;;
2910                     athlon*)                   echo -xarch=pentium_proa  ;;
2911                 esac
2912                 ;;
2913             -std=c99)             echo -xc99              ;;
2914             -fomit-frame-pointer) echo -xregs=frameptr    ;;
2915             -fPIC)                echo -KPIC -xcode=pic32 ;;
2916             -W*,*)                echo $flag              ;;
2917             -f*-*|-W*|-mimpure-text)                      ;;
2918             -shared)              echo -G                 ;;
2919             *)                    echo $flag              ;;
2920         esac
2921     done
2922 }
2923
2924 tms470_flags(){
2925     for flag; do
2926         case $flag in
2927             -march=*|-mcpu=*)
2928                 case "${flag#*=}" in
2929                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
2930                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
2931                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
2932                     armv6*|arm11*)          echo -mv=6   ;;
2933                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2934                                             echo -mv=5e  ;;
2935                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2936                 esac
2937                 ;;
2938             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2939             -mfpu=vfp)      echo --float_support=vfpv2        ;;
2940             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2941             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
2942             -msoft-float)   echo --float_support=vfplib       ;;
2943             -O[0-3]|-mf=*)  echo $flag                        ;;
2944             -g)             echo -g -mn                       ;;
2945             -pds=*)         echo $flag                        ;;
2946             -D*|-I*)        echo $flag                        ;;
2947             --gcc|--abi=*)  echo $flag                        ;;
2948             -me)            echo $flag                        ;;
2949         esac
2950     done
2951 }
2952
2953 probe_cc(){
2954     pfx=$1
2955     _cc=$2
2956
2957     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2958     unset _ld_o _ldflags _ld_lib _ld_path
2959     unset _depflags _DEPCMD _DEPFLAGS
2960     _flags_filter=echo
2961
2962     if $_cc --version 2>&1 | grep -q '^GNU assembler'; then
2963         true # no-op to avoid reading stdin in following checks
2964     elif $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2965         _type=llvm_gcc
2966         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2967         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2968         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2969         _cflags_speed='-O3'
2970         _cflags_size='-Os'
2971     elif $_cc -v 2>&1 | grep -qi ^gcc; then
2972         _type=gcc
2973         gcc_version=$($_cc --version | head -n1)
2974         gcc_basever=$($_cc -dumpversion)
2975         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2976         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2977         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2978         if ! $_cc -dumpversion | grep -q '^2\.'; then
2979             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2980         fi
2981         _cflags_speed='-O3'
2982         _cflags_size='-Os'
2983     elif $_cc --version 2>/dev/null | grep -q ^icc; then
2984         _type=icc
2985         _ident=$($_cc --version | head -n1)
2986         _depflags='-MMD'
2987         _cflags_speed='-O3'
2988         _cflags_size='-Os'
2989         _cflags_noopt='-O1'
2990     elif $_cc -v 2>&1 | grep -q xlc; then
2991         _type=xlc
2992         _ident=$($_cc -qversion 2>/dev/null | head -n1)
2993         _cflags_speed='-O5'
2994         _cflags_size='-O5 -qcompact'
2995     elif $_cc -V 2>/dev/null | grep -q Compaq; then
2996         _type=ccc
2997         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2998         _DEPFLAGS='-M'
2999         _cflags_speed='-fast'
3000         _cflags_size='-O1'
3001         _flags_filter=ccc_flags
3002     elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
3003         test -d "$sysroot" || die "No valid sysroot specified."
3004         _type=armcc
3005         _ident=$($_cc --vsn | head -n1)
3006         armcc_conf="$PWD/armcc.conf"
3007         $_cc --arm_linux_configure                 \
3008              --arm_linux_config_file="$armcc_conf" \
3009              --configure_sysroot="$sysroot"        \
3010              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3011              die "Error creating armcc configuration file."
3012         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3013         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3014         as_default="${cross_prefix}gcc"
3015         _depflags='-MMD'
3016         _cflags_speed='-O3'
3017         _cflags_size='-Os'
3018     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3019         _type=tms470
3020         _ident=$($_cc -version | head -n1 | tr -s ' ')
3021         _flags='--gcc --abi=eabi -me'
3022         _cc_e='-ppl -fe=$@'
3023         _cc_o='-fe=$@'
3024         _depflags='-ppa -ppd=$(@:.o=.d)'
3025         _cflags_speed='-O3 -mf=5'
3026         _cflags_size='-O3 -mf=2'
3027         _flags_filter=tms470_flags
3028     elif $_cc -v 2>&1 | grep -q clang; then
3029         _type=clang
3030         _ident=$($_cc --version | head -n1)
3031         _depflags='-MMD'
3032         _cflags_speed='-O3'
3033         _cflags_size='-Os'
3034     elif $_cc -V 2>&1 | grep -q Sun; then
3035         _type=suncc
3036         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3037         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3038         _DEPFLAGS='-xM1 -xc99'
3039         _ldflags='-std=c99'
3040         _cflags_speed='-O5'
3041         _cflags_size='-O5 -xspace'
3042         _flags_filter=suncc_flags
3043     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3044         _type=pathscale
3045         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3046         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3047         _cflags_speed='-O2'
3048         _cflags_size='-Os'
3049         _flags_filter='filter_out -Wdisabled-optimization'
3050     elif $_cc -v 2>&1 | grep -q Open64; then
3051         _type=open64
3052         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3053         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3054         _cflags_speed='-O2'
3055         _cflags_size='-Os'
3056         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3057     elif $_cc -V 2>&1 | grep -q Portland; then
3058         _type=pgi
3059         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3060         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3061         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3062         _cflags_size="-O2 -Munroll=c:1 $opt_common"
3063         _cflags_noopt="-O"
3064         _flags_filter=pgi_flags
3065     elif $_cc 2>&1 | grep -q Microsoft; then
3066         _type=msvc
3067         _ident=$($cc 2>&1 | head -n1)
3068         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3069         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3070         _cflags_speed="-O2"
3071         _cflags_size="-O1"
3072         if $_cc 2>&1 | grep -q Linker; then
3073             _ld_o='-out:$@'
3074         else
3075             _ld_o='-Fe$@'
3076         fi
3077         _cc_o='-Fo$@'
3078         _cc_e='-P -Fi$@'
3079         _flags_filter=msvc_flags
3080         _ld_lib='lib%.a'
3081         _ld_path='-libpath:'
3082         _flags='-nologo'
3083         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
3084         if [ $pfx = hostcc ]; then
3085             append _cflags -Dsnprintf=_snprintf
3086         fi
3087         disable stripping
3088     elif $_cc 2>&1 | grep -q Intel; then
3089         _type=icl
3090         _ident=$($cc 2>&1 | head -n1)
3091         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3092         # Not only is O3 broken on 13.x+ but it is slower on all previous
3093         # versions (tested) as well.
3094         _cflags_speed="-O2"
3095         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3096         if $_cc 2>&1 | grep -q Linker; then
3097             _ld_o='-out:$@'
3098         else
3099             _ld_o='-Fe$@'
3100         fi
3101         _cc_o='-Fo$@'
3102         _cc_e='-P'
3103         _flags_filter=icl_flags
3104         _ld_lib='lib%.a'
3105         _ld_path='-libpath:'
3106         # -Qdiag-error to make icl error when seeing certain unknown arguments
3107         _flags='-nologo -Qdiag-error:4044,10157'
3108         # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3109         # with MSVC which enables it by default.
3110         _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
3111         if [ $pfx = hostcc ]; then
3112             append _cflags -Dsnprintf=_snprintf
3113         fi
3114     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3115         _type=cparser
3116         _ident=$($_cc --version | head -n1)
3117         _depflags='-MMD'
3118         _cflags_speed='-O4'
3119         _cflags_size='-O2'
3120         _flags_filter=cparser_flags
3121     fi
3122
3123     eval ${pfx}_type=\$_type
3124     eval ${pfx}_ident=\$_ident
3125 }
3126
3127 set_ccvars(){
3128     eval ${1}_C=\${_cc_c-\${${1}_C}}
3129     eval ${1}_E=\${_cc_e-\${${1}_E}}
3130     eval ${1}_O=\${_cc_o-\${${1}_O}}
3131
3132     if [ -n "$_depflags" ]; then
3133         eval ${1}_DEPFLAGS=\$_depflags
3134     else
3135         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3136         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3137         eval DEP${1}FLAGS=\$_flags
3138     fi
3139 }
3140
3141 probe_cc cc "$cc"
3142 cflags_filter=$_flags_filter
3143 cflags_speed=$_cflags_speed
3144 cflags_size=$_cflags_size
3145 cflags_noopt=$_cflags_noopt
3146 add_cflags $_flags $_cflags
3147 cc_ldflags=$_ldflags
3148 set_ccvars CC
3149
3150 probe_cc hostcc "$host_cc"
3151 host_cflags_filter=$_flags_filter
3152 add_host_cflags  $_flags $_cflags
3153 set_ccvars HOSTCC
3154
3155 test -n "$cc_type" && enable $cc_type ||
3156     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3157
3158 : ${as_default:=$cc}
3159 : ${dep_cc_default:=$cc}
3160 : ${ld_default:=$cc}
3161 : ${host_ld_default:=$host_cc}
3162 set_default ar as dep_cc ld host_ld windres
3163
3164 probe_cc as "$as"
3165 asflags_filter=$_flags_filter
3166 add_asflags $_flags $_cflags
3167 set_ccvars AS
3168
3169 probe_cc ld "$ld"
3170 ldflags_filter=$_flags_filter
3171 add_ldflags $_flags $_ldflags
3172 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3173 LD_O=${_ld_o-$LD_O}
3174 LD_LIB=${_ld_lib-$LD_LIB}
3175 LD_PATH=${_ld_path-$LD_PATH}
3176
3177 probe_cc hostld "$host_ld"
3178 host_ldflags_filter=$_flags_filter
3179 add_host_ldflags $_flags $_ldflags
3180 HOSTLD_O=${_ld_o-$HOSTLD_O}
3181
3182 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3183     probe_cc depcc "$dep_cc"
3184     CCDEP=${_DEPCMD:-$DEPCMD}
3185     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3186     DEPCCFLAGS=$_flags
3187 fi
3188
3189 if $ar 2>&1 | grep -q Microsoft; then
3190     arflags="-nologo"
3191     ar_o='-out:$@'
3192 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3193     arflags="rq"
3194     ar_o='$@'
3195 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3196     arflags='-Xany -r -c'
3197     ar_o='$@'
3198 else
3199     arflags="rc"
3200     ar_o='$@'
3201 fi
3202
3203 add_cflags $extra_cflags
3204 add_cxxflags $extra_cxxflags
3205 add_asflags $extra_cflags
3206
3207 if test -n "$sysroot"; then
3208     case "$cc_type" in
3209         gcc|llvm_gcc|clang)
3210             add_cppflags --sysroot="$sysroot"
3211             add_ldflags --sysroot="$sysroot"
3212         ;;
3213         tms470)
3214             add_cppflags -I"$sysinclude"
3215             add_ldflags  --sysroot="$sysroot"
3216         ;;
3217     esac
3218 fi
3219
3220 if test "$cpu" = host; then
3221     enabled cross_compile &&
3222         die "--cpu=host makes no sense when cross-compiling."
3223
3224     case "$cc_type" in
3225         gcc|llvm_gcc)
3226             check_native(){
3227                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3228                 sed -n "/cc1.*$1=/{
3229                             s/.*$1=\\([^ ]*\\).*/\\1/
3230                             p
3231                             q
3232                         }" $TMPE
3233             }
3234             cpu=$(check_native -march || check_native -mcpu)
3235         ;;
3236     esac
3237
3238     test "${cpu:-host}" = host &&
3239         die "--cpu=host not supported with compiler $cc"
3240 fi
3241
3242 # Deal with common $arch aliases
3243 case "$arch" in
3244     aarch64|arm64)
3245         arch="aarch64"
3246     ;;
3247     arm*|iPad*|iPhone*)
3248         arch="arm"
3249     ;;
3250     mips*|IP*)
3251         arch="mips"
3252     ;;
3253     parisc*|hppa*)
3254         arch="parisc"
3255     ;;
3256     "Power Macintosh"|ppc*|powerpc*)
3257         arch="ppc"
3258     ;;
3259     s390|s390x)
3260         arch="s390"
3261     ;;
3262     sh4|sh)
3263         arch="sh4"
3264     ;;
3265     sun4u|sparc*)
3266         arch="sparc"
3267     ;;
3268     tilegx|tile-gx)
3269         arch="tilegx"
3270     ;;
3271     i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3272         arch="x86"
3273     ;;
3274 esac
3275
3276 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3277 enable $arch
3278
3279 # Add processor-specific flags
3280 if enabled aarch64; then
3281
3282     case $cpu in
3283         armv*)
3284             cpuflags="-march=$cpu"
3285         ;;
3286         *)
3287             cpuflags="-mcpu=$cpu"
3288         ;;
3289     esac
3290
3291 elif enabled alpha; then
3292
3293     cpuflags="-mcpu=$cpu"
3294
3295 elif enabled arm; then
3296
3297     check_arm_arch() {
3298         check_cpp_condition stddef.h \
3299             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3300             $cpuflags
3301     }
3302
3303     probe_arm_arch() {
3304         if   check_arm_arch 4;        then echo armv4;
3305         elif check_arm_arch 4T;       then echo armv4t;
3306         elif check_arm_arch 5;        then echo armv5;
3307         elif check_arm_arch 5E;       then echo armv5e;
3308         elif check_arm_arch 5T;       then echo armv5t;
3309         elif check_arm_arch 5TE;      then echo armv5te;
3310         elif check_arm_arch 5TEJ;     then echo armv5te;
3311         elif check_arm_arch 6;        then echo armv6;
3312         elif check_arm_arch 6J;       then echo armv6j;
3313         elif check_arm_arch 6K;       then echo armv6k;
3314         elif check_arm_arch 6Z;       then echo armv6z;
3315         elif check_arm_arch 6ZK;      then echo armv6zk;
3316         elif check_arm_arch 6T2;      then echo armv6t2;
3317         elif check_arm_arch 7;        then echo armv7;
3318         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3319         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3320         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3321         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3322         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3323         fi
3324     }
3325
3326     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3327
3328     case $cpu in
3329         armv*)
3330             cpuflags="-march=$cpu"
3331             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3332         ;;
3333         *)
3334             cpuflags="-mcpu=$cpu"
3335             case $cpu in
3336                 cortex-a*)                               subarch=armv7a  ;;
3337                 cortex-r*)                               subarch=armv7r  ;;
3338                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3339                 arm11*)                                  subarch=armv6   ;;
3340                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3341                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3342                 *)                             subarch=$(probe_arm_arch) ;;
3343             esac
3344         ;;
3345     esac
3346
3347     case "$subarch" in
3348         armv5t*)    enable fast_clz                ;;
3349         armv[6-8]*) enable fast_clz fast_unaligned ;;
3350     esac
3351
3352 elif enabled avr32; then
3353
3354     case $cpu in
3355         ap7[02]0[0-2])
3356             subarch="avr32_ap"
3357             cpuflags="-mpart=$cpu"
3358         ;;
3359         ap)
3360             subarch="avr32_ap"
3361             cpuflags="-march=$cpu"
3362         ;;
3363         uc3[ab]*)
3364             subarch="avr32_uc"
3365             cpuflags="-mcpu=$cpu"
3366         ;;
3367         uc)
3368             subarch="avr32_uc"
3369             cpuflags="-march=$cpu"
3370         ;;
3371     esac
3372
3373 elif enabled bfin; then
3374
3375     cpuflags="-mcpu=$cpu"
3376
3377 elif enabled mips; then
3378
3379     cpuflags="-march=$cpu"
3380
3381     case $cpu in
3382         24kc)
3383             disable mipsfpu
3384             disable mipsdspr1
3385             disable mipsdspr2
3386         ;;
3387         24kf*)
3388             disable mipsdspr1
3389             disable mipsdspr2
3390         ;;
3391         24kec|34kc|1004kc)
3392             disable mipsfpu
3393             disable mipsdspr2
3394         ;;
3395         24kef*|34kf*|1004kf*)
3396             disable mipsdspr2
3397         ;;
3398         74kc)
3399             disable mipsfpu
3400         ;;
3401     esac
3402
3403 elif enabled ppc; then
3404
3405     case $(tolower $cpu) in
3406         601|ppc601|powerpc601)
3407             cpuflags="-mcpu=601"
3408             disable altivec
3409         ;;
3410         603*|ppc603*|powerpc603*)
3411             cpuflags="-mcpu=603"
3412             disable altivec
3413         ;;
3414         604*|ppc604*|powerpc604*)
3415             cpuflags="-mcpu=604"
3416             disable altivec
3417         ;;
3418         g3|75*|ppc75*|powerpc75*)
3419             cpuflags="-mcpu=750"
3420             disable altivec
3421         ;;
3422         g4|745*|ppc745*|powerpc745*)
3423             cpuflags="-mcpu=7450"
3424         ;;
3425         74*|ppc74*|powerpc74*)
3426             cpuflags="-mcpu=7400"
3427         ;;
3428         g5|970|ppc970|powerpc970)
3429             cpuflags="-mcpu=970"
3430         ;;
3431         power[3-7]*)
3432             cpuflags="-mcpu=$cpu"
3433         ;;
3434         cell)
3435             cpuflags="-mcpu=cell"
3436             enable ldbrx
3437         ;;
3438         e500mc)
3439             cpuflags="-mcpu=e500mc"
3440             disable altivec
3441         ;;
3442         e500v2)
3443             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3444             disable altivec
3445         ;;
3446         e500)
3447             cpuflags="-mcpu=8540 -mhard-float"
3448             disable altivec
3449         ;;
3450     esac
3451
3452 elif enabled sparc; then
3453
3454     case $cpu in
3455         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3456             cpuflags="-mcpu=$cpu"
3457             disable vis
3458         ;;
3459         ultrasparc*|niagara[234])
3460             cpuflags="-mcpu=$cpu"
3461         ;;
3462     esac
3463
3464 elif enabled x86; then
3465
3466     case $cpu in
3467         i[345]86|pentium)
3468             cpuflags="-march=$cpu"
3469             disable mmx
3470         ;;
3471         # targets that do NOT support nopl and conditional mov (cmov)
3472         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3473             cpuflags="-march=$cpu"
3474             disable i686
3475         ;;
3476         # targets that do support nopl and conditional mov (cmov)
3477         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*)
3478             cpuflags="-march=$cpu"
3479             enable i686
3480             enable fast_cmov
3481         ;;
3482         # targets that do support conditional mov but on which it's slow
3483         pentium4|pentium4m|prescott|nocona)
3484             cpuflags="-march=$cpu"
3485             enable i686
3486             disable fast_cmov
3487         ;;
3488     esac
3489
3490 fi
3491
3492 if [ "$cpu" != generic ]; then
3493     add_cflags  $cpuflags
3494     add_asflags $cpuflags
3495 fi
3496
3497 # compiler sanity check
3498 check_exec <<EOF
3499 int main(void){ return 0; }
3500 EOF
3501 if test "$?" != 0; then
3502     echo "$cc is unable to create an executable file."
3503     if test -z "$cross_prefix" && ! enabled cross_compile ; then
3504         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3505         echo "Only do this if you know what cross compiling means."
3506     fi
3507     die "C compiler test failed."
3508 fi
3509
3510 add_cppflags -D_ISOC99_SOURCE
3511 add_cxxflags -D__STDC_CONSTANT_MACROS
3512 check_cflags -std=c99
3513 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3514 #include <stdlib.h>
3515 EOF
3516 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3517 #include <stdlib.h>
3518 EOF
3519
3520 check_host_cflags -std=c99
3521 check_host_cflags -Wall
3522
3523 check_64bit(){
3524     arch32=$1
3525     arch64=$2
3526     expr=$3
3527     check_code cc "" "int test[2*($expr) - 1]" &&
3528         subarch=$arch64 || subarch=$arch32
3529 }
3530
3531 case "$arch" in
3532     aarch64|alpha|ia64)
3533         spic=$shared
3534     ;;
3535     mips)
3536         check_64bit mips mips64 '_MIPS_SIM > 1'
3537         spic=$shared
3538     ;;
3539     parisc)
3540         check_64bit parisc parisc64 'sizeof(void *) > 4'
3541         spic=$shared
3542     ;;
3543     ppc)
3544         check_64bit ppc ppc64 'sizeof(void *) > 4'
3545         spic=$shared
3546     ;;
3547     sparc)
3548         check_64bit sparc sparc64 'sizeof(void *) > 4'
3549         spic=$shared
3550     ;;
3551     x86)
3552         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3553         if test "$subarch" = "x86_64"; then
3554             spic=$shared
3555         fi
3556     ;;
3557     ppc)
3558         check_cc <<EOF && subarch="ppc64"
3559         int test[(int)sizeof(char*) - 7];
3560 EOF
3561     ;;
3562 esac
3563
3564 enable $subarch
3565 enabled spic && enable_weak pic
3566
3567 # OS specific
3568 case $target_os in
3569     aix)
3570         SHFLAGS=-shared
3571         add_cppflags '-I\$(SRC_PATH)/compat/aix'
3572         enabled shared && add_ldflags -Wl,-brtl
3573         ;;
3574     haiku)
3575         prefix_default="/boot/common"
3576         network_extralibs="-lnetwork"
3577         host_libs=
3578         ;;
3579     sunos)
3580         SHFLAGS='-shared -Wl,-h,$$(@F)'
3581         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3582         network_extralibs="-lsocket -lnsl"
3583         add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3584         # When using suncc to build, the Solaris linker will mark
3585         # an executable with each instruction set encountered by
3586         # the Solaris assembler.  As our libraries contain their own
3587         # guards for processor-specific code, instead suppress
3588         # generation of the HWCAPS ELF section on Solaris x86 only.
3589         enabled_all suncc x86 &&
3590             echo "hwcap_1 = OVERRIDE;" > mapfile &&
3591             add_ldflags -Wl,-M,mapfile
3592         nm_default='nm -P -g'
3593         ;;
3594     netbsd)
3595         disable symver
3596         oss_indev_extralibs="-lossaudio"
3597         oss_outdev_extralibs="-lossaudio"
3598         enabled gcc || check_ldflags -Wl,-zmuldefs
3599         ;;
3600     openbsd|bitrig)
3601         disable symver
3602         SHFLAGS='-shared'
3603         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3604         SLIB_INSTALL_LINKS=
3605         oss_indev_extralibs="-lossaudio"
3606         oss_outdev_extralibs="-lossaudio"
3607         ;;
3608     dragonfly)
3609         disable symver
3610         ;;
3611     freebsd)
3612         ;;
3613     bsd/os)
3614         add_extralibs -lpoll -lgnugetopt
3615         strip="strip -d"
3616         ;;
3617     darwin)
3618         gas="gas-preprocessor.pl $cc"
3619         enabled ppc && add_asflags -force_cpusubtype_ALL
3620         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3621         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3622         strip="${strip} -x"
3623         add_ldflags -Wl,-dynamic,-search_paths_first
3624         SLIBSUF=".dylib"
3625         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3626         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3627         objformat="macho"
3628         enabled x86_64 && objformat="macho64"
3629         enabled_any pic shared ||
3630             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3631         ;;
3632     mingw32*)
3633         if test $target_os = "mingw32ce"; then
3634             disable network
3635         else
3636             target_os=mingw32
3637         fi
3638         LIBTARGET=i386
3639         if enabled x86_64; then
3640             LIBTARGET="i386:x86-64"
3641         elif enabled arm; then
3642             LIBTARGET=arm-wince
3643         fi
3644         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
3645         check_ldflags -Wl,--nxcompat
3646         check_ldflags -Wl,--dynamicbase
3647         shlibdir_default="$bindir_default"
3648         SLIBPREF=""
3649         SLIBSUF=".dll"
3650         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3651         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3652         dlltool="${cross_prefix}dlltool"
3653         if check_cmd lib.exe -list; then
3654             SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3655             if enabled x86_64; then
3656                 LIBTARGET=x64
3657             fi
3658         elif check_cmd $dlltool --version; then
3659             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)'
3660         fi
3661         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3662         SLIB_INSTALL_LINKS=
3663         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3664         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3665         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'
3666         objformat="win32"
3667         ranlib=:
3668         enable dos_paths
3669         ;;
3670     win32|win64)
3671         disable symver
3672         if enabled shared; then
3673             # Link to the import library instead of the normal static library
3674             # for shared libs.
3675             LD_LIB='%.lib'
3676             # Cannot build both shared and static libs with MSVC or icl.
3677             disable static
3678         fi
3679         shlibdir_default="$bindir_default"
3680         SLIBPREF=""
3681         SLIBSUF=".dll"
3682         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3683         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3684         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3685         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3686         SLIB_INSTALL_LINKS=
3687         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3688         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3689         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3690         objformat="win32"
3691         ranlib=:
3692         enable dos_paths
3693         ;;
3694     cygwin*)
3695         target_os=cygwin
3696         shlibdir_default="$bindir_default"
3697         SLIBPREF="cyg"
3698         SLIBSUF=".dll"
3699         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3700         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3701         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3702         SLIB_INSTALL_LINKS=
3703         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3704         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3705         objformat="win32"
3706         enable dos_paths
3707         enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres
3708         ;;
3709     *-dos|freedos|opendos)
3710         network_extralibs="-lsocket"
3711         objformat="coff"
3712         enable dos_paths
3713         add_cppflags -U__STRICT_ANSI__
3714         ;;
3715     linux)
3716         enable dv1394
3717         ;;
3718     irix*)
3719         target_os=irix
3720         ranlib="echo ignoring ranlib"
3721         ;;
3722     os/2*)
3723         strip="lxlite -CS"
3724         ln_s="cp -f"
3725         objformat="aout"
3726         add_cppflags -D_GNU_SOURCE
3727         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3728         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3729         LIBSUF="_s.a"
3730         SLIBPREF=""
3731         SLIBSUF=".dll"
3732         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3733         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3734         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3735             echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3736             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3737             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3738             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3739             emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3740         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3741             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3742         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3743         enable dos_paths
3744         enable_weak os2threads
3745         ;;
3746     gnu/kfreebsd)
3747         add_cppflags -D_BSD_SOURCE
3748         ;;
3749     gnu)
3750         ;;
3751     qnx)
3752         add_cppflags -D_QNX_SOURCE
3753         network_extralibs="-lsocket"
3754         ;;
3755     symbian)
3756         SLIBSUF=".dll"
3757         enable dos_paths
3758         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3759         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3760         add_ldflags -Wl,--target1-abs,--no-undefined \
3761                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3762                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3763         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3764                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3765                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3766         ;;
3767     osf1)
3768         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3769         ;;
3770     minix)
3771         ;;
3772     plan9)
3773         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
3774                      -D_REENTRANT_SOURCE        \
3775                      -D_RESEARCH_SOURCE         \
3776                      -DFD_SETSIZE=96            \
3777                      -DHAVE_SOCK_OPTS
3778         add_compat strtod.o strtod=avpriv_strtod
3779         network_extralibs='-lbsd'
3780         exeobjs=compat/plan9/main.o
3781         disable ffserver
3782         cp_f='cp'
3783         ;;
3784     none)
3785         ;;
3786     *)
3787         die "Unknown OS '$target_os'."
3788         ;;
3789 esac
3790
3791 # determine libc flavour
3792
3793 # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3794 if check_cpp_condition features.h "defined __UCLIBC__"; then
3795     libc_type=uclibc
3796     add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3797 elif check_cpp_condition features.h "defined __GLIBC__"; then
3798     libc_type=glibc
3799     add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3800 # MinGW headers can be installed on Cygwin, so check for newlib first.
3801 elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3802     libc_type=newlib
3803     add_cppflags -U__STRICT_ANSI__
3804 elif check_header _mingw.h; then
3805     libc_type=mingw
3806     check_cpp_condition _mingw.h \
3807         "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
3808             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3809         die "ERROR: MinGW runtime version must be >= 3.15."
3810     add_cppflags -U__STRICT_ANSI__
3811     if check_cpp_condition _mingw.h "defined(__MINGW64_VERSION_MAJOR) && \
3812             __MINGW64_VERSION_MAJOR < 3"; then
3813         add_compat msvcrt/snprintf.o
3814         add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
3815     else
3816         add_cppflags -D__USE_MINGW_ANSI_STDIO=1
3817     fi
3818 elif check_cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
3819     libc_type=msvcrt
3820     add_compat strtod.o strtod=avpriv_strtod
3821     add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
3822                                  _snprintf=avpriv_snprintf  \
3823                                  vsnprintf=avpriv_vsnprintf
3824     # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
3825     # 0x601 by default unless something else is set by the user.
3826     # This can easily lead to us detecting functions only present
3827     # in such new versions and producing binaries requiring windows 7.0.
3828     # Therefore explicitly set the default to XP unless the user has
3829     # set something else on the command line.
3830     check_cpp_condition stdlib.h "defined(_WIN32_WINNT)" || add_cppflags -D_WIN32_WINNT=0x0502
3831 elif check_cpp_condition stddef.h "defined __KLIBC__"; then
3832     libc_type=klibc
3833 elif check_cpp_condition sys/cdefs.h "defined __BIONIC__"; then
3834     libc_type=bionic
3835     add_compat strtod.o strtod=avpriv_strtod
3836 fi
3837
3838 test -n "$libc_type" && enable $libc_type
3839
3840 # hacks for compiler/libc/os combinations
3841
3842 if enabled_all tms470 glibc; then
3843     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3844     add_cppflags -D__USER_LABEL_PREFIX__=
3845     add_cppflags -D__builtin_memset=memset
3846     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3847     add_cflags   -pds=48    # incompatible redefinition of macro
3848 fi
3849
3850 if enabled_all ccc glibc; then
3851     add_ldflags -Wl,-z,now  # calls to libots crash without this
3852 fi
3853
3854 esc(){
3855     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3856 }
3857
3858 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
3859
3860 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3861
3862 set_default $PATHS_LIST
3863 set_default nm
3864
3865 # we need to build at least one lib type
3866 if ! enabled_any static shared; then
3867     cat <<EOF
3868 At least one library type must be built.
3869 Specify --enable-static to build the static libraries or --enable-shared to
3870 build the shared libraries as well. To only build the shared libraries specify
3871 --disable-static in addition to --enable-shared.
3872 EOF
3873     exit 1;
3874 fi
3875
3876 # backward compatibility layer for incompatible_libav/fork_abi
3877 enabled incompatible_fork_abi  && enable incompatible_libav_abi
3878 enabled incompatible_libav_abi && enable incompatible_fork_abi
3879
3880 die_license_disabled() {
3881     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3882 }
3883
3884 die_license_disabled_gpl() {
3885     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
3886 }
3887
3888 die_license_disabled gpl frei0r
3889 die_license_disabled gpl libcdio
3890 die_license_disabled gpl libutvideo
3891 die_license_disabled gpl libvidstab
3892 die_license_disabled gpl libx264
3893 die_license_disabled gpl libxavs
3894 die_license_disabled gpl libxvid
3895 die_license_disabled gpl libzvbi
3896 die_license_disabled gpl x11grab
3897
3898 die_license_disabled nonfree libaacplus
3899 die_license_disabled nonfree libfaac
3900 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
3901 enabled gpl && die_license_disabled_gpl nonfree openssl
3902
3903 die_license_disabled version3 libopencore_amrnb
3904 die_license_disabled version3 libopencore_amrwb
3905 die_license_disabled version3 libvo_aacenc
3906 die_license_disabled version3 libvo_amrwbenc
3907
3908 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3909
3910 disabled optimizations || check_cflags -fomit-frame-pointer
3911
3912 enable_weak_pic() {
3913     disabled pic && return
3914     enable pic
3915     add_cppflags -DPIC
3916     case "$target_os" in
3917     mingw*|cygwin*)
3918         ;;
3919     *)
3920         add_cflags -fPIC
3921         ;;
3922     esac
3923     add_asflags  -fPIC
3924 }
3925
3926 enabled pic && enable_weak_pic
3927
3928 check_cc <<EOF || die "Symbol mangling check failed."
3929 int ff_extern;
3930 EOF
3931 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3932 extern_prefix=${sym%%ff_extern*}
3933
3934 check_cc <<EOF && enable_weak inline_asm
3935 void foo(void) { __asm__ volatile ("" ::); }
3936 EOF
3937
3938 _restrict=
3939 for restrict_keyword in restrict __restrict__ __restrict; do
3940     check_cc <<EOF && _restrict=$restrict_keyword && break
3941 void foo(char * $restrict_keyword p);
3942 EOF
3943 done
3944
3945 check_cc <<EOF && enable pragma_deprecated
3946 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
3947 EOF
3948
3949 check_cc <<EOF && enable attribute_packed
3950 struct { int x; } __attribute__((packed)) x;
3951 EOF
3952
3953 check_cc <<EOF && enable attribute_may_alias
3954 union { int x; } __attribute__((may_alias)) x;
3955 EOF
3956
3957 check_cc <<EOF || die "endian test failed"
3958 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3959 EOF
3960 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3961
3962 check_inline_asm inline_asm_labels '"1:\n"'
3963
3964 if enabled alpha; then
3965
3966     check_cflags -mieee
3967
3968 elif enabled arm; then
3969
3970     check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
3971 float func(float a, float b){ return a+b; }
3972 EOF
3973
3974     enabled thumb && check_cflags -mthumb || check_cflags -marm
3975     nogas=die
3976
3977     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3978         enable vfp_args
3979     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3980         case "${cross_prefix:-$cc}" in
3981             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
3982             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3983 __asm__ (".eabi_attribute 28, 1");
3984 int main(void) { return 0; }
3985 EOF
3986         esac
3987         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3988     fi
3989
3990     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
3991     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
3992     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
3993     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
3994     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
3995     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
3996
3997     [ $target_os = linux ] ||
3998         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
3999             $ARCH_EXT_LIST_ARM
4000
4001     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4002     check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
4003
4004     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4005
4006 elif enabled mips; then
4007
4008     check_inline_asm loongson '"dmult.g $1, $2, $3"'
4009     enabled mips32r2  && add_cflags "-mips32r2" && add_asflags "-mips32r2" &&
4010      check_inline_asm mips32r2  '"rotr $t0, $t1, 1"'
4011     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
4012      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
4013     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
4014      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
4015     enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
4016      check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
4017
4018 elif enabled parisc; then
4019
4020     if enabled gcc; then
4021         case $($cc -dumpversion) in
4022             4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
4023         esac
4024     fi
4025
4026 elif enabled ppc; then
4027
4028     enable local_aligned_8 local_aligned_16
4029
4030     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
4031     check_inline_asm ibm_asm   '"add 0, 0, 0"'
4032     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
4033     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4034
4035     # AltiVec flags: The FSF version of GCC differs from the Apple version
4036     if enabled altivec; then
4037         if ! enabled_any pic ppc64; then
4038             nogas=warn
4039         fi
4040         check_cflags -maltivec -mabi=altivec &&
4041         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||