Merge remote-tracking branch 'qatar/release/0.5' into release/0.5
[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 vfwcap_defines"
1135 vfwcap_demuxer_extralibs="-lavicap32"
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         check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
1615                                       || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1616                 die "ERROR: MinGW runtime version must be >= 3.15."
1617         ;;
1618     cygwin*)
1619         target_os=cygwin
1620         shlibdir_default="$bindir_default"
1621         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1622         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1623         if enabled swscale; then
1624             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1625             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1626         fi
1627         SLIBPREF="cyg"
1628         SLIBSUF=".dll"
1629         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1630         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1631         SHFLAGS='-shared -Wl,--enable-auto-image-base'
1632         objformat="win32"
1633         enable dos_paths
1634         check_cflags -fno-common
1635         ;;
1636     *-dos|freedos|opendos)
1637         disable ffplay ffserver vhook
1638         disable $INDEV_LIST $OUTDEV_LIST
1639         network_extralibs="-lsocket"
1640         objformat="coff"
1641         enable dos_paths
1642         ;;
1643     linux)
1644         enable dv1394
1645         ;;
1646     irix*)
1647         target_os=irix
1648         ranlib="echo ignoring ranlib"
1649         ;;
1650     os/2*)
1651         strip="lxlite"
1652         ln_s="cp -f"
1653         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1654         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1655         FFSERVERLDFLAGS=""
1656         LIBSUF="_s.a"
1657         SLIBPREF=""
1658         SLIBSUF=".dll"
1659         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1660         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1661         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1662           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1663           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1664           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1665           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1666           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1667         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1668           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1669         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1670         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1671         disable vhook
1672         enable dos_paths
1673         ;;
1674     interix)
1675         disable vhook
1676         ;;
1677     gnu/kfreebsd)
1678         ;;
1679     gnu)
1680         disable dv1394
1681         ;;
1682
1683     *)
1684         die "Unknown OS '$target_os'."
1685         ;;
1686 esac
1687
1688 set_default $PATHS_LIST
1689
1690 add_extralibs $osextralibs
1691
1692 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1693 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1694
1695 # we need to build at least one lib type
1696 if ! enabled_any static shared; then
1697     cat <<EOF
1698 At least one library type must be built.
1699 Specify --enable-static to build the static libraries or --enable-shared to
1700 build the shared libraries as well. To only build the shared libraries specify
1701 --disable-static in addition to --enable-shared.
1702 EOF
1703     exit 1;
1704 fi
1705
1706 disabled static && LIBNAME=""
1707
1708 if enabled_any libfaad libfaadbin ; then
1709     if check_header faad.h; then
1710         check_cc <<EOF
1711 #include <faad.h>
1712 #ifndef FAAD2_VERSION
1713 ok faad1
1714 #endif
1715 int main(void) { return 0; }
1716 EOF
1717         test $? = 0 && enable libfaad2
1718     else
1719         die "FAAD test failed."
1720     fi
1721 fi
1722
1723
1724 die_license_disabled() {
1725     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
1726 }
1727
1728 die_license_disabled gpl libfaad2
1729 die_license_disabled gpl libx264
1730 die_license_disabled gpl libxvid
1731 die_license_disabled gpl postproc
1732 die_license_disabled gpl x11grab
1733
1734 die_license_disabled nonfree libamr_nb
1735 die_license_disabled nonfree libamr_wb
1736 die_license_disabled nonfree libfaac
1737
1738 die_license_disabled version3 libopencore_amrnb
1739 die_license_disabled version3 libopencore_amrwb
1740
1741 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
1742
1743 check_deps $ARCH_EXT_LIST
1744
1745 test -z "$need_memalign" && need_memalign="$mmx"
1746
1747 #Darwin CC versions
1748 if test $target_os = darwin; then
1749     if enabled xlc; then
1750         add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1751     else
1752         add_cflags -pipe
1753         check_cflags -force_cpusubtype_ALL
1754         check_cflags -Wno-sign-compare
1755         enabled shared || check_cflags -mdynamic-no-pic
1756     fi
1757 fi
1758
1759 disabled optimizations || check_cflags -fomit-frame-pointer
1760
1761 # Add processor-specific flags
1762 if test $cpu != "generic"; then
1763     warn_altivec(){
1764         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1765     }
1766     case $cpu in
1767         601|ppc601|PowerPC601)
1768             add_cflags -mcpu=601
1769             warn_altivec enabled PPC601
1770         ;;
1771         603*|ppc603*|PowerPC603*)
1772             add_cflags -mcpu=603
1773             warn_altivec enabled PPC603
1774         ;;
1775         604*|ppc604*|PowerPC604*)
1776             add_cflags -mcpu=604
1777             warn_altivec enabled PPC604
1778         ;;
1779         G3|g3|75*|ppc75*|PowerPC75*)
1780             add_cflags -mcpu=750 -mpowerpc-gfxopt
1781             warn_altivec enabled PPC75x
1782         ;;
1783         G4|g4|745*|ppc745*|PowerPC745*)
1784             add_cflags -mcpu=7450 -mpowerpc-gfxopt
1785             warn_altivec disabled PPC745x
1786         ;;
1787         74*|ppc74*|PowerPC74*)
1788             add_cflags -mcpu=7400 -mpowerpc-gfxopt
1789             warn_altivec disabled PPC74xx
1790         ;;
1791         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1792             add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1793             warn_altivec disabled PPC970
1794             enable ppc64
1795         ;;
1796         Cell|CELL|cell)
1797             add_cflags -mcpu=cell
1798             warn_altivec disabled Cell
1799             enable ppc64
1800         ;;
1801         # targets that do NOT support conditional mov (cmov)
1802         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1803             add_cflags -march=$cpu
1804             disable cmov
1805         ;;
1806         # targets that do support conditional mov (cmov)
1807         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1808             add_cflags -march=$cpu
1809             enable cmov
1810             enable fast_cmov
1811         ;;
1812         # targets that do support conditional mov but on which it's slow
1813         pentium4|pentium4m|prescott|nocona)
1814             add_cflags -march=$cpu
1815             enable cmov
1816             disable fast_cmov
1817         ;;
1818         sparc64)
1819             add_cflags -mcpu=v9
1820         ;;
1821         arm11*|cortex*)
1822             add_cflags -mcpu=$cpu
1823             enable fast_unaligned
1824         ;;
1825         armv*)
1826             add_cflags -march=$cpu
1827         ;;
1828         arm*)
1829             add_cflags -mcpu=$cpu
1830         ;;
1831         ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1832             enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1833         ;;
1834         *)
1835             echo "WARNING: Unknown CPU \"$cpu\", ignored."
1836         ;;
1837     esac
1838 fi
1839
1840 check_cc <<EOF || die "Symbol mangling check failed."
1841 int ff_extern;
1842 EOF
1843 sym=$($nm -P -g $TMPO | grep ff_extern)
1844 extern_prefix=${sym%%ff_extern*}
1845
1846 check_asm inline_asm '""'
1847
1848 if enabled x86; then
1849     # check whether EBP is available on x86
1850     # As 'i' is stored on the stack, this program will crash
1851     # if the base pointer is used to access it because the
1852     # base pointer is cleared in the inline assembly code.
1853     check_exec_crash <<EOF && enable ebp_available
1854     volatile int i=0;
1855     __asm__ volatile (
1856         "xorl %%ebp, %%ebp"
1857     ::: "%ebp");
1858     return i;
1859 EOF
1860
1861     # check wether EBX is available on x86
1862     check_asm ebx_available '"":::"%ebx"'
1863
1864     # check whether more than 10 operands are supported
1865     check_cc <<EOF && enable ten_operands
1866 int main(void) {
1867     int x=0;
1868     __asm__ volatile(
1869         ""
1870         :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1871     );
1872     return 0;
1873 }
1874 EOF
1875
1876     # check whether binutils is new enough to compile SSSE3/MMX2
1877     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1878     enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1879
1880     check_asm bswap '"bswap %%eax" ::: "%eax"'
1881
1882     YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1883     enabled     x86_64        && append YASMFLAGS "-m amd64"
1884     enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1885     case "$objformat" in
1886         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1887         macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1888         *)                    append YASMFLAGS "-DPREFIX"  ;;
1889     esac
1890     disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1891 fi
1892
1893 # check for assembler specific support
1894
1895 enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1896 enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1897
1898 # check for SIMD availability
1899
1900 # AltiVec flags: The FSF version of GCC differs from the Apple version
1901 if enabled altivec; then
1902     check_cflags -maltivec -mabi=altivec &&
1903         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1904         check_cflags -faltivec
1905
1906     # check if our compiler supports Motorola AltiVec C API
1907     check_cc <<EOF || disable altivec
1908 $inc_altivec_h
1909 int main(void) {
1910     vector signed int v1, v2, v3;
1911     v1 = vec_add(v2,v3);
1912     return 0;
1913 }
1914 EOF
1915
1916     # check if our compiler supports braces for vector declarations
1917     check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1918 $inc_altivec_h
1919 int main (void) { (vector int) {1}; return 0; }
1920 EOF
1921 fi
1922
1923 # We have to check if pld is a nop and disable it.
1924 enabled arm     && check_asm pld     '"pld [r0]"'
1925 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1926 enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1927 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1928 enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1929 enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1930 enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1931 enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1932 enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1933
1934 enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1935
1936 # ---
1937 # big/little-endian test
1938 check_cc <<EOF || die "endian test failed"
1939 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1940 EOF
1941 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1942
1943 # ---
1944 # check availability of some header files
1945
1946 if check_func dlopen; then
1947     ldl=
1948 elif check_func dlopen -ldl; then
1949     ldl=-ldl
1950 fi
1951
1952 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1953 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1954
1955 check_func  fork
1956 check_func  gethrtime
1957 check_func  getrusage
1958 check_func  inet_aton $network_extralibs
1959 check_func  memalign
1960 check_func  mkstemp
1961 check_func  posix_memalign
1962 check_func_headers io.h setmode
1963 check_func_headers windows.h GetProcessTimes
1964
1965 check_header conio.h
1966 check_header dlfcn.h
1967 check_header malloc.h
1968 check_header poll.h
1969 check_header sys/mman.h
1970 check_header sys/resource.h
1971 check_header sys/select.h
1972 check_header termios.h
1973 check_header vdpau/vdpau.h
1974 check_header vdpau/vdpau_x11.h
1975 check_header X11/extensions/XvMClib.h
1976
1977 if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1978     die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1979 fi
1980
1981 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
1982 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1983
1984 # check for some common methods of building with pthread support
1985 # do this before the optional library checks as some of them require pthreads
1986 if enabled pthreads; then
1987     if check_func pthread_create; then
1988         :
1989     elif check_func pthread_create -pthread; then
1990         add_cflags -pthread
1991         add_extralibs -pthread
1992     elif check_func pthread_create -pthreads; then
1993         add_cflags -pthreads
1994         add_extralibs -pthreads
1995     elif check_func pthread_create -lpthreadGC2; then
1996         add_extralibs -lpthreadGC2
1997     elif ! check_lib pthread.h pthread_create -lpthread; then
1998         die "ERROR: can't find pthreads library"
1999     fi
2000 fi
2001
2002 for thread in $THREADS_LIST; do
2003     if enabled $thread; then
2004         test -n "$thread_type" &&
2005             die "ERROR: Only one thread type must be selected." ||
2006             thread_type="$thread"
2007     fi
2008 done
2009
2010 check_lib math.h sin -lm
2011
2012 # test for C99 functions in math.h
2013 for func in llrint lrint lrintf round roundf truncf; do
2014     check_exec <<EOF && enable $func || disable $func
2015 #include <math.h>
2016 int main(void) { return ($func(3.999f) > 0)?0:1; }
2017 EOF
2018 done
2019
2020 # these are off by default, so fail if requested and not available
2021 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2022 enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
2023 enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
2024 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2025                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2026                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2027 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2028 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2029 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2030 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2031 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2032 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2033 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2034 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2035 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2036                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2037 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2038 enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2039 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2040 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
2041                       { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2042                         die "ERROR: libx264 version must be >= 0.65."; }
2043 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2044 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2045
2046 # libdc1394 check
2047 if enabled libdc1394; then
2048     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2049         enable libdc1394_2; } ||
2050     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2051         enable libdc1394_1; } ||
2052     die "ERROR: No version of libdc1394 found "
2053 fi
2054
2055
2056 _restrict=
2057 for restrict_keyword in restrict __restrict__ __restrict; do
2058     check_cc <<EOF && _restrict=$restrict_keyword && break
2059 void foo(char * $restrict_keyword p);
2060 EOF
2061 done
2062
2063 test "$vhook" = "default" && vhook="$dlopen"
2064
2065 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
2066     disable vhook
2067     echo
2068     echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
2069     echo "Patches welcome."
2070     echo
2071 fi
2072
2073 if enabled vhook; then
2074     check_ldflags -rdynamic
2075     check_ldflags -export-dynamic
2076 fi
2077
2078 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
2079 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
2080
2081 ##########################################
2082 # SDL check
2083
2084 disable sdl_too_old
2085 disable sdl
2086 SDL_CONFIG="${cross_prefix}sdl-config"
2087 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2088     sdl_cflags=`"${SDL_CONFIG}" --cflags`
2089     temp_cflags $sdl_cflags
2090     temp_extralibs `"${SDL_CONFIG}" --libs`
2091     if check_lib2 SDL.h SDL_Init; then
2092         _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
2093         if test "$_sdlversion" -lt 121 ; then
2094             enable sdl_too_old
2095         else
2096             enable sdl
2097             check_cc $sdl_cflags <<EOF && enable sdl_video_size
2098 #include <SDL.h>
2099 int main(int argc, char **argv){
2100     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2101     int w = vi->current_w;
2102     return 0;
2103 }
2104 EOF
2105         fi
2106     fi
2107     restore_flags
2108 fi
2109
2110 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2111
2112 ##########################################
2113 # Network check
2114
2115 if enabled network; then
2116     check_type "sys/types.h sys/socket.h" socklen_t
2117     # Prefer arpa/inet.h over winsock2
2118     if check_header arpa/inet.h ; then
2119         check_func closesocket
2120     elif check_header winsock2.h ; then
2121         network_extralibs="-lws2_32"
2122         check_type ws2tcpip.h socklen_t
2123         check_func_headers winsock2.h closesocket
2124     fi
2125 fi
2126
2127 ##########################################
2128 # IPv6 check
2129
2130 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2131 #include <sys/types.h>
2132 #include <sys/socket.h>
2133 #include <netinet/in.h>
2134 #include <netdb.h>
2135 int main(void) {
2136     struct sockaddr_storage saddr;
2137     struct ipv6_mreq mreq6;
2138     getaddrinfo(0,0,0,0);
2139     getnameinfo(0,0,0,0,0,0,0);
2140     IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2141 }
2142 EOF
2143
2144 check_header linux/videodev.h
2145 check_header linux/videodev2.h
2146 check_header sys/videoio.h
2147
2148 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lavicap32
2149 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2150 # w32api 3.12 had it defined wrong
2151 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2152
2153 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2154 { check_header dev/bktr/ioctl_meteor.h &&
2155   check_header dev/bktr/ioctl_bt848.h; } ||
2156 { check_header machine/ioctl_meteor.h &&
2157   check_header machine/ioctl_bt848.h; } ||
2158 { check_header dev/video/meteor/ioctl_meteor.h &&
2159   check_header dev/video/bktr/ioctl_bt848.h; } ||
2160 check_header dev/ic/bt8xx.h
2161
2162 check_header sys/soundcard.h
2163 check_header soundcard.h
2164
2165 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2166
2167 # deal with the X11 frame grabber
2168 enabled x11grab                         &&
2169 check_header X11/Xlib.h                 &&
2170 check_header X11/extensions/XShm.h      &&
2171 check_func XOpenDisplay -lX11           &&
2172 check_func XShmCreateImage -lX11 -lXext
2173
2174 enabled debug && add_cflags -g"$debuglevel"
2175
2176 # add some useful compiler flags if supported
2177 check_cflags -Wdeclaration-after-statement
2178 check_cflags -Wall
2179 check_cflags -Wno-switch
2180 check_cflags -Wdisabled-optimization
2181 check_cflags -Wpointer-arith
2182 check_cflags -Wredundant-decls
2183 check_cflags -Wno-pointer-sign
2184 check_cflags -Wcast-qual
2185 check_cflags -Wwrite-strings
2186 check_cflags -Wtype-limits
2187 check_cflags -Wundef
2188 enabled extra_warnings && check_cflags -Winline
2189
2190 # add some linker flags
2191 check_ldflags -Wl,--warn-common
2192 check_ldflags -Wl,--as-needed
2193 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'
2194 check_ldflags -Wl,-Bsymbolic
2195
2196 echo "X{};" > $TMPV
2197 test_ldflags -Wl,--version-script,$TMPV &&
2198     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2199
2200 if enabled small; then
2201     check_cflags -Os            # not all compilers support -Os
2202     optimizations="small"
2203 elif enabled optimizations; then
2204     if enabled xlc; then
2205         add_cflags  -O5
2206         add_ldflags -O5
2207     elif enabled ccc; then
2208         add_cflags -fast
2209     else
2210         add_cflags -O3
2211     fi
2212 fi
2213 check_cflags -fno-math-errno
2214 check_cflags -fno-signed-zeros
2215
2216 # add some flags for Intel C Compiler
2217 if enabled icc; then
2218     # Just warnings, no remarks
2219     check_cflags -w1
2220     # -wd: Disable following warnings
2221     # 144, 167, 556: -Wno-pointer-sign
2222     # 10006: ignoring unknown option -fno-signed-zeros
2223     # 10156: ignoring option '-W'; no argument required
2224     check_cflags -wd144,167,556,10006,10156
2225     # 11030: Warning unknown option --as-needed
2226     # 10156: ignoring option '-export'; no argument required
2227     check_ldflags -wd10156,11030
2228     # Allow to compile with optimizations
2229     check_ldflags -march=$cpu
2230 elif enabled ccc; then
2231     # disable some annoying warnings
2232     add_cflags -msg_disable cvtu32to64
2233     add_cflags -msg_disable embedcomment
2234     add_cflags -msg_disable needconstext
2235     add_cflags -msg_disable nomainieee
2236     add_cflags -msg_disable ptrmismatch1
2237     add_cflags -msg_disable unreachcode
2238 fi
2239
2240 # PIC flags for shared library objects where they are needed
2241 if enabled shared; then
2242     # LIBOBJFLAGS may have already been set in the OS configuration
2243     if test -z "$LIBOBJFLAGS" ; then
2244         case "${subarch-$arch}" in
2245             x86_64|ia64|alpha|sparc*|ppc|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2246         esac
2247     fi
2248 fi
2249
2250 if enabled gprof; then
2251     add_cflags  -p
2252     add_ldflags -p
2253 fi
2254
2255 VHOOKCFLAGS="-fPIC"
2256
2257 # Find out if the .align argument is a power of two or not.
2258 check_asm asmalign_pot '".align 3"'
2259
2260 enabled_any $DECODER_LIST      && enable decoders
2261 enabled_any $ENCODER_LIST      && enable encoders
2262 enabled_any $BSF_LIST          && enable bsfs
2263 enabled_any $DEMUXER_LIST      && enable demuxers
2264 enabled_any $MUXER_LIST        && enable muxers
2265 enabled_any $FILTER_LIST       && enable filters
2266 enabled_any $INDEV_LIST        && enable demuxers
2267 enabled_any $OUTDEV_LIST       && enable muxers
2268 enabled_any $PROTOCOL_LIST     && enable protocols
2269
2270 enabled_any $THREADS_LIST      && enable threads
2271
2272 check_deps $CONFIG_LIST       \
2273            $CONFIG_EXTRA      \
2274            $HAVE_LIST         \
2275            $DECODER_LIST      \
2276            $ENCODER_LIST      \
2277            $PARSER_LIST       \
2278            $BSF_LIST          \
2279            $DEMUXER_LIST      \
2280            $MUXER_LIST        \
2281            $FILTER_LIST       \
2282            $INDEV_LIST        \
2283            $OUTDEV_LIST       \
2284            $PROTOCOL_LIST     \
2285
2286 echo "install prefix            $prefix"
2287 echo "source path               $source_path"
2288 echo "C compiler                $cc"
2289 echo ".align is power-of-two    $asmalign_pot"
2290 echo "ARCH                      $arch ($cpu)"
2291 if test "$build_suffix" != ""; then
2292     echo "build suffix              $build_suffix"
2293 fi
2294 if test "$extra_version" != ""; then
2295     echo "version string suffix     $extra_version"
2296 fi
2297 echo "big-endian                ${bigendian-no}"
2298 echo "runtime cpu detection     ${runtime_cpudetect-no}"
2299 if enabled x86; then
2300     echo "yasm                      ${yasm-no}"
2301     echo "MMX enabled               ${mmx-no}"
2302     echo "MMX2 enabled              ${mmx2-no}"
2303     echo "3DNow! enabled            ${amd3dnow-no}"
2304     echo "3DNow! extended enabled   ${amd3dnowext-no}"
2305     echo "SSE enabled               ${sse-no}"
2306     echo "SSSE3 enabled             ${ssse3-no}"
2307     echo "CMOV enabled              ${cmov-no}"
2308     echo "CMOV is fast              ${fast_cmov-no}"
2309     echo "EBX available             ${ebx_available-no}"
2310     echo "EBP available             ${ebp_available-no}"
2311     echo "10 operands supported     ${ten_operands-no}"
2312 fi
2313 if enabled arm; then
2314     echo "ARMv5TE enabled           ${armv5te-no}"
2315     echo "ARMv6 enabled             ${armv6-no}"
2316     echo "ARMv6T2 enabled           ${armv6t2-no}"
2317     echo "ARM VFP enabled           ${armvfp-no}"
2318     echo "IWMMXT enabled            ${iwmmxt-no}"
2319     echo "NEON enabled              ${neon-no}"
2320 fi
2321 if enabled mips; then
2322     echo "MMI enabled               ${mmi-no}"
2323 fi
2324 if enabled ppc; then
2325     echo "AltiVec enabled           ${altivec-no}"
2326     echo "PPC 4xx optimizations     ${ppc4xx-no}"
2327     echo "dcbzl available           ${dcbzl-no}"
2328     echo "performance report        ${powerpc_perf-no}"
2329 fi
2330 if enabled sparc; then
2331     echo "VIS enabled               ${vis-no}"
2332 fi
2333 echo "gprof enabled             ${gprof-no}"
2334 echo "debug symbols             ${debug-no}"
2335 echo "strip symbols             ${stripping-no}"
2336 echo "optimizations             ${optimizations-no}"
2337 echo "static                    ${static-no}"
2338 echo "shared                    ${shared-no}"
2339 echo "postprocessing support    ${postproc-no}"
2340 echo "software scaler enabled   ${swscale-no}"
2341 echo "new filter support        ${avfilter-no}"
2342 echo "filters using lavformat   ${avfilter_lavf-no}"
2343 echo "video hooking             ${vhook-no}"
2344 if enabled vhook; then
2345     echo "Imlib2 support            ${imlib2-no}"
2346     echo "FreeType support          ${freetype2-no}"
2347 fi
2348 echo "network support           ${network-no}"
2349 if enabled network; then
2350     echo "IPv6 support              ${ipv6-no}"
2351 fi
2352 echo "threading support         ${thread_type-no}"
2353 echo "SDL support               ${sdl-no}"
2354 if enabled sdl_too_old; then
2355     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2356 fi
2357 echo "Sun medialib support      ${mlib-no}"
2358 echo "AVISynth enabled          ${avisynth-no}"
2359 echo "libamr-nb support         ${libamr_nb-no}"
2360 echo "libamr-wb support         ${libamr_wb-no}"
2361 echo "libdc1394 support         ${libdc1394-no}"
2362 echo "libdirac enabled          ${libdirac-no}"
2363 echo "libfaac enabled           ${libfaac-no}"
2364 echo "libfaad enabled           ${libfaad-no}"
2365 echo "libfaad dlopened          ${libfaadbin-no}"
2366 echo "libgsm enabled            ${libgsm-no}"
2367 echo "libmp3lame enabled        ${libmp3lame-no}"
2368 echo "libnut enabled            ${libnut-no}"
2369 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2370 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2371 echo "libopenjpeg enabled       ${libopenjpeg-no}"
2372 echo "libschroedinger enabled   ${libschroedinger-no}"
2373 echo "libspeex enabled          ${libspeex-no}"
2374 echo "libtheora enabled         ${libtheora-no}"
2375 echo "libvorbis enabled         ${libvorbis-no}"
2376 echo "libx264 enabled           ${libx264-no}"
2377 echo "libxvid enabled           ${libxvid-no}"
2378 echo "vdpau enabled             ${vdpau-no}"
2379 echo "zlib enabled              ${zlib-no}"
2380 echo "bzlib enabled             ${bzlib-no}"
2381 echo
2382
2383 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2384     echo "Enabled ${type}s:"
2385     eval list=\$$(toupper $type)_LIST
2386     for part in $list; do
2387         enabled $part && echo ${part%_*}
2388     done | sort | pr -3 -t
2389     echo
2390 done
2391
2392 license="LGPL version 2.1 or later"
2393 if enabled nonfree; then
2394     license="nonfree and unredistributable"
2395 elif enabled gplv3; then
2396     license="GPL version 3 or later"
2397 elif enabled lgplv3; then
2398     license="LGPL version 3 or later"
2399 elif enabled gpl; then
2400     license="GPL version 2 or later"
2401 fi
2402
2403 echo "License: $license"
2404
2405 echo "Creating config.mak and config.h..."
2406
2407 echo "# Automatically generated by configure - do not modify!" > config.mak
2408 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2409 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2410 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2411 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2412 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2413
2414 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2415 echo "prefix=$prefix" >> config.mak
2416 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2417 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2418 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2419 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2420 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2421 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2422 echo "CC=$cc" >> config.mak
2423 echo "YASM=$yasmexe" >> config.mak
2424 echo "AR=$ar" >> config.mak
2425 echo "RANLIB=$ranlib" >> config.mak
2426 echo "LN_S=$ln_s" >> config.mak
2427 enabled stripping &&
2428     echo "STRIP=$strip" >> config.mak ||
2429     echo "STRIP=echo ignoring strip" >> config.mak
2430
2431 echo "OPTFLAGS=$CFLAGS" >> config.mak
2432 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2433 echo "LDFLAGS=$LDFLAGS" >> config.mak
2434 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2435 echo "SHFLAGS=$SHFLAGS" >> config.mak
2436 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2437 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2438 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2439 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2440 echo "BUILD_STATIC=$static" >> config.mak
2441 echo "BUILDSUF=$build_suffix" >> config.mak
2442 echo "FULLNAME=$FULLNAME" >> config.mak
2443 echo "LIBPREF=$LIBPREF" >> config.mak
2444 echo "LIBSUF=$LIBSUF" >> config.mak
2445 echo "LIBNAME=$LIBNAME" >> config.mak
2446 echo "SLIBPREF=$SLIBPREF" >> config.mak
2447 echo "SLIBSUF=$SLIBSUF" >> config.mak
2448 echo "EXESUF=$EXESUF" >> config.mak
2449 echo "EXTRA_VERSION=$extra_version" >> config.mak
2450 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2451 echo "HOSTCC=$host_cc" >> config.mak
2452 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2453 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2454 echo "HOSTLIBS=$host_libs" >> config.mak
2455 echo "TARGET_EXEC=$target_exec" >> config.mak
2456 echo "TARGET_PATH=$target_path" >> config.mak
2457
2458 if enabled bigendian; then
2459     echo "WORDS_BIGENDIAN=yes" >> config.mak
2460     echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2461 fi
2462
2463 if enabled sdl; then
2464     echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2465     echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2466 fi
2467 if enabled texi2html; then
2468     echo "BUILD_DOC=yes" >> config.mak
2469 fi
2470
2471 get_version(){
2472     name=$1
2473     file=$source_path/$2
2474     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2475     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2476     lcname=$(tolower $name)
2477     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2478     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2479 }
2480
2481 get_version LIBSWSCALE  libswscale/swscale.h
2482 get_version LIBPOSTPROC libpostproc/postprocess.h
2483 get_version LIBAVCODEC  libavcodec/avcodec.h
2484 get_version LIBAVDEVICE libavdevice/avdevice.h
2485 get_version LIBAVFORMAT libavformat/avformat.h
2486 get_version LIBAVUTIL   libavutil/avutil.h
2487 get_version LIBAVFILTER libavfilter/avfilter.h
2488
2489 if enabled shared; then
2490     echo "BUILD_SHARED=yes" >> config.mak
2491     echo "PIC=-fPIC -DPIC" >> config.mak
2492     echo "LIBTARGET=${LIBTARGET}" >> config.mak
2493     echo "SLIBNAME=${SLIBNAME}" >> config.mak
2494     echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2495     echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2496     echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2497     echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2498     echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2499     echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2500 fi
2501 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2502 echo "EXTRALIBS=$extralibs" >> config.mak
2503
2504 echo "ARCH=$arch" >> config.mak
2505
2506 print_config ARCH_   $TMPH config.mak $ARCH_LIST
2507 print_config HAVE_   $TMPH config.mak $HAVE_LIST
2508 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2509                                       $CONFIG_EXTRA      \
2510                                       $DECODER_LIST      \
2511                                       $ENCODER_LIST      \
2512                                       $PARSER_LIST       \
2513                                       $BSF_LIST          \
2514                                       $DEMUXER_LIST      \
2515                                       $MUXER_LIST        \
2516                                       $FILTER_LIST       \
2517                                       $PROTOCOL_LIST     \
2518                                       $INDEV_LIST        \
2519                                       $OUTDEV_LIST       \
2520
2521 echo "#define restrict $_restrict" >> $TMPH
2522
2523 if enabled small; then
2524     echo "#define av_always_inline"  >> $TMPH
2525 fi
2526
2527 echo "SRC_PATH=\"$source_path\"" >> config.mak
2528 echo "SRC_PATH_BARE=$source_path" >> config.mak
2529 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2530
2531 # Apparently it's not possible to portably echo a backslash.
2532 enabled asmalign_pot &&
2533     printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2534     printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2535
2536 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2537
2538 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2539
2540 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2541 cmp -s $TMPH config.h &&
2542     echo "config.h is unchanged" ||
2543     mv -f $TMPH config.h
2544
2545 # build tree in object directory if source path is different from current one
2546 if enabled source_path_used; then
2547     DIRS="\
2548         doc               \
2549         libavcodec        \
2550         libavcodec/alpha  \
2551         libavcodec/arm    \
2552         libavcodec/bfin   \
2553         libavcodec/mlib   \
2554         libavcodec/ppc    \
2555         libavcodec/sh4    \
2556         libavcodec/sparc  \
2557         libavcodec/x86    \
2558         libavdevice       \
2559         libavfilter       \
2560         libavformat       \
2561         libavutil         \
2562         libpostproc       \
2563         libswscale        \
2564         tests             \
2565         tools             \
2566         vhook             \
2567         "
2568     FILES="\
2569         Makefile             \
2570         common.mak           \
2571         subdir.mak           \
2572         doc/texi2pod.pl      \
2573         libavcodec/Makefile  \
2574         libavdevice/Makefile \
2575         libavfilter/Makefile \
2576         libavformat/Makefile \
2577         libavutil/Makefile   \
2578         libpostproc/Makefile \
2579         libswscale/Makefile  \
2580         "
2581     for dir in $DIRS ; do
2582         mkdir -p $dir
2583     done
2584     for f in $FILES ; do
2585         $ln_s "$source_path/$f" $f
2586     done
2587 fi
2588
2589
2590 # build pkg-config files
2591
2592 pkgconfig_generate(){
2593 name=$1
2594 shortname=${name#lib}${build_suffix}
2595 comment=$2
2596 version=$3
2597 libs=$4
2598 requires=$5
2599 cat <<EOF > $name/$name.pc
2600 prefix=$prefix
2601 exec_prefix=\${prefix}
2602 libdir=$libdir
2603 includedir=$incdir
2604
2605 Name: $name
2606 Description: $comment
2607 Version: $version
2608 Requires: $(disabled shared && echo $requires)
2609 Requires.private: $(enabled shared && echo $requires)
2610 Conflicts:
2611 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2612 Libs.private: $(enabled shared && echo $libs)
2613 Cflags: -I\${includedir}
2614 EOF
2615 cat <<EOF > $name/$name-uninstalled.pc
2616 prefix=
2617 exec_prefix=
2618 libdir=\${pcfiledir}
2619 includedir=${source_path}
2620
2621 Name: $name
2622 Description: $comment
2623 Version: $version
2624 Requires: $requires
2625 Conflicts:
2626 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2627 Cflags: -I\${includedir}
2628 EOF
2629 }
2630
2631 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2632 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2633 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2634 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2635 enabled avfilter &&
2636     pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2637 enabled postproc &&
2638     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2639 if enabled swscale; then
2640     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2641 else
2642     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavcodec = $LIBAVCODEC_VERSION"
2643     apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2644 fi