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