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