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