Fixed segfault on corrupted smacker streams in the demuxer.
[ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg 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 FFMPEG, 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 FFmpeg."
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   echo "Usage: configure [options]"
59   echo "Options: [defaults in brackets after descriptions]"
60   echo
61   echo "Standard options:"
62   echo "  --help                   print this message"
63   echo "  --logfile=FILE           log tests and output to FILE [config.err]"
64   echo "  --disable-logging        do not log configure debug information"
65   echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
66   echo "  --bindir=DIR             install binaries in DIR [PREFIX/bin]"
67   echo "  --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]"
68   echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
69   echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
70   echo "  --incdir=DIR             install includes in DIR [PREFIX/include]"
71   echo "  --mandir=DIR             install man page in DIR [PREFIX/share/man]"
72   echo
73   echo "Configuration options:"
74   echo "  --disable-static         do not build static libraries [no]"
75   echo "  --enable-shared          build shared libraries [no]"
76   echo "  --enable-gpl             allow use of GPL code, the resulting libs"
77   echo "                           and binaries will be under GPL [no]"
78   echo "  --enable-version3        upgrade (L)GPL to version 3 [no]"
79   echo "  --enable-nonfree         allow use of nonfree code, the resulting libs"
80   echo "                           and binaries will be unredistributable [no]"
81   echo "  --disable-ffmpeg         disable ffmpeg build"
82   echo "  --disable-ffplay         disable ffplay build"
83   echo "  --disable-ffserver       disable ffserver build"
84   echo "  --enable-postproc        enable GPLed postprocessing support [no]"
85   echo "  --enable-swscale         enable software scaler support [no]"
86   echo "  --enable-avfilter        video filter support (replaces vhook) [no]"
87   echo "  --enable-avfilter-lavf   video filters dependent on avformat [no]"
88   echo "  --disable-vhook          disable video hooking support"
89   echo "  --enable-beosthreads     use BeOS threads [no]"
90   echo "  --enable-os2threads      use OS/2 threads [no]"
91   echo "  --enable-pthreads        use pthreads [no]"
92   echo "  --enable-w32threads      use Win32 threads [no]"
93   echo "  --enable-x11grab         enable X11 grabbing [no]"
94   echo "  --enable-vdpau           enable VDPAU support [no]"
95   echo "  --disable-network        disable network support [no]"
96   echo "  --disable-ipv6           disable IPv6 support [no]"
97   echo "  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]"
98   echo "  --enable-gray            enable full grayscale support (slower color)"
99   echo "  --enable-fastdiv         enable table-based division"
100   echo "  --enable-small           optimize for size instead of speed"
101   echo "  --disable-aandct         disable AAN DCT code"
102   echo "  --disable-fft            disable FFT code"
103   echo "  --disable-golomb         disable Golomb code"
104   echo "  --disable-mdct           disable MDCT code"
105   echo "  --disable-rdft           disable RDFT code"
106   echo "  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)"
107   echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
108   echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
109   echo "  --enable-beos-netserver  enable BeOS netserver"
110   echo "  --disable-encoder=NAME   disable encoder NAME"
111   echo "  --enable-encoder=NAME    enable encoder NAME"
112   echo "  --disable-encoders       disable all encoders"
113   echo "  --disable-decoder=NAME   disable decoder NAME"
114   echo "  --enable-decoder=NAME    enable decoder NAME"
115   echo "  --disable-decoders       disable all decoders"
116   echo "  --disable-muxer=NAME     disable muxer NAME"
117   echo "  --enable-muxer=NAME      enable muxer NAME"
118   echo "  --disable-muxers         disable all muxers"
119   echo "  --disable-demuxer=NAME   disable demuxer NAME"
120   echo "  --enable-demuxer=NAME    enable demuxer NAME"
121   echo "  --disable-demuxers       disable all demuxers"
122   echo "  --enable-parser=NAME     enable parser NAME"
123   echo "  --disable-parser=NAME    disable parser NAME"
124   echo "  --disable-parsers        disable all parsers"
125   echo "  --enable-bsf=NAME        enable bitstream filter NAME"
126   echo "  --disable-bsf=NAME       disable bitstream filter NAME"
127   echo "  --disable-bsfs           disable all bitstream filters"
128   echo "  --enable-protocol=NAME   enable protocol NAME"
129   echo "  --disable-protocol=NAME  disable protocol NAME"
130   echo "  --disable-protocols      disable all protocols"
131   echo "  --disable-indevs         disable input devices"
132   echo "  --disable-outdevs        disable output devices"
133   echo "  --disable-devices        disable all devices"
134   echo "  --enable-filter=NAME     enable filter NAME"
135   echo "  --disable-filter=NAME    disable filter NAME"
136   echo "  --disable-filters        disable all filters"
137   echo "  --list-decoders          show all available decoders"
138   echo "  --list-encoders          show all available encoders"
139   echo "  --list-muxers            show all available muxers"
140   echo "  --list-demuxers          show all available demuxers"
141   echo "  --list-parsers           show all available parsers"
142   echo "  --list-protocols         show all available protocols"
143   echo "  --list-bsfs              show all available bitstream filters"
144   echo "  --list-indevs            show all available input devices"
145   echo "  --list-outdevs           show all available output devices"
146   echo "  --list-filters           show all available filters"
147   echo
148   echo "External library support:"
149   echo "  --enable-avisynth        enable reading of AVISynth script files [no]"
150   echo "  --enable-bzlib           enable bzlib [autodetect]"
151   echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec [no]"
152   echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec [no]"
153   echo "  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]"
154   echo "  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]"
155   echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
156   echo "                           and libraw1394 [no]"
157   echo "  --enable-libdirac        enable Dirac support via libdirac [no]"
158   echo "  --enable-libfaac         enable FAAC support via libfaac [no]"
159   echo "  --enable-libfaad         enable FAAD support via libfaad [no]"
160   echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [no]"
161   echo "  --enable-libgsm          enable GSM support via libgsm [no]"
162   echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]"
163   echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
164   echo "                           native (de)muxer exists [no]"
165   echo "  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]"
166   echo "  --enable-libschroedinger enable Dirac support via libschroedinger [no]"
167   echo "  --enable-libspeex        enable Speex decoding via libspeex [no]"
168   echo "  --enable-libtheora       enable Theora encoding via libtheora [no]"
169   echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
170   echo "                           native implementation exists [no]"
171   echo "  --enable-libx264         enable H.264 encoding via x264 [no]"
172   echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
173   echo "                           native MPEG-4/Xvid encoder exists [no]"
174   echo "  --enable-mlib            enable Sun medialib [no]"
175   echo "  --enable-zlib            enable zlib [autodetect]"
176   echo ""
177   echo "Advanced options (experts only):"
178   echo "  --source-path=PATH       path to source code [$source_path]"
179   echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
180   echo "  --enable-cross-compile   assume a cross-compiler is used"
181   echo "  --sysroot=PATH           root of cross-build tree"
182   echo "  --sysinclude=PATH        location of cross-build system headers"
183   echo "  --target-os=OS           compiler targets OS [$target_os]"
184   echo "  --target-exec=CMD        command to run executables on target"
185   echo "  --target-path=DIR        path to view of build directory on target"
186   echo "  --nm=NM                  use nm tool"
187   echo "  --cc=CC                  use C compiler CC [$cc_default]"
188   echo "  --host-cc=HOSTCC         use host C compiler HOSTCC"
189   echo "  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host"
190   echo "  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host"
191   echo "  --host-libs=HLIBS        use libs HLIBS when linking for host"
192   echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
193   echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
194   echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
195   echo "  --extra-version=STRING   version string suffix []"
196   echo "  --build-suffix=SUFFIX    library name suffix []"
197   echo "  --arch=ARCH              select architecture [$arch]"
198   echo "  --cpu=CPU                select the minimum required CPU (affects"
199   echo "                           instruction selection, may crash on older CPUs)"
200   echo "  --enable-powerpc-perf    enable performance report on PPC"
201   echo "                           (requires enabling PMC)"
202   echo "  --disable-altivec        disable AltiVec optimizations"
203   echo "  --disable-amd3dnow       disable 3DNow! optimizations"
204   echo "  --disable-amd3dnowext    disable 3DNow! extended optimizations"
205   echo "  --disable-mmx            disable MMX optimizations"
206   echo "  --disable-mmx2           disable MMX2 optimizations"
207   echo "  --disable-sse            disable SSE optimizations"
208   echo "  --disable-ssse3          disable SSSE3 optimizations"
209   echo "  --disable-armv5te        disable armv5te optimizations"
210   echo "  --disable-armv6          disable armv6 optimizations"
211   echo "  --disable-armv6t2        disable armv6t2 optimizations"
212   echo "  --disable-armvfp         disable ARM VFP optimizations"
213   echo "  --disable-iwmmxt         disable iwmmxt optimizations"
214   echo "  --disable-mmi            disable MMI optimizations"
215   echo "  --disable-neon           disable neon optimizations"
216   echo "  --disable-vis            disable VIS optimizations"
217   echo "  --disable-yasm           disable use of yasm assembler"
218   echo
219   echo "Developer options (useful when working on FFmpeg itself):"
220   echo "  --disable-debug          disable debugging symbols"
221   echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
222   echo "  --enable-gprof           enable profiling with gprof [$gprof]"
223   echo "  --disable-optimizations  disable compiler optimizations"
224   echo "  --enable-extra-warnings  enable more compiler warnings"
225   echo "  --disable-stripping      disable stripping of executables and shared libraries"
226   echo ""
227   echo "NOTE: Object files are built at the place where configure is launched."
228   exit 0
229 }
230
231 log(){
232     echo "$@" >> $logfile
233 }
234
235 log_file(){
236     log BEGIN $1
237     pr -n -t $1 >> $logfile
238     log END $1
239 }
240
241 echolog(){
242     log "$@"
243     echo "$@"
244 }
245
246 die(){
247     echolog "$@"
248     cat <<EOF
249 If you think configure made a mistake, make sure you are using the latest
250 version from SVN.  If the latest version fails, report the problem to the
251 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
252 EOF
253     if disabled logging; then
254         cat <<EOF
255 Rerun configure with logging enabled (do not use --disable-logging), and
256 include the log this produces with your report.
257 EOF
258     else
259 cat <<EOF
260 Include the log file "$logfile" produced by configure as this will help
261 solving the problem.
262 EOF
263     fi
264     exit 1
265 }
266
267 # Avoid locale weirdness, besides we really just want to translate ASCII.
268 toupper(){
269     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
270 }
271
272 tolower(){
273     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
274 }
275
276 c_escape(){
277     echo "$*" | sed 's/["\\]/\\\0/g'
278 }
279
280 set_all(){
281     value=$1
282     shift
283     for var in $*; do
284         eval $var=$value
285     done
286 }
287
288 set_weak(){
289     value=$1
290     shift
291     for var; do
292         eval : \${$var:=$value}
293     done
294 }
295
296 pushvar(){
297     for var in $*; do
298         eval level=\${${var}_level:=0}
299         eval ${var}_${level}="\$$var"
300         eval ${var}_level=$(($level+1))
301     done
302 }
303
304 popvar(){
305     for var in $*; do
306         eval level=\${${var}_level:-0}
307         test $level = 0 && continue
308         eval level=$(($level-1))
309         eval $var="\${${var}_${level}}"
310         eval ${var}_level=$level
311         eval unset ${var}_${level}
312     done
313 }
314
315 enable(){
316     set_all yes $*
317 }
318
319 disable(){
320     set_all no $*
321 }
322
323 enable_weak(){
324     set_weak yes $*
325 }
326
327 disable_weak(){
328     set_weak no $*
329 }
330
331 enable_safe(){
332     enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
333 }
334
335 disable_safe(){
336     disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
337 }
338
339 do_enable_deep(){
340     for var; do
341         enabled $var && continue
342         eval sel="\$${var}_select"
343         eval sgs="\$${var}_suggest"
344         pushvar var sgs
345         enable_deep $sel
346         popvar sgs
347         enable_deep_weak $sgs
348         popvar var
349     done
350 }
351
352 enable_deep(){
353     do_enable_deep $*
354     enable $*
355 }
356
357 enable_deep_weak(){
358     do_enable_deep $*
359     enable_weak $*
360 }
361
362 enabled(){
363     test "${1#!}" = "$1" && op== || op=!=
364     eval test "x\$${1#!}" $op "xyes"
365 }
366
367 disabled(){
368     test "${1#!}" = "$1" && op== || op=!=
369     eval test "x\$${1#!}" $op "xno"
370 }
371
372 enabled_all(){
373     for opt; do
374         enabled $opt || return 1
375     done
376 }
377
378 disabled_all(){
379     for opt; do
380         disabled $opt || return 1
381     done
382 }
383
384 enabled_any(){
385     for opt; do
386         enabled $opt && return 0
387     done
388 }
389
390 disabled_any(){
391     for opt; do
392         disabled $opt && return 0
393     done
394     return 1
395 }
396
397 set_default(){
398     for opt; do
399         eval : \${$opt:=\$${opt}_default}
400     done
401 }
402
403 is_in(){
404     value=$1
405     shift
406     for var in $*; do
407         [ $var = $value ] && return 0
408     done
409     return 1
410 }
411
412 check_deps(){
413     for cfg; do
414         cfg="${cfg#!}"
415         enabled ${cfg}_checking && die "Circular dependency for $cfg."
416         disabled ${cfg}_checking && continue
417         enable ${cfg}_checking
418
419         eval dep_all="\$${cfg}_deps"
420         eval dep_any="\$${cfg}_deps_any"
421         eval dep_sel="\$${cfg}_select"
422         eval dep_sgs="\$${cfg}_suggest"
423
424         pushvar cfg dep_all dep_any dep_sel dep_sgs
425         check_deps $dep_all $dep_any $dep_sel $dep_sgs
426         popvar cfg dep_all dep_any dep_sel dep_sgs
427
428         enabled_all  $dep_all || disable $cfg
429         enabled_any  $dep_any || disable $cfg
430         disabled_any $dep_sel && disable $cfg
431
432         if enabled $cfg; then
433             eval dep_extralibs="\$${cfg}_extralibs"
434             test -n "$dep_extralibs" && add_extralibs $dep_extralibs
435             enable_deep $dep_sel
436             enable_deep_weak $dep_sgs
437         fi
438
439         disable ${cfg}_checking
440     done
441 }
442
443 print_config(){
444     pfx=$1
445     header=$2
446     makefile=$3
447     shift 3
448     for cfg; do
449         ucname="`toupper $cfg`"
450         if enabled $cfg; then
451             echo "#define ${pfx}${ucname} 1" >> $header
452             echo "${pfx}${ucname}=yes" >> $makefile
453         else
454             echo "#define ${pfx}${ucname} 0" >> $header
455         fi
456     done
457 }
458
459 flags_saved(){
460     (: ${SAVE_CFLAGS?}) 2> /dev/null
461 }
462
463 save_flags(){
464     flags_saved && return
465     SAVE_CFLAGS="$CFLAGS"
466     SAVE_LDFLAGS="$LDFLAGS"
467     SAVE_extralibs="$extralibs"
468 }
469
470 restore_flags(){
471     flags_saved || return
472     CFLAGS="$SAVE_CFLAGS"
473     LDFLAGS="$SAVE_LDFLAGS"
474     extralibs="$SAVE_extralibs"
475     unset SAVE_CFLAGS
476     unset SAVE_LDFLAGS
477     unset SAVE_extralibs
478 }
479
480 temp_cflags(){
481     save_flags
482     CFLAGS="$CFLAGS $*"
483 }
484
485 temp_ldflags(){
486     save_flags
487     LDFLAGS="$LDFLAGS $*"
488 }
489
490 temp_extralibs(){
491     save_flags
492     extralibs="$extralibs $*"
493 }
494
495 append(){
496     var=$1
497     shift
498     flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
499     eval "$var=\"\$$var $*\""
500 }
501
502 add_cflags(){
503     append CFLAGS "$@"
504 }
505
506 add_ldflags(){
507     append LDFLAGS "$@"
508 }
509
510 add_extralibs(){
511     append extralibs "$@"
512 }
513
514 check_cmd(){
515     log "$@"
516     "$@" >> $logfile 2>&1
517 }
518
519 check_cc(){
520     log check_cc "$@"
521     cat > $TMPC
522     log_file $TMPC
523     check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
524 }
525
526 check_cpp(){
527     log check_cpp "$@"
528     cat > $TMPC
529     log_file $TMPC
530     check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
531 }
532
533 check_asm(){
534     log check_asm "$@"
535     name="$1"
536     asm="$2"
537     shift 2
538     check_cc "$@" <<EOF && enable $name || disable $name
539 void foo(void){ __asm__ volatile($asm); }
540 EOF
541 }
542
543 check_yasm(){
544     log check_yasm "$@"
545     echo "$1" > $TMPS
546     log_file $TMPS
547     shift 1
548     check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
549 }
550
551 check_ld(){
552     log check_ld "$@"
553     check_cc || return
554     flags=''
555     libs=''
556     for f; do
557         test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
558     done
559     check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
560 }
561
562 check_cflags(){
563     log check_cflags "$@"
564     check_cc "$@" <<EOF && add_cflags "$@"
565 int x;
566 EOF
567 }
568
569 test_ldflags(){
570     log test_ldflags "$@"
571     check_ld "$@" <<EOF
572 int main(void){ return 0; }
573 EOF
574 }
575
576 check_ldflags(){
577     log check_ldflags "$@"
578     test_ldflags "$@" && add_ldflags "$@"
579 }
580
581 check_header(){
582     log check_header "$@"
583     header=$1
584     shift
585     disable_safe $header
586     check_cpp "$@" <<EOF && enable_safe $header
587 #include <$header>
588 int x;
589 EOF
590 }
591
592 check_func(){
593     log check_func "$@"
594     func=$1
595     shift
596     disable $func
597     check_ld "$@" <<EOF && enable $func
598 extern int $func();
599 int main(void){ $func(); }
600 EOF
601 }
602
603 check_func_headers(){
604     log check_func_headers "$@"
605     headers=$1
606     func=$2
607     shift 2
608     disable $func
609     incs=""
610     for hdr in $headers; do
611         incs="$incs
612 #include <$hdr>"
613     done
614     check_ld "$@" <<EOF && enable $func && enable_safe $headers
615 $incs
616 int main(int argc, char **argv){
617     (void) $func;
618     return 0;
619 }
620 EOF
621 }
622
623 check_cpp_condition(){
624     log check_cpp_condition "$@"
625     header=$1
626     condition=$2
627     check_cpp <<EOF
628 #include <$header>
629 #if !($condition)
630 #error "unsatisfied condition: $condition"
631 #endif
632 EOF
633 }
634
635 check_lib(){
636     log check_lib "$@"
637     header="$1"
638     func="$2"
639     shift 2
640     temp_extralibs "$@"
641     check_header $header && check_func $func && add_extralibs "$@"
642     err=$?
643     restore_flags
644     return $err
645 }
646
647 check_lib2(){
648     log check_lib2 "$@"
649     headers="$1"
650     func="$2"
651     shift 2
652     temp_extralibs "$@"
653     check_func_headers "$headers" $func && add_extralibs "$@"
654     err=$?
655     restore_flags
656     return $err
657 }
658
659 check_exec(){
660     check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
661 }
662
663 check_exec_crash(){
664     code=`cat`
665
666     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
667     # are safe but may not be available everywhere.  Thus we use
668     # raise(SIGTERM) instead.  The check is run in a subshell so we
669     # can redirect the "Terminated" message from the shell.  SIGBUS
670     # is not defined by standard C so it is used conditionally.
671
672     (check_exec "$@") >> $logfile 2>&1 <<EOF
673 #include <signal.h>
674 static void sighandler(int sig){
675     raise(SIGTERM);
676 }
677 int main(void){
678     signal(SIGILL, sighandler);
679     signal(SIGFPE, sighandler);
680     signal(SIGSEGV, sighandler);
681 #ifdef SIGBUS
682     signal(SIGBUS, sighandler);
683 #endif
684     { $code }
685 }
686 EOF
687 }
688
689 check_type(){
690     log check_type "$@"
691     headers=$1
692     type=$2
693     shift 2
694     disable $type
695     incs=""
696     for hdr in $headers; do
697         incs="$incs
698 #include <$hdr>"
699     done
700     check_cc "$@" <<EOF && enable $type
701 $incs
702 $type v;
703 EOF
704 }
705
706 require(){
707     name="$1"
708     header="$2"
709     func="$3"
710     shift 3
711     check_lib $header $func "$@" || die "ERROR: $name not found"
712 }
713
714 require2(){
715     name="$1"
716     headers="$2"
717     func="$3"
718     shift 3
719     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
720 }
721
722 check_foo_config(){
723     cfg=$1
724     pkg=$2
725     header=$3
726     func=$4
727     shift 4
728     disable $cfg
729     check_cmd ${pkg}-config --version
730     err=$?
731     if test "$err" = 0; then
732         temp_cflags `${pkg}-config --cflags`
733         temp_extralibs `${pkg}-config --libs`
734         check_lib "$@" $header $func && enable $cfg
735     fi
736     return $err
737 }
738
739 apply(){
740     file=$1
741     shift
742     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
743 }
744
745 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
746 # system-dependent things.
747
748 COMPONENT_LIST="
749     bsfs
750     decoders
751     demuxers
752     encoders
753     filters
754     indevs
755     muxers
756     outdevs
757     parsers
758     protocols
759 "
760
761 CONFIG_LIST="
762     $COMPONENT_LIST
763     aandct
764     avfilter
765     avfilter_lavf
766     avisynth
767     beos_netserver
768     bzlib
769     fastdiv
770     ffmpeg
771     ffplay
772     ffserver
773     fft
774     golomb
775     gpl
776     gprof
777     gray
778     hardcoded_tables
779     ipv6
780     libamr_nb
781     libamr_wb
782     libdc1394
783     libdirac
784     libfaac
785     libfaad
786     libfaadbin
787     libgsm
788     libmp3lame
789     libnut
790     libopencore_amrnb
791     libopencore_amrwb
792     libopenjpeg
793     libschroedinger
794     libspeex
795     libtheora
796     libvorbis
797     libx264
798     libxvid
799     mdct
800     memalign_hack
801     mlib
802     mpegaudio_hp
803     network
804     nonfree
805     postproc
806     powerpc_perf
807     rdft
808     runtime_cpudetect
809     shared
810     small
811     static
812     swscale
813     vdpau
814     vhook
815     version3
816     x11grab
817     zlib
818 "
819
820 THREADS_LIST='
821     beosthreads
822     os2threads
823     pthreads
824     w32threads
825 '
826
827 ARCH_LIST='
828     alpha
829     arm
830     bfin
831     ia64
832     m68k
833     mips
834     parisc
835     ppc
836     s390
837     sh4
838     sparc
839     sparc64
840     x86
841     x86_32
842     x86_64
843 '
844
845 ARCH_EXT_LIST='
846     altivec
847     amd3dnow
848     amd3dnowext
849     armv5te
850     armv6
851     armv6t2
852     armvfp
853     iwmmxt
854     mmi
855     mmx
856     mmx2
857     neon
858     ppc4xx
859     sse
860     ssse3
861     vis
862 '
863
864 HAVE_LIST="
865     $ARCH_EXT_LIST
866     $THREADS_LIST
867     alsa_asoundlib_h
868     altivec_h
869     arpa_inet_h
870     bswap
871     closesocket
872     cmov
873     conio_h
874     dcbzl
875     dev_bktr_ioctl_bt848_h
876     dev_bktr_ioctl_meteor_h
877     dev_ic_bt8xx_h
878     dev_video_meteor_ioctl_meteor_h
879     dev_video_bktr_ioctl_bt848_h
880     dlfcn_h
881     dlopen
882     dos_paths
883     ebp_available
884     ebx_available
885     fast_64bit
886     fast_cmov
887     fast_unaligned
888     fork
889     freetype2
890     gethrtime
891     GetProcessTimes
892     getrusage
893     imlib2
894     inet_aton
895     inline_asm
896     libdc1394_1
897     libdc1394_2
898     llrint
899     lrint
900     lrintf
901     machine_ioctl_bt848_h
902     machine_ioctl_meteor_h
903     malloc_h
904     memalign
905     mkstemp
906     pld
907     posix_memalign
908     ppc64
909     round
910     roundf
911     sdl
912     sdl_video_size
913     setmode
914     socklen_t
915     soundcard_h
916     poll_h
917     sys_mman_h
918     sys_resource_h
919     sys_select_h
920     sys_soundcard_h
921     sys_videoio_h
922     ten_operands
923     termios_h
924     threads
925     truncf
926     winsock2_h
927     yasm
928 "
929
930 # options emitted with CONFIG_ prefix but not available on command line
931 CONFIG_EXTRA="
932     gplv3
933     lgplv3
934     oldscaler
935 "
936
937 CMDLINE_SELECT="
938     $ARCH_EXT_LIST
939     $CONFIG_LIST
940     $THREADS_LIST
941     cross_compile
942     debug
943     extra_warnings
944     logging
945     optimizations
946     stripping
947     yasm
948 "
949
950 PATHS_LIST='
951     bindir
952     datadir
953     incdir
954     libdir
955     mandir
956     prefix
957     shlibdir
958 '
959
960 CMDLINE_SET="
961     $PATHS_LIST
962     arch
963     build_suffix
964     cc
965     cpu
966     cross_prefix
967     extra_version
968     host_cc
969     host_cflags
970     host_ldflags
971     host_libs
972     logfile
973     nm
974     source_path
975     sysinclude
976     sysroot
977     target_exec
978     target_os
979     target_path
980 "
981
982 # code dependency declarations
983
984 # architecture extensions
985 altivec_deps="ppc"
986 amd3dnow_deps="mmx"
987 amd3dnowext_deps="amd3dnow"
988 armv5te_deps="arm"
989 armv6_deps="arm"
990 armv6t2_deps="arm"
991 armvfp_deps="arm"
992 iwmmxt_deps="arm"
993 mmi_deps="mips"
994 mmx_deps="x86"
995 mmx2_deps="mmx"
996 neon_deps="arm"
997 ppc4xx_deps="ppc"
998 sse_deps="mmx"
999 ssse3_deps="sse"
1000 vis_deps="sparc"
1001
1002 # common features
1003 oldscaler_deps="!swscale"
1004
1005 # decoders / encoders
1006 aac_decoder_select="fft mdct"
1007 ac3_decoder_select="fft mdct"
1008 atrac3_decoder_select="fft mdct"
1009 cavs_decoder_select="golomb"
1010 cook_decoder_select="fft mdct"
1011 cscd_decoder_suggest="zlib"
1012 dca_decoder_select="fft mdct"
1013 dnxhd_encoder_select="aandct"
1014 dxa_decoder_select="zlib"
1015 eac3_decoder_select="fft mdct"
1016 eatgq_decoder_select="aandct"
1017 eatqi_decoder_select="aandct"
1018 ffv1_decoder_select="golomb"
1019 flac_decoder_select="golomb"
1020 flac_encoder_select="golomb"
1021 flashsv_decoder_select="zlib"
1022 flashsv_encoder_select="zlib"
1023 flv_encoder_select="aandct"
1024 h261_encoder_select="aandct"
1025 h263_encoder_select="aandct"
1026 h263p_encoder_select="aandct"
1027 h264_decoder_select="golomb"
1028 h264_vdpau_decoder_deps="vdpau"
1029 imc_decoder_select="fft mdct"
1030 jpegls_decoder_select="golomb"
1031 jpegls_encoder_select="golomb"
1032 ljpeg_encoder_select="aandct"
1033 loco_decoder_select="golomb"
1034 mjpeg_encoder_select="aandct"
1035 mpeg1video_encoder_select="aandct"
1036 mpeg2video_encoder_select="aandct"
1037 mpeg4_encoder_select="aandct"
1038 mpeg_vdpau_decoder_deps="vdpau"
1039 mpeg1_vdpau_decoder_deps="vdpau"
1040 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1041 msmpeg4v1_encoder_select="aandct"
1042 msmpeg4v2_encoder_select="aandct"
1043 msmpeg4v3_encoder_select="aandct"
1044 nellymoser_decoder_select="fft mdct"
1045 nellymoser_encoder_select="fft mdct"
1046 png_decoder_select="zlib"
1047 png_encoder_select="zlib"
1048 qdm2_decoder_select="fft mdct rdft"
1049 rv10_encoder_select="aandct"
1050 rv20_encoder_select="aandct"
1051 rv30_decoder_select="golomb"
1052 rv40_decoder_select="golomb"
1053 shorten_decoder_select="golomb"
1054 sonic_decoder_select="golomb"
1055 sonic_encoder_select="golomb"
1056 sonic_ls_encoder_select="golomb"
1057 svq3_decoder_select="golomb"
1058 svq3_decoder_suggest="zlib"
1059 tiff_decoder_suggest="zlib"
1060 tiff_encoder_suggest="zlib"
1061 tscc_decoder_select="zlib"
1062 vc1_vdpau_decoder_deps="vdpau"
1063 vorbis_decoder_select="fft mdct"
1064 vorbis_encoder_select="fft mdct"
1065 wmav1_decoder_select="fft mdct"
1066 wmav1_encoder_select="fft mdct"
1067 wmav2_decoder_select="fft mdct"
1068 wmav2_encoder_select="fft mdct"
1069 wmv1_encoder_select="aandct"
1070 wmv2_encoder_select="aandct"
1071 wmv3_vdpau_decoder_deps="vdpau"
1072 zlib_decoder_select="zlib"
1073 zlib_encoder_select="zlib"
1074 zmbv_decoder_select="zlib"
1075 zmbv_encoder_select="zlib"
1076
1077 # external libraries
1078 libamr_nb_decoder_deps="libamr_nb"
1079 libamr_nb_encoder_deps="libamr_nb"
1080 libamr_wb_decoder_deps="libamr_wb"
1081 libamr_wb_encoder_deps="libamr_wb"
1082 libdirac_decoder_deps="libdirac !libschroedinger"
1083 libdirac_encoder_deps="libdirac"
1084 libfaac_encoder_deps="libfaac"
1085 libfaad_decoder_deps="libfaad"
1086 libfaadbin_decoder_extralibs='$ldl'
1087 libgsm_decoder_deps="libgsm"
1088 libgsm_encoder_deps="libgsm"
1089 libgsm_ms_decoder_deps="libgsm"
1090 libgsm_ms_encoder_deps="libgsm"
1091 libmp3lame_encoder_deps="libmp3lame"
1092 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1093 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1094 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1095 libopenjpeg_decoder_deps="libopenjpeg"
1096 libschroedinger_decoder_deps="libschroedinger"
1097 libschroedinger_encoder_deps="libschroedinger"
1098 libspeex_decoder_deps="libspeex"
1099 libtheora_encoder_deps="libtheora"
1100 libvorbis_encoder_deps="libvorbis"
1101 libx264_encoder_deps="libx264"
1102 libxvid_encoder_deps="libxvid"
1103 mpeg4aac_decoder_deps="libfaad"
1104 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1105
1106 # demuxers / muxers
1107 ac3_demuxer_deps="ac3_parser"
1108 alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1109 alsa_demuxer_extralibs="-lasound"
1110 alsa_muxer_deps="alsa_asoundlib_h"
1111 alsa_muxer_extralibs="-lasound"
1112 audio_beos_demuxer_deps="audio_beos"
1113 audio_beos_demuxer_extralibs="-lmedia -lbe"
1114 audio_beos_muxer_deps="audio_beos"
1115 audio_beos_muxer_extralibs="-lmedia -lbe"
1116 avisynth_demuxer_deps="avisynth"
1117 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1118 dirac_demuxer_deps="dirac_parser"
1119 dv1394_demuxer_deps="dv1394 dv_demuxer"
1120 libdc1394_demuxer_deps="libdc1394"
1121 libnut_demuxer_deps="libnut"
1122 libnut_muxer_deps="libnut"
1123 matroska_demuxer_suggest="zlib bzlib"
1124 mov_demuxer_suggest="zlib"
1125 mp3_demuxer_deps="mpegaudio_parser"
1126 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1127 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1128 redir_demuxer_deps="network"
1129 rtp_muxer_deps="network rtp_protocol"
1130 rtsp_demuxer_deps="sdp_demuxer"
1131 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1132 v4l_demuxer_deps="linux_videodev_h"
1133 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1134 vfwcap_demuxer_deps="capCreateCaptureWindow"
1135 vfwcap_demuxer_extralibs="-lvfw32"
1136 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1137 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1138
1139 # protocols
1140 gopher_protocol_deps="network"
1141 http_protocol_deps="network"
1142 rtp_protocol_deps="udp_protocol"
1143 tcp_protocol_deps="network"
1144 udp_protocol_deps="network"
1145
1146 # filters
1147 movie_filter_deps="avfilter_lavf"
1148
1149 # programs
1150 ffplay_deps="sdl"
1151 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1152 ffserver_extralibs='$ldl'
1153 vhook_extralibs='$ldl'
1154
1155
1156 # default parameters
1157
1158 logfile="config.err"
1159
1160 # installation paths
1161 prefix_default="/usr/local"
1162 bindir_default='${prefix}/bin'
1163 datadir_default='${prefix}/share/ffmpeg'
1164 incdir_default='${prefix}/include'
1165 libdir_default='${prefix}/lib'
1166 mandir_default='${prefix}/share/man'
1167 shlibdir_default="$libdir_default"
1168
1169 # toolchain
1170 ar="ar"
1171 cc_default="gcc"
1172 host_cc_default="gcc"
1173 ln_s="ln -sf"
1174 nm_default="nm"
1175 objformat="elf"
1176 ranlib="ranlib"
1177 strip="strip"
1178 yasmexe="yasm"
1179
1180 # machine
1181 arch=`uname -m`
1182 cpu="generic"
1183
1184 # OS
1185 target_os=$(tolower $(uname -s))
1186
1187 # configurable options
1188 enable debug
1189 enable ffmpeg
1190 enable ffplay
1191 enable ffserver
1192 enable ipv6
1193 enable mpegaudio_hp
1194 enable network
1195 enable oldscaler
1196 enable optimizations
1197 enable protocols
1198 enable static
1199 enable stripping
1200 vhook="default"
1201
1202 # build settings
1203 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1204 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1205 VHOOKSHFLAGS='-shared -Wl,-soname,$$(@F)'
1206 FFSERVERLDFLAGS=-Wl,-E
1207 LIBPREF="lib"
1208 LIBSUF=".a"
1209 FULLNAME='$(NAME)$(BUILDSUF)'
1210 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1211 SLIBPREF="lib"
1212 SLIBSUF=".so"
1213 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1214 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1215 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1216 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1217
1218 host_cflags='-O3 -g -Wall'
1219 host_libs='-lm'
1220
1221 target_path='.'
1222
1223 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1224 # full relative path for objects in subdirectories for non-recursive Make.
1225 DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1226
1227 # find source path
1228 source_path="`dirname \"$0\"`"
1229 enable source_path_used
1230 if test -z "$source_path" -o "$source_path" = "." ; then
1231     source_path="`pwd`"
1232     disable source_path_used
1233 else
1234     source_path="`cd \"$source_path\"; pwd`"
1235     echo "$source_path" | grep -q '[[:blank:]]' &&
1236         die "Out of tree builds are impossible with whitespace in source path."
1237 fi
1238
1239 FFMPEG_CONFIGURATION="$@"
1240
1241 find_things(){
1242     thing=$1
1243     pattern=$2
1244     file=$source_path/$3
1245     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1246 }
1247
1248 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1249 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1250 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1251 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1252 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1253 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1254 OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1255 INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1256 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1257 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1258
1259 enable $ARCH_EXT_LIST \
1260        $DECODER_LIST \
1261        $ENCODER_LIST \
1262        $PARSER_LIST \
1263        $BSF_LIST \
1264        $DEMUXER_LIST \
1265        $MUXER_LIST \
1266        $FILTER_LIST \
1267        $PROTOCOL_LIST \
1268        $INDEV_LIST \
1269        $OUTDEV_LIST \
1270
1271 die_unknown(){
1272     echo "Unknown option \"$1\"."
1273     echo "See $0 --help for available options."
1274     exit 1
1275 }
1276
1277 show_list() {
1278     suffix=_$1
1279     shift
1280     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1281     exit 0
1282 }
1283
1284 for opt do
1285     optval="${opt#*=}"
1286     case "$opt" in
1287     --extra-cflags=*) add_cflags $optval
1288     ;;
1289     --extra-ldflags=*) add_ldflags $optval
1290     ;;
1291     --extra-libs=*) add_extralibs $optval
1292     ;;
1293     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1294     ;;
1295     --enable-debug=*) debuglevel="$optval"
1296     ;;
1297     --enable-*=*|--disable-*=*)
1298     eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1299     case "$thing" in
1300         encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1301         *) die_unknown "$opt" ;;
1302     esac
1303     ;;
1304     --enable-?*|--disable-?*)
1305     eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1306     if is_in $option $COMPONENT_LIST; then
1307         eval $action \$$(toupper ${option%s})_LIST
1308     elif is_in $option $CMDLINE_SELECT; then
1309         $action $option
1310     else
1311         die_unknown $opt
1312     fi
1313     ;;
1314     --list-*)
1315         NAME="${opt#--list-}"
1316         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1317         NAME=${NAME%s}
1318         eval show_list $NAME \$$(toupper $NAME)_LIST
1319     ;;
1320     --help|-h) show_help
1321     ;;
1322     *)
1323     optname="${opt%%=*}"
1324     optname="${optname#--}"
1325     optname=$(echo "$optname" | sed 's/-/_/g')
1326     is_in $optname $CMDLINE_SET || die_unknown $opt
1327     eval $optname='$optval'
1328     ;;
1329     esac
1330 done
1331
1332 disabled logging && logfile=/dev/null
1333
1334 echo "# $0 $@" > $logfile
1335 set >> $logfile
1336
1337 test -n "$cross_prefix" && enable cross_compile
1338
1339 ar="${cross_prefix}${ar}"
1340 cc_default="${cross_prefix}${cc_default}"
1341 nm_default="${cross_prefix}${nm_default}"
1342 ranlib="${cross_prefix}${ranlib}"
1343 strip="${cross_prefix}${strip}"
1344
1345 sysinclude_default="${sysroot}/usr/include"
1346
1347 set_default cc nm sysinclude
1348 enabled cross_compile || host_cc_default=$cc
1349 set_default host_cc
1350
1351 case $target_os in
1352     mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) EXESUF=.exe ;;
1353 esac
1354
1355 # set temporary file name
1356 : ${TMPDIR:=$TEMPDIR}
1357 : ${TMPDIR:=$TMP}
1358 : ${TMPDIR:=/tmp}
1359
1360
1361 if ! check_cmd type mktemp; then
1362     # simple replacement for missing mktemp
1363     # NOT SAFE FOR GENERAL USE
1364     mktemp(){
1365         echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1366     }
1367 fi
1368
1369
1370 tmpfile(){
1371     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1372         (set -C; exec > $tmp) 2>/dev/null ||
1373         die "Unable to create temoporary file in $TMPDIR."
1374     append TMPFILES $tmp
1375     eval $1=$tmp
1376 }
1377
1378 trap 'rm -f -- $TMPFILES' EXIT
1379 trap exit HUP INT TERM
1380
1381 tmpfile TMPC  .c
1382 tmpfile TMPE  $EXESUF
1383 tmpfile TMPH  .h
1384 tmpfile TMPO  .o
1385 tmpfile TMPS  .S
1386 tmpfile TMPV  .ver
1387 tmpfile TMPSH .sh
1388
1389 unset -f mktemp
1390
1391 # make sure we can execute files in $TMPDIR
1392 cat > $TMPSH 2>> $logfile <<EOF
1393 #! /bin/sh
1394 EOF
1395 chmod +x $TMPSH >> $logfile 2>&1
1396 if ! $TMPSH >> $logfile 2>&1; then
1397     cat <<EOF
1398 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1399 variable to another directory and make sure that it is not mounted noexec.
1400 EOF
1401     die "Sanity test failed."
1402 fi
1403
1404 if   $cc --version 2>/dev/null | grep -qi gcc; then
1405     cc_type=gcc
1406 elif $cc --version 2>/dev/null | grep -q Intel; then
1407     cc_type=icc
1408 elif $cc -v 2>&1 | grep -q xlc; then
1409     cc_type=xlc
1410 elif $cc -V 2>/dev/null | grep -q Compaq; then
1411     cc_type=ccc
1412     DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1413     add_ldflags -Wl,-z,now # calls to libots crash without this
1414 fi
1415
1416 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1417
1418 if test -n "$sysroot"; then
1419     case "$cc_type" in
1420         gcc)
1421             add_cflags  --sysroot="$sysroot"
1422             add_ldflags --sysroot="$sysroot"
1423         ;;
1424     esac
1425 fi
1426
1427 # compiler sanity check
1428 check_exec <<EOF
1429 int main(void){ return 0; }
1430 EOF
1431 if test "$?" != 0; then
1432     echo "$cc is unable to create an executable file."
1433     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1434         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1435         echo "Only do this if you know what cross compiling means."
1436     fi
1437     die "C compiler test failed."
1438 fi
1439
1440 check_cflags -std=c99
1441
1442 case "$arch" in
1443     alpha)
1444         arch="alpha"
1445         enable fast_64bit
1446         check_cflags -mieee
1447     ;;
1448     arm|armv[4567]*l)
1449         arch="arm"
1450     ;;
1451     avr32)
1452     ;;
1453     bfin)
1454         arch="bfin"
1455     ;;
1456     ia64)
1457         arch="ia64"
1458         enable fast_64bit
1459     ;;
1460     m68k)
1461         arch="m68k"
1462     ;;
1463     mips|mipsel|IP*)
1464         arch="mips"
1465     ;;
1466     mips64)
1467         arch="mips"
1468         enable fast_64bit
1469     ;;
1470     parisc|hppa)
1471         arch="parisc"
1472     ;;
1473     parisc64|hppa64)
1474         arch="parisc"
1475         enable fast_64bit
1476     ;;
1477     "Power Macintosh"|ppc|powerpc)
1478         arch="ppc"
1479         enable fast_unaligned
1480     ;;
1481     ppc64)
1482         arch="ppc"
1483         enable fast_64bit
1484         enable fast_unaligned
1485     ;;
1486     s390|s390x)
1487         arch="s390"
1488     ;;
1489     sh4|sh)
1490         arch="sh4"
1491     ;;
1492     sparc)
1493         arch="sparc"
1494     ;;
1495     sun4u|sparc64)
1496         arch="sparc"
1497         subarch="sparc64"
1498         enable fast_64bit
1499     ;;
1500     i386|i486|i586|i686|i86pc|BePC)
1501         arch="x86"
1502         subarch="x86_32"
1503         enable fast_unaligned
1504     ;;
1505     x86_64|amd64)
1506         arch="x86"
1507         subarch="x86_32"
1508         enable cmov
1509         enable fast_cmov
1510         enable fast_unaligned
1511         check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1512         int test[sizeof(char*) - 7];
1513 EOF
1514     ;;
1515     *)
1516         arch="unknown"
1517     ;;
1518 esac
1519
1520 enable $arch $subarch
1521
1522 # OS specific
1523 case $target_os in
1524     beos|haiku|zeta)
1525         prefix_default="$HOME/config"
1526         # helps building libavcodec
1527         add_cflags -DPIC -fomit-frame-pointer
1528         # 3 gcc releases known for BeOS, each with ugly bugs
1529         gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1530         case "$gcc_version" in
1531           2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1532             disable mmx
1533             ;;
1534           *20010315*) echo "BeBits gcc"
1535             add_cflags -fno-expensive-optimizations
1536             ;;
1537         esac
1538         SHFLAGS=-nostart
1539         # enable BeOS things
1540         enable audio_beos
1541         # no need for libm, but the inet stuff
1542         # Check for BONE
1543         # XXX: actually should check for NOT net_server
1544         if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1545             network_extralibs="-lbind -lsocket"
1546         else
1547             enable beos_netserver
1548             network_extralibs="-lnet"
1549         fi ;;
1550     sunos)
1551         FFSERVERLDFLAGS=""
1552         SHFLAGS='-shared -Wl,-h,$$(@F)'
1553         network_extralibs="-lsocket -lnsl"
1554         add_cflags -D__EXTENSIONS__
1555         ;;
1556     netbsd)
1557         oss_demuxer_extralibs="-lossaudio"
1558         oss_muxer_extralibs="-lossaudio"
1559         ;;
1560     openbsd)
1561         disable need_memalign
1562         LIBOBJFLAGS='$(PIC)'
1563         SHFLAGS='-shared'
1564         oss_demuxer_extralibs="-lossaudio"
1565         oss_muxer_extralibs="-lossaudio"
1566         ;;
1567     freebsd)
1568         disable need_memalign
1569         ;;
1570     bsd/os)
1571         osextralibs="-lpoll -lgnugetopt"
1572         strip="strip -d"
1573         ;;
1574     darwin)
1575         disable need_memalign
1576         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1577         VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1578         strip="strip -x"
1579         FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1580         SLIBSUF=".dylib"
1581         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1582         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1583         FFSERVERLDFLAGS=-Wl,-bind_at_load
1584         objformat="macho"
1585         enabled x86_64 && objformat="macho64"
1586         ;;
1587     mingw32*)
1588         target_os=mingw32
1589         LIBTARGET=i386
1590         if enabled x86_64; then
1591             disable need_memalign
1592             LIBTARGET=x64
1593         fi
1594         shlibdir_default="$bindir_default"
1595         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1596         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1597         if enabled swscale; then
1598             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1599             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1600         fi
1601         disable ffserver
1602         SLIBPREF=""
1603         SLIBSUF=".dll"
1604         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1605         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1606         SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1607         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1608             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1609         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1610         SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1611         objformat="win32"
1612         enable dos_paths
1613         check_cflags -fno-common
1614         if ! enabled x86_64; then
1615             check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1616                 die "ERROR: MinGW runtime version must be >= 3.15."
1617             enabled_any avisynth vfwcap_demuxer &&
1618                 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1619                   die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1620             fi
1621         ;;
1622     cygwin*)
1623         target_os=cygwin
1624         shlibdir_default="$bindir_default"
1625         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1626         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1627         if enabled swscale; then
1628             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1629             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1630         fi
1631         SLIBPREF="cyg"
1632         SLIBSUF=".dll"
1633         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1634         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1635         SHFLAGS='-shared -Wl,--enable-auto-image-base'
1636         objformat="win32"
1637         enable dos_paths
1638         check_cflags -fno-common
1639         ;;
1640     *-dos|freedos|opendos)
1641         disable ffplay ffserver vhook
1642         disable $INDEV_LIST $OUTDEV_LIST
1643         network_extralibs="-lsocket"
1644         objformat="coff"
1645         enable dos_paths
1646         ;;
1647     linux)
1648         enable dv1394
1649         ;;
1650     irix*)
1651         target_os=irix
1652         ranlib="echo ignoring ranlib"
1653         ;;
1654     os/2*)
1655         strip="lxlite"
1656         ln_s="cp -f"
1657         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1658         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1659         FFSERVERLDFLAGS=""
1660         LIBSUF="_s.a"
1661         SLIBPREF=""
1662         SLIBSUF=".dll"
1663         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1664         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1665         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1666           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1667           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1668           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1669           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1670           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1671         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1672           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1673         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1674         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1675         disable vhook
1676         enable dos_paths
1677         ;;
1678     interix)
1679         disable vhook
1680         ;;
1681     gnu/kfreebsd)
1682         ;;
1683     gnu)
1684         disable dv1394
1685         ;;
1686
1687     *)
1688         die "Unknown OS '$target_os'."
1689         ;;
1690 esac
1691
1692 set_default $PATHS_LIST
1693
1694 add_extralibs $osextralibs
1695
1696 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1697 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1698
1699 # we need to build at least one lib type
1700 if ! enabled_any static shared; then
1701     cat <<EOF
1702 At least one library type must be built.
1703 Specify --enable-static to build the static libraries or --enable-shared to
1704 build the shared libraries as well. To only build the shared libraries specify
1705 --disable-static in addition to --enable-shared.
1706 EOF
1707     exit 1;
1708 fi
1709
1710 disabled static && LIBNAME=""
1711
1712 if enabled_any libfaad libfaadbin ; then
1713     if check_header faad.h; then
1714         check_cc <<EOF
1715 #include <faad.h>
1716 #ifndef FAAD2_VERSION
1717 ok faad1
1718 #endif
1719 int main(void) { return 0; }
1720 EOF
1721         test $? = 0 && enable libfaad2
1722     else
1723         die "FAAD test failed."
1724     fi
1725 fi
1726
1727
1728 die_license_disabled() {
1729     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
1730 }
1731
1732 die_license_disabled gpl libfaad2
1733 die_license_disabled gpl libx264
1734 die_license_disabled gpl libxvid
1735 die_license_disabled gpl postproc
1736 die_license_disabled gpl x11grab
1737
1738 die_license_disabled nonfree libamr_nb
1739 die_license_disabled nonfree libamr_wb
1740 die_license_disabled nonfree libfaac
1741
1742 die_license_disabled version3 libopencore_amrnb
1743 die_license_disabled version3 libopencore_amrwb
1744
1745 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
1746
1747 check_deps $ARCH_EXT_LIST
1748
1749 test -z "$need_memalign" && need_memalign="$mmx"
1750
1751 #Darwin CC versions
1752 if test $target_os = darwin; then
1753     if enabled xlc; then
1754         add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1755     else
1756         add_cflags -pipe
1757         check_cflags -force_cpusubtype_ALL
1758         check_cflags -Wno-sign-compare
1759         enabled shared || check_cflags -mdynamic-no-pic
1760     fi
1761 fi
1762
1763 disabled optimizations || check_cflags -fomit-frame-pointer
1764
1765 # Add processor-specific flags
1766 if test $cpu != "generic"; then
1767     warn_altivec(){
1768         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1769     }
1770     case $cpu in
1771         601|ppc601|PowerPC601)
1772             add_cflags -mcpu=601
1773             warn_altivec enabled PPC601
1774         ;;
1775         603*|ppc603*|PowerPC603*)
1776             add_cflags -mcpu=603
1777             warn_altivec enabled PPC603
1778         ;;
1779         604*|ppc604*|PowerPC604*)
1780             add_cflags -mcpu=604
1781             warn_altivec enabled PPC604
1782         ;;
1783         G3|g3|75*|ppc75*|PowerPC75*)
1784             add_cflags -mcpu=750 -mpowerpc-gfxopt
1785             warn_altivec enabled PPC75x
1786         ;;
1787         G4|g4|745*|ppc745*|PowerPC745*)
1788             add_cflags -mcpu=7450 -mpowerpc-gfxopt
1789             warn_altivec disabled PPC745x
1790         ;;
1791         74*|ppc74*|PowerPC74*)
1792             add_cflags -mcpu=7400 -mpowerpc-gfxopt
1793             warn_altivec disabled PPC74xx
1794         ;;
1795         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1796             add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1797             warn_altivec disabled PPC970
1798             enable ppc64
1799         ;;
1800         Cell|CELL|cell)
1801             add_cflags -mcpu=cell
1802             warn_altivec disabled Cell
1803             enable ppc64
1804         ;;
1805         # targets that do NOT support conditional mov (cmov)
1806         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1807             add_cflags -march=$cpu
1808             disable cmov
1809         ;;
1810         # targets that do support conditional mov (cmov)
1811         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1812             add_cflags -march=$cpu
1813             enable cmov
1814             enable fast_cmov
1815         ;;
1816         # targets that do support conditional mov but on which it's slow
1817         pentium4|pentium4m|prescott|nocona)
1818             add_cflags -march=$cpu
1819             enable cmov
1820             disable fast_cmov
1821         ;;
1822         sparc64)
1823             add_cflags -mcpu=v9
1824         ;;
1825         arm11*|cortex*)
1826             add_cflags -mcpu=$cpu
1827             enable fast_unaligned
1828         ;;
1829         armv*)
1830             add_cflags -march=$cpu
1831         ;;
1832         arm*)
1833             add_cflags -mcpu=$cpu
1834         ;;
1835         ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1836             enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1837         ;;
1838         *)
1839             echo "WARNING: Unknown CPU \"$cpu\", ignored."
1840         ;;
1841     esac
1842 fi
1843
1844 check_cc <<EOF || die "Symbol mangling check failed."
1845 int ff_extern;
1846 EOF
1847 sym=$($nm -P -g $TMPO | grep ff_extern)
1848 extern_prefix=${sym%%ff_extern*}
1849
1850 check_asm inline_asm '""'
1851
1852 if enabled x86; then
1853     # check whether EBP is available on x86
1854     # As 'i' is stored on the stack, this program will crash
1855     # if the base pointer is used to access it because the
1856     # base pointer is cleared in the inline assembly code.
1857     check_exec_crash <<EOF && enable ebp_available
1858     volatile int i=0;
1859     __asm__ volatile (
1860         "xorl %%ebp, %%ebp"
1861     ::: "%ebp");
1862     return i;
1863 EOF
1864
1865     # check wether EBX is available on x86
1866     check_asm ebx_available '"":::"%ebx"'
1867
1868     # check whether more than 10 operands are supported
1869     check_cc <<EOF && enable ten_operands
1870 int main(void) {
1871     int x=0;
1872     __asm__ volatile(
1873         ""
1874         :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1875     );
1876     return 0;
1877 }
1878 EOF
1879
1880     # check whether binutils is new enough to compile SSSE3/MMX2
1881     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1882     enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1883
1884     check_asm bswap '"bswap %%eax" ::: "%eax"'
1885
1886     YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1887     enabled     x86_64        && append YASMFLAGS "-m amd64"
1888     enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1889     case "$objformat" in
1890         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1891         macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1892         *)                    append YASMFLAGS "-DPREFIX"  ;;
1893     esac
1894     disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1895 fi
1896
1897 # check for assembler specific support
1898
1899 enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1900 enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1901
1902 # check for SIMD availability
1903
1904 # AltiVec flags: The FSF version of GCC differs from the Apple version
1905 if enabled altivec; then
1906     check_cflags -maltivec -mabi=altivec &&
1907         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1908         check_cflags -faltivec
1909
1910     # check if our compiler supports Motorola AltiVec C API
1911     check_cc <<EOF || disable altivec
1912 $inc_altivec_h
1913 int main(void) {
1914     vector signed int v1, v2, v3;
1915     v1 = vec_add(v2,v3);
1916     return 0;
1917 }
1918 EOF
1919
1920     # check if our compiler supports braces for vector declarations
1921     check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1922 $inc_altivec_h
1923 int main (void) { (vector int) {1}; return 0; }
1924 EOF
1925 fi
1926
1927 # We have to check if pld is a nop and disable it.
1928 enabled arm     && check_asm pld     '"pld [r0]"'
1929 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1930 enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1931 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1932 enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1933 enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1934 enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1935 enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1936 enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1937
1938 enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1939
1940 # ---
1941 # big/little-endian test
1942 check_cc <<EOF || die "endian test failed"
1943 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1944 EOF
1945 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1946
1947 # ---
1948 # check availability of some header files
1949
1950 if check_func dlopen; then
1951     ldl=
1952 elif check_func dlopen -ldl; then
1953     ldl=-ldl
1954 fi
1955
1956 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1957 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1958
1959 check_func  fork
1960 check_func  gethrtime
1961 check_func  getrusage
1962 check_func  inet_aton $network_extralibs
1963 check_func  memalign
1964 check_func  mkstemp
1965 check_func  posix_memalign
1966 check_func_headers io.h setmode
1967 check_func_headers windows.h GetProcessTimes
1968
1969 check_header conio.h
1970 check_header dlfcn.h
1971 check_header malloc.h
1972 check_header poll.h
1973 check_header sys/mman.h
1974 check_header sys/resource.h
1975 check_header sys/select.h
1976 check_header termios.h
1977 check_header vdpau/vdpau.h
1978 check_header vdpau/vdpau_x11.h
1979 check_header X11/extensions/XvMClib.h
1980
1981 if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1982     die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1983 fi
1984
1985 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
1986 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1987
1988 # check for some common methods of building with pthread support
1989 # do this before the optional library checks as some of them require pthreads
1990 if enabled pthreads; then
1991     if check_func pthread_create; then
1992         :
1993     elif check_func pthread_create -pthread; then
1994         add_cflags -pthread
1995         add_extralibs -pthread
1996     elif check_func pthread_create -pthreads; then
1997         add_cflags -pthreads
1998         add_extralibs -pthreads
1999     elif check_func pthread_create -lpthreadGC2; then
2000         add_extralibs -lpthreadGC2
2001     elif ! check_lib pthread.h pthread_create -lpthread; then
2002         die "ERROR: can't find pthreads library"
2003     fi
2004 fi
2005
2006 for thread in $THREADS_LIST; do
2007     if enabled $thread; then
2008         test -n "$thread_type" &&
2009             die "ERROR: Only one thread type must be selected." ||
2010             thread_type="$thread"
2011     fi
2012 done
2013
2014 check_lib math.h sin -lm
2015
2016 # test for C99 functions in math.h
2017 for func in llrint lrint lrintf round roundf truncf; do
2018     check_exec <<EOF && enable $func || disable $func
2019 #include <math.h>
2020 int main(void) { return ($func(3.999f) > 0)?0:1; }
2021 EOF
2022 done
2023
2024 # these are off by default, so fail if requested and not available
2025 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2026 enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
2027 enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
2028 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2029                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2030                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2031 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2032 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2033 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2034 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2035 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2036 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2037 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2038 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2039 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2040                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2041 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2042 enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2043 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2044 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2045                       { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2046                         die "ERROR: libx264 version must be >= 0.65."; }
2047 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2048 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2049
2050 # libdc1394 check
2051 if enabled libdc1394; then
2052     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2053         enable libdc1394_2; } ||
2054     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2055         enable libdc1394_1; } ||
2056     die "ERROR: No version of libdc1394 found "
2057 fi
2058
2059
2060 _restrict=
2061 for restrict_keyword in restrict __restrict__ __restrict; do
2062     check_cc <<EOF && _restrict=$restrict_keyword && break
2063 void foo(char * $restrict_keyword p);
2064 EOF
2065 done
2066
2067 test "$vhook" = "default" && vhook="$dlopen"
2068
2069 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
2070     disable vhook
2071     echo
2072     echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
2073     echo "Patches welcome."
2074     echo
2075 fi
2076
2077 if enabled vhook; then
2078     check_ldflags -rdynamic
2079     check_ldflags -export-dynamic
2080 fi
2081
2082 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
2083 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
2084
2085 ##########################################
2086 # SDL check
2087
2088 disable sdl_too_old
2089 disable sdl
2090 SDL_CONFIG="${cross_prefix}sdl-config"
2091 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2092     sdl_cflags=`"${SDL_CONFIG}" --cflags`
2093     temp_cflags $sdl_cflags
2094     temp_extralibs `"${SDL_CONFIG}" --libs`
2095     if check_lib2 SDL.h SDL_Init; then
2096         _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
2097         if test "$_sdlversion" -lt 121 ; then
2098             enable sdl_too_old
2099         else
2100             enable sdl
2101             check_cc $sdl_cflags <<EOF && enable sdl_video_size
2102 #include <SDL.h>
2103 int main(int argc, char **argv){
2104     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2105     int w = vi->current_w;
2106     return 0;
2107 }
2108 EOF
2109         fi
2110     fi
2111     restore_flags
2112 fi
2113
2114 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2115
2116 ##########################################
2117 # Network check
2118
2119 if enabled network; then
2120     check_type "sys/types.h sys/socket.h" socklen_t
2121     # Prefer arpa/inet.h over winsock2
2122     if check_header arpa/inet.h ; then
2123         check_func closesocket
2124     elif check_header winsock2.h ; then
2125         network_extralibs="-lws2_32"
2126         check_type ws2tcpip.h socklen_t
2127         check_func_headers winsock2.h closesocket
2128     fi
2129 fi
2130
2131 ##########################################
2132 # IPv6 check
2133
2134 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2135 #include <sys/types.h>
2136 #include <sys/socket.h>
2137 #include <netinet/in.h>
2138 #include <netdb.h>
2139 int main(void) {
2140     struct sockaddr_storage saddr;
2141     struct ipv6_mreq mreq6;
2142     getaddrinfo(0,0,0,0);
2143     getnameinfo(0,0,0,0,0,0,0);
2144     IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2145 }
2146 EOF
2147
2148 check_header linux/videodev.h
2149 check_header linux/videodev2.h
2150 check_header sys/videoio.h
2151
2152 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2153
2154 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2155 { check_header dev/bktr/ioctl_meteor.h &&
2156   check_header dev/bktr/ioctl_bt848.h; } ||
2157 { check_header machine/ioctl_meteor.h &&
2158   check_header machine/ioctl_bt848.h; } ||
2159 { check_header dev/video/meteor/ioctl_meteor.h &&
2160   check_header dev/video/bktr/ioctl_bt848.h; } ||
2161 check_header dev/ic/bt8xx.h
2162
2163 check_header sys/soundcard.h
2164 check_header soundcard.h
2165
2166 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2167
2168 # deal with the X11 frame grabber
2169 enabled x11grab                         &&
2170 check_header X11/Xlib.h                 &&
2171 check_header X11/extensions/XShm.h      &&
2172 check_func XOpenDisplay -lX11           &&
2173 check_func XShmCreateImage -lX11 -lXext
2174
2175 enabled debug && add_cflags -g"$debuglevel"
2176
2177 # add some useful compiler flags if supported
2178 check_cflags -Wdeclaration-after-statement
2179 check_cflags -Wall
2180 check_cflags -Wno-switch
2181 check_cflags -Wdisabled-optimization
2182 check_cflags -Wpointer-arith
2183 check_cflags -Wredundant-decls
2184 check_cflags -Wno-pointer-sign
2185 check_cflags -Wcast-qual
2186 check_cflags -Wwrite-strings
2187 check_cflags -Wtype-limits
2188 check_cflags -Wundef
2189 enabled extra_warnings && check_cflags -Winline
2190
2191 # add some linker flags
2192 check_ldflags -Wl,--warn-common
2193 check_ldflags -Wl,--as-needed
2194 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'
2195 check_ldflags -Wl,-Bsymbolic
2196
2197 echo "X{};" > $TMPV
2198 test_ldflags -Wl,--version-script,$TMPV &&
2199     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2200
2201 if enabled small; then
2202     check_cflags -Os            # not all compilers support -Os
2203     optimizations="small"
2204 elif enabled optimizations; then
2205     if enabled xlc; then
2206         add_cflags  -O5
2207         add_ldflags -O5
2208     elif enabled ccc; then
2209         add_cflags -fast
2210     else
2211         add_cflags -O3
2212     fi
2213 fi
2214 check_cflags -fno-math-errno
2215 check_cflags -fno-signed-zeros
2216
2217 # add some flags for Intel C Compiler
2218 if enabled icc; then
2219     # Just warnings, no remarks
2220     check_cflags -w1
2221     # -wd: Disable following warnings
2222     # 144, 167, 556: -Wno-pointer-sign
2223     # 10006: ignoring unknown option -fno-signed-zeros
2224     # 10156: ignoring option '-W'; no argument required
2225     check_cflags -wd144,167,556,10006,10156
2226     # 11030: Warning unknown option --as-needed
2227     # 10156: ignoring option '-export'; no argument required
2228     check_ldflags -wd10156,11030
2229     # Allow to compile with optimizations
2230     check_ldflags -march=$cpu
2231 elif enabled ccc; then
2232     # disable some annoying warnings
2233     add_cflags -msg_disable cvtu32to64
2234     add_cflags -msg_disable embedcomment
2235     add_cflags -msg_disable needconstext
2236     add_cflags -msg_disable nomainieee
2237     add_cflags -msg_disable ptrmismatch1
2238     add_cflags -msg_disable unreachcode
2239 fi
2240
2241 # PIC flags for shared library objects where they are needed
2242 if enabled shared; then
2243     # LIBOBJFLAGS may have already been set in the OS configuration
2244     if test -z "$LIBOBJFLAGS" ; then
2245         case "${subarch-$arch}" in
2246             x86_64|ia64|alpha|sparc*|ppc|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2247         esac
2248     fi
2249 fi
2250
2251 if enabled gprof; then
2252     add_cflags  -p
2253     add_ldflags -p
2254 fi
2255
2256 VHOOKCFLAGS="-fPIC"
2257
2258 # Find out if the .align argument is a power of two or not.
2259 check_asm asmalign_pot '".align 3"'
2260
2261 enabled_any $DECODER_LIST      && enable decoders
2262 enabled_any $ENCODER_LIST      && enable encoders
2263 enabled_any $BSF_LIST          && enable bsfs
2264 enabled_any $DEMUXER_LIST      && enable demuxers
2265 enabled_any $MUXER_LIST        && enable muxers
2266 enabled_any $FILTER_LIST       && enable filters
2267 enabled_any $INDEV_LIST        && enable demuxers
2268 enabled_any $OUTDEV_LIST       && enable muxers
2269 enabled_any $PROTOCOL_LIST     && enable protocols
2270
2271 enabled_any $THREADS_LIST      && enable threads
2272
2273 check_deps $CONFIG_LIST       \
2274            $CONFIG_EXTRA      \
2275            $HAVE_LIST         \
2276            $DECODER_LIST      \
2277            $ENCODER_LIST      \
2278            $PARSER_LIST       \
2279            $BSF_LIST          \
2280            $DEMUXER_LIST      \
2281            $MUXER_LIST        \
2282            $FILTER_LIST       \
2283            $INDEV_LIST        \
2284            $OUTDEV_LIST       \
2285            $PROTOCOL_LIST     \
2286
2287 echo "install prefix            $prefix"
2288 echo "source path               $source_path"
2289 echo "C compiler                $cc"
2290 echo ".align is power-of-two    $asmalign_pot"
2291 echo "ARCH                      $arch ($cpu)"
2292 if test "$build_suffix" != ""; then
2293     echo "build suffix              $build_suffix"
2294 fi
2295 if test "$extra_version" != ""; then
2296     echo "version string suffix     $extra_version"
2297 fi
2298 echo "big-endian                ${bigendian-no}"
2299 echo "runtime cpu detection     ${runtime_cpudetect-no}"
2300 if enabled x86; then
2301     echo "yasm                      ${yasm-no}"
2302     echo "MMX enabled               ${mmx-no}"
2303     echo "MMX2 enabled              ${mmx2-no}"
2304     echo "3DNow! enabled            ${amd3dnow-no}"
2305     echo "3DNow! extended enabled   ${amd3dnowext-no}"
2306     echo "SSE enabled               ${sse-no}"
2307     echo "SSSE3 enabled             ${ssse3-no}"
2308     echo "CMOV enabled              ${cmov-no}"
2309     echo "CMOV is fast              ${fast_cmov-no}"
2310     echo "EBX available             ${ebx_available-no}"
2311     echo "EBP available             ${ebp_available-no}"
2312     echo "10 operands supported     ${ten_operands-no}"
2313 fi
2314 if enabled arm; then
2315     echo "ARMv5TE enabled           ${armv5te-no}"
2316     echo "ARMv6 enabled             ${armv6-no}"
2317     echo "ARMv6T2 enabled           ${armv6t2-no}"
2318     echo "ARM VFP enabled           ${armvfp-no}"
2319     echo "IWMMXT enabled            ${iwmmxt-no}"
2320     echo "NEON enabled              ${neon-no}"
2321 fi
2322 if enabled mips; then
2323     echo "MMI enabled               ${mmi-no}"
2324 fi
2325 if enabled ppc; then
2326     echo "AltiVec enabled           ${altivec-no}"
2327     echo "PPC 4xx optimizations     ${ppc4xx-no}"
2328     echo "dcbzl available           ${dcbzl-no}"
2329     echo "performance report        ${powerpc_perf-no}"
2330 fi
2331 if enabled sparc; then
2332     echo "VIS enabled               ${vis-no}"
2333 fi
2334 echo "gprof enabled             ${gprof-no}"
2335 echo "debug symbols             ${debug-no}"
2336 echo "strip symbols             ${stripping-no}"
2337 echo "optimizations             ${optimizations-no}"
2338 echo "static                    ${static-no}"
2339 echo "shared                    ${shared-no}"
2340 echo "postprocessing support    ${postproc-no}"
2341 echo "software scaler enabled   ${swscale-no}"
2342 echo "new filter support        ${avfilter-no}"
2343 echo "filters using lavformat   ${avfilter_lavf-no}"
2344 echo "video hooking             ${vhook-no}"
2345 if enabled vhook; then
2346     echo "Imlib2 support            ${imlib2-no}"
2347     echo "FreeType support          ${freetype2-no}"
2348 fi
2349 echo "network support           ${network-no}"
2350 if enabled network; then
2351     echo "IPv6 support              ${ipv6-no}"
2352 fi
2353 echo "threading support         ${thread_type-no}"
2354 echo "SDL support               ${sdl-no}"
2355 if enabled sdl_too_old; then
2356     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2357 fi
2358 echo "Sun medialib support      ${mlib-no}"
2359 echo "AVISynth enabled          ${avisynth-no}"
2360 echo "libamr-nb support         ${libamr_nb-no}"
2361 echo "libamr-wb support         ${libamr_wb-no}"
2362 echo "libdc1394 support         ${libdc1394-no}"
2363 echo "libdirac enabled          ${libdirac-no}"
2364 echo "libfaac enabled           ${libfaac-no}"
2365 echo "libfaad enabled           ${libfaad-no}"
2366 echo "libfaad dlopened          ${libfaadbin-no}"
2367 echo "libgsm enabled            ${libgsm-no}"
2368 echo "libmp3lame enabled        ${libmp3lame-no}"
2369 echo "libnut enabled            ${libnut-no}"
2370 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2371 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2372 echo "libopenjpeg enabled       ${libopenjpeg-no}"
2373 echo "libschroedinger enabled   ${libschroedinger-no}"
2374 echo "libspeex enabled          ${libspeex-no}"
2375 echo "libtheora enabled         ${libtheora-no}"
2376 echo "libvorbis enabled         ${libvorbis-no}"
2377 echo "libx264 enabled           ${libx264-no}"
2378 echo "libxvid enabled           ${libxvid-no}"
2379 echo "vdpau enabled             ${vdpau-no}"
2380 echo "zlib enabled              ${zlib-no}"
2381 echo "bzlib enabled             ${bzlib-no}"
2382 echo
2383
2384 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2385     echo "Enabled ${type}s:"
2386     eval list=\$$(toupper $type)_LIST
2387     for part in $list; do
2388         enabled $part && echo ${part%_*}
2389     done | sort | pr -3 -t
2390     echo
2391 done
2392
2393 license="LGPL version 2.1 or later"
2394 if enabled nonfree; then
2395     license="nonfree and unredistributable"
2396 elif enabled gplv3; then
2397     license="GPL version 3 or later"
2398 elif enabled lgplv3; then
2399     license="LGPL version 3 or later"
2400 elif enabled gpl; then
2401     license="GPL version 2 or later"
2402 fi
2403
2404 echo "License: $license"
2405
2406 echo "Creating config.mak and config.h..."
2407
2408 echo "# Automatically generated by configure - do not modify!" > config.mak
2409 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2410 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2411 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2412 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2413 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2414
2415 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2416 echo "prefix=$prefix" >> config.mak
2417 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2418 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2419 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2420 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2421 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2422 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2423 echo "CC=$cc" >> config.mak
2424 echo "YASM=$yasmexe" >> config.mak
2425 echo "AR=$ar" >> config.mak
2426 echo "RANLIB=$ranlib" >> config.mak
2427 echo "LN_S=$ln_s" >> config.mak
2428 enabled stripping &&
2429     echo "STRIP=$strip" >> config.mak ||
2430     echo "STRIP=echo ignoring strip" >> config.mak
2431
2432 echo "OPTFLAGS=$CFLAGS" >> config.mak
2433 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2434 echo "LDFLAGS=$LDFLAGS" >> config.mak
2435 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2436 echo "SHFLAGS=$SHFLAGS" >> config.mak
2437 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2438 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2439 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2440 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2441 echo "BUILD_STATIC=$static" >> config.mak
2442 echo "BUILDSUF=$build_suffix" >> config.mak
2443 echo "FULLNAME=$FULLNAME" >> config.mak
2444 echo "LIBPREF=$LIBPREF" >> config.mak
2445 echo "LIBSUF=$LIBSUF" >> config.mak
2446 echo "LIBNAME=$LIBNAME" >> config.mak
2447 echo "SLIBPREF=$SLIBPREF" >> config.mak
2448 echo "SLIBSUF=$SLIBSUF" >> config.mak
2449 echo "EXESUF=$EXESUF" >> config.mak
2450 echo "EXTRA_VERSION=$extra_version" >> config.mak
2451 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2452 echo "HOSTCC=$host_cc" >> config.mak
2453 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2454 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2455 echo "HOSTLIBS=$host_libs" >> config.mak
2456 echo "TARGET_EXEC=$target_exec" >> config.mak
2457 echo "TARGET_PATH=$target_path" >> config.mak
2458
2459 if enabled bigendian; then
2460     echo "WORDS_BIGENDIAN=yes" >> config.mak
2461     echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2462 fi
2463
2464 if enabled sdl; then
2465     echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2466     echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2467 fi
2468 if enabled texi2html; then
2469     echo "BUILD_DOC=yes" >> config.mak
2470 fi
2471
2472 get_version(){
2473     name=$1
2474     file=$source_path/$2
2475     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2476     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2477     lcname=$(tolower $name)
2478     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2479     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2480 }
2481
2482 get_version LIBSWSCALE  libswscale/swscale.h
2483 get_version LIBPOSTPROC libpostproc/postprocess.h
2484 get_version LIBAVCODEC  libavcodec/avcodec.h
2485 get_version LIBAVDEVICE libavdevice/avdevice.h
2486 get_version LIBAVFORMAT libavformat/avformat.h
2487 get_version LIBAVUTIL   libavutil/avutil.h
2488 get_version LIBAVFILTER libavfilter/avfilter.h
2489
2490 if enabled shared; then
2491     echo "BUILD_SHARED=yes" >> config.mak
2492     echo "PIC=-fPIC -DPIC" >> config.mak
2493     echo "LIBTARGET=${LIBTARGET}" >> config.mak
2494     echo "SLIBNAME=${SLIBNAME}" >> config.mak
2495     echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2496     echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2497     echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2498     echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2499     echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2500     echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2501 fi
2502 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2503 echo "EXTRALIBS=$extralibs" >> config.mak
2504
2505 echo "ARCH=$arch" >> config.mak
2506
2507 print_config ARCH_   $TMPH config.mak $ARCH_LIST
2508 print_config HAVE_   $TMPH config.mak $HAVE_LIST
2509 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2510                                       $CONFIG_EXTRA      \
2511                                       $DECODER_LIST      \
2512                                       $ENCODER_LIST      \
2513                                       $PARSER_LIST       \
2514                                       $BSF_LIST          \
2515                                       $DEMUXER_LIST      \
2516                                       $MUXER_LIST        \
2517                                       $FILTER_LIST       \
2518                                       $PROTOCOL_LIST     \
2519                                       $INDEV_LIST        \
2520                                       $OUTDEV_LIST       \
2521
2522 echo "#define restrict $_restrict" >> $TMPH
2523
2524 if enabled small; then
2525     echo "#define av_always_inline"  >> $TMPH
2526 fi
2527
2528 echo "SRC_PATH=\"$source_path\"" >> config.mak
2529 echo "SRC_PATH_BARE=$source_path" >> config.mak
2530 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2531
2532 # Apparently it's not possible to portably echo a backslash.
2533 enabled asmalign_pot &&
2534     printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2535     printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2536
2537 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2538
2539 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2540
2541 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2542 cmp -s $TMPH config.h &&
2543     echo "config.h is unchanged" ||
2544     mv -f $TMPH config.h
2545
2546 # build tree in object directory if source path is different from current one
2547 if enabled source_path_used; then
2548     DIRS="\
2549         doc               \
2550         libavcodec        \
2551         libavcodec/alpha  \
2552         libavcodec/arm    \
2553         libavcodec/bfin   \
2554         libavcodec/mlib   \
2555         libavcodec/ppc    \
2556         libavcodec/sh4    \
2557         libavcodec/sparc  \
2558         libavcodec/x86    \
2559         libavdevice       \
2560         libavfilter       \
2561         libavformat       \
2562         libavutil         \
2563         libpostproc       \
2564         libswscale        \
2565         tests             \
2566         tools             \
2567         vhook             \
2568         "
2569     FILES="\
2570         Makefile             \
2571         common.mak           \
2572         subdir.mak           \
2573         doc/texi2pod.pl      \
2574         libavcodec/Makefile  \
2575         libavdevice/Makefile \
2576         libavfilter/Makefile \
2577         libavformat/Makefile \
2578         libavutil/Makefile   \
2579         libpostproc/Makefile \
2580         libswscale/Makefile  \
2581         "
2582     for dir in $DIRS ; do
2583         mkdir -p $dir
2584     done
2585     for f in $FILES ; do
2586         $ln_s "$source_path/$f" $f
2587     done
2588 fi
2589
2590
2591 # build pkg-config files
2592
2593 pkgconfig_generate(){
2594 name=$1
2595 shortname=${name#lib}${build_suffix}
2596 comment=$2
2597 version=$3
2598 libs=$4
2599 requires=$5
2600 cat <<EOF > $name/$name.pc
2601 prefix=$prefix
2602 exec_prefix=\${prefix}
2603 libdir=$libdir
2604 includedir=$incdir
2605
2606 Name: $name
2607 Description: $comment
2608 Version: $version
2609 Requires: $(disabled shared && echo $requires)
2610 Requires.private: $(enabled shared && echo $requires)
2611 Conflicts:
2612 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2613 Libs.private: $(enabled shared && echo $libs)
2614 Cflags: -I\${includedir}
2615 EOF
2616 cat <<EOF > $name/$name-uninstalled.pc
2617 prefix=
2618 exec_prefix=
2619 libdir=\${pcfiledir}
2620 includedir=${source_path}
2621
2622 Name: $name
2623 Description: $comment
2624 Version: $version
2625 Requires: $requires
2626 Conflicts:
2627 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2628 Cflags: -I\${includedir}
2629 EOF
2630 }
2631
2632 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2633 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2634 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2635 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2636 enabled avfilter &&
2637     pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2638 enabled postproc &&
2639     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2640 if enabled swscale; then
2641     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2642 else
2643     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavcodec = $LIBAVCODEC_VERSION"
2644     apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2645 fi