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