lavu: add snprintf(), vsnprint() and strtod() replacements for MS runtime.
[ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
31     export FF_CONF_EXEC
32     if test "0$FF_CONF_EXEC" -lt 1; then
33         FF_CONF_EXEC=1
34         try_exec bash "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 2; then
37         FF_CONF_EXEC=2
38         try_exec ksh "$0" "$@"
39     fi
40     if test "0$FF_CONF_EXEC" -lt 3; then
41         FF_CONF_EXEC=3
42         try_exec /usr/xpg4/bin/sh "$0" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
47     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48     echo "Instead, install a working POSIX-compatible shell."
49     echo "Disabling this configure test will create a broken FFmpeg."
50     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51         echo "This bash version ($BASH_VERSION) is broken on your platform."
52         echo "Upgrade to a later version if available."
53     fi
54     exit 1
55 fi
56
57 show_help(){
58 cat <<EOF
59 Usage: configure [options]
60 Options: [defaults in brackets after descriptions]
61
62 Help options:
63   --help                   print this message
64   --list-decoders          show all available decoders
65   --list-encoders          show all available encoders
66   --list-hwaccels          show all available hardware accelerators
67   --list-demuxers          show all available demuxers
68   --list-muxers            show all available muxers
69   --list-parsers           show all available parsers
70   --list-protocols         show all available protocols
71   --list-bsfs              show all available bitstream filters
72   --list-indevs            show all available input devices
73   --list-outdevs           show all available output devices
74   --list-filters           show all available filters
75
76 Standard options:
77   --logfile=FILE           log tests and output to FILE [config.log]
78   --disable-logging        do not log configure debug information
79   --prefix=PREFIX          install in PREFIX [$prefix]
80   --bindir=DIR             install binaries in DIR [PREFIX/bin]
81   --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
82   --libdir=DIR             install libs in DIR [PREFIX/lib]
83   --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
84   --incdir=DIR             install includes in DIR [PREFIX/include]
85   --mandir=DIR             install man page in DIR [PREFIX/share/man]
86
87 Licensing options:
88   --enable-gpl             allow use of GPL code, the resulting libs
89                            and binaries will be under GPL [no]
90   --enable-version3        upgrade (L)GPL to version 3 [no]
91   --enable-nonfree         allow use of nonfree code, the resulting libs
92                            and binaries will be unredistributable [no]
93
94 Configuration options:
95   --disable-static         do not build static libraries [no]
96   --enable-shared          build shared libraries [no]
97   --enable-small           optimize for size instead of speed
98   --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
99   --enable-gray            enable full grayscale support (slower color)
100   --disable-swscale-alpha  disable alpha channel support in swscale
101
102 Documentation options:
103   --disable-doc            do not build documentation
104   --disable-htmlpages      do not build HTML documentation pages
105   --disable-manpages       do not build man documentation pages
106   --disable-podpages       do not build POD documentation pages
107   --disable-txtpages       do not build text documentation pages
108
109 Component options:
110   --disable-ffmpeg         disable ffmpeg build
111   --disable-ffplay         disable ffplay build
112   --disable-ffprobe        disable ffprobe build
113   --disable-ffserver       disable ffserver build
114   --disable-avdevice       disable libavdevice build
115   --disable-avcodec        disable libavcodec build
116   --disable-avformat       disable libavformat build
117   --disable-swresample     disable libswresample build
118   --disable-swscale        disable libswscale build
119   --disable-postproc       disable libpostproc build
120   --disable-avfilter       disable libavfilter build
121   --enable-avresample      enable libavresample build [no]
122   --disable-pthreads       disable pthreads [auto]
123   --disable-w32threads     disable Win32 threads [auto]
124   --disable-os2threads     disable OS/2 threads [auto]
125   --enable-x11grab         enable X11 grabbing [no]
126   --disable-network        disable network support [no]
127   --disable-dct            disable DCT code
128   --disable-dwt            disable DWT code
129   --disable-lsp            disable LSP code
130   --disable-mdct           disable MDCT code
131   --disable-rdft           disable RDFT code
132   --disable-fft            disable FFT code
133   --enable-dxva2           enable DXVA2 code
134   --enable-vaapi           enable VAAPI code [autodetect]
135   --enable-vda             enable VDA code   [autodetect]
136   --enable-vdpau           enable VDPAU code [autodetect]
137
138 Individual component options:
139   --disable-everything     disable all components listed below
140   --disable-encoder=NAME   disable encoder NAME
141   --enable-encoder=NAME    enable encoder NAME
142   --disable-encoders       disable all encoders
143   --disable-decoder=NAME   disable decoder NAME
144   --enable-decoder=NAME    enable decoder NAME
145   --disable-decoders       disable all decoders
146   --disable-hwaccel=NAME   disable hwaccel NAME
147   --enable-hwaccel=NAME    enable hwaccel NAME
148   --disable-hwaccels       disable all hwaccels
149   --disable-muxer=NAME     disable muxer NAME
150   --enable-muxer=NAME      enable muxer NAME
151   --disable-muxers         disable all muxers
152   --disable-demuxer=NAME   disable demuxer NAME
153   --enable-demuxer=NAME    enable demuxer NAME
154   --disable-demuxers       disable all demuxers
155   --enable-parser=NAME     enable parser NAME
156   --disable-parser=NAME    disable parser NAME
157   --disable-parsers        disable all parsers
158   --enable-bsf=NAME        enable bitstream filter NAME
159   --disable-bsf=NAME       disable bitstream filter NAME
160   --disable-bsfs           disable all bitstream filters
161   --enable-protocol=NAME   enable protocol NAME
162   --disable-protocol=NAME  disable protocol NAME
163   --disable-protocols      disable all protocols
164   --enable-indev=NAME      enable input device NAME
165   --disable-indev=NAME     disable input device NAME
166   --disable-indevs         disable input devices
167   --enable-outdev=NAME     enable output device NAME
168   --disable-outdev=NAME    disable output device NAME
169   --disable-outdevs        disable output devices
170   --disable-devices        disable all devices
171   --enable-filter=NAME     enable filter NAME
172   --disable-filter=NAME    disable filter NAME
173   --disable-filters        disable all filters
174
175 External library support:
176   --enable-avisynth        enable reading of AVISynth script files [no]
177   --enable-bzlib           enable bzlib [autodetect]
178   --enable-fontconfig      enable fontconfig
179   --enable-frei0r          enable frei0r video filtering
180   --enable-gnutls          enable gnutls [no]
181   --enable-libaacplus      enable AAC+ encoding via libaacplus [no]
182   --enable-libass          enable libass subtitles rendering [no]
183   --enable-libbluray       enable BluRay reading using libbluray [no]
184   --enable-libcaca         enable textual display using libcaca
185   --enable-libcelt         enable CELT decoding via libcelt [no]
186   --enable-libcdio         enable audio CD grabbing with libcdio
187   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
188                            and libraw1394 [no]
189   --enable-libfaac         enable AAC encoding via libfaac [no]
190   --enable-libfdk-aac      enable AAC encoding via libfdk-aac [no]
191   --enable-libflite        enable flite (voice synthesis) support via libflite [no]
192   --enable-libfreetype     enable libfreetype [no]
193   --enable-libgsm          enable GSM de/encoding via libgsm [no]
194   --enable-libiec61883     enable iec61883 via libiec61883 [no]
195   --enable-libilbc         enable iLBC de/encoding via libilbc [no]
196   --enable-libmodplug      enable ModPlug via libmodplug [no]
197   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
198   --enable-libnut          enable NUT (de)muxing via libnut,
199                            native (de)muxer exists [no]
200   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
201   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
202   --enable-libopencv       enable video filtering via libopencv [no]
203   --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
204   --enable-libopus         enable Opus decoding via libopus [no]
205   --enable-libpulse        enable Pulseaudio input via libpulse [no]
206   --enable-librtmp         enable RTMP[E] support via librtmp [no]
207   --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
208   --enable-libspeex        enable Speex de/encoding via libspeex [no]
209   --enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]
210   --enable-libtheora       enable Theora encoding via libtheora [no]
211   --enable-libtwolame      enable MP2 encoding via libtwolame [no]
212   --enable-libutvideo      enable Ut Video encoding and decoding via libutvideo [no]
213   --enable-libv4l2         enable libv4l2/v4l-utils [no]
214   --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
215   --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
216   --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
217                            native implementation exists [no]
218   --enable-libvpx          enable VP8 de/encoding via libvpx [no]
219   --enable-libx264         enable H.264 encoding via x264 [no]
220   --enable-libxavs         enable AVS encoding via xavs [no]
221   --enable-libxvid         enable Xvid encoding via xvidcore,
222                            native MPEG-4/Xvid encoder exists [no]
223   --enable-openal          enable OpenAL 1.1 capture support [no]
224   --enable-openssl         enable openssl [no]
225   --enable-zlib            enable zlib [autodetect]
226
227 Advanced options (experts only):
228   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
229   --enable-cross-compile   assume a cross-compiler is used
230   --sysroot=PATH           root of cross-build tree
231   --sysinclude=PATH        location of cross-build system headers
232   --target-os=OS           compiler targets OS [$target_os]
233   --target-exec=CMD        command to run executables on target
234   --target-path=DIR        path to view of build directory on target
235   --nm=NM                  use nm tool NM [$nm_default]
236   --ar=AR                  use archive tool AR [$ar_default]
237   --as=AS                  use assembler AS [$as_default]
238   --yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]
239   --cc=CC                  use C compiler CC [$cc_default]
240   --cxx=CXX                use C compiler CXX [$cxx_default]
241   --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
242   --ld=LD                  use linker LD [$ld_default]
243   --host-cc=HOSTCC         use host C compiler HOSTCC
244   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
245   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
246   --host-libs=HLIBS        use libs HLIBS when linking for host
247   --host-os=OS             compiler host OS [$target_os]
248   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
249   --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
250   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
251   --extra-libs=ELIBS       add ELIBS [$ELIBS]
252   --extra-version=STRING   version string suffix []
253   --optflags=OPTFLAGS      override optimization-related compiler flags
254   --build-suffix=SUFFIX    library name suffix []
255   --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
256   --progs-suffix=SUFFIX    program name suffix []
257   --arch=ARCH              select architecture [$arch]
258   --cpu=CPU                select the minimum required CPU (affects
259                            instruction selection, may crash on older CPUs)
260   --enable-pic             build position-independent code
261   --enable-sram            allow use of on-chip SRAM
262   --enable-thumb           compile for Thumb instruction set
263   --disable-symver         disable symbol versioning
264   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
265   --disable-safe-bitstream-reader
266                            disable buffer boundary checking in bitreaders
267                            (faster, but may crash)
268   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
269
270 Optimization options (experts only):
271   --disable-asm            disable all assembler optimizations
272   --disable-altivec        disable AltiVec optimizations
273   --disable-amd3dnow       disable 3DNow! optimizations
274   --disable-amd3dnowext    disable 3DNow! extended optimizations
275   --disable-mmx            disable MMX optimizations
276   --disable-mmxext         disable MMXEXT optimizations
277   --disable-sse            disable SSE optimizations
278   --disable-ssse3          disable SSSE3 optimizations
279   --disable-avx            disable AVX optimizations
280   --disable-fma4           disable FMA4 optimizations
281   --disable-armv5te        disable armv5te optimizations
282   --disable-armv6          disable armv6 optimizations
283   --disable-armv6t2        disable armv6t2 optimizations
284   --disable-armvfp         disable ARM VFP optimizations
285   --disable-mmi            disable MMI optimizations
286   --disable-neon           disable NEON optimizations
287   --disable-vis            disable VIS optimizations
288   --disable-yasm           disable use of yasm assembler
289   --disable-mips32r2       disable MIPS32R2 optimizations
290   --disable-mipsdspr1      disable MIPS DSP ASE R1 optimizations
291   --disable-mipsdspr2      disable MIPS DSP ASE R2 optimizations
292   --disable-mipsfpu        disable floating point MIPS optimizations
293   --disable-fast-unaligned consider unaligned accesses slow
294   --postproc-version=V     build libpostproc version V.
295                            Where V can be '$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO' or 'current'. [$postproc_version_default]
296
297 Developer options (useful when working on FFmpeg itself):
298   --enable-coverage        build with test coverage instrumentation
299   --disable-debug          disable debugging symbols
300   --enable-debug=LEVEL     set the debug level [$debuglevel]
301   --disable-optimizations  disable compiler optimizations
302   --enable-extra-warnings  enable more compiler warnings
303   --disable-stripping      disable stripping of executables and shared libraries
304   --assert-level=level     0(default), 1 or 2, amount of assertion testing,
305                            2 causes a slowdown at runtime.
306   --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
307   --valgrind=VALGRIND      run "make fate" tests through valgrind to detect memory
308                            leaks and errors, using the specified valgrind binary.
309                            Cannot be combined with --target-exec
310   --samples=PATH           location of test samples for FATE, if not set use
311                            \$FATE_SAMPLES at make invocation time.
312   --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
313                            should be used only for debugging purposes)
314   --enable-random          randomly enable/disable components
315   --disable-random
316   --enable-random=LIST     randomly enable/disable specific components or
317   --disable-random=LIST    component groups. LIST is a comma-separated list
318                            of NAME[:PROB] entries where NAME is a component
319                            (group) and PROB the probability associated with
320                            NAME (default 0.5).
321   --random-seed=VALUE      seed value for --enable/disable-random
322
323 NOTE: Object files are built at the place where configure is launched.
324 EOF
325   exit 0
326 }
327
328 quotes='""'
329
330 log(){
331     echo "$@" >> $logfile
332 }
333
334 log_file(){
335     log BEGIN $1
336     pr -n -t $1 >> $logfile
337     log END $1
338 }
339
340 echolog(){
341     log "$@"
342     echo "$@"
343 }
344
345 warn(){
346     log "WARNING: $*"
347     WARNINGS="${WARNINGS}WARNING: $*\n"
348 }
349
350 die(){
351     echolog "$@"
352     cat <<EOF
353
354 If you think configure made a mistake, make sure you are using the latest
355 version from Git.  If the latest version fails, report the problem to the
356 ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
357 EOF
358     if disabled logging; then
359         cat <<EOF
360 Rerun configure with logging enabled (do not use --disable-logging), and
361 include the log this produces with your report.
362 EOF
363     else
364 cat <<EOF
365 Include the log file "$logfile" produced by configure as this will help
366 solving the problem.
367 EOF
368     fi
369     exit 1
370 }
371
372 # Avoid locale weirdness, besides we really just want to translate ASCII.
373 toupper(){
374     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
375 }
376
377 tolower(){
378     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
379 }
380
381 c_escape(){
382     echo "$*" | sed 's/["\\]/\\\0/g'
383 }
384
385 sh_quote(){
386     v=$(echo "$1" | sed "s/'/'\\\\''/g")
387     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
388     echo "$v"
389 }
390
391 cleanws(){
392     echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
393 }
394
395 filter(){
396     pat=$1
397     shift
398     for v; do
399         eval "case $v in $pat) echo $v ;; esac"
400     done
401 }
402
403 filter_out(){
404     pat=$1
405     shift
406     for v; do
407         eval "case $v in $pat) ;; *) echo $v ;; esac"
408     done
409 }
410
411 map(){
412     m=$1
413     shift
414     for v; do eval $m; done
415 }
416
417 set_all(){
418     value=$1
419     shift
420     for var in $*; do
421         eval $var=$value
422     done
423 }
424
425 set_weak(){
426     value=$1
427     shift
428     for var; do
429         eval : \${$var:=$value}
430     done
431 }
432
433 set_safe(){
434     var=$1
435     shift
436     eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
437 }
438
439 get_safe(){
440     eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
441 }
442
443 pushvar(){
444     for var in $*; do
445         eval level=\${${var}_level:=0}
446         eval ${var}_${level}="\$$var"
447         eval ${var}_level=$(($level+1))
448     done
449 }
450
451 popvar(){
452     for var in $*; do
453         eval level=\${${var}_level:-0}
454         test $level = 0 && continue
455         eval level=$(($level-1))
456         eval $var="\${${var}_${level}}"
457         eval ${var}_level=$level
458         eval unset ${var}_${level}
459     done
460 }
461
462 enable(){
463     set_all yes $*
464 }
465
466 disable(){
467     set_all no $*
468 }
469
470 enable_weak(){
471     set_weak yes $*
472 }
473
474 disable_weak(){
475     set_weak no $*
476 }
477
478 enable_safe(){
479     for var; do
480         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
481     done
482 }
483
484 disable_safe(){
485     for var; do
486         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
487     done
488 }
489
490 do_enable_deep(){
491     for var; do
492         enabled $var && continue
493         eval sel="\$${var}_select"
494         eval sgs="\$${var}_suggest"
495         pushvar var sgs
496         enable_deep $sel
497         popvar sgs
498         enable_deep_weak $sgs
499         popvar var
500     done
501 }
502
503 enable_deep(){
504     do_enable_deep $*
505     enable $*
506 }
507
508 enable_deep_weak(){
509     do_enable_deep $*
510     enable_weak $*
511 }
512
513 enabled(){
514     test "${1#!}" = "$1" && op== || op=!=
515     eval test "x\$${1#!}" $op "xyes"
516 }
517
518 disabled(){
519     test "${1#!}" = "$1" && op== || op=!=
520     eval test "x\$${1#!}" $op "xno"
521 }
522
523 enabled_all(){
524     for opt; do
525         enabled $opt || return 1
526     done
527 }
528
529 disabled_all(){
530     for opt; do
531         disabled $opt || return 1
532     done
533 }
534
535 enabled_any(){
536     for opt; do
537         enabled $opt && return 0
538     done
539 }
540
541 disabled_any(){
542     for opt; do
543         disabled $opt && return 0
544     done
545     return 1
546 }
547
548 set_default(){
549     for opt; do
550         eval : \${$opt:=\$${opt}_default}
551     done
552 }
553
554 is_in(){
555     value=$1
556     shift
557     for var in $*; do
558         [ $var = $value ] && return 0
559     done
560     return 1
561 }
562
563 check_deps(){
564     for cfg; do
565         cfg="${cfg#!}"
566         enabled ${cfg}_checking && die "Circular dependency for $cfg."
567         disabled ${cfg}_checking && continue
568         enable ${cfg}_checking
569
570         eval dep_all="\$${cfg}_deps"
571         eval dep_any="\$${cfg}_deps_any"
572         eval dep_sel="\$${cfg}_select"
573         eval dep_sgs="\$${cfg}_suggest"
574         eval dep_ifa="\$${cfg}_if"
575         eval dep_ifn="\$${cfg}_if_any"
576
577         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
578         check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
579         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
580
581         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
582         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
583         enabled_all  $dep_all || disable $cfg
584         enabled_any  $dep_any || disable $cfg
585         disabled_any $dep_sel && disable $cfg
586
587         if enabled $cfg; then
588             eval dep_extralibs="\$${cfg}_extralibs"
589             test -n "$dep_extralibs" && add_extralibs $dep_extralibs
590             enable_deep $dep_sel
591             enable_deep_weak $dep_sgs
592         fi
593
594         disable ${cfg}_checking
595     done
596 }
597
598 print_config_h(){
599     enabled $1 && v=1 || v=0
600     echo "#define $2 $v"
601 }
602
603 print_config_mak(){
604     enabled $1 && v= || v=!
605     echo "$v$2=yes"
606 }
607
608 print_config_asm(){
609     enabled $1 && v=1 || v=0
610     echo "%define $2 $v"
611 }
612
613 print_config(){
614     pfx=$1
615     files=$2
616     shift 2
617     for cfg; do
618         ucname="$(toupper $cfg)"
619         for f in $files; do
620             "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
621         done
622     done
623 }
624
625 print_enabled(){
626     test "$1" = -n && end=" " && shift || end="\n"
627     suf=$1
628     shift
629     for v; do
630         enabled $v && printf "%s$end" ${v%$suf};
631     done
632 }
633
634 append(){
635     var=$1
636     shift
637     eval "$var=\"\$$var $*\""
638 }
639
640 prepend(){
641     var=$1
642     shift
643     eval "$var=\"$* \$$var\""
644 }
645
646 add_cppflags(){
647     append CPPFLAGS "$@"
648 }
649
650 add_cflags(){
651     append CFLAGS $($cflags_filter "$@")
652 }
653
654 add_cxxflags(){
655     append CXXFLAGS $($cflags_filter "$@")
656 }
657
658 add_asflags(){
659     append ASFLAGS $($asflags_filter "$@")
660 }
661
662 add_ldflags(){
663     append LDFLAGS $($ldflags_filter "$@")
664 }
665
666 add_extralibs(){
667     prepend extralibs $($ldflags_filter "$@")
668 }
669
670 add_host_cflags(){
671     append host_cflags $($host_cflags_filter "$@")
672 }
673
674 add_host_ldflags(){
675     append host_ldflags $($host_ldflags_filter "$@")
676 }
677
678 check_cmd(){
679     log "$@"
680     "$@" >> $logfile 2>&1
681 }
682
683 cc_o(){
684     eval printf '%s\\n' $CC_O
685 }
686
687 cc_e(){
688     eval printf '%s\\n' $CC_E
689 }
690
691 check_cc(){
692     log check_cc "$@"
693     cat > $TMPC
694     log_file $TMPC
695     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
696 }
697
698 check_cxx(){
699     log check_cxx "$@"
700     cat > $TMPCPP
701     log_file $TMPCPP
702     check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
703 }
704
705 check_cpp(){
706     log check_cpp "$@"
707     cat > $TMPC
708     log_file $TMPC
709     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
710 }
711
712 as_o(){
713     eval printf '%s\\n' $AS_O
714 }
715
716 check_as(){
717     log check_as "$@"
718     cat > $TMPC
719     log_file $TMPC
720     check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPC
721 }
722
723 check_inline_asm(){
724     log check_inline_asm "$@"
725     name="$1"
726     code="$2"
727     shift 2
728     disable $name
729     check_as "$@" <<EOF && enable $name
730 void foo(void){ __asm__ volatile($code); }
731 EOF
732 }
733
734 check_yasm(){
735     log check_yasm "$@"
736     echo "$1" > $TMPS
737     log_file $TMPS
738     shift 1
739     check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
740 }
741
742 ld_o(){
743     eval printf '%s\\n' $LD_O
744 }
745
746 check_ld(){
747     log check_ld "$@"
748     type=$1
749     shift 1
750     flags=''
751     libs=''
752     for f; do
753         test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
754     done
755     check_$type $($cflags_filter $flags) || return
756     flags=$($ldflags_filter $flags)
757     libs=$($ldflags_filter $libs)
758     check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
759 }
760
761 check_code(){
762     log check_code "$@"
763     check=$1
764     headers=$2
765     code=$3
766     shift 3
767     {
768         for hdr in $headers; do
769             echo "#include <$hdr>"
770         done
771         echo "int main(void) { $code; return 0; }"
772     } | check_$check "$@"
773 }
774
775 check_cppflags(){
776     log check_cppflags "$@"
777     check_cc "$@" <<EOF && append CPPFLAGS "$@"
778 int x;
779 EOF
780 }
781
782 check_cflags(){
783     log check_cflags "$@"
784     set -- $($cflags_filter "$@")
785     check_cc "$@" <<EOF && append CFLAGS "$@"
786 int x;
787 EOF
788 }
789
790 check_cxxflags(){
791     log check_cxxflags "$@"
792     set -- $($cflags_filter "$@")
793     check_cxx "$@" <<EOF && append CXXFLAGS "$@"
794 int x;
795 EOF
796 }
797
798 test_ldflags(){
799     log test_ldflags "$@"
800     check_ld "cc" "$@" <<EOF
801 int main(void){ return 0; }
802 EOF
803 }
804
805 check_ldflags(){
806     log check_ldflags "$@"
807     test_ldflags "$@" && add_ldflags "$@"
808 }
809
810 check_header(){
811     log check_header "$@"
812     header=$1
813     shift
814     disable_safe $header
815     check_cpp "$@" <<EOF && enable_safe $header
816 #include <$header>
817 int x;
818 EOF
819 }
820
821 check_func(){
822     log check_func "$@"
823     func=$1
824     shift
825     disable $func
826     check_ld "cc" "$@" <<EOF && enable $func
827 extern int $func();
828 int main(void){ $func(); }
829 EOF
830 }
831
832 check_mathfunc(){
833     log check_mathfunc "$@"
834     func=$1
835     shift
836     disable $func
837     check_ld "cc" "$@" <<EOF && enable $func
838 #include <math.h>
839 float foo(float f) { return $func(f); }
840 int main(void){ return (int) foo; }
841 EOF
842 }
843
844 check_func_headers(){
845     log check_func_headers "$@"
846     headers=$1
847     funcs=$2
848     shift 2
849     {
850         for hdr in $headers; do
851             echo "#include <$hdr>"
852         done
853         for func in $funcs; do
854             echo "long check_$func(void) { return (long) $func; }"
855         done
856         echo "int main(void) { return 0; }"
857     } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
858 }
859
860 check_class_headers_cpp(){
861     log check_class_headers_cpp "$@"
862     headers=$1
863     classes=$2
864     shift 2
865     {
866         for hdr in $headers; do
867             echo "#include <$hdr>"
868         done
869         echo "int main(void) { "
870         i=1
871         for class in $classes; do
872             echo "$class obj$i;"
873             i=$(expr $i + 1)
874         done
875         echo "return 0; }"
876     } | check_ld "cxx" "$@" && enable $funcs && enable_safe $headers
877 }
878
879 check_cpp_condition(){
880     log check_cpp_condition "$@"
881     header=$1
882     condition=$2
883     shift 2
884     check_cpp "$@" <<EOF
885 #include <$header>
886 #if !($condition)
887 #error "unsatisfied condition: $condition"
888 #endif
889 EOF
890 }
891
892 check_lib(){
893     log check_lib "$@"
894     header="$1"
895     func="$2"
896     shift 2
897     check_header $header && check_func $func "$@" && add_extralibs "$@"
898 }
899
900 check_lib2(){
901     log check_lib2 "$@"
902     headers="$1"
903     funcs="$2"
904     shift 2
905     check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
906 }
907
908 check_lib_cpp(){
909     log check_lib_cpp "$@"
910     headers="$1"
911     classes="$2"
912     shift 2
913     check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
914 }
915
916 check_pkg_config(){
917     log check_pkg_config "$@"
918     pkg="$1"
919     headers="$2"
920     funcs="$3"
921     shift 3
922     $pkg_config --exists $pkg 2>/dev/null || return
923     pkg_cflags=$($pkg_config --cflags $pkg)
924     pkg_libs=$($pkg_config --libs $pkg)
925     check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
926         set_safe ${pkg}_cflags $pkg_cflags   &&
927         set_safe ${pkg}_libs   $pkg_libs
928 }
929
930 check_exec(){
931     check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
932 }
933
934 check_exec_crash(){
935     code=$(cat)
936
937     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
938     # are safe but may not be available everywhere.  Thus we use
939     # raise(SIGTERM) instead.  The check is run in a subshell so we
940     # can redirect the "Terminated" message from the shell.  SIGBUS
941     # is not defined by standard C so it is used conditionally.
942
943     (check_exec "$@") >> $logfile 2>&1 <<EOF
944 #include <signal.h>
945 static void sighandler(int sig){
946     raise(SIGTERM);
947 }
948 int func(void){
949     $code
950 }
951 int (*func_ptr)(void) = func;
952 int main(void){
953     signal(SIGILL, sighandler);
954     signal(SIGFPE, sighandler);
955     signal(SIGSEGV, sighandler);
956 #ifdef SIGBUS
957     signal(SIGBUS, sighandler);
958 #endif
959     return func_ptr();
960 }
961 EOF
962 }
963
964 check_type(){
965     log check_type "$@"
966     headers=$1
967     type=$2
968     shift 2
969     disable_safe "$type"
970     check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
971 }
972
973 check_struct(){
974     log check_type "$@"
975     headers=$1
976     struct=$2
977     member=$3
978     shift 3
979     disable_safe "${struct}_${member}"
980     check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
981         enable_safe "${struct}_${member}"
982 }
983
984 require(){
985     name="$1"
986     header="$2"
987     func="$3"
988     shift 3
989     check_lib $header $func "$@" || die "ERROR: $name not found"
990 }
991
992 require2(){
993     name="$1"
994     headers="$2"
995     func="$3"
996     shift 3
997     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
998 }
999
1000 require_cpp(){
1001     name="$1"
1002     headers="$2"
1003     classes="$3"
1004     shift 3
1005     check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
1006 }
1007
1008 require_pkg_config(){
1009     pkg="$1"
1010     check_pkg_config "$@" || die "ERROR: $pkg not found"
1011     add_cflags    $(get_safe ${pkg}_cflags)
1012     add_extralibs $(get_safe ${pkg}_libs)
1013 }
1014
1015 hostcc_o(){
1016     eval printf '%s\\n' $HOSTCC_O
1017 }
1018
1019 check_host_cc(){
1020     log check_host_cc "$@"
1021     cat > $TMPC
1022     log_file $TMPC
1023     check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1024 }
1025
1026 check_host_cflags(){
1027     log check_host_cflags "$@"
1028     set -- $($host_cflags_filter "$@")
1029     check_host_cc "$@" <<EOF && append host_cflags "$@"
1030 int x;
1031 EOF
1032 }
1033
1034 apply(){
1035     file=$1
1036     shift
1037     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1038 }
1039
1040 cp_if_changed(){
1041     cmp -s "$1" "$2" && echo "$2 is unchanged" && return
1042     mkdir -p "$(dirname $2)"
1043     cp -f "$1" "$2"
1044 }
1045
1046 force_include(){
1047     flag=$(eval printf '%s%s\\n' '$FORCE_INC' $1)
1048     append CFLAGS "$flag"
1049 }
1050
1051 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1052 # system-dependent things.
1053
1054 COMPONENT_LIST="
1055     bsfs
1056     decoders
1057     demuxers
1058     encoders
1059     filters
1060     hwaccels
1061     indevs
1062     muxers
1063     outdevs
1064     parsers
1065     protocols
1066 "
1067
1068 DOCUMENT_LIST="
1069     doc
1070     htmlpages
1071     manpages
1072     podpages
1073     txtpages
1074 "
1075
1076 PROGRAM_LIST="
1077     ffplay
1078     ffprobe
1079     ffserver
1080     ffmpeg
1081 "
1082
1083 CONFIG_LIST="
1084     $COMPONENT_LIST
1085     $DOCUMENT_LIST
1086     $PROGRAM_LIST
1087     avcodec
1088     avdevice
1089     avfilter
1090     avformat
1091     avresample
1092     avisynth
1093     bzlib
1094     crystalhd
1095     dct
1096     dwt
1097     dxva2
1098     fast_unaligned
1099     fft
1100     fontconfig
1101     frei0r
1102     gnutls
1103     gpl
1104     gray
1105     hardcoded_tables
1106     libaacplus
1107     libass
1108     libbluray
1109     libcaca
1110     libcdio
1111     libcelt
1112     libdc1394
1113     libfaac
1114     libfdk_aac
1115     libflite
1116     libfreetype
1117     libgsm
1118     libiec61883
1119     libilbc
1120     libmodplug
1121     libmp3lame
1122     libnut
1123     libopencore_amrnb
1124     libopencore_amrwb
1125     libopencv
1126     libopenjpeg
1127     libopus
1128     libpulse
1129     librtmp
1130     libschroedinger
1131     libspeex
1132     libstagefright_h264
1133     libtheora
1134     libtwolame
1135     libutvideo
1136     libv4l2
1137     libvo_aacenc
1138     libvo_amrwbenc
1139     libvorbis
1140     libvpx
1141     libx264
1142     libxavs
1143     libxvid
1144     lsp
1145     mdct
1146     memalign_hack
1147     memory_poisoning
1148     network
1149     nonfree
1150     openal
1151     openssl
1152     pic
1153     postproc
1154     rdft
1155     runtime_cpudetect
1156     safe_bitstream_reader
1157     shared
1158     small
1159     sram
1160     static
1161     swresample
1162     swscale
1163     swscale_alpha
1164     thumb
1165     vaapi
1166     vda
1167     vdpau
1168     version3
1169     xmm_clobber_test
1170     x11grab
1171     zlib
1172 "
1173
1174 THREADS_LIST='
1175     pthreads
1176     w32threads
1177     os2threads
1178 '
1179
1180 ARCH_LIST='
1181     alpha
1182     arm
1183     avr32
1184     avr32_ap
1185     avr32_uc
1186     bfin
1187     ia64
1188     m68k
1189     mips
1190     mips64
1191     parisc
1192     ppc
1193     ppc64
1194     s390
1195     sh4
1196     sparc
1197     sparc64
1198     tomi
1199     x86
1200     x86_32
1201     x86_64
1202 '
1203
1204 ARCH_EXT_LIST='
1205     altivec
1206     amd3dnow
1207     amd3dnowext
1208     armv5te
1209     armv6
1210     armv6t2
1211     armvfp
1212     avx
1213     fma4
1214     mmi
1215     mmx
1216     mmxext
1217     neon
1218     ppc4xx
1219     sse
1220     ssse3
1221     vfpv3
1222     vis
1223     mipsfpu
1224     mips32r2
1225     mipsdspr1
1226     mipsdspr2
1227 '
1228
1229 HAVE_LIST_PUB='
1230     bigendian
1231     fast_unaligned
1232 '
1233
1234 HAVE_LIST="
1235     $ARCH_EXT_LIST
1236     $HAVE_LIST_PUB
1237     $THREADS_LIST
1238     aligned_malloc
1239     aligned_stack
1240     alsa_asoundlib_h
1241     altivec_h
1242     arpa_inet_h
1243     asm_mod_q
1244     asm_mod_y
1245     asm_types_h
1246     attribute_may_alias
1247     attribute_packed
1248     broken_strtod
1249     cbrtf
1250     clock_gettime
1251     closesocket
1252     cmov
1253     cpuid
1254     cpunop
1255     dcbzl
1256     dev_bktr_ioctl_bt848_h
1257     dev_bktr_ioctl_meteor_h
1258     dev_ic_bt8xx_h
1259     dev_video_bktr_ioctl_bt848_h
1260     dev_video_meteor_ioctl_meteor_h
1261     dlfcn_h
1262     dlopen
1263     dos_paths
1264     dxva_h
1265     ebp_available
1266     ebx_available
1267     exp2
1268     exp2f
1269     fast_64bit
1270     fast_clz
1271     fast_cmov
1272     fcntl
1273     fork
1274     getaddrinfo
1275     gethrtime
1276     getopt
1277     GetProcessAffinityMask
1278     GetProcessMemoryInfo
1279     GetProcessTimes
1280     GetSystemTimeAsFileTime
1281     getrusage
1282     gettimeofday
1283     glob
1284     gnu_as
1285     ibm_asm
1286     inet_aton
1287     inline_asm
1288     isatty
1289     isinf
1290     isnan
1291     jack_port_get_latency_range
1292     kbhit
1293     ldbrx
1294     libdc1394_1
1295     libdc1394_2
1296     llrint
1297     llrintf
1298     local_aligned_16
1299     local_aligned_8
1300     localtime_r
1301     log2
1302     log2f
1303     loongson
1304     lrint
1305     lrintf
1306     lzo1x_999_compress
1307     machine_ioctl_bt848_h
1308     machine_ioctl_meteor_h
1309     makeinfo
1310     malloc_h
1311     MapViewOfFile
1312     memalign
1313     mkstemp
1314     mm_empty
1315     mmap
1316     nanosleep
1317     PeekNamedPipe
1318     perl
1319     pod2man
1320     poll_h
1321     posix_memalign
1322     pthread_cancel
1323     rdtsc
1324     rint
1325     round
1326     roundf
1327     rweflags
1328     sched_getaffinity
1329     sdl
1330     sdl_video_size
1331     setmode
1332     setrlimit
1333     Sleep
1334     sndio_h
1335     snprintf
1336     socklen_t
1337     soundcard_h
1338     strerror_r
1339     strptime
1340     struct_addrinfo
1341     struct_group_source_req
1342     struct_ip_mreq_source
1343     struct_ipv6_mreq
1344     struct_pollfd
1345     struct_rusage_ru_maxrss
1346     struct_sctp_event_subscribe
1347     struct_sockaddr_in6
1348     struct_sockaddr_sa_len
1349     struct_sockaddr_storage
1350     struct_v4l2_frmivalenum_discrete
1351     symver
1352     symver_asm_label
1353     symver_gnu_asm
1354     sysconf
1355     sysctl
1356     sys_mman_h
1357     sys_param_h
1358     sys_resource_h
1359     sys_select_h
1360     sys_soundcard_h
1361     sys_time_h
1362     sys_videoio_h
1363     termios_h
1364     texi2html
1365     threads
1366     trunc
1367     truncf
1368     unistd_h
1369     usleep
1370     vfp_args
1371     VirtualAlloc
1372     windows_h
1373     winsock2_h
1374     xform_asm
1375     xgetbv
1376     xmm_clobbers
1377     yasm
1378 "
1379
1380 # options emitted with CONFIG_ prefix but not available on command line
1381 CONFIG_EXTRA="
1382     aandcttables
1383     ac3dsp
1384     avutil
1385     error_resilience
1386     gcrypt
1387     golomb
1388     gplv3
1389     h264chroma
1390     h264dsp
1391     h264pred
1392     h264qpel
1393     huffman
1394     lgplv3
1395     lpc
1396     mpegaudiodsp
1397     mpegvideo
1398     mpegvideoenc
1399     nettle
1400     rangecoder
1401     rtpdec
1402     sinewin
1403     vp3dsp
1404 "
1405
1406 CMDLINE_SELECT="
1407     $ARCH_EXT_LIST
1408     $CONFIG_LIST
1409     $THREADS_LIST
1410     asm
1411     coverage
1412     cross_compile
1413     debug
1414     extra_warnings
1415     logging
1416     optimizations
1417     stripping
1418     symver
1419     yasm
1420 "
1421
1422 PATHS_LIST='
1423     bindir
1424     datadir
1425     incdir
1426     libdir
1427     mandir
1428     prefix
1429     shlibdir
1430 '
1431
1432 CMDLINE_SET="
1433     $PATHS_LIST
1434     ar
1435     arch
1436     as
1437     assert_level
1438     build_suffix
1439     cc
1440     cpu
1441     cross_prefix
1442     cxx
1443     dep_cc
1444     extra_version
1445     host_cc
1446     host_cflags
1447     host_ldflags
1448     host_libs
1449     host_os
1450     install
1451     ld
1452     logfile
1453     malloc_prefix
1454     nm
1455     optflags
1456     pkg_config
1457     postproc_version
1458     progs_suffix
1459     random_seed
1460     samples
1461     strip
1462     sysinclude
1463     sysroot
1464     target_exec
1465     target_os
1466     target_path
1467     valgrind
1468     yasmexe
1469 "
1470
1471 CMDLINE_APPEND="
1472     extra_cflags
1473     extra_cxxflags
1474 "
1475
1476 # code dependency declarations
1477
1478 # architecture extensions
1479
1480 armv5te_deps="arm"
1481 armv6_deps="arm"
1482 armv6t2_deps="arm"
1483 armvfp_deps="arm"
1484 neon_deps="arm"
1485 vfpv3_deps="armvfp"
1486
1487 mipsfpu_deps="mips"
1488 mips32r2_deps="mips"
1489 mipsdspr1_deps="mips"
1490 mipsdspr2_deps="mips"
1491 mmi_deps="mips"
1492
1493 altivec_deps="ppc"
1494 ppc4xx_deps="ppc"
1495
1496 vis_deps="sparc"
1497
1498 x86_64_suggest="cmov fast_cmov"
1499 amd3dnow_deps="mmx"
1500 amd3dnowext_deps="amd3dnow"
1501 mmx_deps="x86"
1502 mmxext_deps="mmx"
1503 sse_deps="mmx"
1504 ssse3_deps="sse"
1505 avx_deps="ssse3"
1506 fma4_deps="avx"
1507
1508 aligned_stack_if_any="ppc x86"
1509 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1510 fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1511 fast_unaligned_if_any="armv6 ppc x86"
1512
1513 inline_asm_deps="!tms470"
1514 need_memalign="altivec neon sse"
1515
1516 symver_if_any="symver_asm_label symver_gnu_asm"
1517
1518 # subsystems
1519 dct_select="rdft"
1520 mdct_select="fft"
1521 rdft_select="fft"
1522 mpegaudiodsp_select="dct"
1523 mpegvideoenc_select="mpegvideo"
1524
1525 # decoders / encoders / hardware accelerators
1526 aac_decoder_select="mdct sinewin"
1527 aac_encoder_select="mdct sinewin"
1528 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1529 ac3_decoder_select="mdct ac3dsp ac3_parser"
1530 ac3_encoder_select="mdct ac3dsp"
1531 ac3_fixed_encoder_select="mdct ac3dsp"
1532 alac_encoder_select="lpc"
1533 amrnb_decoder_select="lsp"
1534 amrwb_decoder_select="lsp"
1535 amv_encoder_select="aandcttables"
1536 atrac1_decoder_select="mdct sinewin"
1537 atrac3_decoder_select="mdct"
1538 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1539 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1540 cavs_decoder_select="golomb mpegvideo"
1541 cook_decoder_select="mdct sinewin"
1542 cscd_decoder_suggest="zlib"
1543 dca_decoder_select="mdct"
1544 dirac_decoder_select="dwt golomb"
1545 dnxhd_encoder_select="aandcttables mpegvideoenc"
1546 dxa_decoder_select="zlib"
1547 eac3_decoder_select="ac3_decoder"
1548 eac3_encoder_select="ac3_encoder"
1549 eamad_decoder_select="aandcttables error_resilience"
1550 eatgq_decoder_select="aandcttables"
1551 eatqi_decoder_select="aandcttables error_resilience mpegvideo"
1552 exr_decoder_select="zlib"
1553 ffv1_decoder_select="golomb rangecoder"
1554 ffv1_encoder_select="rangecoder"
1555 flac_decoder_select="golomb"
1556 flac_encoder_select="golomb lpc"
1557 flashsv_decoder_select="zlib"
1558 flashsv_encoder_select="zlib"
1559 flashsv2_encoder_select="zlib"
1560 flashsv2_decoder_select="zlib"
1561 flv_decoder_select="h263_decoder"
1562 flv_encoder_select="h263_encoder"
1563 fraps_decoder_select="huffman"
1564 h261_decoder_select="error_resilience mpegvideo"
1565 h261_encoder_select="aandcttables mpegvideoenc"
1566 h263_decoder_select="error_resilience h263_parser mpegvideo"
1567 h263_encoder_select="aandcttables error_resilience mpegvideoenc"
1568 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1569 h263i_decoder_select="h263_decoder"
1570 h263p_encoder_select="h263_encoder"
1571 h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
1572 h264_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
1573 h264_dxva2_hwaccel_deps="dxva2api_h"
1574 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1575 h264_vaapi_hwaccel_select="vaapi h264_decoder"
1576 h264_vda_decoder_select="vda h264_parser h264_decoder"
1577 h264_vda_hwaccel_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1578 h264_vda_hwaccel_select="vda h264_decoder"
1579 h264_vdpau_decoder_select="vdpau h264_decoder"
1580 huffyuv_encoder_select="huffman"
1581 iac_decoder_select="fft mdct sinewin"
1582 imc_decoder_select="fft mdct sinewin"
1583 jpegls_decoder_select="golomb"
1584 jpegls_encoder_select="golomb"
1585 ljpeg_encoder_select="aandcttables mpegvideoenc"
1586 loco_decoder_select="golomb"
1587 mdec_decoder_select="error_resilience mpegvideo"
1588 mjpeg_encoder_select="aandcttables mpegvideoenc"
1589 mlp_decoder_select="mlp_parser"
1590 mp1_decoder_select="mpegaudiodsp"
1591 mp1float_decoder_select="mpegaudiodsp"
1592 mp2_decoder_select="mpegaudiodsp"
1593 mp2float_decoder_select="mpegaudiodsp"
1594 mp3_decoder_select="mpegaudiodsp"
1595 mp3adu_decoder_select="mpegaudiodsp"
1596 mp3adufloat_decoder_select="mpegaudiodsp"
1597 mp3float_decoder_select="mpegaudiodsp"
1598 mp3on4_decoder_select="mpegaudiodsp"
1599 mp3on4float_decoder_select="mpegaudiodsp"
1600 mpc7_decoder_select="mpegaudiodsp"
1601 mpc8_decoder_select="mpegaudiodsp"
1602 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1603 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1604 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1605 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1606 mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder"
1607 mpeg1video_decoder_select="error_resilience mpegvideo"
1608 mpeg1video_encoder_select="aandcttables error_resilience mpegvideoenc"
1609 mpeg2_crystalhd_decoder_select="crystalhd"
1610 mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1611 mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1612 mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder"
1613 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1614 mpeg2video_decoder_select="error_resilience mpegvideo"
1615 mpeg2video_encoder_select="aandcttables error_resilience mpegvideoenc"
1616 mpeg4_crystalhd_decoder_select="crystalhd"
1617 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1618 mpeg4_encoder_select="h263_encoder"
1619 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1620 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1621 msmpeg4_crystalhd_decoder_select="crystalhd"
1622 msmpeg4v1_decoder_select="h263_decoder"
1623 msmpeg4v1_encoder_select="h263_encoder"
1624 msmpeg4v2_decoder_select="h263_decoder"
1625 msmpeg4v2_encoder_select="h263_encoder"
1626 msmpeg4v3_decoder_select="h263_decoder"
1627 msmpeg4v3_encoder_select="h263_encoder"
1628 nellymoser_decoder_select="mdct sinewin"
1629 nellymoser_encoder_select="mdct sinewin"
1630 png_decoder_select="zlib"
1631 png_encoder_select="zlib"
1632 qcelp_decoder_select="lsp"
1633 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1634 ra_144_encoder_select="lpc"
1635 ralf_decoder_select="golomb"
1636 rv10_decoder_select="h263_decoder"
1637 rv10_encoder_select="h263_encoder"
1638 rv20_decoder_select="h263_decoder"
1639 rv20_encoder_select="h263_encoder"
1640 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo"
1641 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo"
1642 shorten_decoder_select="golomb"
1643 sipr_decoder_select="lsp"
1644 snow_decoder_select="dwt rangecoder"
1645 snow_encoder_select="aandcttables dwt error_resilience mpegvideoenc rangecoder"
1646 sonic_decoder_select="golomb"
1647 sonic_encoder_select="golomb"
1648 sonic_ls_encoder_select="golomb"
1649 svq1_decoder_select="error_resilience mpegvideo"
1650 svq1_encoder_select="aandcttables error_resilience mpegvideoenc"
1651 svq3_decoder_select="error_resilience golomb h264chroma h264dsp h264pred h264qpel mpegvideo"
1652 svq3_decoder_suggest="zlib"
1653 theora_decoder_select="vp3_decoder"
1654 tiff_decoder_suggest="zlib"
1655 tiff_encoder_suggest="zlib"
1656 tscc_decoder_select="zlib"
1657 twinvq_decoder_select="mdct lsp sinewin"
1658 vc1_crystalhd_decoder_select="crystalhd"
1659 vc1_decoder_select="h263_decoder h264chroma h264qpel"
1660 vc1_dxva2_hwaccel_deps="dxva2api_h"
1661 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1662 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1663 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1664 vc1image_decoder_select="vc1_decoder"
1665 vorbis_decoder_select="mdct"
1666 vorbis_encoder_select="mdct"
1667 vp3_decoder_select="vp3dsp"
1668 vp5_decoder_select="vp3dsp"
1669 vp6_decoder_select="huffman vp3dsp"
1670 vp6a_decoder_select="vp6_decoder"
1671 vp6f_decoder_select="vp6_decoder"
1672 vp8_decoder_select="h264pred h264qpel"
1673 wmapro_decoder_select="mdct sinewin"
1674 wmav1_decoder_select="mdct sinewin"
1675 wmav1_encoder_select="mdct sinewin"
1676 wmav2_decoder_select="mdct sinewin"
1677 wmav2_encoder_select="mdct sinewin"
1678 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1679 wmv1_decoder_select="h263_decoder"
1680 wmv1_encoder_select="h263_encoder"
1681 wmv2_decoder_select="h263_decoder"
1682 wmv2_encoder_select="h263_encoder"
1683 wmv3_decoder_select="vc1_decoder"
1684 wmv3_crystalhd_decoder_select="crystalhd"
1685 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1686 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1687 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1688 wmv3image_decoder_select="wmv3_decoder"
1689 zerocodec_decoder_select="zlib"
1690 zlib_decoder_select="zlib"
1691 zlib_encoder_select="zlib"
1692 zmbv_decoder_select="zlib"
1693 zmbv_encoder_select="zlib"
1694
1695 crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1696 vaapi_deps="va_va_h"
1697 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1698 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1699
1700 # parsers
1701 h264_parser_select="error_resilience golomb h264dsp h264pred mpegvideo"
1702 mpeg4video_parser_select="error_resilience mpegvideo"
1703 mpegvideo_parser_select="error_resilience mpegvideo"
1704 vc1_parser_select="error_resilience mpegvideo"
1705
1706 # external libraries
1707 libaacplus_encoder_deps="libaacplus"
1708 libcelt_decoder_deps="libcelt"
1709 libfaac_encoder_deps="libfaac"
1710 libfdk_aac_encoder_deps="libfdk_aac"
1711 libgsm_decoder_deps="libgsm"
1712 libgsm_encoder_deps="libgsm"
1713 libgsm_ms_decoder_deps="libgsm"
1714 libgsm_ms_encoder_deps="libgsm"
1715 libilbc_decoder_deps="libilbc"
1716 libilbc_encoder_deps="libilbc"
1717 libmodplug_demuxer_deps="libmodplug"
1718 libmp3lame_encoder_deps="libmp3lame"
1719 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1720 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1721 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1722 libopenjpeg_decoder_deps="libopenjpeg"
1723 libopenjpeg_encoder_deps="libopenjpeg"
1724 libopus_decoder_deps="libopus"
1725 libschroedinger_decoder_deps="libschroedinger"
1726 libschroedinger_encoder_deps="libschroedinger"
1727 libspeex_decoder_deps="libspeex"
1728 libspeex_encoder_deps="libspeex"
1729 libstagefright_h264_decoder_deps="libstagefright_h264"
1730 libtheora_encoder_deps="libtheora"
1731 libtwolame_encoder_deps="libtwolame"
1732 libvo_aacenc_encoder_deps="libvo_aacenc"
1733 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1734 libvorbis_decoder_deps="libvorbis"
1735 libvorbis_encoder_deps="libvorbis"
1736 libvpx_decoder_deps="libvpx"
1737 libvpx_encoder_deps="libvpx"
1738 libx264_encoder_deps="libx264"
1739 libx264rgb_encoder_deps="libx264"
1740 libxavs_encoder_deps="libxavs"
1741 libxvid_encoder_deps="libxvid"
1742 libutvideo_decoder_deps="libutvideo"
1743 libutvideo_encoder_deps="libutvideo"
1744
1745 # demuxers / muxers
1746 ac3_demuxer_select="ac3_parser"
1747 asf_stream_muxer_select="asf_muxer"
1748 avisynth_demuxer_deps="avisynth"
1749 dirac_demuxer_select="dirac_parser"
1750 eac3_demuxer_select="ac3_parser"
1751 flac_demuxer_select="flac_parser"
1752 ipod_muxer_select="mov_muxer"
1753 libnut_demuxer_deps="libnut"
1754 libnut_muxer_deps="libnut"
1755 matroska_audio_muxer_select="matroska_muxer"
1756 matroska_demuxer_suggest="zlib bzlib"
1757 mov_demuxer_suggest="zlib"
1758 mp3_demuxer_select="mpegaudio_parser"
1759 mp4_muxer_select="mov_muxer"
1760 mpegts_muxer_select="adts_muxer latm_muxer mpegvideo"
1761 mpegtsraw_demuxer_select="mpegts_demuxer"
1762 mxf_d10_muxer_select="mxf_muxer"
1763 ogg_demuxer_select="golomb"
1764 psp_muxer_select="mov_muxer"
1765 rtp_demuxer_select="sdp_demuxer"
1766 rtp_muxer_select="mpegvideo"
1767 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1768 rtsp_demuxer_select="http_protocol rtpdec"
1769 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
1770 sap_demuxer_select="sdp_demuxer"
1771 sap_muxer_select="rtp_muxer rtp_protocol"
1772 sdp_demuxer_select="rtpdec"
1773 spdif_muxer_select="aac_parser"
1774 tg2_muxer_select="mov_muxer"
1775 tgp_muxer_select="mov_muxer"
1776 w64_demuxer_deps="wav_demuxer"
1777
1778 # indevs / outdevs
1779 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1780 alsa_outdev_deps="alsa_asoundlib_h"
1781 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1782 caca_outdev_deps="libcaca"
1783 dshow_indev_deps="IBaseFilter"
1784 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
1785 dv1394_indev_deps="dv1394 dv_demuxer"
1786 fbdev_indev_deps="linux_fb_h"
1787 iec61883_indev_deps="libiec61883"
1788 jack_indev_deps="jack_jack_h sem_timedwait"
1789 lavfi_indev_deps="avfilter"
1790 libcdio_indev_deps="libcdio"
1791 libdc1394_indev_deps="libdc1394"
1792 libv4l2_indev_deps="libv4l2"
1793 openal_indev_deps="openal"
1794 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1795 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1796 pulse_indev_deps="libpulse"
1797 sdl_outdev_deps="sdl"
1798 sndio_indev_deps="sndio_h"
1799 sndio_outdev_deps="sndio_h"
1800 v4l_indev_deps="linux_videodev_h"
1801 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1802 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1803 vfwcap_indev_extralibs="-lavicap32"
1804 x11grab_indev_deps="x11grab"
1805
1806 # protocols
1807 bluray_protocol_deps="libbluray"
1808 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
1809 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
1810 ffrtmpcrypt_protocol_select="tcp_protocol"
1811 ffrtmphttp_protocol_deps="!librtmp_protocol"
1812 ffrtmphttp_protocol_select="http_protocol"
1813 gopher_protocol_deps="network"
1814 httpproxy_protocol_deps="network"
1815 httpproxy_protocol_select="tcp_protocol"
1816 http_protocol_deps="network"
1817 http_protocol_select="tcp_protocol"
1818 https_protocol_select="tls_protocol"
1819 librtmp_protocol_deps="librtmp"
1820 librtmpe_protocol_deps="librtmp"
1821 librtmps_protocol_deps="librtmp"
1822 librtmpt_protocol_deps="librtmp"
1823 librtmpte_protocol_deps="librtmp"
1824 mmsh_protocol_select="http_protocol"
1825 mmst_protocol_deps="network"
1826 rtmp_protocol_deps="!librtmp_protocol"
1827 rtmp_protocol_select="tcp_protocol"
1828 rtmpe_protocol_select="ffrtmpcrypt_protocol"
1829 rtmps_protocol_deps="!librtmp_protocol"
1830 rtmps_protocol_select="tls_protocol"
1831 rtmpt_protocol_select="ffrtmphttp_protocol"
1832 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
1833 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
1834 rtp_protocol_select="udp_protocol"
1835 sctp_protocol_deps="network struct_sctp_event_subscribe"
1836 tcp_protocol_deps="network"
1837 tls_protocol_deps_any="openssl gnutls"
1838 tls_protocol_select="tcp_protocol"
1839 udp_protocol_deps="network"
1840
1841 # filters
1842 aconvert_filter_deps="swresample"
1843 amovie_filter_deps="avcodec avformat"
1844 aresample_filter_deps="swresample"
1845 ass_filter_deps="libass"
1846 asyncts_filter_deps="avresample"
1847 atempo_filter_deps="avcodec rdft"
1848 blackframe_filter_deps="gpl"
1849 boxblur_filter_deps="gpl"
1850 colormatrix_filter_deps="gpl"
1851 cropdetect_filter_deps="gpl"
1852 delogo_filter_deps="gpl"
1853 deshake_filter_deps="avcodec"
1854 drawtext_filter_deps="libfreetype"
1855 flite_filter_deps="libflite"
1856 frei0r_filter_deps="frei0r dlopen"
1857 frei0r_filter_extralibs='$ldl'
1858 frei0r_src_filter_deps="frei0r dlopen"
1859 frei0r_src_filter_extralibs='$ldl'
1860 hqdn3d_filter_deps="gpl"
1861 movie_filter_deps="avcodec avformat"
1862 mp_filter_deps="gpl avcodec swscale postproc"
1863 mptestsrc_filter_deps="gpl"
1864 negate_filter_deps="lut_filter"
1865 resample_filter_deps="avresample"
1866 ocv_filter_deps="libopencv"
1867 pan_filter_deps="swresample"
1868 removelogo_filter_deps="avcodec avformat swscale"
1869 scale_filter_deps="swscale"
1870 select_filter_deps="avcodec"
1871 showspectrum_filter_deps="avcodec"
1872 super2xsai_filter_deps="gpl"
1873 tinterlace_filter_deps="gpl"
1874 yadif_filter_deps="gpl"
1875
1876 # libraries
1877 avdevice_deps="avcodec avformat"
1878 avformat_deps="avcodec"
1879 postproc_deps="gpl"
1880
1881 # programs
1882 ffmpeg_deps="avcodec avfilter avformat swscale swresample"
1883 ffmpeg_select="buffersink_filter format_filter aformat_filter
1884                setpts_filter null_filter anull_filter abuffersink_filter"
1885 ffplay_deps="avcodec avformat swscale swresample sdl"
1886 ffplay_select="buffersink_filter rdft"
1887 ffprobe_deps="avcodec avformat"
1888 ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
1889 ffserver_extralibs='$ldl'
1890
1891 # documentation
1892 podpages_deps="perl"
1893 manpages_deps="perl pod2man"
1894 htmlpages_deps="texi2html"
1895 txtpages_deps="makeinfo"
1896 doc_deps_any="manpages htmlpages podpages txtpages"
1897
1898 # tests
1899 colormatrix1_test_deps="colormatrix_filter"
1900 colormatrix2_test_deps="colormatrix_filter"
1901 flashsv2_test_deps="zlib"
1902 mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1903 mpng_test_deps="zlib"
1904 pp_test_deps="mp_filter"
1905 pp2_test_deps="mp_filter"
1906 pp3_test_deps="mp_filter"
1907 pp4_test_deps="mp_filter"
1908 pp5_test_deps="mp_filter"
1909 pp6_test_deps="mp_filter"
1910 seek_lavf_mxf_d10_test_deps="mxf_d10_test"
1911 zlib_test_deps="zlib"
1912 zmbv_test_deps="zlib"
1913
1914 test_deps(){
1915     suf1=$1
1916     suf2=$2
1917     shift 2
1918     for v; do
1919         dep=${v%=*}
1920         tests=${v#*=}
1921         for name in ${tests}; do
1922             append ${name}_test_deps ${dep}$suf1 ${dep}$suf2
1923         done
1924     done
1925 }
1926
1927 test_deps _muxer _demuxer                                               \
1928     aiff                                                                \
1929     pcm_alaw=alaw                                                       \
1930     asf                                                                 \
1931     au                                                                  \
1932     avi                                                                 \
1933     dv=dv_fmt                                                           \
1934     ffm                                                                 \
1935     flv=flv_fmt                                                         \
1936     gxf                                                                 \
1937     matroska=mkv                                                        \
1938     mmf                                                                 \
1939     mov="mov ismv"                                                      \
1940     pcm_mulaw=mulaw                                                     \
1941     mxf="mxf mxf_d10"                                                   \
1942     nut                                                                 \
1943     ogg="ogg ogg_vp3"                                                   \
1944     rawvideo=pixfmt                                                     \
1945     rm                                                                  \
1946     swf                                                                 \
1947     mpegts=ts                                                           \
1948     voc                                                                 \
1949     wav                                                                 \
1950     yuv4mpegpipe=yuv4mpeg                                               \
1951
1952 # default parameters
1953
1954 logfile="config.log"
1955
1956 # installation paths
1957 prefix_default="/usr/local"
1958 bindir_default='${prefix}/bin'
1959 datadir_default='${prefix}/share/ffmpeg'
1960 incdir_default='${prefix}/include'
1961 libdir_default='${prefix}/lib'
1962 mandir_default='${prefix}/share/man'
1963 shlibdir_default="$libdir_default"
1964 postproc_version_default="current"
1965
1966 # toolchain
1967 ar_default="ar"
1968 cc_default="gcc"
1969 cxx_default="g++"
1970 host_cc_default="gcc"
1971 install="install"
1972 ln_s="ln -sf"
1973 nm_default="nm"
1974 objformat="elf"
1975 pkg_config_default=pkg-config
1976 ranlib="ranlib"
1977 strip_default="strip"
1978 yasmexe_default="yasm"
1979
1980 nm_opts='-g'
1981 nogas=":"
1982
1983 # machine
1984 arch_default=$(uname -m)
1985 cpu="generic"
1986
1987 # OS
1988 target_os_default=$(tolower $(uname -s))
1989 host_os=$target_os_default
1990
1991 # alternative libpostproc version
1992 ALT_PP_VER_MAJOR=51
1993 ALT_PP_VER_MINOR=2
1994 ALT_PP_VER_MICRO=101
1995 ALT_PP_VER=$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO
1996
1997 # configurable options
1998 enable $PROGRAM_LIST
1999 enable $DOCUMENT_LIST
2000
2001 enable avcodec
2002 enable avdevice
2003 enable avfilter
2004 enable avformat
2005 enable avutil
2006 enable postproc
2007 enable stripping
2008 enable swresample
2009 enable swscale
2010
2011 enable asm
2012 enable debug
2013 enable doc
2014 enable network
2015 enable optimizations
2016 enable safe_bitstream_reader
2017 enable static
2018 enable swscale_alpha
2019
2020 # build settings
2021 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2022 FFSERVERLDFLAGS=-Wl,-E
2023 LIBPREF="lib"
2024 LIBSUF=".a"
2025 FULLNAME='$(NAME)$(BUILDSUF)'
2026 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2027 SLIBPREF="lib"
2028 SLIBSUF=".so"
2029 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2030 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2031 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2032 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2033 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2034 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2035
2036 asflags_filter=echo
2037 cflags_filter=echo
2038 ldflags_filter=echo
2039
2040 AS_C='-c'
2041 AS_O='-o $@'
2042 CC_C='-c'
2043 CC_E='-E -o $@'
2044 CC_O='-o $@'
2045 CXX_C='-c'
2046 CXX_O='-o $@'
2047 LD_O='-o $@'
2048 FORCE_INC="-include"
2049 HOSTCC_C='-c'
2050 HOSTCC_O='-o $@'
2051
2052 host_cflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600 -O3 -g'
2053 host_libs='-lm'
2054 host_cflags_filter=echo
2055 host_ldflags_filter=echo
2056
2057 target_path='$(CURDIR)'
2058
2059 # since the object filename is not given with the -MM flag, the compiler
2060 # is only able to print the basename, and we must add the path ourselves
2061 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2062 DEPFLAGS='-MM'
2063
2064 # find source path
2065 if test -f configure; then
2066     source_path=.
2067 else
2068     source_path=$(cd $(dirname "$0"); pwd)
2069     echo "$source_path" | grep -q '[[:blank:]]' &&
2070         die "Out of tree builds are impossible with whitespace in source path."
2071     test -e "$source_path/config.h" &&
2072         die "Out of tree builds are impossible with config.h in source dir."
2073 fi
2074
2075 for v in "$@"; do
2076     r=${v#*=}
2077     l=${v%"$r"}
2078     r=$(sh_quote "$r")
2079     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2080 done
2081
2082 find_things(){
2083     thing=$1
2084     pattern=$2
2085     file=$source_path/$3
2086     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2087 }
2088
2089 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2090 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2091 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2092 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2093 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2094 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2095 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2096 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2097 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2098 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2099 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2100
2101 ALL_COMPONENTS="
2102     $BSF_LIST
2103     $DECODER_LIST
2104     $DEMUXER_LIST
2105     $ENCODER_LIST
2106     $FILTER_LIST
2107     $HWACCEL_LIST
2108     $INDEV_LIST
2109     $MUXER_LIST
2110     $OUTDEV_LIST
2111     $PARSER_LIST
2112     $PROTOCOL_LIST
2113 "
2114
2115 find_tests(){
2116     map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
2117 }
2118
2119 LAVF_FATE_TESTS=$(find_tests lavf-fate)
2120 LAVF_TESTS=$(find_tests lavf)
2121 LAVFI_TESTS=$(find_tests lavfi)
2122 SEEK_TESTS=$(find_tests seek seek_)
2123
2124 ALL_TESTS="$LAVF_FATE_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS"
2125
2126 for n in $COMPONENT_LIST; do
2127     v=$(toupper ${n%s})_LIST
2128     eval enable \$$v
2129     eval ${n}_if_any="\$$v"
2130 done
2131
2132 enable $ARCH_EXT_LIST $ALL_TESTS
2133
2134 die_unknown(){
2135     echo "Unknown option \"$1\"."
2136     echo "See $0 --help for available options."
2137     exit 1
2138 }
2139
2140 show_list() {
2141     suffix=_$1
2142     shift
2143     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
2144     exit 0
2145 }
2146
2147 rand_list(){
2148     IFS=', '
2149     set -- $*
2150     unset IFS
2151     for thing; do
2152         comp=${thing%:*}
2153         prob=${thing#$comp}
2154         prob=${prob#:}
2155         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2156         echo "prob ${prob:-0.5}"
2157         printf '%s\n' $comp
2158     done
2159 }
2160
2161 do_random(){
2162     action=$1
2163     shift
2164     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2165     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2166 }
2167
2168 for opt do
2169     optval="${opt#*=}"
2170     case "$opt" in
2171     --extra-ldflags=*) add_ldflags $optval
2172     ;;
2173     --extra-libs=*) add_extralibs $optval
2174     ;;
2175     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
2176     ;;
2177     --enable-debug=*) debuglevel="$optval"
2178     ;;
2179     --disable-everything)
2180     map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2181     ;;
2182     --enable-random|--disable-random)
2183     action=${opt%%-random}
2184     do_random ${action#--} $COMPONENT_LIST
2185     ;;
2186     --enable-random=*|--disable-random=*)
2187     action=${opt%%-random=*}
2188     do_random ${action#--} $optval
2189     ;;
2190     --enable-*=*|--disable-*=*)
2191     eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2192     is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2193     eval list=\$$(toupper $thing)_LIST
2194     name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2195     $action $(filter "$name" $list)
2196     ;;
2197     --enable-?*|--disable-?*)
2198     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2199     if is_in $option $COMPONENT_LIST; then
2200         test $action = disable && action=unset
2201         eval $action \$$(toupper ${option%s})_LIST
2202     elif is_in $option $CMDLINE_SELECT; then
2203         $action $option
2204     else
2205         die_unknown $opt
2206     fi
2207     ;;
2208     --list-*)
2209         NAME="${opt#--list-}"
2210         is_in $NAME $COMPONENT_LIST || die_unknown $opt
2211         NAME=${NAME%s}
2212         eval show_list $NAME \$$(toupper $NAME)_LIST
2213     ;;
2214     --help|-h) show_help
2215     ;;
2216     *)
2217     optname="${opt%%=*}"
2218     optname="${optname#--}"
2219     optname=$(echo "$optname" | sed 's/-/_/g')
2220     if is_in $optname $CMDLINE_SET; then
2221         eval $optname='$optval'
2222     elif is_in $optname $CMDLINE_APPEND; then
2223         append $optname "$optval"
2224     else
2225          die_unknown $opt
2226     fi
2227     ;;
2228     esac
2229 done
2230
2231 disabled logging && logfile=/dev/null
2232
2233 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2234 set >> $logfile
2235
2236 test -n "$cross_prefix" && enable cross_compile
2237
2238 if enabled cross_compile; then
2239     test -n "$arch" && test -n "$target_os" ||
2240         die "Must specify target arch and OS when cross-compiling"
2241 fi
2242
2243 set_default arch target_os postproc_version
2244
2245 # Check if we should build alternative libpostproc version instead of current
2246 if   test "$postproc_version" = $ALT_PP_VER; then
2247   LIBPOSTPROC_VERSION=$ALT_PP_VER
2248   LIBPOSTPROC_VERSION_MAJOR=$ALT_PP_VER_MAJOR
2249   LIBPOSTPROC_VERSION_MINOR=$ALT_PP_VER_MINOR
2250   LIBPOSTPROC_VERSION_MICRO=$ALT_PP_VER_MICRO
2251 elif test "$postproc_version" != current; then
2252   die "Invalid argument to --postproc-version. See --help output."
2253 fi
2254
2255 ar_default="${cross_prefix}${ar_default}"
2256 cc_default="${cross_prefix}${cc_default}"
2257 cxx_default="${cross_prefix}${cxx_default}"
2258 nm_default="${cross_prefix}${nm_default}"
2259 pkg_config_default="${cross_prefix}${pkg_config_default}"
2260 ranlib="${cross_prefix}${ranlib}"
2261 strip_default="${cross_prefix}${strip_default}"
2262
2263 sysinclude_default="${sysroot}/usr/include"
2264
2265 set_default cc cxx nm pkg_config strip sysinclude yasmexe
2266 enabled cross_compile || host_cc_default=$cc
2267 set_default host_cc
2268
2269 if ! $pkg_config --version >/dev/null 2>&1; then
2270     warn "$pkg_config not found, library detection may fail."
2271     pkg_config=false
2272 fi
2273
2274 exesuf() {
2275     case $1 in
2276         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2277     esac
2278 }
2279
2280 EXESUF=$(exesuf $target_os)
2281 HOSTEXESUF=$(exesuf $host_os)
2282
2283 # set temporary file name
2284 : ${TMPDIR:=$TEMPDIR}
2285 : ${TMPDIR:=$TMP}
2286 : ${TMPDIR:=/tmp}
2287
2288 if ! check_cmd mktemp -u XXXXXX; then
2289     # simple replacement for missing mktemp
2290     # NOT SAFE FOR GENERAL USE
2291     mktemp(){
2292         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2293     }
2294 fi
2295
2296 tmpfile(){
2297     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2298         (set -C; exec > $tmp) 2>/dev/null ||
2299         die "Unable to create temporary file in $TMPDIR."
2300     append TMPFILES $tmp
2301     eval $1=$tmp
2302 }
2303
2304 trap 'rm -f -- $TMPFILES' EXIT
2305
2306 tmpfile TMPASM .asm
2307 tmpfile TMPC   .c
2308 tmpfile TMPCPP .cpp
2309 tmpfile TMPE   $EXESUF
2310 tmpfile TMPH   .h
2311 tmpfile TMPO   .o
2312 tmpfile TMPS   .S
2313 tmpfile TMPSH  .sh
2314 tmpfile TMPV   .ver
2315
2316 unset -f mktemp
2317
2318 chmod +x $TMPE
2319
2320 # make sure we can execute files in $TMPDIR
2321 cat > $TMPSH 2>> $logfile <<EOF
2322 #! /bin/sh
2323 EOF
2324 chmod +x $TMPSH >> $logfile 2>&1
2325 if ! $TMPSH >> $logfile 2>&1; then
2326     cat <<EOF
2327 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2328 variable to another directory and make sure that it is not mounted noexec.
2329 EOF
2330     die "Sanity test failed."
2331 fi
2332
2333 pgi_flags(){
2334     for flag; do
2335         case $flag in
2336             -fomit-frame-pointer) echo -Mnoframe ;;
2337             -g)                   echo -gopt ;;
2338             *)                    echo $flag ;;
2339         esac
2340     done
2341 }
2342
2343 suncc_flags(){
2344     for flag; do
2345         case $flag in
2346             -march=*|-mcpu=*)
2347                 case "${flag#*=}" in
2348                     native)                   echo -xtarget=native       ;;
2349                     v9|niagara)               echo -xarch=sparc          ;;
2350                     ultrasparc)               echo -xarch=sparcvis       ;;
2351                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2352                     i586|pentium)             echo -xchip=pentium        ;;
2353                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2354                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2355                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2356                     pentium4*)          echo -xtarget=pentium4           ;;
2357                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2358                     *-sse3)             echo -xarch=sse3                 ;;
2359                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
2360                     amdfam10|barcelona)       echo -xarch=sse4_1         ;;
2361                     athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
2362                     k8|opteron|athlon64|athlon-fx)
2363                                               echo -xarch=sse2a          ;;
2364                     athlon*)                  echo -xarch=pentium_proa   ;;
2365                 esac
2366                 ;;
2367             -std=c99)             echo -xc99              ;;
2368             -fomit-frame-pointer) echo -xregs=frameptr    ;;
2369             -fPIC)                echo -KPIC -xcode=pic32 ;;
2370             -W*,*)                echo $flag              ;;
2371             -f*-*|-W*)                                    ;;
2372             *)                    echo $flag              ;;
2373         esac
2374     done
2375 }
2376
2377 tms470_flags(){
2378     for flag; do
2379         case $flag in
2380             -march=*|-mcpu=*)
2381                 case "${flag#*=}" in
2382                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
2383                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
2384                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
2385                     armv6*|arm11*)          echo -mv=6   ;;
2386                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2387                                             echo -mv=5e  ;;
2388                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2389                 esac
2390                 ;;
2391             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2392             -mfpu=vfp)      echo --float_support=vfpv2        ;;
2393             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2394             -msoft-float)   echo --float_support=vfplib       ;;
2395             -O[0-3]|-mf=*)  echo $flag                        ;;
2396             -g)             echo -g -mn                       ;;
2397             -pds=*)         echo $flag                        ;;
2398             -D*|-I*)        echo $flag                        ;;
2399             --gcc|--abi=*)  echo $flag                        ;;
2400             -me)            echo $flag                        ;;
2401         esac
2402     done
2403 }
2404
2405 probe_cc(){
2406     pfx=$1
2407     _cc=$2
2408
2409     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags _ldflags
2410     unset _depflags _DEPCMD _DEPFLAGS
2411     _flags_filter=echo
2412
2413     if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2414         _type=llvm_gcc
2415         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2416         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2417         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2418         _cflags_speed='-O3'
2419         _cflags_size='-Os'
2420     elif $_cc -v 2>&1 | grep -qi ^gcc; then
2421         _type=gcc
2422         gcc_version=$($_cc --version | head -n1)
2423         gcc_basever=$($_cc -dumpversion)
2424         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2425         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2426         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2427         if ! $_cc -dumpversion | grep -q '^2\.'; then
2428             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2429         fi
2430         _cflags_speed='-O3'
2431         _cflags_size='-Os'
2432     elif $_cc --version 2>/dev/null | grep -q Intel; then
2433         _type=icc
2434         _ident=$($_cc --version | head -n1)
2435         _depflags='-MMD'
2436         _cflags_speed='-O3'
2437         _cflags_size='-Os'
2438         _cflags_noopt='-O1'
2439     elif $_cc -v 2>&1 | grep -q xlc; then
2440         _type=xlc
2441         _ident=$($_cc -qversion 2>/dev/null | head -n1)
2442         _cflags_speed='-O5'
2443         _cflags_size='-O5 -qcompact'
2444     elif $_cc -V 2>/dev/null | grep -q Compaq; then
2445         _type=ccc
2446         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2447         _DEPFLAGS='-M'
2448         debuglevel=3
2449         _ldflags='-Wl,-z,now' # calls to libots crash without this
2450         _cflags_speed='-fast'
2451         _cflags_size='-O1'
2452     elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2453         test -d "$sysroot" || die "No valid sysroot specified."
2454         _type=armcc
2455         _ident=$($_cc --vsn | head -n1)
2456         armcc_conf="$PWD/armcc.conf"
2457         $_cc --arm_linux_configure                 \
2458              --arm_linux_config_file="$armcc_conf" \
2459              --configure_sysroot="$sysroot"        \
2460              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2461              die "Error creating armcc configuration file."
2462         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2463         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2464         as_default="${cross_prefix}gcc"
2465         _depflags='-MMD'
2466         _cflags_speed='-O3'
2467         _cflags_size='-Os'
2468     elif $_cc -version 2>/dev/null | grep -q TMS470; then
2469         _type=tms470
2470         _ident=$($_cc -version | head -n1 | tr -s ' ')
2471         _flags='--gcc --abi=eabi -me'
2472         _cflags='-D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__='
2473         _cc_e='-ppl -fe=$@'
2474         _cc_o='-fe=$@'
2475         as_default="${cross_prefix}gcc"
2476         ld_default="${cross_prefix}gcc"
2477         _depflags='-ppa -ppd=$(@:.o=.d)'
2478         _cflags_speed='-O3 -mf=5'
2479         _cflags_size='-O3 -mf=2'
2480         _flags_filter=tms470_flags
2481     elif $_cc -v 2>&1 | grep -q clang; then
2482         _type=clang
2483         _ident=$($_cc --version | head -n1)
2484         _depflags='-MMD'
2485         _cflags_speed='-O3'
2486         _cflags_size='-Os'
2487     elif $_cc -V 2>&1 | grep -q Sun; then
2488         _type=suncc
2489         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2490         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2491         _DEPFLAGS='-xM1 -xc99'
2492         _ldflags='-std=c99'
2493         _cflags_speed='-O5'
2494         _cflags_size='-O5 -xspace'
2495         _flags_filter=suncc_flags
2496     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2497         _type=pathscale
2498         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2499         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2500         _cflags_speed='-O2'
2501         _cflags_size='-Os'
2502         _flags_filter='filter_out -Wdisabled-optimization'
2503     elif $_cc -v 2>&1 | grep -q Open64; then
2504         _type=open64
2505         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2506         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2507         _cflags_speed='-O2'
2508         _cflags_size='-Os'
2509         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2510     elif $_cc -V 2>&1 | grep -q Portland; then
2511         _type=pgi
2512         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2513         opt_common='-alias=ansi -Mlre -Mpre'
2514         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2515         _cflags_size="-O2 -Munroll=c:1 $opt_common"
2516         _cflags_noopt="-O1"
2517         _flags_filter=pgi_flags
2518     fi
2519
2520     eval ${pfx}_type=\$_type
2521     eval ${pfx}_ident=\$_ident
2522 }
2523
2524 set_ccvars(){
2525     eval ${1}_C=\${_cc_c-\${${1}_C}}
2526     eval ${1}_E=\${_cc_e-\${${1}_E}}
2527     eval ${1}_O=\${_cc_o-\${${1}_O}}
2528
2529     if [ -n "$_depflags" ]; then
2530         eval ${1}_DEPFLAGS=\$_depflags
2531     else
2532         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2533         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2534         eval DEP${1}FLAGS=\$_flags
2535     fi
2536 }
2537
2538 probe_cc cc "$cc"
2539 cflags_filter=$_flags_filter
2540 cflags_speed=$_cflags_speed
2541 cflags_size=$_cflags_size
2542 cflags_noopt=$_cflags_noopt
2543 add_cflags $_flags $_cflags
2544 cc_ldflags=$_ldflags
2545 set_ccvars CC
2546
2547 probe_cc hostcc "$host_cc"
2548 host_cflags_filter=$_flags_filter
2549 host_ldflags_filter=$_flags_filter
2550 add_host_cflags  $_flags $_cflags
2551 add_host_ldflags $_flags $_ldflags
2552 set_ccvars HOSTCC
2553
2554 test -n "$cc_type" && enable $cc_type ||
2555     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2556
2557 : ${as_default:=$cc}
2558 : ${dep_cc_default:=$cc}
2559 : ${ld_default:=$cc}
2560 set_default ar as dep_cc ld
2561
2562 probe_cc as "$as"
2563 asflags_filter=$_flags_filter
2564 add_asflags $_flags $_cflags
2565 set_ccvars AS
2566
2567 probe_cc ld "$ld"
2568 ldflags_filter=$_flags_filter
2569 add_ldflags $_flags $_ldflags
2570 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2571 LD_O=${_cc_o-$LD_O}
2572
2573 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2574     probe_cc depcc "$dep_cc"
2575     CCDEP=${_DEPCMD:-$DEPCMD}
2576     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2577     DEPCCFLAGS=$_flags
2578 fi
2579
2580 add_cflags $extra_cflags
2581 add_cxxflags $extra_cxxflags
2582 add_asflags $extra_cflags
2583
2584 if test -n "$sysroot"; then
2585     case "$cc_type" in
2586         gcc|llvm_gcc|clang)
2587             add_cppflags --sysroot="$sysroot"
2588             add_ldflags --sysroot="$sysroot"
2589         ;;
2590         tms470)
2591             add_cppflags -I"$sysinclude"
2592             add_ldflags  --sysroot="$sysroot"
2593         ;;
2594     esac
2595 fi
2596
2597 if test "$cpu" = host; then
2598     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2599
2600     case "$cc_type" in
2601         gcc|llvm_gcc)
2602             check_native(){
2603                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2604                 sed -n "/cc1.*$1=/{
2605                             s/.*$1=\\([^ ]*\\).*/\\1/
2606                             p
2607                             q
2608                         }" $TMPE
2609             }
2610             cpu=$(check_native -march || check_native -mcpu)
2611         ;;
2612     esac
2613
2614     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2615 fi
2616
2617 # Deal with common $arch aliases
2618 case "$arch" in
2619     arm*|iPad*)
2620         arch="arm"
2621     ;;
2622     mips|mipsel|IP*)
2623         arch="mips"
2624     ;;
2625     mips64*)
2626         arch="mips"
2627         subarch="mips64"
2628     ;;
2629     parisc|hppa)
2630         arch="parisc"
2631     ;;
2632     parisc64|hppa64)
2633         arch="parisc"
2634         subarch="parisc64"
2635     ;;
2636     "Power Macintosh"|ppc|powerpc|ppc64|powerpc64)
2637         arch="ppc"
2638     ;;
2639     s390|s390x)
2640         arch="s390"
2641     ;;
2642     sh4|sh)
2643         arch="sh4"
2644     ;;
2645     sun4u|sparc64)
2646         arch="sparc"
2647         subarch="sparc64"
2648     ;;
2649     i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
2650         arch="x86"
2651     ;;
2652 esac
2653
2654 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2655 enable $arch
2656
2657 # Add processor-specific flags
2658 if test "$cpu" = generic; then
2659     : do nothing
2660 elif enabled ppc; then
2661
2662     case $(tolower $cpu) in
2663         601|ppc601|powerpc601)
2664             cpuflags="-mcpu=601"
2665             disable altivec
2666         ;;
2667         603*|ppc603*|powerpc603*)
2668             cpuflags="-mcpu=603"
2669             disable altivec
2670         ;;
2671         604*|ppc604*|powerpc604*)
2672             cpuflags="-mcpu=604"
2673             disable altivec
2674         ;;
2675         g3|75*|ppc75*|powerpc75*)
2676             cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2677             disable altivec
2678         ;;
2679         g4|745*|ppc745*|powerpc745*)
2680             cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2681         ;;
2682         74*|ppc74*|powerpc74*)
2683             cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2684         ;;
2685         g5|970|ppc970|powerpc970)
2686             cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2687         ;;
2688         power[3-7]*)
2689             cpuflags="-mcpu=$cpu -mpowerpc-gfxopt -mpowerpc64"
2690         ;;
2691         cell)
2692             cpuflags="-mcpu=cell"
2693             enable ldbrx
2694         ;;
2695         e500mc)
2696             cpuflags="-mcpu=e500mc"
2697             disable altivec
2698         ;;
2699         e500v2)
2700             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2701             disable altivec
2702         ;;
2703         e500)
2704             cpuflags="-mcpu=8540 -mhard-float"
2705             disable altivec
2706         ;;
2707     esac
2708
2709 elif enabled x86; then
2710
2711     case $cpu in
2712         i[345]86|pentium)
2713             cpuflags="-march=$cpu"
2714             disable mmx
2715         ;;
2716         # targets that do NOT support conditional mov (cmov)
2717         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2718             cpuflags="-march=$cpu"
2719             disable cmov
2720         ;;
2721         # targets that do support conditional mov (cmov)
2722         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom)
2723             cpuflags="-march=$cpu"
2724             enable cmov
2725             enable fast_cmov
2726         ;;
2727         # targets that do support conditional mov but on which it's slow
2728         pentium4|pentium4m|prescott|nocona)
2729             cpuflags="-march=$cpu"
2730             enable cmov
2731             disable fast_cmov
2732         ;;
2733     esac
2734
2735 elif enabled sparc; then
2736
2737     case $cpu in
2738         niagara)
2739             cpuflags="-mcpu=$cpu"
2740             disable vis
2741         ;;
2742         sparc64)
2743             cpuflags="-mcpu=v9"
2744         ;;
2745     esac
2746
2747 elif enabled arm; then
2748
2749     case $cpu in
2750         armv*)
2751             cpuflags="-march=$cpu"
2752             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2753         ;;
2754         *)
2755             cpuflags="-mcpu=$cpu"
2756             case $cpu in
2757                 cortex-a*)                               subarch=armv7a  ;;
2758                 cortex-r*)                               subarch=armv7r  ;;
2759                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
2760                 arm11*)                                  subarch=armv6   ;;
2761                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2762                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2763             esac
2764         ;;
2765     esac
2766
2767 elif enabled alpha; then
2768
2769     enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2770
2771 elif enabled bfin; then
2772
2773     cpuflags="-mcpu=$cpu"
2774
2775 elif enabled mips; then
2776
2777     cpuflags="-march=$cpu"
2778
2779     case $cpu in
2780         24kc)
2781             disable mipsfpu
2782             disable mipsdspr1
2783             disable mipsdspr2
2784         ;;
2785         24kf*)
2786             disable mipsdspr1
2787             disable mipsdspr2
2788         ;;
2789         24kec|34kc|1004kc)
2790             disable mipsfpu
2791             disable mipsdspr2
2792         ;;
2793         24kef*|34kf*|1004kf*)
2794             disable mipsdspr2
2795         ;;
2796         74kc)
2797             disable mipsfpu
2798         ;;
2799     esac
2800
2801 elif enabled avr32; then
2802
2803     case $cpu in
2804         ap7[02]0[0-2])
2805             subarch="avr32_ap"
2806             cpuflags="-mpart=$cpu"
2807         ;;
2808         ap)
2809             subarch="avr32_ap"
2810             cpuflags="-march=$cpu"
2811         ;;
2812         uc3[ab]*)
2813             subarch="avr32_uc"
2814             cpuflags="-mcpu=$cpu"
2815         ;;
2816         uc)
2817             subarch="avr32_uc"
2818             cpuflags="-march=$cpu"
2819         ;;
2820     esac
2821
2822 fi
2823
2824 add_cflags $cpuflags
2825 add_asflags $cpuflags
2826
2827 # compiler sanity check
2828 check_exec <<EOF
2829 int main(void){ return 0; }
2830 EOF
2831 if test "$?" != 0; then
2832     echo "$cc is unable to create an executable file."
2833     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2834         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2835         echo "Only do this if you know what cross compiling means."
2836     fi
2837     die "C compiler test failed."
2838 fi
2839
2840 add_cppflags -D_ISOC99_SOURCE
2841 add_cxxflags -D__STDC_CONSTANT_MACROS
2842 check_cflags -std=c99
2843 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2844 #include <stdlib.h>
2845 EOF
2846 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2847 #include <stdlib.h>
2848 EOF
2849
2850 check_host_cflags -std=c99
2851 check_host_cflags -Wall
2852
2853 case "$arch" in
2854     alpha|ia64|mips|parisc|sparc)
2855         spic=$shared
2856     ;;
2857     x86)
2858         subarch="x86_32"
2859         check_code cc "" "int test[(int)sizeof(char*) - 7]" && subarch="x86_64"
2860         if test "$subarch" = "x86_64"; then
2861             spic=$shared
2862         fi
2863     ;;
2864     ppc)
2865         check_cc <<EOF && subarch="ppc64"
2866         int test[(int)sizeof(char*) - 7];
2867 EOF
2868     ;;
2869 esac
2870
2871 enable $subarch
2872 enabled spic && enable pic
2873
2874 # OS specific
2875 case $target_os in
2876     haiku)
2877         prefix_default="/boot/common"
2878         network_extralibs="-lnetwork"
2879         host_libs=
2880         ;;
2881     sunos)
2882         FFSERVERLDFLAGS=""
2883         SHFLAGS='-shared -Wl,-h,$$(@F)'
2884         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2885         network_extralibs="-lsocket -lnsl"
2886         add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
2887         # When using suncc to build, the Solaris linker will mark
2888         # an executable with each instruction set encountered by
2889         # the Solaris assembler.  As our libraries contain their own
2890         # guards for processor-specific code, instead suppress
2891         # generation of the HWCAPS ELF section on Solaris x86 only.
2892         enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
2893         nm_opts='-P -g'
2894         ;;
2895     netbsd)
2896         disable symver
2897         oss_indev_extralibs="-lossaudio"
2898         oss_outdev_extralibs="-lossaudio"
2899         ;;
2900     openbsd|bitrig)
2901         # On OpenBSD 4.5. the compiler does not use PIC unless
2902         # explicitly using -fPIC. FFmpeg builds fine without PIC,
2903         # however the generated executable will not do anything
2904         # (simply quits with exit-code 1, no crash, no output).
2905         # Thus explicitly enable PIC here.
2906         enable pic
2907         disable symver
2908         SHFLAGS='-shared'
2909         SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBVERSION)'
2910         SLIB_INSTALL_LINKS=
2911         oss_indev_extralibs="-lossaudio"
2912         oss_outdev_extralibs="-lossaudio"
2913         ;;
2914     dragonfly)
2915         disable symver
2916         ;;
2917     freebsd)
2918         ;;
2919     bsd/os)
2920         add_extralibs -lpoll -lgnugetopt
2921         strip="strip -d"
2922         ;;
2923     darwin)
2924         gas="gas-preprocessor.pl $cc"
2925         enabled ppc && add_asflags -force_cpusubtype_ALL
2926         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2927         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
2928         strip="${strip} -x"
2929         add_ldflags -Wl,-dynamic,-search_paths_first
2930         SLIBSUF=".dylib"
2931         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2932         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2933         FFSERVERLDFLAGS=-Wl,-bind_at_load
2934         objformat="macho"
2935         enabled x86_64 && objformat="macho64"
2936         enabled_any pic shared ||
2937             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2938         ;;
2939     mingw32*)
2940         if test $target_os = "mingw32ce"; then
2941             disable network
2942         else
2943             target_os=mingw32
2944         fi
2945         LIBTARGET=i386
2946         if enabled x86_64; then
2947             LIBTARGET="i386:x86-64"
2948         elif enabled arm; then
2949             LIBTARGET=arm-wince
2950         fi
2951         shlibdir_default="$bindir_default"
2952         SLIBPREF=""
2953         SLIBSUF=".dll"
2954         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2955         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2956         dlltool="${cross_prefix}dlltool"
2957         if check_cmd lib.exe -list; then
2958             SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
2959             if enabled x86_64; then
2960                 LIBTARGET=x64
2961             fi
2962         elif check_cmd $dlltool --version; then
2963             SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
2964         fi
2965         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2966         SLIB_INSTALL_LINKS=
2967         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2968         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2969         SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
2970         objformat="win32"
2971         enable dos_paths
2972         check_cflags -fno-common
2973         check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2974                                       || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2975                 die "ERROR: MinGW runtime version must be >= 3.15."
2976         add_cppflags -U__STRICT_ANSI__
2977         ;;
2978     cygwin*)
2979         target_os=cygwin
2980         shlibdir_default="$bindir_default"
2981         SLIBPREF="cyg"
2982         SLIBSUF=".dll"
2983         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2984         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2985         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2986         SLIB_INSTALL_LINKS=
2987         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
2988         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
2989         objformat="win32"
2990         enable dos_paths
2991         check_cflags -fno-common
2992         add_cppflags -U__STRICT_ANSI__
2993         ;;
2994     *-dos|freedos|opendos)
2995         network_extralibs="-lsocket"
2996         objformat="coff"
2997         enable dos_paths
2998         add_cppflags -U__STRICT_ANSI__
2999         ;;
3000     linux)
3001         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3002         enable dv1394
3003         ;;
3004     irix*)
3005         target_os=irix
3006         ranlib="echo ignoring ranlib"
3007         ;;
3008     os/2*)
3009         strip="lxlite -CS"
3010         ln_s="cp -f"
3011         objformat="aout"
3012         add_cppflags -D_GNU_SOURCE
3013         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3014         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3015         FFSERVERLDFLAGS=""
3016         LIBSUF="_s.a"
3017         SLIBPREF=""
3018         SLIBSUF=".dll"
3019         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3020         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3021         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3022           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3023           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3024           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3025           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3026           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3027         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3028           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3029         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3030         enable dos_paths
3031         enable_weak os2threads
3032         ;;
3033     gnu/kfreebsd)
3034         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
3035         ;;
3036     gnu)
3037         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3038         ;;
3039     qnx)
3040         add_cppflags -D_QNX_SOURCE
3041         network_extralibs="-lsocket"
3042         ;;
3043     symbian)
3044         SLIBSUF=".dll"
3045         enable dos_paths
3046         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3047         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3048         add_ldflags -Wl,--target1-abs,--no-undefined \
3049                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3050                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3051         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3052                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3053                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3054         ;;
3055     none)
3056         ;;
3057     *)
3058         die "Unknown OS '$target_os'."
3059         ;;
3060 esac
3061
3062 esc(){
3063     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3064 }
3065
3066 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
3067
3068 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
3069
3070 set_default $PATHS_LIST
3071
3072 # we need to build at least one lib type
3073 if ! enabled_any static shared; then
3074     cat <<EOF
3075 At least one library type must be built.
3076 Specify --enable-static to build the static libraries or --enable-shared to
3077 build the shared libraries as well. To only build the shared libraries specify
3078 --disable-static in addition to --enable-shared.
3079 EOF
3080     exit 1;
3081 fi
3082
3083 die_license_disabled() {
3084     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3085 }
3086
3087 die_license_disabled_gpl() {
3088     enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
3089 }
3090
3091 die_license_disabled gpl libcdio
3092 die_license_disabled gpl libutvideo
3093 die_license_disabled gpl libx264
3094 die_license_disabled gpl libxavs
3095 die_license_disabled gpl libxvid
3096 die_license_disabled gpl x11grab
3097
3098 die_license_disabled nonfree libaacplus
3099 die_license_disabled nonfree libfaac
3100 enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
3101 enabled gpl && die_license_disabled_gpl nonfree openssl
3102
3103 die_license_disabled version3 libopencore_amrnb
3104 die_license_disabled version3 libopencore_amrwb
3105 die_license_disabled version3 libvo_aacenc
3106 die_license_disabled version3 libvo_amrwbenc
3107
3108 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3109
3110 disabled optimizations || check_cflags -fomit-frame-pointer
3111
3112 enable_pic() {
3113     enable pic
3114     add_cppflags -DPIC
3115     add_cflags   -fPIC
3116     add_asflags  -fPIC
3117 }
3118
3119 enabled pic && enable_pic
3120
3121 check_cc <<EOF || die "Symbol mangling check failed."
3122 int ff_extern;
3123 EOF
3124 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3125 extern_prefix=${sym%%ff_extern*}
3126
3127 check_cc <<EOF && enable inline_asm
3128 void foo(void) { __asm__ volatile ("" ::); }
3129 EOF
3130
3131 _restrict=
3132 for restrict_keyword in restrict __restrict__ __restrict; do
3133     check_cc <<EOF && _restrict=$restrict_keyword && break
3134 void foo(char * $restrict_keyword p);
3135 EOF
3136 done
3137
3138 check_cc <<EOF && enable attribute_packed
3139 struct { int x; } __attribute__((packed)) x;
3140 EOF
3141
3142 check_cc <<EOF && enable attribute_may_alias
3143 union { int x; } __attribute__((may_alias)) x;
3144 EOF
3145
3146 check_cc <<EOF || die "endian test failed"
3147 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3148 EOF
3149 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3150
3151 if enabled alpha; then
3152
3153     check_cflags -mieee
3154
3155 elif enabled arm; then
3156
3157     enabled thumb && check_cflags -mthumb || check_cflags -marm
3158     nogas=die
3159
3160     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3161         enable vfp_args
3162     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3163         case "${cross_prefix:-$cc}" in
3164             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
3165             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3166 __asm__ (".eabi_attribute 28, 1");
3167 int main(void) { return 0; }
3168 EOF
3169         esac
3170         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3171     fi
3172
3173     enabled armv5te && check_inline_asm armv5te '"qadd r0, r0, r0"'
3174     enabled armv6   && check_inline_asm armv6   '"sadd16 r0, r0, r0"'
3175     enabled armv6t2 && check_inline_asm armv6t2 '"movt r0, #0"'
3176     enabled armvfp  && check_inline_asm armvfp  '"fadds s0, s0, s0"'
3177     enabled neon    && check_inline_asm neon    '"vadd.i16 q0, q0, q0"'
3178     enabled vfpv3   && check_inline_asm vfpv3   '"vmov.f32 s0, #1.0"'
3179
3180     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3181     check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3182
3183     enabled_all armv6t2 shared !pic && enable_pic
3184
3185 elif enabled mips; then
3186
3187     check_inline_asm loongson '"dmult.g $1, $2, $3"'
3188     enabled mmi && check_inline_asm mmi '"lq $2, 0($2)"'
3189     enabled mips32r2  && add_cflags "-mips32r2" && add_asflags "-mips32r2" &&
3190      check_inline_asm mips32r2  '"rotr $t0, $t1, 1"'
3191     enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
3192      check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
3193     enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
3194      check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
3195     enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
3196      check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
3197
3198 elif enabled ppc; then
3199
3200     enable local_aligned_8 local_aligned_16
3201
3202     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
3203     check_inline_asm ibm_asm   '"add 0, 0, 0"'
3204     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
3205     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3206
3207     # AltiVec flags: The FSF version of GCC differs from the Apple version
3208     if enabled altivec; then
3209         nogas=warn
3210         check_cflags -maltivec -mabi=altivec &&
3211         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3212         check_cflags -faltivec
3213
3214         # check if our compiler supports Motorola AltiVec C API
3215         check_cc <<EOF || disable altivec
3216 $inc_altivec_h
3217 int main(void) {
3218     vector signed int v1 = (vector signed int) { 0 };
3219     vector signed int v2 = (vector signed int) { 1 };
3220     v1 = vec_add(v1, v2);
3221     return 0;
3222 }
3223 EOF
3224
3225         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3226     fi
3227
3228 elif enabled sparc; then
3229
3230     enabled vis &&
3231         check_inline_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
3232         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
3233
3234 elif enabled x86; then
3235
3236     check_code ld immintrin.h "__xgetbv(0)" "cc" && enable xgetbv
3237     check_code ld intrin.h "int info[4]; __cpuid(info, 0)" "cc" && enable cpuid
3238     check_code ld intrin.h "__rdtsc()" "cc" && enable rdtsc
3239     check_code ld intrin.h "unsigned int x = __readeflags()" "cc" && enable rweflags
3240
3241     check_code ld mmintrin.h "_mm_empty()" "cc" && enable mm_empty
3242
3243     enable local_aligned_8 local_aligned_16
3244
3245     # check whether EBP is available on x86
3246     # As 'i' is stored on the stack, this program will crash
3247     # if the base pointer is used to access it because the
3248     # base pointer is cleared in the inline assembly code.
3249     check_exec_crash <<EOF && enable ebp_available
3250     volatile int i=0;
3251     __asm__ volatile (
3252         "xorl %%ebp, %%ebp"
3253     ::: "%ebp");
3254     return i;
3255 EOF
3256
3257     # check whether EBX is available on x86
3258     check_inline_asm ebx_available '""::"b"(0)' &&
3259         check_inline_asm ebx_available '"":::"%ebx"'
3260
3261     # check whether xmm clobbers are supported
3262     check_inline_asm xmm_clobbers '"":::"%xmm0"'
3263
3264     # check whether binutils is new enough to compile SSSE3/MMXEXT
3265     enabled ssse3  && check_inline_asm ssse3  '"pabsw %xmm0, %xmm0"'
3266     enabled mmxext && check_inline_asm mmxext '"pmaxub %mm0, %mm1"'
3267
3268     if ! disabled_any asm mmx yasm; then
3269         if check_cmd $yasmexe --version; then
3270             enabled x86_64 && yasm_extra="-m amd64"
3271             yasm_debug="-g dwarf2"
3272         elif check_cmd nasm -v; then
3273             yasmexe=nasm
3274             yasm_debug="-g -F dwarf"
3275             enabled x86_64 && test "$objformat" = elf && objformat=elf64
3276         fi
3277
3278         YASMFLAGS="-f $objformat $yasm_extra"
3279         enabled pic               && append YASMFLAGS "-DPIC"
3280         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
3281         case "$objformat" in
3282             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
3283         esac
3284
3285         check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
3286             die "yasm not found, use --disable-yasm for a crippled build"
3287         check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx
3288         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4
3289         check_yasm "CPU amdnop" && enable cpunop
3290     fi
3291
3292     case "$cpu" in
3293         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
3294             disable fast_clz
3295         ;;
3296     esac
3297
3298 fi
3299
3300 if enabled asm; then
3301     as=${gas:=$as}
3302     check_inline_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
3303         $nogas "GNU assembler not found, install gas-preprocessor"
3304 fi
3305
3306 check_ldflags -Wl,--as-needed
3307
3308 if check_func dlopen; then
3309     ldl=
3310 elif check_func dlopen -ldl; then
3311     ldl=-ldl
3312 fi
3313
3314 if enabled network; then
3315     check_type "sys/types.h sys/socket.h" socklen_t
3316     check_type netdb.h "struct addrinfo"
3317     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
3318     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
3319     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
3320     check_type netinet/in.h "struct sockaddr_in6"
3321     check_type poll.h "struct pollfd"
3322     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
3323     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3324     check_type netinet/sctp.h "struct sctp_event_subscribe"
3325     check_func getaddrinfo $network_extralibs
3326     # Prefer arpa/inet.h over winsock2
3327     if check_header arpa/inet.h ; then
3328         check_func closesocket
3329     elif check_header winsock2.h ; then
3330         check_func_headers winsock2.h closesocket -lws2 &&
3331             network_extralibs="-lws2" ||
3332         { check_func_headers winsock2.h closesocket -lws2_32 &&
3333             network_extralibs="-lws2_32"; }
3334         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
3335         check_type ws2tcpip.h socklen_t
3336         check_type ws2tcpip.h "struct addrinfo"
3337         check_type ws2tcpip.h "struct group_source_req"
3338         check_type ws2tcpip.h "struct ip_mreq_source"
3339         check_type ws2tcpip.h "struct ipv6_mreq"
3340         check_type winsock2.h "struct pollfd"
3341         check_type ws2tcpip.h "struct sockaddr_in6"
3342         check_type ws2tcpip.h "struct sockaddr_storage"
3343         check_struct winsock2.h "struct sockaddr" sa_len
3344     else
3345         disable network
3346     fi
3347 fi
3348
3349 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3350 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3351
3352 check_func  clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
3353 check_func  fcntl
3354 check_func  fork
3355 check_func  gethrtime
3356 check_func  getopt
3357 check_func  getrusage
3358 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3359 check_func  gettimeofday
3360 check_func  inet_aton $network_extralibs
3361 check_func  isatty
3362 check_func  localtime_r
3363 check_func  ${malloc_prefix}memalign            && enable memalign
3364 check_func  mkstemp
3365 check_func  mmap
3366 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
3367 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
3368 check_func  setrlimit
3369 check_func  snprintf
3370 check_func  strerror_r
3371 check_func  strptime
3372 check_func  sched_getaffinity
3373 check_func  sysconf
3374 check_func  sysctl
3375 check_func  usleep
3376 check_func_headers conio.h kbhit
3377 check_func_headers windows.h PeekNamedPipe
3378 check_func_headers io.h setmode
3379 check_func_headers lzo/lzo1x.h lzo1x_999_compress
3380 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
3381 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3382 check_func_headers windows.h GetProcessAffinityMask
3383 check_func_headers windows.h GetProcessTimes
3384 check_func_headers windows.h GetSystemTimeAsFileTime
3385 check_func_headers windows.h MapViewOfFile
3386 check_func_headers windows.h Sleep
3387 check_func_headers windows.h VirtualAlloc
3388 check_func_headers glob.h glob
3389
3390 # Check for MSVCRT; it has a broken strtod() that can't parse some input.
3391 # Use old dos symbol to detect it. If we are on mingw, it already provides
3392 # its own replacement and we don't need to redo that.
3393 if check_func _get_doserrno; then
3394     if test $target_os != mingw32; then
3395         enable broken_strtod
3396     fi
3397 fi
3398
3399 check_header dlfcn.h
3400 check_header dxva.h
3401 check_header dxva2api.h -D_WIN32_WINNT=0x0600
3402 check_header libcrystalhd/libcrystalhd_if.h
3403 check_header malloc.h
3404 check_header poll.h
3405 check_header sys/mman.h
3406 check_header sys/param.h
3407 check_header sys/resource.h
3408 check_header sys/select.h
3409 check_header sys/time.h
3410 check_header termios.h
3411 check_header unistd.h
3412 check_header vdpau/vdpau.h
3413 check_header vdpau/vdpau_x11.h
3414 check_header windows.h
3415 check_header X11/extensions/XvMClib.h
3416 check_header asm/types.h
3417
3418 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
3419 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3420
3421 # check for VDA header
3422 if ! disabled vda; then
3423     if check_header VideoDecodeAcceleration/VDADecoder.h; then
3424         enable vda
3425         add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
3426     fi
3427 fi
3428
3429 if ! disabled w32threads && ! enabled pthreads; then
3430     check_func _beginthreadex && enable w32threads
3431 fi
3432
3433 # check for some common methods of building with pthread support
3434 # do this before the optional library checks as some of them require pthreads
3435 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
3436     enable pthreads
3437     if check_func pthread_create; then
3438         :
3439     elif check_func pthread_create -pthread; then
3440         add_cflags -pthread
3441         add_extralibs -pthread
3442     elif check_func pthread_create -pthreads; then
3443         add_cflags -pthreads
3444         add_extralibs -pthreads
3445     elif check_func pthread_create -lpthreadGC2; then
3446         add_extralibs -lpthreadGC2
3447     elif ! check_lib pthread.h pthread_create -lpthread; then
3448         disable pthreads
3449     fi
3450 fi
3451
3452 for thread in $THREADS_LIST; do
3453     if enabled $thread; then
3454         test -n "$thread_type" &&
3455             die "ERROR: Only one thread type must be selected." ||
3456             thread_type="$thread"
3457     fi
3458 done
3459
3460 if enabled pthreads; then
3461   check_func pthread_cancel
3462 fi
3463
3464 check_lib math.h sin -lm && LIBM="-lm"
3465 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
3466 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3467
3468 check_mathfunc cbrtf
3469 check_mathfunc exp2
3470 check_mathfunc exp2f
3471 check_mathfunc isinf
3472 check_mathfunc isnan
3473 check_mathfunc llrint
3474 check_mathfunc llrintf
3475 check_mathfunc log2
3476 check_mathfunc log2f
3477 check_mathfunc lrint
3478 check_mathfunc lrintf
3479 check_mathfunc rint
3480 check_mathfunc round
3481 check_mathfunc roundf
3482 check_mathfunc trunc
3483 check_mathfunc truncf
3484
3485 # these are off by default, so fail if requested and not available
3486 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3487 enabled fontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
3488 enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3489 enabled gnutls     && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3490 enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
3491 enabled libaacplus && require  "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
3492 enabled libass     && require_pkg_config libass ass/ass.h ass_library_init
3493 enabled libbluray  && require libbluray libbluray/bluray.h bd_open -lbluray
3494 enabled libcelt    && require libcelt celt/celt.h celt_decode -lcelt0 &&
3495                       { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
3496                         die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
3497 enabled libcaca    && require_pkg_config caca caca.h caca_create_canvas
3498 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3499 enabled libfdk_aac && require  libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
3500 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"
3501 enabled libflite   && require2 libflite "flite/flite.h" flite_init $flite_libs
3502 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3503 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
3504 enabled libilbc    && require  libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
3505 enabled libmodplug && require  libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
3506 enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3507 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
3508 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3509 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3510 enabled libopencv  && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
3511 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3512 enabled libopus    && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
3513 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3514 enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3515 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3516 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
3517 enabled libstagefright_h264  && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
3518     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
3519     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
3520 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3521 enabled libtwolame && require  libtwolame twolame.h twolame_init -ltwolame &&
3522                       { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
3523                         die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
3524 enabled libutvideo    && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
3525 enabled libv4l2    && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
3526 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3527 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3528 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3529 enabled libvpx     && {
3530     enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3531                                 die "ERROR: libvpx decoder must be installed and version must be >=0.9.1"; }
3532     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
3533                                 die "ERROR: libvpx encoder version must be >=0.9.7"; } }
3534 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
3535                       { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3536                         die "ERROR: libx264 must be installed and version must be >= 0.118."; }
3537 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
3538 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
3539 enabled openal     && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
3540                         check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
3541                         die "ERROR: openal not found"; } &&
3542                       { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
3543                         die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
3544 enabled openssl    && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3545                         check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3546                         check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3547                         die "ERROR: openssl not found"; }
3548
3549 if enabled gnutls; then
3550     { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
3551     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
3552 fi
3553
3554 # libdc1394 check
3555 if enabled libdc1394; then
3556     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3557         enable libdc1394_2; } ||
3558     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3559         enable libdc1394_1; } ||
3560     die "ERROR: No version of libdc1394 found "
3561 fi
3562
3563 SDL_CONFIG="${cross_prefix}sdl-config"
3564 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
3565     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3566     enable sdl &&
3567     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3568 else
3569   if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
3570     sdl_cflags=$("${SDL_CONFIG}" --cflags)
3571     sdl_libs=$("${SDL_CONFIG}" --libs)
3572     check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
3573     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3574     enable sdl &&
3575     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3576   fi
3577 fi
3578 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
3579
3580 texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
3581 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
3582 perl --version > /dev/null 2>&1 && enable perl || disable perl
3583 pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
3584
3585 check_header linux/fb.h
3586 check_header linux/videodev.h
3587 check_header linux/videodev2.h
3588 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3589
3590 check_header sys/videoio.h
3591
3592 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3593 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3594 # w32api 3.12 had it defined wrong
3595 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3596
3597 check_type "dshow.h" IBaseFilter
3598
3599 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3600 { check_header dev/bktr/ioctl_meteor.h &&
3601   check_header dev/bktr/ioctl_bt848.h; } ||
3602 { check_header machine/ioctl_meteor.h &&
3603   check_header machine/ioctl_bt848.h; } ||
3604 { check_header dev/video/meteor/ioctl_meteor.h &&
3605   check_header dev/video/bktr/ioctl_bt848.h; } ||
3606 check_header dev/ic/bt8xx.h
3607
3608 check_header sndio.h
3609 if check_struct sys/soundcard.h audio_buf_info bytes; then
3610     enable_safe sys/soundcard.h
3611 else
3612     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
3613     #include <sys/soundcard.h>
3614     audio_buf_info abc;
3615 EOF
3616 fi
3617 check_header soundcard.h
3618
3619 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3620
3621 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
3622     check_func jack_port_get_latency_range -ljack
3623
3624 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3625
3626 enabled libcdio &&
3627     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open "-lcdio_paranoia -lcdio_cdda -lcdio"
3628
3629 enabled x11grab                                           &&
3630 require X11 X11/Xlib.h XOpenDisplay -lX11                 &&
3631 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
3632 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
3633
3634 if ! disabled vaapi; then
3635     check_lib va/va.h vaInitialize -lva && {
3636         check_cpp_condition va/va_version.h "VA_CHECK_VERSION(0,32,0)" ||
3637         warn "Please upgrade to VA-API >= 0.32 if you would like full VA-API support.";
3638     } || disable vaapi
3639 fi
3640
3641 if ! disabled vdpau && enabled vdpau_vdpau_h; then
3642 check_cpp_condition \
3643     vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3644     { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
3645       disable vdpau; }
3646 fi
3647
3648 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3649 enabled coverage && add_cflags "-fprofile-arcs -ftest-coverage" && add_ldflags "-fprofile-arcs -ftest-coverage"
3650 test -n "$valgrind" && target_exec="$valgrind --error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions=$source_path/tests/fate-valgrind.supp"
3651
3652 # add some useful compiler flags if supported
3653 check_cflags -Wdeclaration-after-statement
3654 check_cflags -Wall
3655 check_cflags -Wno-parentheses
3656 check_cflags -Wno-switch
3657 check_cflags -Wno-format-zero-length
3658 check_cflags -Wdisabled-optimization
3659 check_cflags -Wpointer-arith
3660 check_cflags -Wredundant-decls
3661 check_cflags -Wno-pointer-sign
3662 check_cflags -Wwrite-strings
3663 check_cflags -Wtype-limits
3664 check_cflags -Wundef
3665 check_cflags -Wmissing-prototypes
3666 check_cflags -Wno-pointer-to-int-cast
3667 check_cflags -Wstrict-prototypes
3668 enabled extra_warnings && check_cflags -Winline
3669
3670 # add some linker flags
3671 check_ldflags -Wl,--warn-common
3672 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
3673 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3674
3675 enabled xmm_clobber_test &&
3676     check_ldflags -Wl,--wrap,avcodec_open2              \
3677                   -Wl,--wrap,avcodec_decode_audio4      \
3678                   -Wl,--wrap,avcodec_decode_video2      \
3679                   -Wl,--wrap,avcodec_decode_subtitle2   \
3680                   -Wl,--wrap,avcodec_encode_audio2      \
3681                   -Wl,--wrap,avcodec_encode_video       \
3682                   -Wl,--wrap,avcodec_encode_subtitle    \
3683                   -Wl,--wrap,sws_scale ||
3684     disable xmm_clobber_test
3685
3686 echo "X{};" > $TMPV
3687 if test_ldflags -Wl,--version-script,$TMPV; then
3688     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3689     check_cc <<EOF && enable symver_asm_label
3690 void ff_foo(void) __asm__ ("av_foo@VERSION");
3691 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3692 EOF
3693     check_cc <<EOF && enable symver_gnu_asm
3694 __asm__(".symver ff_foo,av_foo@VERSION");
3695 void ff_foo(void) {}
3696 EOF
3697 fi
3698
3699 if [ -n "$optflags" ]; then
3700     add_cflags $optflags
3701 elif enabled small; then
3702     add_cflags $cflags_size
3703 elif enabled optimizations; then
3704     add_cflags $cflags_speed
3705 else
3706     add_cflags $cflags_noopt
3707 fi
3708 check_cflags -fno-math-errno
3709 check_cflags -fno-signed-zeros
3710 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
3711 int x;
3712 EOF
3713
3714
3715 if enabled icc; then
3716     # Just warnings, no remarks
3717     check_cflags -w1
3718     # -wd: Disable following warnings
3719     # 144, 167, 556: -Wno-pointer-sign
3720     # 1292: attribute "foo" ignored
3721     # 1419: external declaration in primary source file
3722     # 10006: ignoring unknown option -fno-signed-zeros
3723     # 10148: ignoring unknown option -Wno-parentheses
3724     # 10156: ignoring option '-W'; no argument required
3725     check_cflags -wd144,167,556,1292,1419,10006,10148,10156
3726     # 11030: Warning unknown option --as-needed
3727     # 10156: ignoring option '-export'; no argument required
3728     check_ldflags -wd10156,11030
3729     # Allow to compile with optimizations
3730     check_ldflags -march=$cpu
3731     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3732     enable ebp_available
3733     if enabled x86_32; then
3734         icc_version=$($cc -dumpversion)
3735         test ${icc_version%%.*} -ge 11 &&
3736             check_cflags -falign-stack=maintain-16-byte ||
3737             disable aligned_stack
3738     fi
3739 elif enabled ccc; then
3740     # disable some annoying warnings
3741     add_cflags -msg_disable cvtu32to64
3742     add_cflags -msg_disable embedcomment
3743     add_cflags -msg_disable needconstext
3744     add_cflags -msg_disable nomainieee
3745     add_cflags -msg_disable ptrmismatch1
3746     add_cflags -msg_disable unreachcode
3747 elif enabled gcc; then
3748     check_cflags -fno-tree-vectorize
3749     check_cflags -Werror=implicit-function-declaration
3750     check_cflags -Werror=missing-prototypes
3751 elif enabled llvm_gcc; then
3752     check_cflags -mllvm -stack-alignment=16
3753 elif enabled clang; then
3754     check_cflags -mllvm -stack-alignment=16
3755     check_cflags -Qunused-arguments
3756 elif enabled armcc; then
3757     # 2523: use of inline assembler is deprecated
3758     add_cflags -W${armcc_opt},--diag_suppress=2523
3759     add_cflags -W${armcc_opt},--diag_suppress=1207
3760     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3761     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3762     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
3763     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
3764 elif enabled tms470; then
3765     add_cflags -pds=824 -pds=837
3766 elif enabled pathscale; then
3767     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3768 fi
3769
3770 # If a missing snprintf/broken strtod is detected, force-include headers
3771 # that override prototypes and define it to a prefixed one implemented in
3772 # libavutil. We do this at the end since -I flags aren't set in configure,
3773 # and any additional check_cflags() beyond here will thus fail (because
3774 # it can't find these files, because the -I$(srcdir) wasn't set).
3775 enabled snprintf || force_include compat/snprintf.h
3776 enabled broken_strtod && force_include compat/strtod.h
3777
3778 enabled_any $THREADS_LIST      && enable threads
3779
3780 check_deps $CONFIG_LIST       \
3781            $CONFIG_EXTRA      \
3782            $HAVE_LIST         \
3783            $ALL_COMPONENTS    \
3784            $ALL_TESTS         \
3785
3786 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3787
3788 if test $target_os = "haiku"; then
3789     disable memalign
3790     disable posix_memalign
3791 fi
3792
3793 ! enabled_any memalign posix_memalign aligned_malloc &&
3794     enabled_any $need_memalign && enable memalign_hack
3795
3796 # add_dep lib dep
3797 # -> enable ${lib}_deps_${dep}
3798 # -> add $dep to ${lib}_deps only once
3799 add_dep() {
3800     lib=$1
3801     dep=$2
3802     enabled "${lib}_deps_${dep}" && return 0
3803     enable  "${lib}_deps_${dep}"
3804     prepend "${lib}_deps" $dep
3805 }
3806
3807 # merge deps lib components
3808 # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
3809 merge_deps() {
3810     lib=$1
3811     shift
3812     for comp in $*; do
3813         enabled $comp || continue
3814         eval "dep=\"\$${comp}_deps\""
3815         for d in $dep; do
3816             add_dep $lib $d
3817         done
3818     done
3819 }
3820
3821 merge_deps libavfilter $FILTER_LIST
3822
3823 echo "install prefix            $prefix"
3824 echo "source path               $source_path"
3825 echo "C compiler                $cc"
3826 echo "ARCH                      $arch ($cpu)"
3827 if test "$build_suffix" != ""; then
3828     echo "build suffix              $build_suffix"
3829 fi
3830 if test "$progs_suffix" != ""; then
3831     echo "progs suffix              $progs_suffix"
3832 fi
3833 if test "$extra_version" != ""; then
3834     echo "version string suffix     $extra_version"
3835 fi
3836 echo "big-endian                ${bigendian-no}"
3837 echo "runtime cpu detection     ${runtime_cpudetect-no}"
3838 if enabled x86; then
3839     echo "${yasmexe}                      ${yasm-no}"
3840     echo "MMX enabled               ${mmx-no}"
3841     echo "MMXEXT enabled            ${mmxext-no}"
3842     echo "3DNow! enabled            ${amd3dnow-no}"
3843     echo "3DNow! extended enabled   ${amd3dnowext-no}"
3844     echo "SSE enabled               ${sse-no}"
3845     echo "SSSE3 enabled             ${ssse3-no}"
3846     echo "AVX enabled               ${avx-no}"
3847     echo "FMA4 enabled              ${fma4-no}"
3848     echo "CMOV enabled              ${cmov-no}"
3849     echo "CMOV is fast              ${fast_cmov-no}"
3850     echo "EBX available             ${ebx_available-no}"
3851     echo "EBP available             ${ebp_available-no}"
3852 fi
3853 if enabled arm; then
3854     echo "ARMv5TE enabled           ${armv5te-no}"
3855     echo "ARMv6 enabled             ${armv6-no}"
3856     echo "ARMv6T2 enabled           ${armv6t2-no}"
3857     echo "ARM VFP enabled           ${armvfp-no}"
3858     echo "NEON enabled              ${neon-no}"
3859 fi
3860 if enabled mips; then
3861     echo "MMI enabled               ${mmi-no}"
3862     echo "MIPS FPU enabled          ${mipsfpu-no}"
3863     echo "MIPS32R2 enabled          ${mips32r2-no}"
3864     echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"
3865     echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
3866 fi
3867 if enabled ppc; then
3868     echo "AltiVec enabled           ${altivec-no}"
3869     echo "PPC 4xx optimizations     ${ppc4xx-no}"
3870     echo "dcbzl available           ${dcbzl-no}"
3871 fi
3872 if enabled sparc; then
3873     echo "VIS enabled               ${vis-no}"
3874 fi
3875 echo "debug symbols             ${debug-no}"
3876 echo "strip symbols             ${stripping-no}"
3877 echo "optimize for size         ${small-no}"
3878 echo "optimizations             ${optimizations-no}"
3879 echo "static                    ${static-no}"
3880 echo "shared                    ${shared-no}"
3881 echo "postprocessing support    ${postproc-no}"
3882 echo "new filter support        ${avfilter-no}"
3883 echo "network support           ${network-no}"
3884 echo "threading support         ${thread_type-no}"
3885 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
3886 echo "SDL support               ${sdl-no}"
3887 echo "libdxva2 enabled          ${dxva2-no}"
3888 echo "libva enabled             ${vaapi-no}"
3889 echo "libvdpau enabled          ${vdpau-no}"
3890 echo "AVISynth enabled          ${avisynth-no}"
3891 echo "frei0r enabled            ${frei0r-no}"
3892 echo "gnutls enabled            ${gnutls-no}"
3893 echo "libaacplus enabled        ${libaacplus-no}"
3894 echo "libass enabled            ${libass-no}"
3895 echo "libcaca enabled           ${libcaca-no}"
3896 echo "libcdio support           ${libcdio-no}"
3897 echo "libcelt enabled           ${libcelt-no}"
3898 echo "libdc1394 support         ${libdc1394-no}"
3899 echo "libfaac enabled           ${libfaac-no}"
3900 echo "libfdk-aac enabled        ${libfdk_aac-no}"
3901 echo "libgsm enabled            ${libgsm-no}"
3902 echo "libiec61883 support       ${libiec61883-no}"
3903 echo "libilbc enabled           ${libilbc-no}"
3904 echo "libmodplug enabled        ${libmodplug-no}"
3905 echo "libmp3lame enabled        ${libmp3lame-no}"
3906 echo "libnut enabled            ${libnut-no}"
3907 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3908 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3909 echo "libopencv support         ${libopencv-no}"
3910 echo "libopenjpeg enabled       ${libopenjpeg-no}"
3911 echo "libopus enabled           ${libopus-no}"
3912 echo "libpulse enabled          ${libpulse-no}"
3913 echo "librtmp enabled           ${librtmp-no}"
3914 echo "libschroedinger enabled   ${libschroedinger-no}"
3915 echo "libspeex enabled          ${libspeex-no}"
3916 echo "libstagefright-h264 enabled    ${libstagefright_h264-no}"
3917 echo "libtheora enabled         ${libtheora-no}"
3918 echo "libtwolame enabled        ${libtwolame-no}"
3919 echo "libutvideo enabled        ${libutvideo-no}"
3920 echo "libv4l2 enabled           ${libv4l2-no}"
3921 echo "libvo-aacenc support      ${libvo_aacenc-no}"
3922 echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
3923 echo "libvorbis enabled         ${libvorbis-no}"
3924 echo "libvpx enabled            ${libvpx-no}"
3925 echo "libx264 enabled           ${libx264-no}"
3926 echo "libxavs enabled           ${libxavs-no}"
3927 echo "libxvid enabled           ${libxvid-no}"
3928 echo "openal enabled            ${openal-no}"
3929 echo "openssl enabled           ${openssl-no}"
3930 echo "zlib enabled              ${zlib-no}"
3931 echo "bzlib enabled             ${bzlib-no}"
3932 echo "texi2html enabled         ${texi2html-no}"
3933 echo "perl enabled              ${perl-no}"
3934 echo "pod2man enabled           ${pod2man-no}"
3935 echo "makeinfo enabled          ${makeinfo-no}"
3936 test -n "$random_seed" &&
3937     echo "random seed               ${random_seed}"
3938 echo
3939
3940 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3941     echo "Enabled ${type}s:"
3942     eval list=\$$(toupper $type)_LIST
3943     print_enabled '_*' $list | sort | pr -r -3 -t
3944     echo
3945 done
3946
3947 license="LGPL version 2.1 or later"
3948 if enabled nonfree; then
3949     license="nonfree and unredistributable"
3950 elif enabled gplv3; then
3951     license="GPL version 3 or later"
3952 elif enabled lgplv3; then
3953     license="LGPL version 3 or later"
3954 elif enabled gpl; then
3955     license="GPL version 2 or later"
3956 fi
3957
3958 echo "License: $license"
3959
3960 echo "Creating config.mak and config.h..."
3961
3962 test -e Makefile || $ln_s "$source_path/Makefile" .
3963
3964 enabled stripping || strip="echo skipping strip"
3965
3966 config_files="$TMPH config.mak"
3967
3968 cat > config.mak <<EOF
3969 # Automatically generated by configure - do not modify!
3970 ifndef FFMPEG_CONFIG_MAK
3971 FFMPEG_CONFIG_MAK=1
3972 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3973 prefix=$prefix
3974 LIBDIR=\$(DESTDIR)$libdir
3975 SHLIBDIR=\$(DESTDIR)$shlibdir
3976 INCDIR=\$(DESTDIR)$incdir
3977 BINDIR=\$(DESTDIR)$bindir
3978 DATADIR=\$(DESTDIR)$datadir
3979 MANDIR=\$(DESTDIR)$mandir
3980 SRC_PATH=$source_path
3981 ifndef MAIN_MAKEFILE
3982 SRC_PATH:=\$(SRC_PATH:.%=..%)
3983 endif
3984 CC_IDENT=$cc_ident
3985 ARCH=$arch
3986 CC=$cc
3987 CXX=$cxx
3988 AS=$as
3989 LD=$ld
3990 DEPCC=$dep_cc
3991 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
3992 DEPAS=$as
3993 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
3994 YASM=$yasmexe
3995 DEPYASM=$yasmexe
3996 AR=$ar
3997 RANLIB=$ranlib
3998 CP=cp -p
3999 LN_S=$ln_s
4000 STRIP=$strip
4001 CPPFLAGS=$CPPFLAGS
4002 CFLAGS=$CFLAGS
4003 CXXFLAGS=$CXXFLAGS
4004 ASFLAGS=$ASFLAGS
4005 AS_C=$AS_C
4006 AS_O=$AS_O
4007 CC_C=$CC_C
4008 CC_O=$CC_O
4009 CXX_C=$CXX_C
4010 CXX_O=$CXX_O
4011 LD_O=$LD_O
4012 DLLTOOL=$dlltool
4013 LDFLAGS=$LDFLAGS
4014 LDFLAGS-ffserver=$FFSERVERLDFLAGS
4015 SHFLAGS=$SHFLAGS
4016 YASMFLAGS=$YASMFLAGS
4017 BUILDSUF=$build_suffix
4018 PROGSSUF=$progs_suffix
4019 FULLNAME=$FULLNAME
4020 LIBPREF=$LIBPREF
4021 LIBSUF=$LIBSUF
4022 LIBNAME=$LIBNAME
4023 SLIBPREF=$SLIBPREF
4024 SLIBSUF=$SLIBSUF
4025 EXESUF=$EXESUF
4026 EXTRA_VERSION=$extra_version
4027 CCDEP=$CCDEP
4028 CXXDEP=$CXXDEP
4029 CCDEP_FLAGS=$CCDEP_FLAGS
4030 ASDEP=$ASDEP
4031 ASDEP_FLAGS=$ASDEP_FLAGS
4032 CC_DEPFLAGS=$CC_DEPFLAGS
4033 AS_DEPFLAGS=$AS_DEPFLAGS
4034 HOSTCC=$host_cc
4035 HOSTCFLAGS=$host_cflags
4036 HOSTEXESUF=$HOSTEXESUF
4037 HOSTLDFLAGS=$host_ldflags
4038 HOSTLIBS=$host_libs
4039 DEPHOSTCC=$host_cc
4040 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
4041 HOSTCCDEP=$HOSTCCDEP
4042 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
4043 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
4044 HOSTCC_C=$HOSTCC_C
4045 HOSTCC_O=$HOSTCC_O
4046 TARGET_EXEC=$target_exec
4047 TARGET_PATH=$target_path
4048 LIBS-ffplay=$sdl_libs
4049 CFLAGS-ffplay=$sdl_cflags
4050 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
4051 EXTRALIBS=$extralibs
4052 INSTALL=$install
4053 LIBTARGET=${LIBTARGET}
4054 SLIBNAME=${SLIBNAME}
4055 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
4056 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
4057 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
4058 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
4059 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
4060 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
4061 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
4062 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
4063 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
4064 NOREDZONE_FLAGS=$noredzone_flags
4065 EOF
4066
4067 get_version(){
4068     lcname=$1
4069     name=$(toupper $lcname)
4070     file=$source_path/$lcname/version.h
4071     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
4072     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4073     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
4074     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4075 }
4076
4077 get_version_old(){
4078     name=$1
4079     file=$source_path/$2
4080 # This condition will be removed when we stop supporting old libpostproc versions
4081 if ! test "$name" = LIBPOSTPROC || test "$postproc_version" = current; then
4082     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
4083     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4084 fi
4085     lcname=$(tolower $name)
4086     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
4087     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4088 }
4089
4090 get_version_old LIBPOSTPROC libpostproc/postprocess.h
4091 get_version_old LIBSWRESAMPLE libswresample/swresample.h
4092
4093 get_version libavcodec
4094 get_version libavdevice
4095 get_version libavfilter
4096 get_version libavformat
4097 get_version libavresample
4098 get_version libavutil
4099 get_version libswscale
4100
4101 cat > $TMPH <<EOF
4102 /* Automatically generated by configure - do not modify! */
4103 #ifndef FFMPEG_CONFIG_H
4104 #define FFMPEG_CONFIG_H
4105 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
4106 #define FFMPEG_LICENSE "$(c_escape $license)"
4107 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
4108 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
4109 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
4110 #define av_restrict $_restrict
4111 #define EXTERN_PREFIX "${extern_prefix}"
4112 #define EXTERN_ASM ${extern_prefix}
4113 #define SLIBSUF "$SLIBSUF"
4114 #define HAVE_MMX2 HAVE_MMXEXT
4115 EOF
4116
4117 test -n "$assert_level" &&
4118     echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
4119
4120 test -n "$malloc_prefix" &&
4121     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
4122
4123 if enabled yasm; then
4124     append config_files $TMPASM
4125     printf '' >$TMPASM
4126 fi
4127
4128 print_config ARCH_   "$config_files" $ARCH_LIST
4129 print_config HAVE_   "$config_files" $HAVE_LIST
4130 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
4131                                      $CONFIG_EXTRA      \
4132                                      $ALL_COMPONENTS    \
4133
4134 cat >>config.mak <<EOF
4135 LAVF_FATE_TESTS=$(print_enabled -n _test $LAVF_FATE_TESTS)
4136 LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
4137 LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
4138 SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
4139 EOF
4140
4141 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
4142 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
4143
4144 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
4145 cp_if_changed $TMPH config.h
4146 touch .config
4147
4148 enabled yasm && cp_if_changed $TMPASM config.asm
4149
4150 cat > $TMPH <<EOF
4151 /* Generated by ffconf */
4152 #ifndef AVUTIL_AVCONFIG_H
4153 #define AVUTIL_AVCONFIG_H
4154 EOF
4155
4156 test "$postproc_version" != current && cat >> $TMPH <<EOF
4157 #define LIBPOSTPROC_VERSION_MAJOR $LIBPOSTPROC_VERSION_MAJOR
4158 #define LIBPOSTPROC_VERSION_MINOR $LIBPOSTPROC_VERSION_MINOR
4159 #define LIBPOSTPROC_VERSION_MICRO $LIBPOSTPROC_VERSION_MICRO
4160 EOF
4161
4162 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
4163
4164 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
4165
4166 cp_if_changed $TMPH libavutil/avconfig.h
4167
4168 test -n "$WARNINGS" && printf "\n$WARNINGS"
4169
4170 # build pkg-config files
4171
4172 pkgconfig_generate(){
4173 name=$1
4174 shortname=${name#lib}${build_suffix}
4175 comment=$2
4176 version=$3
4177 libs=$4
4178 requires=$5
4179 enabled ${name#lib} || return 0
4180 mkdir -p $name
4181 cat <<EOF > $name/$name.pc
4182 prefix=$prefix
4183 exec_prefix=\${prefix}
4184 libdir=$libdir
4185 includedir=$incdir
4186
4187 Name: $name
4188 Description: $comment
4189 Version: $version
4190 Requires: $(enabled shared || echo $requires)
4191 Requires.private: $(enabled shared && echo $requires)
4192 Conflicts:
4193 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4194 Libs.private: $(enabled shared && echo $libs)
4195 Cflags: -I\${includedir}
4196 EOF
4197
4198 mkdir -p doc/examples/pc-uninstalled
4199 includedir=${source_path}
4200 [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
4201 cat <<EOF > doc/examples/pc-uninstalled/$name.pc
4202 prefix=
4203 exec_prefix=
4204 libdir=\${pcfiledir}/../../../$name
4205 includedir=${includedir}
4206
4207 Name: $name
4208 Description: $comment
4209 Version: $version
4210 Requires: $requires
4211 Conflicts:
4212 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4213 Cflags: -I\${includedir}
4214 EOF
4215 }
4216
4217 libavfilter_pc_deps=""
4218 enabled libavfilter_deps_avcodec    && prepend libavfilter_pc_deps "libavcodec = $LIBAVCODEC_VERSION,"
4219 enabled libavfilter_deps_avformat   && prepend libavfilter_pc_deps "libavformat = $LIBAVFORMAT_VERSION,"
4220 enabled libavfilter_deps_swscale    && prepend libavfilter_pc_deps "libswscale = $LIBSWSCALE_VERSION,"
4221 enabled libavfilter_deps_swresample && prepend libavfilter_pc_deps "libswresample = $LIBSWRESAMPLE_VERSION,"
4222 enabled libavfilter_deps_postproc   && prepend libavfilter_pc_deps "libpostproc = $LIBPOSTPROC_VERSION,"
4223 libavfilter_pc_deps=${libavfilter_pc_deps%, }
4224
4225 libavdevice_pc_deps="libavformat = $LIBAVFORMAT_VERSION"
4226 enabled lavfi_indev && prepend libavdevice_pc_deps "libavfilter = $LIBAVFILTER_VERSION,"
4227
4228 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
4229 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
4230 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
4231 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$libavdevice_pc_deps"
4232 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$libavfilter_pc_deps"
4233 pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
4234 pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs"
4235 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
4236 pkgconfig_generate libswresample "FFmpeg audio rescaling library" "$LIBSWRESAMPLE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"