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