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