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