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