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