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