]> git.sesse.net Git - ffmpeg/blob - configure
b139008d2b1aa5faea3f33c2a1922d0e1cb1fa5c
[ffmpeg] / 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_y
1081     attribute_may_alias
1082     attribute_packed
1083     cbrtf
1084     closesocket
1085     cmov
1086     cpuid
1087     dcbzl
1088     dev_bktr_ioctl_bt848_h
1089     dev_bktr_ioctl_meteor_h
1090     dev_ic_bt8xx_h
1091     dev_video_bktr_ioctl_bt848_h
1092     dev_video_meteor_ioctl_meteor_h
1093     dlfcn_h
1094     dlopen
1095     dos_paths
1096     dxva_h
1097     ebp_available
1098     ebx_available
1099     exp2
1100     exp2f
1101     fast_64bit
1102     fast_clz
1103     fast_cmov
1104     fcntl
1105     fork
1106     getaddrinfo
1107     gethrtime
1108     getopt
1109     GetProcessAffinityMask
1110     GetProcessMemoryInfo
1111     GetProcessTimes
1112     GetSystemTimeAsFileTime
1113     getrusage
1114     gettimeofday
1115     gnu_as
1116     ibm_asm
1117     inet_aton
1118     inline_asm
1119     io_h
1120     isatty
1121     isinf
1122     isnan
1123     jack_port_get_latency_range
1124     ldbrx
1125     libdc1394_1
1126     libdc1394_2
1127     llrint
1128     llrintf
1129     local_aligned_16
1130     local_aligned_8
1131     localtime_r
1132     log2
1133     log2f
1134     loongson
1135     lrint
1136     lrintf
1137     machine_ioctl_bt848_h
1138     machine_ioctl_meteor_h
1139     malloc_h
1140     MapViewOfFile
1141     memalign
1142     mkstemp
1143     mm_empty
1144     mmap
1145     nanosleep
1146     netinet_sctp_h
1147     poll_h
1148     posix_memalign
1149     rdtsc
1150     rint
1151     round
1152     roundf
1153     rweflags
1154     sched_getaffinity
1155     sdl
1156     sdl_video_size
1157     setmode
1158     setrlimit
1159     Sleep
1160     sndio_h
1161     socklen_t
1162     soundcard_h
1163     strerror_r
1164     strptime
1165     strtok_r
1166     struct_addrinfo
1167     struct_group_source_req
1168     struct_ip_mreq_source
1169     struct_ipv6_mreq
1170     struct_pollfd
1171     struct_rusage_ru_maxrss
1172     struct_sockaddr_in6
1173     struct_sockaddr_sa_len
1174     struct_sockaddr_storage
1175     struct_v4l2_frmivalenum_discrete
1176     symver
1177     symver_asm_label
1178     symver_gnu_asm
1179     sysconf
1180     sysctl
1181     sys_mman_h
1182     sys_param_h
1183     sys_resource_h
1184     sys_select_h
1185     sys_soundcard_h
1186     sys_time_h
1187     sys_videoio_h
1188     threads
1189     trunc
1190     truncf
1191     unistd_h
1192     usleep
1193     vfp_args
1194     VirtualAlloc
1195     windows_h
1196     winsock2_h
1197     xform_asm
1198     xgetbv
1199     xmm_clobbers
1200     yasm
1201 "
1202
1203 # options emitted with CONFIG_ prefix but not available on command line
1204 CONFIG_EXTRA="
1205     aandcttables
1206     ac3dsp
1207     avutil
1208     gcrypt
1209     golomb
1210     gplv3
1211     h264chroma
1212     h264dsp
1213     h264pred
1214     h264qpel
1215     huffman
1216     lgplv3
1217     lpc
1218     mpegaudiodsp
1219     nettle
1220     rtpdec
1221     sinewin
1222     vp3dsp
1223 "
1224
1225 CMDLINE_SELECT="
1226     $ARCH_EXT_LIST
1227     $CONFIG_LIST
1228     $THREADS_LIST
1229     asm
1230     cross_compile
1231     debug
1232     extra_warnings
1233     logging
1234     optimizations
1235     symver
1236     yasm
1237 "
1238
1239 PATHS_LIST='
1240     bindir
1241     datadir
1242     incdir
1243     libdir
1244     mandir
1245     prefix
1246     shlibdir
1247 '
1248
1249 CMDLINE_SET="
1250     $PATHS_LIST
1251     ar
1252     arch
1253     as
1254     build_suffix
1255     cc
1256     cpu
1257     cross_prefix
1258     dep_cc
1259     extra_version
1260     host_cc
1261     host_cflags
1262     host_ldflags
1263     host_libs
1264     host_os
1265     ld
1266     logfile
1267     malloc_prefix
1268     nm
1269     optflags
1270     pkg_config
1271     samples
1272     sysinclude
1273     sysroot
1274     target_exec
1275     target_os
1276     target_path
1277 "
1278
1279 CMDLINE_APPEND="
1280     extra_cflags
1281 "
1282
1283 # code dependency declarations
1284
1285 # architecture extensions
1286
1287 armv5te_deps="arm"
1288 armv6_deps="arm"
1289 armv6t2_deps="arm"
1290 armvfp_deps="arm"
1291 neon_deps="arm"
1292 vfpv3_deps="armvfp"
1293
1294 mmi_deps="mips"
1295
1296 altivec_deps="ppc"
1297 ppc4xx_deps="ppc"
1298
1299 vis_deps="sparc"
1300
1301 x86_64_suggest="cmov fast_cmov"
1302 amd3dnow_deps="mmx"
1303 amd3dnowext_deps="amd3dnow"
1304 mmx_deps="x86"
1305 mmxext_deps="mmx"
1306 sse_deps="mmx"
1307 ssse3_deps="sse"
1308 avx_deps="ssse3"
1309 fma4_deps="avx"
1310
1311 aligned_stack_if_any="ppc x86"
1312 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1313 fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1314 fast_unaligned_if_any="armv6 ppc x86"
1315
1316 inline_asm_deps="!tms470"
1317 need_memalign="altivec neon sse"
1318
1319 symver_if_any="symver_asm_label symver_gnu_asm"
1320
1321 # subsystems
1322 dct_select="rdft"
1323 mdct_select="fft"
1324 rdft_select="fft"
1325 mpegaudiodsp_select="dct"
1326
1327 # decoders / encoders / hardware accelerators
1328 aac_decoder_select="mdct sinewin"
1329 aac_encoder_select="mdct sinewin"
1330 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1331 ac3_decoder_select="mdct ac3dsp ac3_parser"
1332 ac3_encoder_select="mdct ac3dsp"
1333 ac3_fixed_encoder_select="mdct ac3dsp"
1334 alac_encoder_select="lpc"
1335 amrnb_decoder_select="lsp"
1336 amrwb_decoder_select="lsp"
1337 atrac1_decoder_select="mdct sinewin"
1338 atrac3_decoder_select="mdct"
1339 binkaudio_dct_decoder_select="mdct rdft dct sinewin"
1340 binkaudio_rdft_decoder_select="mdct rdft sinewin"
1341 cavs_decoder_select="golomb"
1342 cook_decoder_select="mdct sinewin"
1343 cscd_decoder_suggest="zlib"
1344 dca_decoder_select="mdct"
1345 dnxhd_encoder_select="aandcttables"
1346 dxa_decoder_select="zlib"
1347 eac3_decoder_select="ac3_decoder"
1348 eac3_encoder_select="mdct ac3dsp"
1349 eamad_decoder_select="aandcttables"
1350 eatgq_decoder_select="aandcttables"
1351 eatqi_decoder_select="aandcttables"
1352 ffv1_decoder_select="golomb"
1353 flac_decoder_select="golomb"
1354 flac_encoder_select="golomb lpc"
1355 flashsv_decoder_select="zlib"
1356 flashsv_encoder_select="zlib"
1357 flashsv2_decoder_select="zlib"
1358 flv_decoder_select="h263_decoder"
1359 flv_encoder_select="h263_encoder"
1360 fraps_decoder_select="huffman"
1361 h261_encoder_select="aandcttables"
1362 h263_decoder_select="h263_parser"
1363 h263_encoder_select="aandcttables"
1364 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1365 h263i_decoder_select="h263_decoder"
1366 h263p_encoder_select="h263_encoder"
1367 h264_decoder_select="golomb h264chroma h264dsp h264pred h264qpel"
1368 h264_dxva2_hwaccel_deps="dxva2api_h"
1369 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1370 h264_vaapi_hwaccel_select="vaapi h264_decoder"
1371 h264_vda_hwaccel_select="vda h264_decoder"
1372 h264_vdpau_decoder_select="vdpau h264_decoder"
1373 iac_decoder_select="fft mdct sinewin"
1374 imc_decoder_select="fft mdct sinewin"
1375 jpegls_decoder_select="golomb"
1376 jpegls_encoder_select="golomb"
1377 ljpeg_encoder_select="aandcttables"
1378 loco_decoder_select="golomb"
1379 mjpeg_encoder_select="aandcttables"
1380 mlp_decoder_select="mlp_parser"
1381 mp1_decoder_select="mpegaudiodsp"
1382 mp1float_decoder_select="mpegaudiodsp"
1383 mp2_decoder_select="mpegaudiodsp"
1384 mp2float_decoder_select="mpegaudiodsp"
1385 mp3_decoder_select="mpegaudiodsp"
1386 mp3adu_decoder_select="mpegaudiodsp"
1387 mp3adufloat_decoder_select="mpegaudiodsp"
1388 mp3float_decoder_select="mpegaudiodsp"
1389 mp3on4_decoder_select="mpegaudiodsp"
1390 mp3on4float_decoder_select="mpegaudiodsp"
1391 mpc7_decoder_select="mpegaudiodsp"
1392 mpc8_decoder_select="mpegaudiodsp"
1393 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1394 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1395 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1396 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1397 mpeg1video_encoder_select="aandcttables"
1398 mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1399 mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1400 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1401 mpeg2video_encoder_select="aandcttables"
1402 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1403 mpeg4_encoder_select="h263_encoder"
1404 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1405 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1406 msmpeg4v1_decoder_select="h263_decoder"
1407 msmpeg4v1_encoder_select="h263_encoder"
1408 msmpeg4v2_decoder_select="h263_decoder"
1409 msmpeg4v2_encoder_select="h263_encoder"
1410 msmpeg4v3_decoder_select="h263_decoder"
1411 msmpeg4v3_encoder_select="h263_encoder"
1412 nellymoser_decoder_select="mdct sinewin"
1413 nellymoser_encoder_select="mdct sinewin"
1414 png_decoder_select="zlib"
1415 png_encoder_select="zlib"
1416 qcelp_decoder_select="lsp"
1417 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1418 ra_144_encoder_select="lpc"
1419 ralf_decoder_select="golomb"
1420 rv10_decoder_select="h263_decoder"
1421 rv10_encoder_select="h263_encoder"
1422 rv20_decoder_select="h263_decoder"
1423 rv20_encoder_select="h263_encoder"
1424 rv30_decoder_select="golomb h264chroma h264pred h264qpel"
1425 rv40_decoder_select="golomb h264chroma h264pred h264qpel"
1426 shorten_decoder_select="golomb"
1427 sipr_decoder_select="lsp"
1428 snow_decoder_select="dwt"
1429 snow_encoder_select="aandcttables dwt"
1430 svq1_encoder_select="aandcttables"
1431 svq3_decoder_select="golomb h264chroma h264dsp h264pred h264qpel"
1432 svq3_decoder_suggest="zlib"
1433 theora_decoder_select="vp3_decoder"
1434 tiff_decoder_suggest="zlib"
1435 tiff_encoder_suggest="zlib"
1436 truehd_decoder_select="mlp_decoder"
1437 tscc_decoder_select="zlib"
1438 twinvq_decoder_select="mdct lsp sinewin"
1439 vc1_decoder_select="h263_decoder h264chroma h264qpel"
1440 vc1_dxva2_hwaccel_deps="dxva2api_h"
1441 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1442 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1443 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1444 vc1image_decoder_select="vc1_decoder"
1445 vorbis_decoder_select="mdct"
1446 vorbis_encoder_select="mdct"
1447 vp3_decoder_select="vp3dsp"
1448 vp5_decoder_select="vp3dsp"
1449 vp6_decoder_select="huffman vp3dsp"
1450 vp6a_decoder_select="vp6_decoder"
1451 vp6f_decoder_select="vp6_decoder"
1452 vp8_decoder_select="h264pred h264qpel"
1453 wmapro_decoder_select="mdct sinewin"
1454 wmav1_decoder_select="mdct sinewin"
1455 wmav1_encoder_select="mdct sinewin"
1456 wmav2_decoder_select="mdct sinewin"
1457 wmav2_encoder_select="mdct sinewin"
1458 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1459 wmv1_decoder_select="h263_decoder"
1460 wmv1_encoder_select="h263_encoder"
1461 wmv2_decoder_select="h263_decoder"
1462 wmv2_encoder_select="h263_encoder"
1463 wmv3_decoder_select="vc1_decoder"
1464 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1465 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1466 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1467 wmv3image_decoder_select="wmv3_decoder"
1468 zerocodec_decoder_select="zlib"
1469 zlib_decoder_select="zlib"
1470 zlib_encoder_select="zlib"
1471 zmbv_decoder_select="zlib"
1472 zmbv_encoder_select="zlib"
1473
1474 vaapi_deps="va_va_h"
1475 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1476 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1477
1478 # parsers
1479 h264_parser_select="golomb h264dsp h264pred"
1480
1481 # external libraries
1482 libfaac_encoder_deps="libfaac"
1483 libfdk_aac_encoder_deps="libfdk_aac"
1484 libgsm_decoder_deps="libgsm"
1485 libgsm_encoder_deps="libgsm"
1486 libgsm_ms_decoder_deps="libgsm"
1487 libgsm_ms_encoder_deps="libgsm"
1488 libilbc_decoder_deps="libilbc"
1489 libilbc_encoder_deps="libilbc"
1490 libmp3lame_encoder_deps="libmp3lame"
1491 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1492 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1493 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1494 libopenjpeg_decoder_deps="libopenjpeg"
1495 libopenjpeg_encoder_deps="libopenjpeg"
1496 libschroedinger_decoder_deps="libschroedinger"
1497 libschroedinger_encoder_deps="libschroedinger"
1498 libspeex_decoder_deps="libspeex"
1499 libspeex_encoder_deps="libspeex"
1500 libtheora_encoder_deps="libtheora"
1501 libvo_aacenc_encoder_deps="libvo_aacenc"
1502 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1503 libvorbis_encoder_deps="libvorbis"
1504 libvpx_decoder_deps="libvpx"
1505 libvpx_encoder_deps="libvpx"
1506 libx264_encoder_deps="libx264"
1507 libxavs_encoder_deps="libxavs"
1508 libxvid_encoder_deps="libxvid"
1509
1510 # demuxers / muxers
1511 ac3_demuxer_select="ac3_parser"
1512 asf_stream_muxer_select="asf_muxer"
1513 avisynth_demuxer_deps="avisynth"
1514 dirac_demuxer_select="dirac_parser"
1515 eac3_demuxer_select="ac3_parser"
1516 flac_demuxer_select="flac_parser"
1517 ipod_muxer_select="mov_muxer"
1518 matroska_audio_muxer_select="matroska_muxer"
1519 matroska_demuxer_suggest="zlib bzlib"
1520 mov_demuxer_suggest="zlib"
1521 mp3_demuxer_select="mpegaudio_parser"
1522 mp4_muxer_select="mov_muxer"
1523 mpegts_muxer_select="adts_muxer latm_muxer"
1524 mpegtsraw_demuxer_select="mpegts_demuxer"
1525 mxf_d10_muxer_select="mxf_muxer"
1526 ogg_demuxer_select="golomb"
1527 psp_muxer_select="mov_muxer"
1528 rtp_demuxer_select="sdp_demuxer"
1529 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1530 rtsp_demuxer_select="http_protocol rtpdec"
1531 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
1532 sap_demuxer_select="sdp_demuxer"
1533 sap_muxer_select="rtp_muxer rtp_protocol"
1534 sdp_demuxer_select="rtpdec"
1535 spdif_muxer_select="aac_parser"
1536 tg2_muxer_select="mov_muxer"
1537 tgp_muxer_select="mov_muxer"
1538 w64_demuxer_deps="wav_demuxer"
1539
1540 # indevs / outdevs
1541 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1542 alsa_outdev_deps="alsa_asoundlib_h"
1543 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1544 dv1394_indev_deps="dv1394 dv_demuxer"
1545 fbdev_indev_deps="linux_fb_h"
1546 jack_indev_deps="jack_jack_h"
1547 libcdio_indev_deps="libcdio"
1548 libdc1394_indev_deps="libdc1394"
1549 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1550 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1551 pulse_indev_deps="libpulse"
1552 sndio_indev_deps="sndio_h"
1553 sndio_outdev_deps="sndio_h"
1554 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1555 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1556 vfwcap_indev_extralibs="-lavicap32"
1557 x11grab_indev_deps="x11grab XShmCreateImage"
1558
1559 # protocols
1560 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
1561 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
1562 ffrtmpcrypt_protocol_select="tcp_protocol"
1563 ffrtmphttp_protocol_deps="!librtmp_protocol"
1564 ffrtmphttp_protocol_select="http_protocol"
1565 gopher_protocol_deps="network"
1566 httpproxy_protocol_deps="network"
1567 httpproxy_protocol_select="tcp_protocol"
1568 http_protocol_deps="network"
1569 http_protocol_select="tcp_protocol"
1570 https_protocol_select="tls_protocol"
1571 librtmp_protocol_deps="librtmp"
1572 librtmpe_protocol_deps="librtmp"
1573 librtmps_protocol_deps="librtmp"
1574 librtmpt_protocol_deps="librtmp"
1575 librtmpte_protocol_deps="librtmp"
1576 mmsh_protocol_select="http_protocol"
1577 mmst_protocol_deps="network"
1578 rtmp_protocol_deps="!librtmp_protocol"
1579 rtmp_protocol_select="tcp_protocol"
1580 rtmpe_protocol_select="ffrtmpcrypt_protocol"
1581 rtmps_protocol_deps="!librtmp_protocol"
1582 rtmps_protocol_select="tls_protocol"
1583 rtmpt_protocol_select="ffrtmphttp_protocol"
1584 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
1585 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
1586 rtp_protocol_select="udp_protocol"
1587 sctp_protocol_deps="network netinet_sctp_h"
1588 tcp_protocol_deps="network"
1589 tls_protocol_deps_any="openssl gnutls"
1590 tls_protocol_select="tcp_protocol"
1591 udp_protocol_deps="network"
1592
1593 # filters
1594 blackframe_filter_deps="gpl"
1595 boxblur_filter_deps="gpl"
1596 cropdetect_filter_deps="gpl"
1597 delogo_filter_deps="gpl"
1598 drawtext_filter_deps="libfreetype"
1599 frei0r_filter_deps="frei0r dlopen strtok_r"
1600 frei0r_filter_extralibs='$ldl'
1601 frei0r_src_filter_deps="frei0r dlopen strtok_r"
1602 frei0r_src_filter_extralibs='$ldl'
1603 hqdn3d_filter_deps="gpl"
1604 resample_filter_deps="avresample"
1605 ocv_filter_deps="libopencv"
1606 scale_filter_deps="swscale"
1607 yadif_filter_deps="gpl"
1608
1609 # libraries
1610 avdevice_deps="avcodec avformat"
1611 avformat_deps="avcodec"
1612
1613 # programs
1614 avconv_deps="avcodec avfilter avformat avresample swscale
1615              aformat_filter asyncts_filter
1616              format_filter fps_filter scale_filter setpts_filter"
1617 avplay_deps="avcodec avformat swscale sdl"
1618 avplay_select="rdft"
1619 avprobe_deps="avcodec avformat"
1620 avserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer !shared"
1621 avserver_extralibs='$ldl'
1622
1623 doc_deps="texi2html"
1624
1625 # tests
1626
1627 mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1628 seek_lavf_mxf_d10_test_deps="mxf_d10_test"
1629
1630 test_deps(){
1631     suf1=$1
1632     suf2=$2
1633     shift 2
1634     for v; do
1635         dep=${v%=*}
1636         tests=${v#*=}
1637         for name in ${tests}; do
1638             append ${name}_test_deps ${dep}$suf1 ${dep}$suf2
1639         done
1640     done
1641 }
1642
1643 test_deps _muxer _demuxer                                               \
1644     aiff                                                                \
1645     pcm_alaw=alaw                                                       \
1646     asf                                                                 \
1647     au                                                                  \
1648     avi                                                                 \
1649     dv=dv_fmt                                                           \
1650     ffm                                                                 \
1651     flv=flv_fmt                                                         \
1652     gxf                                                                 \
1653     matroska=mkv                                                        \
1654     mmf                                                                 \
1655     mov                                                                 \
1656     pcm_mulaw=mulaw                                                     \
1657     mxf="mxf mxf_d10"                                                   \
1658     nut                                                                 \
1659     ogg                                                                 \
1660     rawvideo=pixfmt                                                     \
1661     rm                                                                  \
1662     swf                                                                 \
1663     mpegts=ts                                                           \
1664     voc                                                                 \
1665     wav                                                                 \
1666     yuv4mpegpipe=yuv4mpeg                                               \
1667
1668 # default parameters
1669
1670 logfile="config.log"
1671
1672 # installation paths
1673 prefix_default="/usr/local"
1674 bindir_default='${prefix}/bin'
1675 datadir_default='${prefix}/share/avconv'
1676 incdir_default='${prefix}/include'
1677 libdir_default='${prefix}/lib'
1678 mandir_default='${prefix}/share/man'
1679 shlibdir_default="$libdir_default"
1680
1681 # toolchain
1682 ar_default="ar"
1683 cc_default="gcc"
1684 host_cc_default="gcc"
1685 ln_s="ln -sf"
1686 nm_default="nm"
1687 objformat="elf"
1688 pkg_config_default=pkg-config
1689 ranlib="ranlib"
1690 yasmexe="yasm"
1691
1692 nm_opts='-g'
1693 nogas=":"
1694
1695 # machine
1696 arch_default=$(uname -m)
1697 cpu="generic"
1698
1699 # OS
1700 target_os_default=$(tolower $(uname -s))
1701 host_os=$target_os_default
1702
1703 # configurable options
1704 enable $PROGRAM_LIST
1705
1706 enable avcodec
1707 enable avdevice
1708 enable avfilter
1709 enable avformat
1710 enable avresample
1711 enable avutil
1712 enable swscale
1713
1714 enable asm
1715 enable debug
1716 enable doc
1717 enable fastdiv
1718 enable network
1719 enable optimizations
1720 enable safe_bitstream_reader
1721 enable static
1722 enable swscale_alpha
1723
1724 # build settings
1725 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1726 AVSERVERLDFLAGS=-Wl,-E
1727 LIBPREF="lib"
1728 LIBSUF=".a"
1729 FULLNAME='$(NAME)$(BUILDSUF)'
1730 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1731 SLIBPREF="lib"
1732 SLIBSUF=".so"
1733 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1734 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1735 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1736 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1737 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
1738 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
1739
1740 asflags_filter=echo
1741 cflags_filter=echo
1742 ldflags_filter=echo
1743
1744 AS_C='-c'
1745 AS_O='-o $@'
1746 CC_C='-c'
1747 CC_E='-E -o $@'
1748 CC_O='-o $@'
1749 LD_O='-o $@'
1750 HOSTCC_C='-c'
1751 HOSTCC_O='-o $@'
1752
1753 host_cflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600 -O3 -g'
1754 host_libs='-lm'
1755 host_cflags_filter=echo
1756 host_ldflags_filter=echo
1757
1758 target_path='$(CURDIR)'
1759
1760 # since the object filename is not given with the -MM flag, the compiler
1761 # is only able to print the basename, and we must add the path ourselves
1762 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1763 DEPFLAGS='-MM'
1764
1765 # find source path
1766 if test -f configure; then
1767     source_path=.
1768 else
1769     source_path=$(cd $(dirname "$0"); pwd)
1770     echo "$source_path" | grep -q '[[:blank:]]' &&
1771         die "Out of tree builds are impossible with whitespace in source path."
1772     test -e "$source_path/config.h" &&
1773         die "Out of tree builds are impossible with config.h in source dir."
1774 fi
1775
1776 for v in "$@"; do
1777     r=${v#*=}
1778     l=${v%"$r"}
1779     r=$(sh_quote "$r")
1780     LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
1781 done
1782
1783 find_things(){
1784     thing=$1
1785     pattern=$2
1786     file=$source_path/$3
1787     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1788 }
1789
1790 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1791 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1792 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1793 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1794 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1795 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1796 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1797 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1798 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1799 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1800 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1801
1802 ALL_COMPONENTS="
1803     $BSF_LIST
1804     $DECODER_LIST
1805     $DEMUXER_LIST
1806     $ENCODER_LIST
1807     $FILTER_LIST
1808     $HWACCEL_LIST
1809     $INDEV_LIST
1810     $MUXER_LIST
1811     $OUTDEV_LIST
1812     $PARSER_LIST
1813     $PROTOCOL_LIST
1814 "
1815
1816 find_tests(){
1817     map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1818 }
1819
1820 LAVF_TESTS=$(find_tests lavf)
1821 LAVFI_TESTS=$(find_tests lavfi)
1822 SEEK_TESTS=$(find_tests seek seek_)
1823
1824 ALL_TESTS="$LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS"
1825
1826 for n in $COMPONENT_LIST; do
1827     v=$(toupper ${n%s})_LIST
1828     eval enable \$$v
1829     eval ${n}_if_any="\$$v"
1830 done
1831
1832 enable $ARCH_EXT_LIST $ALL_TESTS
1833
1834 die_unknown(){
1835     echo "Unknown option \"$1\"."
1836     echo "See $0 --help for available options."
1837     exit 1
1838 }
1839
1840 show_list() {
1841     suffix=_$1
1842     shift
1843     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1844     exit 0
1845 }
1846
1847 for opt do
1848     optval="${opt#*=}"
1849     case "$opt" in
1850     --extra-ldflags=*) add_ldflags $optval
1851     ;;
1852     --extra-libs=*) add_extralibs $optval
1853     ;;
1854     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1855     ;;
1856     --enable-debug=*) debuglevel="$optval"
1857     ;;
1858     --disable-everything)
1859     map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1860     ;;
1861     --enable-*=*|--disable-*=*)
1862     eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1863     is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1864     eval list=\$$(toupper $thing)_LIST
1865     name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1866     $action $(filter "$name" $list)
1867     ;;
1868     --enable-?*|--disable-?*)
1869     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1870     if is_in $option $COMPONENT_LIST; then
1871         test $action = disable && action=unset
1872         eval $action \$$(toupper ${option%s})_LIST
1873     elif is_in $option $CMDLINE_SELECT; then
1874         $action $option
1875     else
1876         die_unknown $opt
1877     fi
1878     ;;
1879     --list-*)
1880         NAME="${opt#--list-}"
1881         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1882         NAME=${NAME%s}
1883         eval show_list $NAME \$$(toupper $NAME)_LIST
1884     ;;
1885     --help|-h) show_help
1886     ;;
1887     *)
1888     optname="${opt%%=*}"
1889     optname="${optname#--}"
1890     optname=$(echo "$optname" | sed 's/-/_/g')
1891     if is_in $optname $CMDLINE_SET; then
1892         eval $optname='$optval'
1893     elif is_in $optname $CMDLINE_APPEND; then
1894         append $optname "$optval"
1895     else
1896          die_unknown $opt
1897     fi
1898     ;;
1899     esac
1900 done
1901
1902 disabled logging && logfile=/dev/null
1903
1904 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
1905 set >> $logfile
1906
1907 test -n "$cross_prefix" && enable cross_compile
1908
1909 if enabled cross_compile; then
1910     test -n "$arch" && test -n "$target_os" ||
1911         die "Must specify target arch and OS when cross-compiling"
1912 fi
1913
1914 set_default arch target_os
1915
1916 ar_default="${cross_prefix}${ar_default}"
1917 cc_default="${cross_prefix}${cc_default}"
1918 nm_default="${cross_prefix}${nm_default}"
1919 pkg_config_default="${cross_prefix}${pkg_config_default}"
1920 ranlib="${cross_prefix}${ranlib}"
1921
1922 sysinclude_default="${sysroot}/usr/include"
1923
1924 set_default cc nm pkg_config sysinclude
1925 enabled cross_compile || host_cc_default=$cc
1926 set_default host_cc
1927
1928 if ! $pkg_config --version >/dev/null 2>&1; then
1929     warn "$pkg_config not found, library detection may fail."
1930     pkg_config=false
1931 fi
1932
1933 exesuf() {
1934     case $1 in
1935         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
1936     esac
1937 }
1938
1939 EXESUF=$(exesuf $target_os)
1940 HOSTEXESUF=$(exesuf $host_os)
1941
1942 # set temporary file name
1943 : ${TMPDIR:=$TEMPDIR}
1944 : ${TMPDIR:=$TMP}
1945 : ${TMPDIR:=/tmp}
1946
1947 if ! check_cmd mktemp -u XXXXXX; then
1948     # simple replacement for missing mktemp
1949     # NOT SAFE FOR GENERAL USE
1950     mktemp(){
1951         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
1952     }
1953 fi
1954
1955 tmpfile(){
1956     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1957         (set -C; exec > $tmp) 2>/dev/null ||
1958         die "Unable to create temporary file in $TMPDIR."
1959     append TMPFILES $tmp
1960     eval $1=$tmp
1961 }
1962
1963 trap 'rm -f -- $TMPFILES' EXIT
1964
1965 tmpfile TMPASM .asm
1966 tmpfile TMPC   .c
1967 tmpfile TMPE   $EXESUF
1968 tmpfile TMPH   .h
1969 tmpfile TMPO   .o
1970 tmpfile TMPS   .S
1971 tmpfile TMPSH  .sh
1972 tmpfile TMPV   .ver
1973
1974 unset -f mktemp
1975
1976 chmod +x $TMPE
1977
1978 # make sure we can execute files in $TMPDIR
1979 cat > $TMPSH 2>> $logfile <<EOF
1980 #! /bin/sh
1981 EOF
1982 chmod +x $TMPSH >> $logfile 2>&1
1983 if ! $TMPSH >> $logfile 2>&1; then
1984     cat <<EOF
1985 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1986 variable to another directory and make sure that it is not mounted noexec.
1987 EOF
1988     die "Sanity test failed."
1989 fi
1990
1991 pgi_flags(){
1992     for flag; do
1993         case $flag in
1994             -fomit-frame-pointer) echo -Mnoframe ;;
1995             -g)                   echo -gopt ;;
1996             *)                    echo $flag ;;
1997         esac
1998     done
1999 }
2000
2001 suncc_flags(){
2002     for flag; do
2003         case $flag in
2004             -march=*|-mcpu=*)
2005                 case "${flag#*=}" in
2006                     native)                   echo -xtarget=native       ;;
2007                     v9|niagara)               echo -xarch=sparc          ;;
2008                     ultrasparc)               echo -xarch=sparcvis       ;;
2009                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2010                     i586|pentium)             echo -xchip=pentium        ;;
2011                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2012                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2013                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2014                     pentium4*)          echo -xtarget=pentium4           ;;
2015                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2016                     *-sse3)             echo -xarch=sse3                 ;;
2017                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
2018                     amdfam10|barcelona)       echo -xarch=sse4_1         ;;
2019                     athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
2020                     k8|opteron|athlon64|athlon-fx)
2021                                               echo -xarch=sse2a          ;;
2022                     athlon*)                  echo -xarch=pentium_proa   ;;
2023                 esac
2024                 ;;
2025             -std=c99)             echo -xc99              ;;
2026             -fomit-frame-pointer) echo -xregs=frameptr    ;;
2027             -fPIC)                echo -KPIC -xcode=pic32 ;;
2028             -W*,*)                echo $flag              ;;
2029             -f*-*|-W*)                                    ;;
2030             *)                    echo $flag              ;;
2031         esac
2032     done
2033 }
2034
2035 tms470_flags(){
2036     for flag; do
2037         case $flag in
2038             -march=*|-mcpu=*)
2039                 case "${flag#*=}" in
2040                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
2041                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
2042                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
2043                     armv6*|arm11*)          echo -mv=6   ;;
2044                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2045                                             echo -mv=5e  ;;
2046                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2047                 esac
2048                 ;;
2049             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2050             -mfpu=vfp)      echo --float_support=vfpv2        ;;
2051             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2052             -msoft-float)   echo --float_support=vfplib       ;;
2053             -O[0-3]|-mf=*)  echo $flag                        ;;
2054             -g)             echo -g -mn                       ;;
2055             -pds=*)         echo $flag                        ;;
2056             -D*|-I*)        echo $flag                        ;;
2057             --gcc|--abi=*)  echo $flag                        ;;
2058             -me)            echo $flag                        ;;
2059         esac
2060     done
2061 }
2062
2063 probe_cc(){
2064     pfx=$1
2065     _cc=$2
2066
2067     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags _ldflags
2068     unset _depflags _DEPCMD _DEPFLAGS
2069     _flags_filter=echo
2070
2071     if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2072         _type=llvm_gcc
2073         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2074         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2075         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2076         _cflags_speed='-O3'
2077         _cflags_size='-Os'
2078     elif $_cc -v 2>&1 | grep -qi ^gcc; then
2079         _type=gcc
2080         gcc_version=$($_cc --version | head -n1)
2081         gcc_basever=$($_cc -dumpversion)
2082         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2083         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2084         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2085         if ! $_cc -dumpversion | grep -q '^2\.'; then
2086             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2087         fi
2088         _cflags_speed='-O3'
2089         _cflags_size='-Os'
2090     elif $_cc --version 2>/dev/null | grep -q Intel; then
2091         _type=icc
2092         _ident=$($_cc --version | head -n1)
2093         _depflags='-MMD'
2094         _cflags_speed='-O3'
2095         _cflags_size='-Os'
2096         _cflags_noopt='-O1'
2097     elif $_cc -v 2>&1 | grep -q xlc; then
2098         _type=xlc
2099         _ident=$($_cc -qversion 2>/dev/null | head -n1)
2100         _cflags_speed='-O5'
2101         _cflags_size='-O5 -qcompact'
2102     elif $_cc -V 2>/dev/null | grep -q Compaq; then
2103         _type=ccc
2104         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2105         _DEPFLAGS='-M'
2106         debuglevel=3
2107         _ldflags='-Wl,-z,now' # calls to libots crash without this
2108         _cflags_speed='-fast'
2109         _cflags_size='-O1'
2110     elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2111         test -d "$sysroot" || die "No valid sysroot specified."
2112         _type=armcc
2113         _ident=$($_cc --vsn | head -n1)
2114         armcc_conf="$PWD/armcc.conf"
2115         $_cc --arm_linux_configure                 \
2116              --arm_linux_config_file="$armcc_conf" \
2117              --configure_sysroot="$sysroot"        \
2118              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2119              die "Error creating armcc configuration file."
2120         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2121         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2122         as_default="${cross_prefix}gcc"
2123         _depflags='-MMD'
2124         _cflags_speed='-O3'
2125         _cflags_size='-Os'
2126     elif $_cc -version 2>/dev/null | grep -q TMS470; then
2127         _type=tms470
2128         _ident=$($_cc -version | head -n1 | tr -s ' ')
2129         _flags='--gcc --abi=eabi -me'
2130         _cflags='-D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__='
2131         _cc_e='-ppl -fe=$@'
2132         _cc_o='-fe=$@'
2133         as_default="${cross_prefix}gcc"
2134         ld_default="${cross_prefix}gcc"
2135         _depflags='-ppa -ppd=$(@:.o=.d)'
2136         _cflags_speed='-O3 -mf=5'
2137         _cflags_size='-O3 -mf=2'
2138         _flags_filter=tms470_flags
2139     elif $_cc -v 2>&1 | grep -q clang; then
2140         _type=clang
2141         _ident=$($_cc --version | head -n1)
2142         _depflags='-MMD'
2143         _cflags_speed='-O3'
2144         _cflags_size='-Os'
2145     elif $_cc -V 2>&1 | grep -q Sun; then
2146         _type=suncc
2147         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2148         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2149         _DEPFLAGS='-xM1'
2150         _ldflags='-std=c99'
2151         _cflags_speed='-O5'
2152         _cflags_size='-O5 -xspace'
2153         _flags_filter=suncc_flags
2154     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2155         _type=pathscale
2156         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2157         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2158         _cflags_speed='-O2'
2159         _cflags_size='-Os'
2160         _flags_filter='filter_out -Wdisabled-optimization'
2161     elif $_cc -v 2>&1 | grep -q Open64; then
2162         _type=open64
2163         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2164         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2165         _cflags_speed='-O2'
2166         _cflags_size='-Os'
2167         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2168     elif $_cc -V 2>&1 | grep -q Portland; then
2169         _type=pgi
2170         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2171         opt_common='-alias=ansi -Mlre -Mpre'
2172         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2173         _cflags_size="-O2 -Munroll=c:1 $opt_common"
2174         _cflags_noopt="-O1"
2175         _flags_filter=pgi_flags
2176     fi
2177
2178     eval ${pfx}_type=\$_type
2179     eval ${pfx}_ident=\$_ident
2180 }
2181
2182 set_ccvars(){
2183     eval ${1}_C=\${_cc_c-\${${1}_C}}
2184     eval ${1}_E=\${_cc_e-\${${1}_E}}
2185     eval ${1}_O=\${_cc_o-\${${1}_O}}
2186
2187     if [ -n "$_depflags" ]; then
2188         eval ${1}_DEPFLAGS=\$_depflags
2189     else
2190         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
2191         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
2192         eval DEP${1}FLAGS=\$_flags
2193     fi
2194 }
2195
2196 probe_cc cc "$cc"
2197 cflags_filter=$_flags_filter
2198 cflags_speed=$_cflags_speed
2199 cflags_size=$_cflags_size
2200 cflags_noopt=$_cflags_noopt
2201 add_cflags $_flags $_cflags
2202 cc_ldflags=$_ldflags
2203 set_ccvars CC
2204
2205 probe_cc hostcc "$host_cc"
2206 host_cflags_filter=$_flags_filter
2207 host_ldflags_filter=$_flags_filter
2208 add_host_cflags  $_flags $_cflags
2209 add_host_ldflags $_flags $_ldflags
2210 set_ccvars HOSTCC
2211
2212 test -n "$cc_type" && enable $cc_type ||
2213     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2214
2215 : ${as_default:=$cc}
2216 : ${dep_cc_default:=$cc}
2217 : ${ld_default:=$cc}
2218 set_default ar as dep_cc ld
2219
2220 probe_cc as "$as"
2221 asflags_filter=$_flags_filter
2222 add_asflags $_flags $_cflags
2223 set_ccvars AS
2224
2225 probe_cc ld "$ld"
2226 ldflags_filter=$_flags_filter
2227 add_ldflags $_flags $_ldflags
2228 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
2229 LD_O=${_cc_o-$LD_O}
2230
2231 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
2232     probe_cc depcc "$dep_cc"
2233     CCDEP=${_DEPCMD:-$DEPCMD}
2234     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
2235     DEPCCFLAGS=$_flags
2236 fi
2237
2238 add_cflags $extra_cflags
2239 add_asflags $extra_cflags
2240
2241 if test -n "$sysroot"; then
2242     case "$cc_type" in
2243         gcc|llvm_gcc|clang)
2244             add_cppflags --sysroot="$sysroot"
2245             add_ldflags --sysroot="$sysroot"
2246         ;;
2247         tms470)
2248             add_cppflags -I"$sysinclude"
2249             add_ldflags  --sysroot="$sysroot"
2250         ;;
2251     esac
2252 fi
2253
2254 if test "$cpu" = host; then
2255     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2256
2257     case "$cc_type" in
2258         gcc|llvm_gcc)
2259             check_native(){
2260                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2261                 sed -n "/cc1.*$1=/{
2262                             s/.*$1=\\([^ ]*\\).*/\\1/
2263                             p
2264                             q
2265                         }" $TMPE
2266             }
2267             cpu=$(check_native -march || check_native -mcpu)
2268         ;;
2269     esac
2270
2271     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2272 fi
2273
2274 # Deal with common $arch aliases
2275 case "$arch" in
2276     arm*)
2277         arch="arm"
2278     ;;
2279     mips|mipsel|IP*)
2280         arch="mips"
2281     ;;
2282     mips64*)
2283         arch="mips"
2284         subarch="mips64"
2285     ;;
2286     parisc|hppa)
2287         arch="parisc"
2288     ;;
2289     parisc64|hppa64)
2290         arch="parisc"
2291         subarch="parisc64"
2292     ;;
2293     "Power Macintosh"|ppc|powerpc)
2294         arch="ppc"
2295     ;;
2296     ppc64|powerpc64)
2297         arch="ppc"
2298         subarch="ppc64"
2299     ;;
2300     s390|s390x)
2301         arch="s390"
2302     ;;
2303     sh4|sh)
2304         arch="sh4"
2305     ;;
2306     sun4u|sparc64)
2307         arch="sparc"
2308         subarch="sparc64"
2309     ;;
2310     i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
2311         arch="x86"
2312     ;;
2313 esac
2314
2315 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2316 enable $arch
2317
2318 # Add processor-specific flags
2319 if test "$cpu" = generic; then
2320     : do nothing
2321 elif enabled ppc; then
2322
2323     case $(tolower $cpu) in
2324         601|ppc601|powerpc601)
2325             cpuflags="-mcpu=601"
2326             disable altivec
2327         ;;
2328         603*|ppc603*|powerpc603*)
2329             cpuflags="-mcpu=603"
2330             disable altivec
2331         ;;
2332         604*|ppc604*|powerpc604*)
2333             cpuflags="-mcpu=604"
2334             disable altivec
2335         ;;
2336         g3|75*|ppc75*|powerpc75*)
2337             cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2338             disable altivec
2339         ;;
2340         g4|745*|ppc745*|powerpc745*)
2341             cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2342         ;;
2343         74*|ppc74*|powerpc74*)
2344             cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2345         ;;
2346         g5|970|ppc970|powerpc970)
2347             cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2348         ;;
2349         power[3-7]*)
2350             cpuflags="-mcpu=$cpu -mpowerpc-gfxopt -mpowerpc64"
2351         ;;
2352         cell)
2353             cpuflags="-mcpu=cell"
2354             enable ldbrx
2355         ;;
2356         e500v2)
2357             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2358             disable altivec
2359         ;;
2360         e500)
2361             cpuflags="-mcpu=8540 -mhard-float"
2362             disable altivec
2363         ;;
2364     esac
2365
2366 elif enabled x86; then
2367
2368     case $cpu in
2369         i[345]86|pentium)
2370             cpuflags="-march=$cpu"
2371             disable mmx
2372         ;;
2373         # targets that do NOT support conditional mov (cmov)
2374         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2375             cpuflags="-march=$cpu"
2376             disable cmov
2377         ;;
2378         # targets that do support conditional mov (cmov)
2379         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom)
2380             cpuflags="-march=$cpu"
2381             enable cmov
2382             enable fast_cmov
2383         ;;
2384         # targets that do support conditional mov but on which it's slow
2385         pentium4|pentium4m|prescott|nocona)
2386             cpuflags="-march=$cpu"
2387             enable cmov
2388             disable fast_cmov
2389         ;;
2390     esac
2391
2392 elif enabled sparc; then
2393
2394     case $cpu in
2395         niagara)
2396             cpuflags="-mcpu=$cpu"
2397             disable vis
2398         ;;
2399         sparc64)
2400             cpuflags="-mcpu=v9"
2401         ;;
2402     esac
2403
2404 elif enabled arm; then
2405
2406     case $cpu in
2407         armv*)
2408             cpuflags="-march=$cpu"
2409             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2410         ;;
2411         *)
2412             cpuflags="-mcpu=$cpu"
2413             case $cpu in
2414                 cortex-a*)                               subarch=armv7a  ;;
2415                 cortex-r*)                               subarch=armv7r  ;;
2416                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
2417                 arm11*)                                  subarch=armv6   ;;
2418                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2419                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2420             esac
2421         ;;
2422     esac
2423
2424 elif enabled alpha; then
2425
2426     enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2427
2428 elif enabled bfin; then
2429
2430     cpuflags="-mcpu=$cpu"
2431
2432 elif enabled mips; then
2433
2434     cpuflags="-march=$cpu"
2435
2436 elif enabled avr32; then
2437
2438     case $cpu in
2439         ap7[02]0[0-2])
2440             subarch="avr32_ap"
2441             cpuflags="-mpart=$cpu"
2442         ;;
2443         ap)
2444             subarch="avr32_ap"
2445             cpuflags="-march=$cpu"
2446         ;;
2447         uc3[ab]*)
2448             subarch="avr32_uc"
2449             cpuflags="-mcpu=$cpu"
2450         ;;
2451         uc)
2452             subarch="avr32_uc"
2453             cpuflags="-march=$cpu"
2454         ;;
2455     esac
2456
2457 fi
2458
2459 add_cflags $cpuflags
2460 add_asflags $cpuflags
2461
2462 # compiler sanity check
2463 check_exec <<EOF
2464 int main(void){ return 0; }
2465 EOF
2466 if test "$?" != 0; then
2467     echo "$cc is unable to create an executable file."
2468     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2469         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2470         echo "Only do this if you know what cross compiling means."
2471     fi
2472     die "C compiler test failed."
2473 fi
2474
2475 add_cppflags -D_ISOC99_SOURCE
2476 check_cflags -std=c99
2477 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2478 #include <stdlib.h>
2479 EOF
2480 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2481 #include <stdlib.h>
2482 EOF
2483
2484 check_host_cflags -std=c99
2485 check_host_cflags -Wall
2486
2487 case "$arch" in
2488     alpha|ia64|mips|parisc|sparc)
2489         spic=$shared
2490     ;;
2491     x86)
2492         subarch="x86_32"
2493         check_code cc "" "int test[(int)sizeof(char*) - 7]" && subarch="x86_64"
2494         if test "$subarch" = "x86_64"; then
2495             spic=$shared
2496         fi
2497     ;;
2498 esac
2499
2500 enable $subarch
2501 enabled spic && enable pic
2502
2503 # OS specific
2504 case $target_os in
2505     haiku)
2506         prefix_default="/boot/common"
2507         network_extralibs="-lnetwork"
2508         host_libs=
2509         ;;
2510     sunos)
2511         AVSERVERLDFLAGS=""
2512         SHFLAGS='-shared -Wl,-h,$$(@F)'
2513         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2514         network_extralibs="-lsocket -lnsl"
2515         add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
2516         # When using suncc to build, the Solaris linker will mark
2517         # an executable with each instruction set encountered by
2518         # the Solaris assembler.  As our libraries contain their own
2519         # guards for processor-specific code, instead suppress
2520         # generation of the HWCAPS ELF section on Solaris x86 only.
2521         enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
2522         nm_opts='-P -g'
2523         ;;
2524     netbsd)
2525         disable symver
2526         oss_indev_extralibs="-lossaudio"
2527         oss_outdev_extralibs="-lossaudio"
2528         ;;
2529     openbsd)
2530         # On OpenBSD 4.5. the compiler does not use PIC unless
2531         # explicitly using -fPIC. Libav builds fine without PIC,
2532         # however the generated executable will not do anything
2533         # (simply quits with exit-code 1, no crash, no output).
2534         # Thus explicitly enable PIC here.
2535         enable pic
2536         disable symver
2537         SHFLAGS='-shared'
2538         oss_indev_extralibs="-lossaudio"
2539         oss_outdev_extralibs="-lossaudio"
2540         ;;
2541     dragonfly)
2542         disable symver
2543         ;;
2544     freebsd)
2545         ;;
2546     bsd/os)
2547         add_extralibs -lpoll -lgnugetopt
2548         ;;
2549     darwin)
2550         gas="gas-preprocessor.pl $cc"
2551         enabled ppc && add_asflags -force_cpusubtype_ALL
2552         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2553         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
2554         add_ldflags -Wl,-dynamic,-search_paths_first
2555         SLIBSUF=".dylib"
2556         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2557         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2558         AVSERVERLDFLAGS=-Wl,-bind_at_load
2559         objformat="macho"
2560         enabled x86_64 && objformat="macho64"
2561         enabled_any pic shared ||
2562             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2563         ;;
2564     mingw32*)
2565         if test $target_os = "mingw32ce"; then
2566             disable network
2567         else
2568             target_os=mingw32
2569         fi
2570         LIBTARGET=i386
2571         if enabled x86_64; then
2572             LIBTARGET="i386:x86-64"
2573         elif enabled arm; then
2574             LIBTARGET=arm-wince
2575         fi
2576         shlibdir_default="$bindir_default"
2577         SLIBPREF=""
2578         SLIBSUF=".dll"
2579         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2580         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2581         SLIB_EXTRA_CMD=-'$(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
2582         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2583         SLIB_INSTALL_LINKS=
2584         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2585         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2586         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'
2587         objformat="win32"
2588         dlltool="${cross_prefix}dlltool"
2589         enable dos_paths
2590         check_cflags -fno-common
2591         check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2592                                       || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2593                 die "ERROR: MinGW runtime version must be >= 3.15."
2594         add_cppflags -U__STRICT_ANSI__
2595         ;;
2596     cygwin*)
2597         target_os=cygwin
2598         shlibdir_default="$bindir_default"
2599         SLIBPREF="cyg"
2600         SLIBSUF=".dll"
2601         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2602         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2603         SHFLAGS='-shared -Wl,--enable-auto-image-base'
2604         objformat="win32"
2605         enable dos_paths
2606         check_cflags -fno-common
2607         add_cppflags -U__STRICT_ANSI__
2608         ;;
2609     *-dos|freedos|opendos)
2610         network_extralibs="-lsocket"
2611         objformat="coff"
2612         enable dos_paths
2613         add_cppflags -U__STRICT_ANSI__
2614         ;;
2615     linux)
2616         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2617         enable dv1394
2618         ;;
2619     irix*)
2620         target_os=irix
2621         ranlib="echo ignoring ranlib"
2622         ;;
2623     os/2*)
2624         ln_s="cp -f"
2625         objformat="aout"
2626         add_cppflags -D_GNU_SOURCE
2627         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2628         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2629         AVSERVERLDFLAGS=""
2630         LIBSUF="_s.a"
2631         SLIBPREF=""
2632         SLIBSUF=".dll"
2633         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2634         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2635         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2636           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2637           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2638           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2639           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2640           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2641         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2642           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2643         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
2644         enable dos_paths
2645         ;;
2646     gnu/kfreebsd)
2647         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
2648         ;;
2649     gnu)
2650         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2651         ;;
2652     qnx)
2653         add_cppflags -D_QNX_SOURCE
2654         network_extralibs="-lsocket"
2655         ;;
2656     symbian)
2657         SLIBSUF=".dll"
2658         enable dos_paths
2659         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
2660         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
2661         add_ldflags -Wl,--target1-abs,--no-undefined \
2662                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
2663                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
2664         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
2665                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
2666                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
2667         ;;
2668     none)
2669         ;;
2670     *)
2671         die "Unknown OS '$target_os'."
2672         ;;
2673 esac
2674
2675 esc(){
2676     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
2677 }
2678
2679 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
2680
2681 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2682
2683 set_default $PATHS_LIST
2684
2685 # we need to build at least one lib type
2686 if ! enabled_any static shared; then
2687     cat <<EOF
2688 At least one library type must be built.
2689 Specify --enable-static to build the static libraries or --enable-shared to
2690 build the shared libraries as well. To only build the shared libraries specify
2691 --disable-static in addition to --enable-shared.
2692 EOF
2693     exit 1;
2694 fi
2695
2696 die_license_disabled() {
2697     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2698 }
2699
2700 die_license_disabled gpl libcdio
2701 die_license_disabled gpl libx264
2702 die_license_disabled gpl libxavs
2703 die_license_disabled gpl libxvid
2704 die_license_disabled gpl x11grab
2705
2706 die_license_disabled nonfree libfaac
2707 die_license_disabled nonfree libfdk_aac
2708 die_license_disabled nonfree openssl
2709
2710 die_license_disabled version3 libopencore_amrnb
2711 die_license_disabled version3 libopencore_amrwb
2712 die_license_disabled version3 libvo_aacenc
2713 die_license_disabled version3 libvo_amrwbenc
2714
2715 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2716
2717 disabled optimizations || check_cflags -fomit-frame-pointer
2718
2719 enable_pic() {
2720     enable pic
2721     add_cppflags -DPIC
2722     add_cflags   -fPIC
2723     add_asflags  -fPIC
2724 }
2725
2726 enabled pic && enable_pic
2727
2728 check_cc <<EOF || die "Symbol mangling check failed."
2729 int ff_extern;
2730 EOF
2731 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2732 extern_prefix=${sym%%ff_extern*}
2733
2734 check_cc <<EOF && enable inline_asm
2735 void foo(void) { __asm__ volatile ("" ::); }
2736 EOF
2737
2738 _restrict=
2739 for restrict_keyword in restrict __restrict__ __restrict; do
2740     check_cc <<EOF && _restrict=$restrict_keyword && break
2741 void foo(char * $restrict_keyword p);
2742 EOF
2743 done
2744
2745 check_cc <<EOF && enable attribute_packed
2746 struct { int x; } __attribute__((packed)) x;
2747 EOF
2748
2749 check_cc <<EOF && enable attribute_may_alias
2750 union { int x; } __attribute__((may_alias)) x;
2751 EOF
2752
2753 check_cc <<EOF || die "endian test failed"
2754 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2755 EOF
2756 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2757
2758 if enabled alpha; then
2759
2760     check_cflags -mieee
2761
2762 elif enabled arm; then
2763
2764     enabled thumb && check_cflags -mthumb || check_cflags -marm
2765     nogas=die
2766
2767     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
2768         enable vfp_args
2769     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
2770         case "${cross_prefix:-$cc}" in
2771             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
2772             *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
2773 __asm__ (".eabi_attribute 28, 1");
2774 int main(void) { return 0; }
2775 EOF
2776         esac
2777         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
2778     fi
2779
2780     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2781     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2782     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2783     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2784     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2785     enabled vfpv3   && check_asm vfpv3   '"vmov.f32 s0, #1.0"'
2786
2787     check_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
2788
2789     enabled_all armv6t2 shared !pic && enable_pic
2790
2791 elif enabled mips; then
2792
2793     check_asm loongson '"dmult.g $1, $2, $3"'
2794     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2795
2796 elif enabled ppc; then
2797
2798     enable local_aligned_8 local_aligned_16
2799
2800     check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2801     check_asm ibm_asm   '"add 0, 0, 0"'
2802     check_asm ppc4xx    '"maclhw r10, r11, r12"'
2803     check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2804
2805     # AltiVec flags: The FSF version of GCC differs from the Apple version
2806     if enabled altivec; then
2807         nogas=warn
2808         check_cflags -maltivec -mabi=altivec &&
2809         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2810         check_cflags -faltivec
2811
2812         # check if our compiler supports Motorola AltiVec C API
2813         check_cc <<EOF || disable altivec
2814 $inc_altivec_h
2815 int main(void) {
2816     vector signed int v1, v2, v3;
2817     v1 = vec_add(v2,v3);
2818     return 0;
2819 }
2820 EOF
2821
2822         # check if our compiler supports braces for vector declarations
2823         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2824 $inc_altivec_h
2825 int main (void) { (vector int) {1}; return 0; }
2826 EOF
2827     fi
2828
2829 elif enabled sparc; then
2830
2831     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2832         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2833
2834 elif enabled x86; then
2835
2836     check_code ld immintrin.h "__xgetbv(0)" && enable xgetbv
2837     check_code ld intrin.h "int info[4]; __cpuid(info, 0)" && enable cpuid
2838     check_code ld intrin.h "__rdtsc()" && enable rdtsc
2839     check_code ld intrin.h "unsigned int x = __readeflags()" && enable rweflags
2840
2841     check_code ld mmintrin.h "_mm_empty()" && enable mm_empty
2842
2843     enable local_aligned_8 local_aligned_16
2844
2845     # check whether EBP is available on x86
2846     # As 'i' is stored on the stack, this program will crash
2847     # if the base pointer is used to access it because the
2848     # base pointer is cleared in the inline assembly code.
2849     check_exec_crash <<EOF && enable ebp_available
2850     volatile int i=0;
2851     __asm__ volatile (
2852         "xorl %%ebp, %%ebp"
2853     ::: "%ebp");
2854     return i;
2855 EOF
2856
2857     # check whether EBX is available on x86
2858     check_asm ebx_available '""::"b"(0)' &&
2859         check_asm ebx_available '"":::"%ebx"'
2860
2861     # check whether xmm clobbers are supported
2862     check_asm xmm_clobbers '"":::"%xmm0"'
2863
2864     # check whether binutils is new enough to compile SSSE3/MMXEXT
2865     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2866     enabled mmxext && check_asm mmxext '"pmaxub %mm0, %mm1"'
2867
2868     if ! disabled_any asm mmx yasm; then
2869         if check_cmd $yasmexe --version; then
2870             enabled x86_64 && yasm_extra="-m amd64"
2871             yasm_debug="-g dwarf2"
2872         elif check_cmd nasm -v; then
2873             yasmexe=nasm
2874             yasm_debug="-g -F dwarf"
2875             enabled x86_64 && test "$objformat" = elf && objformat=elf64
2876         fi
2877
2878         YASMFLAGS="-f $objformat $yasm_extra"
2879         enabled pic               && append YASMFLAGS "-DPIC"
2880         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2881         case "$objformat" in
2882             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
2883         esac
2884
2885         check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
2886             die "yasm not found, use --disable-yasm for a crippled build"
2887         check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx
2888         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4
2889     fi
2890
2891     case "$cpu" in
2892         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2893             disable fast_clz
2894         ;;
2895     esac
2896
2897 fi
2898
2899 if enabled asm; then
2900     as=${gas:=$as}
2901     check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2902         $nogas "GNU assembler not found, install gas-preprocessor"
2903 fi
2904
2905 check_ldflags -Wl,--as-needed
2906
2907 if check_func dlopen; then
2908     ldl=
2909 elif check_func dlopen -ldl; then
2910     ldl=-ldl
2911 fi
2912
2913 if enabled network; then
2914     check_type "sys/types.h sys/socket.h" socklen_t
2915     check_type netdb.h "struct addrinfo"
2916     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
2917     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
2918     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
2919     check_type netinet/in.h "struct sockaddr_in6"
2920     check_type poll.h "struct pollfd"
2921     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2922     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2923     check_header netinet/sctp.h
2924     check_func getaddrinfo $network_extralibs
2925     # Prefer arpa/inet.h over winsock2
2926     if check_header arpa/inet.h ; then
2927         check_func closesocket
2928     elif check_header winsock2.h ; then
2929         check_func_headers winsock2.h closesocket -lws2 &&
2930             network_extralibs="-lws2" ||
2931         { check_func_headers winsock2.h closesocket -lws2_32 &&
2932             network_extralibs="-lws2_32"; }
2933         check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
2934         check_type ws2tcpip.h socklen_t
2935         check_type ws2tcpip.h "struct addrinfo"
2936         check_type ws2tcpip.h "struct group_source_req"
2937         check_type ws2tcpip.h "struct ip_mreq_source"
2938         check_type ws2tcpip.h "struct ipv6_mreq"
2939         check_type winsock2.h "struct pollfd"
2940         check_type ws2tcpip.h "struct sockaddr_in6"
2941         check_type ws2tcpip.h "struct sockaddr_storage"
2942         check_struct winsock2.h "struct sockaddr" sa_len
2943     else
2944         disable network
2945     fi
2946 fi
2947
2948 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2949 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2950
2951 check_func  fcntl
2952 check_func  fork
2953 check_func  gethrtime
2954 check_func  getopt
2955 check_func  getrusage
2956 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2957 check_func  gettimeofday
2958 check_func  inet_aton $network_extralibs
2959 check_func  isatty
2960 check_func  localtime_r
2961 check_func  ${malloc_prefix}memalign            && enable memalign
2962 check_func  mkstemp
2963 check_func  mmap
2964 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2965 check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
2966 check_func  setrlimit
2967 check_func  strerror_r
2968 check_func  strptime
2969 check_func  strtok_r
2970 check_func  sched_getaffinity
2971 check_func  sysconf
2972 check_func  sysctl
2973 check_func  usleep
2974 check_func_headers io.h setmode
2975 check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
2976 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2977 check_func_headers windows.h GetProcessAffinityMask
2978 check_func_headers windows.h GetProcessTimes
2979 check_func_headers windows.h GetSystemTimeAsFileTime
2980 check_func_headers windows.h MapViewOfFile
2981 check_func_headers windows.h Sleep
2982 check_func_headers windows.h VirtualAlloc
2983
2984 check_header dlfcn.h
2985 check_header dxva.h
2986 check_header dxva2api.h
2987 check_header io.h
2988 check_header malloc.h
2989 check_header poll.h
2990 check_header sys/mman.h
2991 check_header sys/param.h
2992 check_header sys/resource.h
2993 check_header sys/select.h
2994 check_header sys/time.h
2995 check_header unistd.h
2996 check_header vdpau/vdpau.h
2997 check_header vdpau/vdpau_x11.h
2998 check_header windows.h
2999 check_header X11/extensions/XvMClib.h
3000
3001 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
3002 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3003
3004 if ! disabled w32threads && ! enabled pthreads; then
3005     check_func _beginthreadex && enable w32threads
3006 fi
3007
3008 # check for some common methods of building with pthread support
3009 # do this before the optional library checks as some of them require pthreads
3010 if ! disabled pthreads && ! enabled w32threads; then
3011     enable pthreads
3012     if check_func pthread_create; then
3013         :
3014     elif check_func pthread_create -pthread; then
3015         add_cflags -pthread
3016         add_extralibs -pthread
3017     elif check_func pthread_create -pthreads; then
3018         add_cflags -pthreads
3019         add_extralibs -pthreads
3020     elif check_func pthread_create -lpthreadGC2; then
3021         add_extralibs -lpthreadGC2
3022     elif ! check_lib pthread.h pthread_create -lpthread; then
3023         disable pthreads
3024     fi
3025 fi
3026
3027 for thread in $THREADS_LIST; do
3028     if enabled $thread; then
3029         test -n "$thread_type" &&
3030             die "ERROR: Only one thread type must be selected." ||
3031             thread_type="$thread"
3032     fi
3033 done
3034
3035 check_lib math.h sin -lm && LIBM="-lm"
3036 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3037
3038 check_mathfunc cbrtf
3039 check_mathfunc exp2
3040 check_mathfunc exp2f
3041 check_mathfunc isinf
3042 check_mathfunc isnan
3043 check_mathfunc llrint
3044 check_mathfunc llrintf
3045 check_mathfunc log2
3046 check_mathfunc log2f
3047 check_mathfunc lrint
3048 check_mathfunc lrintf
3049 check_mathfunc rint
3050 check_mathfunc round
3051 check_mathfunc roundf
3052 check_mathfunc trunc
3053 check_mathfunc truncf
3054
3055 # these are off by default, so fail if requested and not available
3056 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3057 enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3058 enabled gnutls     && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3059 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3060 enabled libfdk_aac && require  libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
3061 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3062 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
3063 enabled libilbc    && require  libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
3064 enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3065 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3066 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3067 enabled libopencv  && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
3068 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3069 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3070 enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3071 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3072 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
3073 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3074 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3075 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3076 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3077 enabled libvpx     && {
3078     enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3079                                 die "ERROR: libvpx decoder version must be >=0.9.1"; }
3080     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
3081                                 die "ERROR: libvpx encoder version must be >=0.9.1"; } }
3082 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
3083                       { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3084                         die "ERROR: libx264 version must be >= 0.118."; }
3085 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
3086 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
3087 enabled openssl    && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3088                         check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3089                         check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3090                         die "ERROR: openssl not found"; }
3091
3092 if enabled gnutls; then
3093     { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
3094     { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
3095 fi
3096
3097 # libdc1394 check
3098 if enabled libdc1394; then
3099     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
3100         enable libdc1394_2; } ||
3101     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
3102         enable libdc1394_1; } ||
3103     die "ERROR: No version of libdc1394 found "
3104 fi
3105
3106 if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
3107     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3108     enable sdl &&
3109     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3110 fi
3111
3112 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
3113
3114 check_header linux/fb.h
3115 check_header linux/videodev2.h
3116 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3117
3118 check_header sys/videoio.h
3119
3120 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3121 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3122 # w32api 3.12 had it defined wrong
3123 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3124
3125 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3126 { check_header dev/bktr/ioctl_meteor.h &&
3127   check_header dev/bktr/ioctl_bt848.h; } ||
3128 { check_header machine/ioctl_meteor.h &&
3129   check_header machine/ioctl_bt848.h; } ||
3130 { check_header dev/video/meteor/ioctl_meteor.h &&
3131   check_header dev/video/bktr/ioctl_bt848.h; } ||
3132 check_header dev/ic/bt8xx.h
3133
3134 check_header sndio.h
3135 check_header sys/soundcard.h
3136 check_header soundcard.h
3137
3138 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3139
3140 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack &&
3141     check_func jack_port_get_latency_range -ljack
3142
3143 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3144
3145 enabled libcdio &&
3146     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open "-lcdio_paranoia -lcdio_cdda -lcdio"
3147
3148 enabled x11grab                                           &&
3149 require X11 X11/Xlib.h XOpenDisplay -lX11                 &&
3150 require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
3151 require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
3152
3153 # check for VDA header
3154 if ! disabled vda && check_header VideoDecodeAcceleration/VDADecoder.h; then
3155     enable vda && add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
3156 fi
3157
3158 if ! disabled vdpau && enabled vdpau_vdpau_h; then
3159 check_cpp_condition \
3160     vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3161     { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
3162       disable vdpau; }
3163 fi
3164
3165 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3166
3167 # add some useful compiler flags if supported
3168 check_cflags -Wdeclaration-after-statement
3169 check_cflags -Wall
3170 check_cflags -Wno-parentheses
3171 check_cflags -Wno-switch
3172 check_cflags -Wno-format-zero-length
3173 check_cflags -Wdisabled-optimization
3174 check_cflags -Wpointer-arith
3175 check_cflags -Wredundant-decls
3176 check_cflags -Wno-pointer-sign
3177 check_cflags -Wcast-qual
3178 check_cflags -Wwrite-strings
3179 check_cflags -Wtype-limits
3180 check_cflags -Wundef
3181 check_cflags -Wmissing-prototypes
3182 check_cflags -Wstrict-prototypes
3183 enabled extra_warnings && check_cflags -Winline
3184
3185 # add some linker flags
3186 check_ldflags -Wl,--warn-common
3187 check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
3188 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3189
3190 enabled xmm_clobber_test &&
3191     check_ldflags -Wl,--wrap,avcodec_open2              \
3192                   -Wl,--wrap,avcodec_decode_audio4      \
3193                   -Wl,--wrap,avcodec_decode_video2      \
3194                   -Wl,--wrap,avcodec_decode_subtitle2   \
3195                   -Wl,--wrap,avcodec_encode_audio2      \
3196                   -Wl,--wrap,avcodec_encode_video       \
3197                   -Wl,--wrap,avcodec_encode_subtitle    \
3198                   -Wl,--wrap,sws_scale ||
3199     disable xmm_clobber_test
3200
3201 echo "X{};" > $TMPV
3202 if test_ldflags -Wl,--version-script,$TMPV; then
3203     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3204     check_cc <<EOF && enable symver_asm_label
3205 void ff_foo(void) __asm__ ("av_foo@VERSION");
3206 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3207 EOF
3208     check_cc <<EOF && enable symver_gnu_asm
3209 __asm__(".symver ff_foo,av_foo@VERSION");
3210 void ff_foo(void) {}
3211 EOF
3212 fi
3213
3214 if [ -n "$optflags" ]; then
3215     add_cflags $optflags
3216 elif enabled small; then
3217     add_cflags $cflags_size
3218 elif enabled optimizations; then
3219     add_cflags $cflags_speed
3220 else
3221     add_cflags $cflags_noopt
3222 fi
3223 check_cflags -fno-math-errno
3224 check_cflags -fno-signed-zeros
3225
3226 if enabled icc; then
3227     # Just warnings, no remarks
3228     check_cflags -w1
3229     # -wd: Disable following warnings
3230     # 144, 167, 556: -Wno-pointer-sign
3231     # 1292: attribute "foo" ignored
3232     # 1419: external declaration in primary source file
3233     # 10006: ignoring unknown option -fno-signed-zeros
3234     # 10148: ignoring unknown option -Wno-parentheses
3235     # 10156: ignoring option '-W'; no argument required
3236     check_cflags -wd144,167,556,1292,1419,10006,10148,10156
3237     # 11030: Warning unknown option --as-needed
3238     # 10156: ignoring option '-export'; no argument required
3239     check_ldflags -wd10156,11030
3240     # Allow to compile with optimizations
3241     check_ldflags -march=$cpu
3242     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3243     enable ebp_available
3244     if enabled x86_32; then
3245         icc_version=$($cc -dumpversion)
3246         test ${icc_version%%.*} -ge 11 &&
3247             check_cflags -falign-stack=maintain-16-byte ||
3248             disable aligned_stack
3249     fi
3250 elif enabled ccc; then
3251     # disable some annoying warnings
3252     add_cflags -msg_disable cvtu32to64
3253     add_cflags -msg_disable embedcomment
3254     add_cflags -msg_disable needconstext
3255     add_cflags -msg_disable nomainieee
3256     add_cflags -msg_disable ptrmismatch1
3257     add_cflags -msg_disable unreachcode
3258 elif enabled gcc; then
3259     check_cflags -fno-tree-vectorize
3260     check_cflags -Werror=implicit-function-declaration
3261     check_cflags -Werror=missing-prototypes
3262     check_cflags -Werror=declaration-after-statement
3263 elif enabled llvm_gcc; then
3264     check_cflags -mllvm -stack-alignment=16
3265 elif enabled clang; then
3266     check_cflags -mllvm -stack-alignment=16
3267     check_cflags -Qunused-arguments
3268 elif enabled armcc; then
3269     # 2523: use of inline assembler is deprecated
3270     add_cflags -W${armcc_opt},--diag_suppress=2523
3271     add_cflags -W${armcc_opt},--diag_suppress=1207
3272     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3273     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3274     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
3275     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
3276 elif enabled tms470; then
3277     add_cflags -pds=824 -pds=837
3278 elif enabled pathscale; then
3279     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3280 fi
3281
3282 enabled_any $THREADS_LIST      && enable threads
3283
3284 check_deps $CONFIG_LIST       \
3285            $CONFIG_EXTRA      \
3286            $HAVE_LIST         \
3287            $ALL_COMPONENTS    \
3288            $ALL_TESTS         \
3289
3290 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3291
3292 ! enabled_any memalign posix_memalign aligned_malloc &&
3293     enabled_any $need_memalign && enable memalign_hack
3294
3295 echo "install prefix            $prefix"
3296 echo "source path               $source_path"
3297 echo "C compiler                $cc"
3298 echo "ARCH                      $arch ($cpu)"
3299 if test "$build_suffix" != ""; then
3300     echo "build suffix              $build_suffix"
3301 fi
3302 if test "$extra_version" != ""; then
3303     echo "version string suffix     $extra_version"
3304 fi
3305 echo "big-endian                ${bigendian-no}"
3306 echo "runtime cpu detection     ${runtime_cpudetect-no}"
3307 if enabled x86; then
3308     echo "${yasmexe}                      ${yasm-no}"
3309     echo "MMX enabled               ${mmx-no}"
3310     echo "MMXEXT enabled            ${mmxext-no}"
3311     echo "3DNow! enabled            ${amd3dnow-no}"
3312     echo "3DNow! extended enabled   ${amd3dnowext-no}"
3313     echo "SSE enabled               ${sse-no}"
3314     echo "SSSE3 enabled             ${ssse3-no}"
3315     echo "AVX enabled               ${avx-no}"
3316     echo "FMA4 enabled              ${fma4-no}"
3317     echo "CMOV enabled              ${cmov-no}"
3318     echo "CMOV is fast              ${fast_cmov-no}"
3319     echo "EBX available             ${ebx_available-no}"
3320     echo "EBP available             ${ebp_available-no}"
3321 fi
3322 if enabled arm; then
3323     echo "ARMv5TE enabled           ${armv5te-no}"
3324     echo "ARMv6 enabled             ${armv6-no}"
3325     echo "ARMv6T2 enabled           ${armv6t2-no}"
3326     echo "ARM VFP enabled           ${armvfp-no}"
3327     echo "NEON enabled              ${neon-no}"
3328 fi
3329 if enabled mips; then
3330     echo "MMI enabled               ${mmi-no}"
3331 fi
3332 if enabled ppc; then
3333     echo "AltiVec enabled           ${altivec-no}"
3334     echo "PPC 4xx optimizations     ${ppc4xx-no}"
3335     echo "dcbzl available           ${dcbzl-no}"
3336 fi
3337 if enabled sparc; then
3338     echo "VIS enabled               ${vis-no}"
3339 fi
3340 echo "debug symbols             ${debug-no}"
3341 echo "optimize for size         ${small-no}"
3342 echo "optimizations             ${optimizations-no}"
3343 echo "static                    ${static-no}"
3344 echo "shared                    ${shared-no}"
3345 echo "new filter support        ${avfilter-no}"
3346 echo "network support           ${network-no}"
3347 echo "threading support         ${thread_type-no}"
3348 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
3349 echo "SDL support               ${sdl-no}"
3350 echo "libdxva2 enabled          ${dxva2-no}"
3351 echo "libva enabled             ${vaapi-no}"
3352 echo "libvdpau enabled          ${vdpau-no}"
3353 echo "AVISynth enabled          ${avisynth-no}"
3354 echo "frei0r enabled            ${frei0r-no}"
3355 echo "gnutls enabled            ${gnutls-no}"
3356 echo "libcdio support           ${libcdio-no}"
3357 echo "libdc1394 support         ${libdc1394-no}"
3358 echo "libfaac enabled           ${libfaac-no}"
3359 echo "libfdk-aac enabled        ${libfdk_aac-no}"
3360 echo "libgsm enabled            ${libgsm-no}"
3361 echo "libilbc enabled           ${libilbc-no}"
3362 echo "libmp3lame enabled        ${libmp3lame-no}"
3363 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3364 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3365 echo "libopencv support         ${libopencv-no}"
3366 echo "libopenjpeg enabled       ${libopenjpeg-no}"
3367 echo "libpulse enabled          ${libpulse-no}"
3368 echo "librtmp enabled           ${librtmp-no}"
3369 echo "libschroedinger enabled   ${libschroedinger-no}"
3370 echo "libspeex enabled          ${libspeex-no}"
3371 echo "libtheora enabled         ${libtheora-no}"
3372 echo "libvo-aacenc support      ${libvo_aacenc-no}"
3373 echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
3374 echo "libvorbis enabled         ${libvorbis-no}"
3375 echo "libvpx enabled            ${libvpx-no}"
3376 echo "libx264 enabled           ${libx264-no}"
3377 echo "libxavs enabled           ${libxavs-no}"
3378 echo "libxvid enabled           ${libxvid-no}"
3379 echo "openssl enabled           ${openssl-no}"
3380 echo "zlib enabled              ${zlib-no}"
3381 echo "bzlib enabled             ${bzlib-no}"
3382 echo
3383
3384 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3385     echo "Enabled ${type}s:"
3386     eval list=\$$(toupper $type)_LIST
3387     print_enabled '_*' $list | sort | pr -r -3 -t
3388     echo
3389 done
3390
3391 license="LGPL version 2.1 or later"
3392 if enabled nonfree; then
3393     license="nonfree and unredistributable"
3394 elif enabled gplv3; then
3395     license="GPL version 3 or later"
3396 elif enabled lgplv3; then
3397     license="LGPL version 3 or later"
3398 elif enabled gpl; then
3399     license="GPL version 2 or later"
3400 fi
3401
3402 echo "License: $license"
3403
3404 echo "Creating config.mak and config.h..."
3405
3406 test -e Makefile || $ln_s "$source_path/Makefile" .
3407
3408 config_files="$TMPH config.mak"
3409
3410 cat > config.mak <<EOF
3411 # Automatically generated by configure - do not modify!
3412 LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION
3413 prefix=$prefix
3414 LIBDIR=\$(DESTDIR)$libdir
3415 SHLIBDIR=\$(DESTDIR)$shlibdir
3416 INCDIR=\$(DESTDIR)$incdir
3417 BINDIR=\$(DESTDIR)$bindir
3418 DATADIR=\$(DESTDIR)$datadir
3419 MANDIR=\$(DESTDIR)$mandir
3420 SRC_PATH=$source_path
3421 CC_IDENT=$cc_ident
3422 ARCH=$arch
3423 CC=$cc
3424 AS=$as
3425 LD=$ld
3426 DEPCC=$dep_cc
3427 DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
3428 DEPAS=$as
3429 DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
3430 YASM=$yasmexe
3431 DEPYASM=$yasmexe
3432 AR=$ar
3433 RANLIB=$ranlib
3434 LN_S=$ln_s
3435 CPPFLAGS=$CPPFLAGS
3436 CFLAGS=$CFLAGS
3437 ASFLAGS=$ASFLAGS
3438 AS_C=$AS_C
3439 AS_O=$AS_O
3440 CC_C=$CC_C
3441 CC_O=$CC_O
3442 LD_O=$LD_O
3443 DLLTOOL=$dlltool
3444 LDFLAGS=$LDFLAGS
3445 AVSERVERLDFLAGS=$AVSERVERLDFLAGS
3446 SHFLAGS=$SHFLAGS
3447 YASMFLAGS=$YASMFLAGS
3448 BUILDSUF=$build_suffix
3449 FULLNAME=$FULLNAME
3450 LIBPREF=$LIBPREF
3451 LIBSUF=$LIBSUF
3452 LIBNAME=$LIBNAME
3453 SLIBPREF=$SLIBPREF
3454 SLIBSUF=$SLIBSUF
3455 EXESUF=$EXESUF
3456 EXTRA_VERSION=$extra_version
3457 CCDEP=$CCDEP
3458 CCDEP_FLAGS=$CCDEP_FLAGS
3459 ASDEP=$ASDEP
3460 ASDEP_FLAGS=$ASDEP_FLAGS
3461 CC_DEPFLAGS=$CC_DEPFLAGS
3462 AS_DEPFLAGS=$AS_DEPFLAGS
3463 HOSTCC=$host_cc
3464 HOSTCFLAGS=$host_cflags
3465 HOSTEXESUF=$HOSTEXESUF
3466 HOSTLDFLAGS=$host_ldflags
3467 HOSTLIBS=$host_libs
3468 DEPHOSTCC=$host_cc
3469 DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
3470 HOSTCCDEP=$HOSTCCDEP
3471 HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
3472 HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
3473 HOSTCC_C=$HOSTCC_C
3474 HOSTCC_O=$HOSTCC_O
3475 TARGET_EXEC=$target_exec
3476 TARGET_PATH=$target_path
3477 SDL_LIBS=$sdl_libs
3478 SDL_CFLAGS=$sdl_cflags
3479 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3480 EXTRALIBS=$extralibs
3481 INSTALL=install
3482 LIBTARGET=${LIBTARGET}
3483 SLIBNAME=${SLIBNAME}
3484 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3485 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3486 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3487 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3488 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
3489 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
3490 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
3491 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
3492 SAMPLES:=${samples:-\$(LIBAV_SAMPLES)}
3493 EOF
3494
3495 get_version(){
3496     lcname=$1
3497     name=$(toupper $lcname)
3498     file=$source_path/$lcname/version.h
3499     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3500     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3501     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3502     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3503 }
3504
3505 get_version libavcodec
3506 get_version libavdevice
3507 get_version libavfilter
3508 get_version libavformat
3509 get_version libavresample
3510 get_version libavutil
3511 get_version libswscale
3512
3513 cat > $TMPH <<EOF
3514 /* Automatically generated by configure - do not modify! */
3515 #ifndef LIBAV_CONFIG_H
3516 #define LIBAV_CONFIG_H
3517 #define LIBAV_CONFIGURATION "$(c_escape $LIBAV_CONFIGURATION)"
3518 #define LIBAV_LICENSE "$(c_escape $license)"
3519 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
3520 #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
3521 #define restrict $_restrict
3522 #define EXTERN_PREFIX "${extern_prefix}"
3523 #define EXTERN_ASM ${extern_prefix}
3524 #define SLIBSUF "$SLIBSUF"
3525 EOF
3526
3527 test -n "$malloc_prefix" &&
3528     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3529
3530 if enabled yasm; then
3531     append config_files $TMPASM
3532     printf '' >$TMPASM
3533 fi
3534
3535 print_config ARCH_   "$config_files" $ARCH_LIST
3536 print_config HAVE_   "$config_files" $HAVE_LIST
3537 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
3538                                      $CONFIG_EXTRA      \
3539                                      $ALL_COMPONENTS    \
3540
3541 cat >>config.mak <<EOF
3542 LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3543 LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3544 SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3545 EOF
3546
3547 echo "#endif /* LIBAV_CONFIG_H */" >> $TMPH
3548
3549 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3550 cp_if_changed $TMPH config.h
3551 touch .config
3552
3553 enabled yasm && cp_if_changed $TMPASM config.asm
3554
3555 cat > $TMPH <<EOF
3556 /* Generated by ffconf */
3557 #ifndef AVUTIL_AVCONFIG_H
3558 #define AVUTIL_AVCONFIG_H
3559 EOF
3560
3561 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3562
3563 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3564
3565 cp_if_changed $TMPH libavutil/avconfig.h
3566
3567 test -n "$WARNINGS" && printf "\n$WARNINGS"
3568
3569 # build pkg-config files
3570
3571 pkgconfig_generate(){
3572 name=$1
3573 shortname=${name#lib}${build_suffix}
3574 comment=$2
3575 version=$3
3576 libs=$4
3577 requires=$5
3578 enabled ${name#lib} || return 0
3579 mkdir -p $name
3580 cat <<EOF > $name/$name.pc
3581 prefix=$prefix
3582 exec_prefix=\${prefix}
3583 libdir=$libdir
3584 includedir=$incdir
3585
3586 Name: $name
3587 Description: $comment
3588 Version: $version
3589 Requires: $(enabled shared || echo $requires)
3590 Requires.private: $(enabled shared && echo $requires)
3591 Conflicts:
3592 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3593 Libs.private: $(enabled shared && echo $libs)
3594 Cflags: -I\${includedir}
3595 EOF
3596 cat <<EOF > $name/$name-uninstalled.pc
3597 prefix=
3598 exec_prefix=
3599 libdir=\${pcfiledir}
3600 includedir=${source_path}
3601
3602 Name: $name
3603 Description: $comment
3604 Version: $version
3605 Requires: $requires
3606 Conflicts:
3607 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3608 Cflags: -I\${includedir}
3609 EOF
3610 }
3611
3612 pkgconfig_generate libavutil "Libav utility library" "$LIBAVUTIL_VERSION" "$LIBM"
3613 pkgconfig_generate libavcodec "Libav codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3614 pkgconfig_generate libavformat "Libav container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3615 pkgconfig_generate libavdevice "Libav device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3616 pkgconfig_generate libavfilter "Libav video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
3617 pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$extralibs"
3618 pkgconfig_generate libswscale "Libav image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"