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