cosmetics: prettyprinting, K&R style, break overly long lines
[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     loongson
915     lrint
916     lrintf
917     lzo1x_999_compress
918     machine_ioctl_bt848_h
919     machine_ioctl_meteor_h
920     malloc_h
921     memalign
922     mkstemp
923     pld
924     posix_memalign
925     round
926     roundf
927     sdl
928     sdl_video_size
929     setmode
930     socklen_t
931     soundcard_h
932     poll_h
933     sys_mman_h
934     sys_resource_h
935     sys_select_h
936     sys_soundcard_h
937     sys_videoio_h
938     ten_operands
939     termios_h
940     threads
941     truncf
942     VirtualAlloc
943     winsock2_h
944     xform_asm
945     yasm
946 "
947
948 # options emitted with CONFIG_ prefix but not available on command line
949 CONFIG_EXTRA="
950     gplv3
951     lgplv3
952 "
953
954 CMDLINE_SELECT="
955     $ARCH_EXT_LIST
956     $CONFIG_LIST
957     $THREADS_LIST
958     cross_compile
959     debug
960     extra_warnings
961     logging
962     optimizations
963     stripping
964     yasm
965 "
966
967 PATHS_LIST='
968     bindir
969     datadir
970     incdir
971     libdir
972     mandir
973     prefix
974     shlibdir
975 '
976
977 CMDLINE_SET="
978     $PATHS_LIST
979     arch
980     as
981     build_suffix
982     cc
983     cpu
984     cross_prefix
985     extra_version
986     host_cc
987     host_cflags
988     host_ldflags
989     host_libs
990     host_os
991     logfile
992     nm
993     source_path
994     sysinclude
995     sysroot
996     target_exec
997     target_os
998     target_path
999 "
1000
1001 # code dependency declarations
1002
1003 # architecture extensions
1004 altivec_deps="ppc"
1005 amd3dnow_deps="mmx"
1006 amd3dnowext_deps="amd3dnow"
1007 armv5te_deps="arm"
1008 armv6_deps="arm"
1009 armv6t2_deps="arm"
1010 armvfp_deps="arm"
1011 iwmmxt_deps="arm"
1012 mmi_deps="mips"
1013 mmx_deps="x86"
1014 mmx2_deps="mmx"
1015 neon_deps="arm"
1016 ppc4xx_deps="ppc"
1017 sse_deps="mmx"
1018 ssse3_deps="sse"
1019 vis_deps="sparc"
1020
1021 # decoders / encoders / hardware accelerators
1022 aac_decoder_select="fft mdct"
1023 ac3_decoder_select="fft mdct"
1024 atrac3_decoder_select="fft mdct"
1025 cavs_decoder_select="golomb"
1026 cook_decoder_select="fft mdct"
1027 cscd_decoder_suggest="zlib"
1028 dca_decoder_select="fft mdct"
1029 dnxhd_encoder_select="aandct"
1030 dxa_decoder_select="zlib"
1031 eac3_decoder_select="fft mdct"
1032 eatgq_decoder_select="aandct"
1033 eatqi_decoder_select="aandct"
1034 ffv1_decoder_select="golomb"
1035 flac_decoder_select="golomb"
1036 flac_encoder_select="golomb"
1037 flashsv_decoder_select="zlib"
1038 flashsv_encoder_select="zlib"
1039 flv_encoder_select="aandct"
1040 h261_encoder_select="aandct"
1041 h263_encoder_select="aandct"
1042 h263_vaapi_hwaccel_deps="va_va_h"
1043 h263_vaapi_hwaccel_select="vaapi"
1044 h263p_encoder_select="aandct"
1045 h264_decoder_select="golomb"
1046 h264_vaapi_hwaccel_deps="va_va_h"
1047 h264_vaapi_hwaccel_select="vaapi"
1048 h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1049 h264_vdpau_decoder_select="vdpau"
1050 imc_decoder_select="fft mdct"
1051 jpegls_decoder_select="golomb"
1052 jpegls_encoder_select="golomb"
1053 ljpeg_encoder_select="aandct"
1054 loco_decoder_select="golomb"
1055 mjpeg_encoder_select="aandct"
1056 mpeg1video_encoder_select="aandct"
1057 mpeg2video_encoder_select="aandct"
1058 mpeg4_encoder_select="aandct"
1059 mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1060 mpeg_vdpau_decoder_select="vdpau"
1061 mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1062 mpeg1_vdpau_decoder_select="vdpau"
1063 mpeg2_vaapi_hwaccel_deps="va_va_h"
1064 mpeg2_vaapi_hwaccel_select="vaapi"
1065 mpeg4_vaapi_hwaccel_deps="va_va_h"
1066 mpeg4_vaapi_hwaccel_select="vaapi"
1067 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1068 msmpeg4v1_encoder_select="aandct"
1069 msmpeg4v2_encoder_select="aandct"
1070 msmpeg4v3_encoder_select="aandct"
1071 nellymoser_decoder_select="fft mdct"
1072 nellymoser_encoder_select="fft mdct"
1073 png_decoder_select="zlib"
1074 png_encoder_select="zlib"
1075 qdm2_decoder_select="fft mdct rdft"
1076 rv10_encoder_select="aandct"
1077 rv20_encoder_select="aandct"
1078 rv30_decoder_select="golomb"
1079 rv40_decoder_select="golomb"
1080 shorten_decoder_select="golomb"
1081 sonic_decoder_select="golomb"
1082 sonic_encoder_select="golomb"
1083 sonic_ls_encoder_select="golomb"
1084 svq3_decoder_select="golomb"
1085 svq3_decoder_suggest="zlib"
1086 tiff_decoder_suggest="zlib"
1087 tiff_encoder_suggest="zlib"
1088 tscc_decoder_select="zlib"
1089 vc1_vaapi_hwaccel_deps="va_va_h"
1090 vc1_vaapi_hwaccel_select="vaapi"
1091 vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1092 vc1_vdpau_decoder_select="vdpau"
1093 vorbis_decoder_select="fft mdct"
1094 vorbis_encoder_select="fft mdct"
1095 wmav1_decoder_select="fft mdct"
1096 wmav1_encoder_select="fft mdct"
1097 wmav2_decoder_select="fft mdct"
1098 wmav2_encoder_select="fft mdct"
1099 wmv1_encoder_select="aandct"
1100 wmv2_encoder_select="aandct"
1101 wmv3_vaapi_hwaccel_deps="va_va_h"
1102 wmv3_vaapi_hwaccel_select="vaapi"
1103 wmv3_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1104 wmv3_vdpau_decoder_select="vdpau"
1105 zlib_decoder_select="zlib"
1106 zlib_encoder_select="zlib"
1107 zmbv_decoder_select="zlib"
1108 zmbv_encoder_select="zlib"
1109
1110 # parsers
1111 h264_parser_select="golomb"
1112
1113 # external libraries
1114 libdirac_decoder_deps="libdirac !libschroedinger"
1115 libdirac_encoder_deps="libdirac"
1116 libfaac_encoder_deps="libfaac"
1117 libfaad_decoder_deps="libfaad"
1118 libfaadbin_decoder_extralibs='$ldl'
1119 libgsm_decoder_deps="libgsm"
1120 libgsm_encoder_deps="libgsm"
1121 libgsm_ms_decoder_deps="libgsm"
1122 libgsm_ms_encoder_deps="libgsm"
1123 libmp3lame_encoder_deps="libmp3lame"
1124 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1125 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1126 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1127 libopenjpeg_decoder_deps="libopenjpeg"
1128 libschroedinger_decoder_deps="libschroedinger"
1129 libschroedinger_encoder_deps="libschroedinger"
1130 libspeex_decoder_deps="libspeex"
1131 libtheora_encoder_deps="libtheora"
1132 libvorbis_encoder_deps="libvorbis"
1133 libx264_encoder_deps="libx264"
1134 libxvid_encoder_deps="libxvid"
1135
1136 # demuxers / muxers
1137 ac3_demuxer_deps="ac3_parser"
1138 avisynth_demuxer_deps="avisynth"
1139 dirac_demuxer_deps="dirac_parser"
1140 libnut_demuxer_deps="libnut"
1141 libnut_muxer_deps="libnut"
1142 matroska_demuxer_suggest="zlib bzlib"
1143 mov_demuxer_suggest="zlib"
1144 mp3_demuxer_deps="mpegaudio_parser"
1145 redir_demuxer_deps="network"
1146 rtp_muxer_deps="network rtp_protocol"
1147 rtsp_demuxer_deps="sdp_demuxer"
1148 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1149
1150 # indevs / outdevs
1151 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1152 alsa_indev_extralibs="-lasound"
1153 alsa_outdev_deps="alsa_asoundlib_h"
1154 alsa_outdev_extralibs="-lasound"
1155 audio_beos_indev_deps="audio_beos"
1156 audio_beos_indev_extralibs="-lmedia -lbe"
1157 audio_beos_outdev_deps="audio_beos"
1158 audio_beos_outdev_extralibs="-lmedia -lbe"
1159 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1160 dv1394_indev_deps="dv1394 dv_demuxer"
1161 jack_indev_deps="jack_jack_h"
1162 jack_indev_extralibs="-ljack"
1163 libdc1394_indev_deps="libdc1394"
1164 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1165 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1166 v4l_indev_deps="linux_videodev_h"
1167 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1168 vfwcap_indev_deps="capCreateCaptureWindow"
1169 vfwcap_indev_extralibs="-lvfw32"
1170 x11_grab_device_indev_deps="x11grab XShmCreateImage"
1171 x11_grab_device_indev_extralibs="-lX11 -lXext"
1172
1173 # protocols
1174 gopher_protocol_deps="network"
1175 http_protocol_deps="network"
1176 rtp_protocol_deps="udp_protocol"
1177 tcp_protocol_deps="network"
1178 udp_protocol_deps="network"
1179
1180 # filters
1181 movie_filter_deps="avfilter_lavf"
1182
1183 # programs
1184 ffplay_deps="sdl"
1185 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1186 ffserver_extralibs='$ldl'
1187
1188
1189 # default parameters
1190
1191 logfile="config.err"
1192
1193 # installation paths
1194 prefix_default="/usr/local"
1195 bindir_default='${prefix}/bin'
1196 datadir_default='${prefix}/share/ffmpeg'
1197 incdir_default='${prefix}/include'
1198 libdir_default='${prefix}/lib'
1199 mandir_default='${prefix}/share/man'
1200 shlibdir_default="$libdir_default"
1201
1202 # toolchain
1203 ar="ar"
1204 cc_default="gcc"
1205 host_cc_default="gcc"
1206 ln_s="ln -sf"
1207 nm_default="nm"
1208 objformat="elf"
1209 ranlib="ranlib"
1210 strip="strip"
1211 yasmexe="yasm"
1212
1213 # machine
1214 arch=$(uname -m)
1215 cpu="generic"
1216
1217 # OS
1218 target_os=$(tolower $(uname -s))
1219 host_os=$target_os
1220
1221 # configurable options
1222 enable debug
1223 enable fastdiv
1224 enable ffmpeg
1225 enable ffplay
1226 enable ffserver
1227 enable ipv6
1228 enable mpegaudio_hp
1229 enable network
1230 enable optimizations
1231 enable protocols
1232 enable static
1233 enable stripping
1234 enable swscale_alpha
1235
1236 # build settings
1237 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1238 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1239 FFSERVERLDFLAGS=-Wl,-E
1240 LIBPREF="lib"
1241 LIBSUF=".a"
1242 FULLNAME='$(NAME)$(BUILDSUF)'
1243 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1244 SLIBPREF="lib"
1245 SLIBSUF=".so"
1246 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1247 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1248 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1249 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1250
1251 host_cflags='-O3 -g -Wall'
1252 host_libs='-lm'
1253
1254 target_path='.'
1255
1256 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1257 # full relative path for objects in subdirectories for non-recursive Make.
1258 DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1259
1260 # find source path
1261 source_path="$(dirname "$0")"
1262 enable source_path_used
1263 if test -z "$source_path" -o "$source_path" = "." ; then
1264     source_path="$(pwd)"
1265     disable source_path_used
1266 else
1267     source_path="$(cd "$source_path"; pwd)"
1268     echo "$source_path" | grep -q '[[:blank:]]' &&
1269         die "Out of tree builds are impossible with whitespace in source path."
1270     test -e "$source_path/config.h" &&
1271         die "Out of tree builds are impossible with config.h in source dir."
1272 fi
1273
1274 for v in "$@"; do
1275     r=${v#*=}
1276     l=${v%"$r"}
1277     r=$(sh_quote "$r")
1278     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1279 done
1280
1281 find_things(){
1282     thing=$1
1283     pattern=$2
1284     file=$source_path/$3
1285     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1286 }
1287
1288 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1289 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1290 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1291 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1292 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1293 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1294 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1295 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1296 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1297 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1298 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1299
1300 enable $ARCH_EXT_LIST \
1301        $DECODER_LIST \
1302        $ENCODER_LIST \
1303        $HWACCEL_LIST \
1304        $PARSER_LIST \
1305        $BSF_LIST \
1306        $DEMUXER_LIST \
1307        $MUXER_LIST \
1308        $FILTER_LIST \
1309        $PROTOCOL_LIST \
1310        $INDEV_LIST \
1311        $OUTDEV_LIST \
1312
1313 die_unknown(){
1314     echo "Unknown option \"$1\"."
1315     echo "See $0 --help for available options."
1316     exit 1
1317 }
1318
1319 show_list() {
1320     suffix=_$1
1321     shift
1322     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1323     exit 0
1324 }
1325
1326 for opt do
1327     optval="${opt#*=}"
1328     case "$opt" in
1329     --extra-cflags=*) add_cflags $optval
1330     ;;
1331     --extra-ldflags=*) add_ldflags $optval
1332     ;;
1333     --extra-libs=*) add_extralibs $optval
1334     ;;
1335     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1336     ;;
1337     --enable-debug=*) debuglevel="$optval"
1338     ;;
1339     --enable-*=*|--disable-*=*)
1340     eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
1341     case "$thing" in
1342         encoder|decoder|hwaccel|muxer|demuxer|indev|outdev|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1343         *) die_unknown "$opt" ;;
1344     esac
1345     ;;
1346     --enable-?*|--disable-?*)
1347     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1348     if is_in $option $COMPONENT_LIST; then
1349         eval $action \$$(toupper ${option%s})_LIST
1350     elif is_in $option $CMDLINE_SELECT; then
1351         $action $option
1352     else
1353         die_unknown $opt
1354     fi
1355     ;;
1356     --list-*)
1357         NAME="${opt#--list-}"
1358         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1359         NAME=${NAME%s}
1360         eval show_list $NAME \$$(toupper $NAME)_LIST
1361     ;;
1362     --help|-h) show_help
1363     ;;
1364     *)
1365     optname="${opt%%=*}"
1366     optname="${optname#--}"
1367     optname=$(echo "$optname" | sed 's/-/_/g')
1368     is_in $optname $CMDLINE_SET || die_unknown $opt
1369     eval $optname='$optval'
1370     ;;
1371     esac
1372 done
1373
1374 disabled logging && logfile=/dev/null
1375
1376 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1377 set >> $logfile
1378
1379 test -n "$cross_prefix" && enable cross_compile
1380
1381 ar="${cross_prefix}${ar}"
1382 cc_default="${cross_prefix}${cc_default}"
1383 nm_default="${cross_prefix}${nm_default}"
1384 ranlib="${cross_prefix}${ranlib}"
1385 strip="${cross_prefix}${strip}"
1386
1387 sysinclude_default="${sysroot}/usr/include"
1388
1389 set_default cc nm sysinclude
1390 as_default=$cc
1391 enabled cross_compile || host_cc_default=$cc
1392 set_default host_cc
1393
1394 exesuf() {
1395     case $1 in
1396         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1397     esac
1398 }
1399
1400 EXESUF=$(exesuf $target_os)
1401 HOSTEXESUF=$(exesuf $host_os)
1402
1403 # set temporary file name
1404 : ${TMPDIR:=$TEMPDIR}
1405 : ${TMPDIR:=$TMP}
1406 : ${TMPDIR:=/tmp}
1407
1408 if ! check_cmd type mktemp; then
1409     # simple replacement for missing mktemp
1410     # NOT SAFE FOR GENERAL USE
1411     mktemp(){
1412         echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1413     }
1414 fi
1415
1416 tmpfile(){
1417     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1418         (set -C; exec > $tmp) 2>/dev/null ||
1419         die "Unable to create temoporary file in $TMPDIR."
1420     append TMPFILES $tmp
1421     eval $1=$tmp
1422 }
1423
1424 trap 'rm -f -- $TMPFILES' EXIT
1425 trap exit HUP INT TERM
1426
1427 tmpfile TMPC  .c
1428 tmpfile TMPE  $EXESUF
1429 tmpfile TMPH  .h
1430 tmpfile TMPO  .o
1431 tmpfile TMPS  .S
1432 tmpfile TMPSH .sh
1433
1434 unset -f mktemp
1435
1436 # make sure we can execute files in $TMPDIR
1437 cat > $TMPSH 2>> $logfile <<EOF
1438 #! /bin/sh
1439 EOF
1440 chmod +x $TMPSH >> $logfile 2>&1
1441 if ! $TMPSH >> $logfile 2>&1; then
1442     cat <<EOF
1443 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1444 variable to another directory and make sure that it is not mounted noexec.
1445 EOF
1446     die "Sanity test failed."
1447 fi
1448
1449 if   $cc --version 2>/dev/null | grep -qi gcc; then
1450     cc_type=gcc
1451 elif $cc --version 2>/dev/null | grep -q Intel; then
1452     cc_type=icc
1453 elif $cc -v 2>&1 | grep -q xlc; then
1454     cc_type=xlc
1455 elif $cc -V 2>/dev/null | grep -q Compaq; then
1456     cc_type=ccc
1457     DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1458     debuglevel=3
1459     add_ldflags -Wl,-z,now # calls to libots crash without this
1460 elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1461     test -d "$sysroot" || die "No valid sysroot specified."
1462     cc_type=armcc
1463     armcc_conf="$PWD/armcc.conf"
1464     $cc --arm_linux_configure                 \
1465         --arm_linux_config_file="$armcc_conf" \
1466         --configure_sysroot="$sysroot"        \
1467         --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1468         die "Error creating armcc configuration file."
1469     cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1470     as_default="${cross_prefix}gcc"
1471 fi
1472
1473 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1474
1475 set_default as
1476
1477 if test -n "$sysroot"; then
1478     case "$cc_type" in
1479         gcc)
1480             add_cflags  --sysroot="$sysroot"
1481             add_ldflags --sysroot="$sysroot"
1482         ;;
1483     esac
1484 fi
1485
1486 # compiler sanity check
1487 check_exec <<EOF
1488 int main(void){ return 0; }
1489 EOF
1490 if test "$?" != 0; then
1491     echo "$cc is unable to create an executable file."
1492     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1493         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1494         echo "Only do this if you know what cross compiling means."
1495     fi
1496     die "C compiler test failed."
1497 fi
1498
1499 check_cflags -std=c99
1500 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1501 #include <stdlib.h>
1502 EOF
1503 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1504 #include <stdlib.h>
1505 EOF
1506
1507 case "$arch" in
1508     alpha)
1509         arch="alpha"
1510         enable fast_64bit
1511         check_cflags -mieee
1512     ;;
1513     arm|armv[4567]*l)
1514         arch="arm"
1515     ;;
1516     avr32)
1517     ;;
1518     bfin)
1519         arch="bfin"
1520     ;;
1521     ia64)
1522         arch="ia64"
1523         enable fast_64bit
1524     ;;
1525     m68k)
1526         arch="m68k"
1527     ;;
1528     mips|mipsel|IP*)
1529         arch="mips"
1530     ;;
1531     mips64)
1532         arch="mips"
1533         subarch="mips64"
1534         enable fast_64bit
1535     ;;
1536     parisc|hppa)
1537         arch="parisc"
1538     ;;
1539     parisc64|hppa64)
1540         arch="parisc"
1541         enable fast_64bit
1542     ;;
1543     "Power Macintosh"|ppc|powerpc)
1544         arch="ppc"
1545         enable fast_unaligned
1546     ;;
1547     ppc64)
1548         arch="ppc"
1549         subarch="ppc64"
1550         enable fast_64bit
1551         enable fast_unaligned
1552     ;;
1553     s390|s390x)
1554         arch="s390"
1555     ;;
1556     sh4|sh)
1557         arch="sh4"
1558     ;;
1559     sparc)
1560         arch="sparc"
1561     ;;
1562     sun4u|sparc64)
1563         arch="sparc"
1564         subarch="sparc64"
1565         enable fast_64bit
1566     ;;
1567     i386|i486|i586|i686|i86pc|BePC)
1568         arch="x86"
1569         subarch="x86_32"
1570         enable fast_unaligned
1571     ;;
1572     x86_64|amd64)
1573         arch="x86"
1574         subarch="x86_32"
1575         enable cmov
1576         enable fast_cmov
1577         enable fast_unaligned
1578         check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1579         int test[sizeof(char*) - 7];
1580 EOF
1581     ;;
1582     *)
1583         arch="unknown"
1584     ;;
1585 esac
1586
1587 enable $arch $subarch
1588
1589 # OS specific
1590 case $target_os in
1591     beos|haiku|zeta)
1592         prefix_default="$HOME/config"
1593         # helps building libavcodec
1594         add_cflags -DPIC -fomit-frame-pointer
1595         # 3 gcc releases known for BeOS, each with ugly bugs
1596         gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1597         case "$gcc_version" in
1598           2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1599             disable mmx
1600             ;;
1601           *20010315*) echo "BeBits gcc"
1602             add_cflags -fno-expensive-optimizations
1603             ;;
1604         esac
1605         SHFLAGS=-nostart
1606         # enable BeOS things
1607         enable audio_beos
1608         # no need for libm, but the inet stuff
1609         # Check for BONE
1610         # XXX: actually should check for NOT net_server
1611         if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1612             network_extralibs="-lbind -lsocket"
1613         else
1614             enable beos_netserver
1615             network_extralibs="-lnet"
1616         fi ;;
1617     sunos)
1618         FFSERVERLDFLAGS=""
1619         SHFLAGS='-shared -Wl,-h,$$(@F)'
1620         network_extralibs="-lsocket -lnsl"
1621         add_cflags -D__EXTENSIONS__
1622         ;;
1623     netbsd)
1624         oss_indev_extralibs="-lossaudio"
1625         oss_outdev_extralibs="-lossaudio"
1626         ;;
1627     openbsd)
1628         disable need_memalign
1629         LIBOBJFLAGS='$(PIC)'
1630         SHFLAGS='-shared'
1631         oss_indev_extralibs="-lossaudio"
1632         oss_outdev_extralibs="-lossaudio"
1633         ;;
1634     freebsd|dragonfly)
1635         disable need_memalign
1636         ;;
1637     bsd/os)
1638         osextralibs="-lpoll -lgnugetopt"
1639         strip="strip -d"
1640         ;;
1641     darwin)
1642         disable need_memalign
1643         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1644         strip="strip -x"
1645         FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1646         SLIBSUF=".dylib"
1647         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1648         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1649         FFSERVERLDFLAGS=-Wl,-bind_at_load
1650         objformat="macho"
1651         enabled x86_64 && objformat="macho64"
1652         ;;
1653     mingw32*)
1654         target_os=mingw32
1655         LIBTARGET=i386
1656         if enabled x86_64; then
1657             disable need_memalign
1658             LIBTARGET=x64
1659         fi
1660         shlibdir_default="$bindir_default"
1661         disable ffserver
1662         SLIBPREF=""
1663         SLIBSUF=".dll"
1664         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1665         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1666         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1667         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1668             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1669         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1670         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'
1671         objformat="win32"
1672         enable dos_paths
1673         check_cflags -fno-common
1674         if ! enabled x86_64; then
1675             check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1676                 die "ERROR: MinGW runtime version must be >= 3.15."
1677             enabled_any avisynth vfwcap_demuxer &&
1678                 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1679                   die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1680             fi
1681         ;;
1682     cygwin*)
1683         target_os=cygwin
1684         shlibdir_default="$bindir_default"
1685         SLIBPREF="cyg"
1686         SLIBSUF=".dll"
1687         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1688         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1689         SHFLAGS='-shared -Wl,--enable-auto-image-base'
1690         objformat="win32"
1691         enable dos_paths
1692         check_cflags -fno-common
1693         ;;
1694     *-dos|freedos|opendos)
1695         disable ffplay ffserver
1696         disable $INDEV_LIST $OUTDEV_LIST
1697         network_extralibs="-lsocket"
1698         objformat="coff"
1699         enable dos_paths
1700         ;;
1701     linux)
1702         enable dv1394
1703         ;;
1704     irix*)
1705         target_os=irix
1706         ranlib="echo ignoring ranlib"
1707         ;;
1708     os/2*)
1709         strip="lxlite"
1710         ln_s="cp -f"
1711         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1712         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1713         FFSERVERLDFLAGS=""
1714         LIBSUF="_s.a"
1715         SLIBPREF=""
1716         SLIBSUF=".dll"
1717         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1718         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1719         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1720           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1721           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1722           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1723           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1724           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1725         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1726           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1727         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1728         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1729         enable dos_paths
1730         ;;
1731     gnu/kfreebsd)
1732         ;;
1733     gnu)
1734         ;;
1735
1736     *)
1737         die "Unknown OS '$target_os'."
1738         ;;
1739 esac
1740
1741 set_default $PATHS_LIST
1742
1743 add_extralibs $osextralibs
1744
1745 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1746 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1747
1748 # we need to build at least one lib type
1749 if ! enabled_any static shared; then
1750     cat <<EOF
1751 At least one library type must be built.
1752 Specify --enable-static to build the static libraries or --enable-shared to
1753 build the shared libraries as well. To only build the shared libraries specify
1754 --disable-static in addition to --enable-shared.
1755 EOF
1756     exit 1;
1757 fi
1758
1759 disabled static && LIBNAME=""
1760
1761 if enabled_any libfaad libfaadbin ; then
1762     if check_header faad.h; then
1763         check_cc <<EOF
1764 #include <faad.h>
1765 #ifndef FAAD2_VERSION
1766 ok faad1
1767 #endif
1768 int main(void) { return 0; }
1769 EOF
1770         test $? = 0 && enable libfaad2
1771     else
1772         die "FAAD test failed."
1773     fi
1774 fi
1775
1776
1777 die_license_disabled() {
1778     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
1779 }
1780
1781 die_license_disabled gpl libfaad2
1782 die_license_disabled gpl libx264
1783 die_license_disabled gpl libxvid
1784 die_license_disabled gpl postproc
1785 die_license_disabled gpl x11grab
1786
1787 die_license_disabled nonfree libfaac
1788
1789 die_license_disabled version3 libopencore_amrnb
1790 die_license_disabled version3 libopencore_amrwb
1791
1792 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
1793
1794 check_deps $ARCH_EXT_LIST
1795
1796 test -z "$need_memalign" && need_memalign="$mmx"
1797
1798 #Darwin CC versions
1799 if test $target_os = darwin; then
1800     if enabled xlc; then
1801         add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1802     else
1803         add_cflags -pipe
1804         check_cflags -force_cpusubtype_ALL
1805         check_cflags -Wno-sign-compare
1806         enabled shared || check_cflags -mdynamic-no-pic
1807     fi
1808 fi
1809
1810 disabled optimizations || check_cflags -fomit-frame-pointer
1811
1812 # Add processor-specific flags
1813 if test $cpu != "generic"; then
1814     warn_altivec(){
1815         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1816     }
1817     case $cpu in
1818         601|ppc601|PowerPC601)
1819             add_cflags -mcpu=601
1820             warn_altivec enabled PPC601
1821         ;;
1822         603*|ppc603*|PowerPC603*)
1823             add_cflags -mcpu=603
1824             warn_altivec enabled PPC603
1825         ;;
1826         604*|ppc604*|PowerPC604*)
1827             add_cflags -mcpu=604
1828             warn_altivec enabled PPC604
1829         ;;
1830         G3|g3|75*|ppc75*|PowerPC75*)
1831             add_cflags -mcpu=750 -mpowerpc-gfxopt
1832             warn_altivec enabled PPC75x
1833         ;;
1834         G4|g4|745*|ppc745*|PowerPC745*)
1835             add_cflags -mcpu=7450 -mpowerpc-gfxopt
1836             warn_altivec disabled PPC745x
1837         ;;
1838         74*|ppc74*|PowerPC74*)
1839             add_cflags -mcpu=7400 -mpowerpc-gfxopt
1840             warn_altivec disabled PPC74xx
1841         ;;
1842         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1843             add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1844             warn_altivec disabled PPC970
1845         ;;
1846         Cell|CELL|cell)
1847             add_cflags -mcpu=cell
1848             warn_altivec disabled Cell
1849             enable ldbrx
1850         ;;
1851         # targets that do NOT support conditional mov (cmov)
1852         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1853             add_cflags -march=$cpu
1854             disable cmov
1855         ;;
1856         # targets that do support conditional mov (cmov)
1857         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1858             add_cflags -march=$cpu
1859             enable cmov
1860             enable fast_cmov
1861         ;;
1862         # targets that do support conditional mov but on which it's slow
1863         pentium4|pentium4m|prescott|nocona)
1864             add_cflags -march=$cpu
1865             enable cmov
1866             disable fast_cmov
1867         ;;
1868         sparc64)
1869             add_cflags -mcpu=v9
1870         ;;
1871         arm11*|cortex*)
1872             add_cflags -mcpu=$cpu
1873             enable fast_unaligned
1874         ;;
1875         armv[67]*)
1876             add_cflags -march=$cpu
1877             enable fast_unaligned
1878         ;;
1879         armv*)
1880             add_cflags -march=$cpu
1881         ;;
1882         arm*)
1883             add_cflags -mcpu=$cpu
1884         ;;
1885         ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1886             enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1887         ;;
1888         bf*)
1889             add_cflags -mcpu=$cpu
1890         ;;
1891         mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1892             add_cflags -march=$cpu
1893         ;;
1894         *)
1895             echo "WARNING: Unknown CPU \"$cpu\", ignored."
1896         ;;
1897     esac
1898 fi
1899
1900 check_cc <<EOF || die "Symbol mangling check failed."
1901 int ff_extern;
1902 EOF
1903 sym=$($nm -P -g $TMPO | grep ff_extern)
1904 extern_prefix=${sym%%ff_extern*}
1905
1906 check_cc <<EOF && enable inline_asm
1907 void foo(void) { __asm__ volatile ("" ::); }
1908 EOF
1909
1910 if enabled x86; then
1911     # check whether EBP is available on x86
1912     # As 'i' is stored on the stack, this program will crash
1913     # if the base pointer is used to access it because the
1914     # base pointer is cleared in the inline assembly code.
1915     check_exec_crash <<EOF && enable ebp_available
1916     volatile int i=0;
1917     __asm__ volatile (
1918         "xorl %%ebp, %%ebp"
1919     ::: "%ebp");
1920     return i;
1921 EOF
1922
1923     # check wether EBX is available on x86
1924     check_asm ebx_available '"":::"%ebx"'
1925
1926     # check whether more than 10 operands are supported
1927     check_cc <<EOF && enable ten_operands
1928 int main(void) {
1929     int x=0;
1930     __asm__ volatile(
1931         ""
1932         :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1933     );
1934     return 0;
1935 }
1936 EOF
1937
1938     # check whether binutils is new enough to compile SSSE3/MMX2
1939     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1940     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
1941
1942     check_asm bswap '"bswap %%eax" ::: "%eax"'
1943
1944     YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1945     enabled     x86_64        && append YASMFLAGS "-m amd64"
1946     enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1947     case "$objformat" in
1948         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1949         macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1950         *)                    append YASMFLAGS "-DPREFIX"  ;;
1951     esac
1952     disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1953 fi
1954
1955 # check for assembler specific support
1956
1957 enabled mips && check_asm loongson '"dmult.g $1, $2, $3"'
1958
1959 enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1960 enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1961 enabled ppc && check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
1962
1963 # check for SIMD availability
1964
1965 # AltiVec flags: The FSF version of GCC differs from the Apple version
1966 if enabled altivec; then
1967     check_cflags -maltivec -mabi=altivec &&
1968         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1969         check_cflags -faltivec
1970
1971     # check if our compiler supports Motorola AltiVec C API
1972     check_cc <<EOF || disable altivec
1973 $inc_altivec_h
1974 int main(void) {
1975     vector signed int v1, v2, v3;
1976     v1 = vec_add(v2,v3);
1977     return 0;
1978 }
1979 EOF
1980
1981     # check if our compiler supports braces for vector declarations
1982     check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1983 $inc_altivec_h
1984 int main (void) { (vector int) {1}; return 0; }
1985 EOF
1986 fi
1987
1988 # We have to check if pld is a nop and disable it.
1989 enabled arm     && check_asm pld     '"pld [r0]"'
1990 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1991 enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1992 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1993 enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1994 enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1995 enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1996 enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1997 enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1998
1999 enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2000
2001 # ---
2002 # big/little-endian test
2003 check_cc <<EOF || die "endian test failed"
2004 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2005 EOF
2006 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2007
2008 # ---
2009 # check availability of some header files
2010
2011 if check_func dlopen; then
2012     ldl=
2013 elif check_func dlopen -ldl; then
2014     ldl=-ldl
2015 fi
2016
2017 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2018 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2019
2020 check_func  fork
2021 check_func  gethrtime
2022 check_func  getrusage
2023 check_func  inet_aton $network_extralibs
2024 check_func  memalign
2025 check_func  mkstemp
2026 check_func  posix_memalign
2027 check_func_headers io.h setmode
2028 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2029 check_func_headers windows.h GetProcessTimes
2030 check_func_headers windows.h VirtualAlloc
2031
2032 check_header conio.h
2033 check_header dlfcn.h
2034 check_header malloc.h
2035 check_header poll.h
2036 check_header sys/mman.h
2037 check_header sys/resource.h
2038 check_header sys/select.h
2039 check_header termios.h
2040 check_header vdpau/vdpau.h
2041 check_header vdpau/vdpau_x11.h
2042 check_header X11/extensions/XvMClib.h
2043
2044 if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
2045     die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2046 fi
2047
2048 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2049 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2050
2051 # check for some common methods of building with pthread support
2052 # do this before the optional library checks as some of them require pthreads
2053 if enabled pthreads; then
2054     if check_func pthread_create; then
2055         :
2056     elif check_func pthread_create -pthread; then
2057         add_cflags -pthread
2058         add_extralibs -pthread
2059     elif check_func pthread_create -pthreads; then
2060         add_cflags -pthreads
2061         add_extralibs -pthreads
2062     elif check_func pthread_create -lpthreadGC2; then
2063         add_extralibs -lpthreadGC2
2064     elif ! check_lib pthread.h pthread_create -lpthread; then
2065         die "ERROR: can't find pthreads library"
2066     fi
2067 fi
2068
2069 for thread in $THREADS_LIST; do
2070     if enabled $thread; then
2071         test -n "$thread_type" &&
2072             die "ERROR: Only one thread type must be selected." ||
2073             thread_type="$thread"
2074     fi
2075 done
2076
2077 check_lib math.h sin -lm
2078 check_lib va/va.h vaInitialize -lva
2079
2080 # test for C99 functions in math.h
2081 for func in llrint lrint lrintf round roundf truncf; do
2082     check_exec <<EOF && enable $func || disable $func
2083 #include <math.h>
2084 int main(void) { return ($func(3.999f) > 0)?0:1; }
2085 EOF
2086 done
2087
2088 # these are off by default, so fail if requested and not available
2089 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2090 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2091                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2092                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2093 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2094 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2095 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2096 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2097 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2098 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2099 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2100 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2101 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2102                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2103 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2104 enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2105 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2106 enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
2107                       { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2108                         die "ERROR: libx264 version must be >= 0.65."; }
2109 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2110 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2111
2112 # libdc1394 check
2113 if enabled libdc1394; then
2114     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2115         enable libdc1394_2; } ||
2116     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2117         enable libdc1394_1; } ||
2118     die "ERROR: No version of libdc1394 found "
2119 fi
2120
2121
2122 _restrict=
2123 for restrict_keyword in restrict __restrict__ __restrict; do
2124     check_cc <<EOF && _restrict=$restrict_keyword && break
2125 void foo(char * $restrict_keyword p);
2126 EOF
2127 done
2128
2129 ##########################################
2130 # SDL check
2131
2132 disable sdl_too_old
2133 disable sdl
2134 SDL_CONFIG="${cross_prefix}sdl-config"
2135 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2136     sdl_cflags=$("${SDL_CONFIG}" --cflags)
2137     temp_cflags $sdl_cflags
2138     temp_extralibs $("${SDL_CONFIG}" --libs)
2139     if check_lib2 SDL.h SDL_Init; then
2140         _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2141         if test "$_sdlversion" -lt 121 ; then
2142             enable sdl_too_old
2143         else
2144             enable sdl
2145             check_cc $sdl_cflags <<EOF && enable sdl_video_size
2146 #include <SDL.h>
2147 int main(int argc, char **argv){
2148     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2149     int w = vi->current_w;
2150     return 0;
2151 }
2152 EOF
2153         fi
2154     fi
2155     restore_flags
2156 fi
2157
2158 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2159
2160 ##########################################
2161 # Network check
2162
2163 if enabled network; then
2164     check_type "sys/types.h sys/socket.h" socklen_t
2165     # Prefer arpa/inet.h over winsock2
2166     if check_header arpa/inet.h ; then
2167         check_func closesocket
2168     elif check_header winsock2.h ; then
2169         network_extralibs="-lws2_32"
2170         check_type ws2tcpip.h socklen_t
2171         check_func_headers winsock2.h closesocket
2172     else
2173         disable network
2174     fi
2175 fi
2176
2177 ##########################################
2178 # IPv6 check
2179
2180 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2181 #include <sys/types.h>
2182 #include <sys/socket.h>
2183 #include <netinet/in.h>
2184 #include <netdb.h>
2185 int main(void) {
2186     struct sockaddr_storage saddr;
2187     struct ipv6_mreq mreq6;
2188     getaddrinfo(0,0,0,0);
2189     getnameinfo(0,0,0,0,0,0,0);
2190     IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2191 }
2192 EOF
2193
2194 check_header linux/videodev.h
2195 check_header linux/videodev2.h
2196 check_header sys/videoio.h
2197
2198 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2199
2200 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2201 { check_header dev/bktr/ioctl_meteor.h &&
2202   check_header dev/bktr/ioctl_bt848.h; } ||
2203 { check_header machine/ioctl_meteor.h &&
2204   check_header machine/ioctl_bt848.h; } ||
2205 { check_header dev/video/meteor/ioctl_meteor.h &&
2206   check_header dev/video/bktr/ioctl_bt848.h; } ||
2207 check_header dev/ic/bt8xx.h
2208
2209 check_header sys/soundcard.h
2210 check_header soundcard.h
2211
2212 enabled alsa_demuxer || enabled alsa_muxer && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2213
2214 enabled jack_demuxer && check_lib2 jack/jack.h jack_client_open -ljack
2215
2216 # deal with the X11 frame grabber
2217 enabled x11grab                         &&
2218 check_header X11/Xlib.h                 &&
2219 check_header X11/extensions/XShm.h      &&
2220 check_func XOpenDisplay -lX11           &&
2221 check_func XShmCreateImage -lX11 -lXext
2222
2223 enabled debug && add_cflags -g"$debuglevel"
2224
2225 # add some useful compiler flags if supported
2226 check_cflags -Wdeclaration-after-statement
2227 check_cflags -Wall
2228 check_cflags -Wno-switch
2229 check_cflags -Wdisabled-optimization
2230 check_cflags -Wpointer-arith
2231 check_cflags -Wredundant-decls
2232 check_cflags -Wno-pointer-sign
2233 check_cflags -Wcast-qual
2234 check_cflags -Wwrite-strings
2235 check_cflags -Wtype-limits
2236 check_cflags -Wundef
2237 enabled extra_warnings && check_cflags -Winline
2238
2239 # add some linker flags
2240 check_ldflags -Wl,--warn-common
2241 check_ldflags -Wl,--as-needed
2242 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'
2243 check_ldflags -Wl,-Bsymbolic
2244
2245 if enabled small; then
2246     check_cflags -Os            # not all compilers support -Os
2247     optimizations="small"
2248 elif enabled optimizations; then
2249     if enabled xlc; then
2250         add_cflags  -O5
2251         add_ldflags -O5
2252     elif enabled ccc; then
2253         add_cflags -fast
2254     else
2255         add_cflags -O3
2256     fi
2257 fi
2258 check_cflags -fno-math-errno
2259 check_cflags -fno-signed-zeros
2260
2261 # add some flags for Intel C Compiler
2262 if enabled icc; then
2263     # Just warnings, no remarks
2264     check_cflags -w1
2265     # -wd: Disable following warnings
2266     # 144, 167, 556: -Wno-pointer-sign
2267     # 10006: ignoring unknown option -fno-signed-zeros
2268     # 10156: ignoring option '-W'; no argument required
2269     check_cflags -wd144,167,556,10006,10156
2270     # 11030: Warning unknown option --as-needed
2271     # 10156: ignoring option '-export'; no argument required
2272     check_ldflags -wd10156,11030
2273     # Allow to compile with optimizations
2274     check_ldflags -march=$cpu
2275     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2276     enable ebp_available
2277 elif enabled ccc; then
2278     # disable some annoying warnings
2279     add_cflags -msg_disable cvtu32to64
2280     add_cflags -msg_disable embedcomment
2281     add_cflags -msg_disable needconstext
2282     add_cflags -msg_disable nomainieee
2283     add_cflags -msg_disable ptrmismatch1
2284     add_cflags -msg_disable unreachcode
2285 fi
2286
2287 # PIC flags for shared library objects where they are needed
2288 if enabled shared; then
2289     # LIBOBJFLAGS may have already been set in the OS configuration
2290     if test -z "$LIBOBJFLAGS" ; then
2291         case "${subarch-$arch}" in
2292             x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2293         esac
2294     fi
2295 fi
2296
2297 if enabled gprof; then
2298     add_cflags  -p
2299     add_ldflags -p
2300 fi
2301
2302 # Find out if the .align argument is a power of two or not.
2303 check_asm asmalign_pot '".align 3"'
2304
2305 enabled_any $DECODER_LIST      && enable decoders
2306 enabled_any $ENCODER_LIST      && enable encoders
2307 enabled_any $HWACCEL_LIST      && enable hwaccels
2308 enabled_any $BSF_LIST          && enable bsfs
2309 enabled_any $DEMUXER_LIST      && enable demuxers
2310 enabled_any $MUXER_LIST        && enable muxers
2311 enabled_any $FILTER_LIST       && enable filters
2312 enabled_any $INDEV_LIST        && enable demuxers
2313 enabled_any $OUTDEV_LIST       && enable muxers
2314 enabled_any $PROTOCOL_LIST     && enable protocols
2315
2316 enabled_any $THREADS_LIST      && enable threads
2317
2318 check_deps $CONFIG_LIST       \
2319            $CONFIG_EXTRA      \
2320            $HAVE_LIST         \
2321            $DECODER_LIST      \
2322            $ENCODER_LIST      \
2323            $HWACCEL_LIST      \
2324            $PARSER_LIST       \
2325            $BSF_LIST          \
2326            $DEMUXER_LIST      \
2327            $MUXER_LIST        \
2328            $FILTER_LIST       \
2329            $INDEV_LIST        \
2330            $OUTDEV_LIST       \
2331            $PROTOCOL_LIST     \
2332
2333 echo "install prefix            $prefix"
2334 echo "source path               $source_path"
2335 echo "C compiler                $cc"
2336 echo ".align is power-of-two    $asmalign_pot"
2337 echo "ARCH                      $arch ($cpu)"
2338 if test "$build_suffix" != ""; then
2339     echo "build suffix              $build_suffix"
2340 fi
2341 if test "$extra_version" != ""; then
2342     echo "version string suffix     $extra_version"
2343 fi
2344 echo "big-endian                ${bigendian-no}"
2345 echo "runtime cpu detection     ${runtime_cpudetect-no}"
2346 if enabled x86; then
2347     echo "yasm                      ${yasm-no}"
2348     echo "MMX enabled               ${mmx-no}"
2349     echo "MMX2 enabled              ${mmx2-no}"
2350     echo "3DNow! enabled            ${amd3dnow-no}"
2351     echo "3DNow! extended enabled   ${amd3dnowext-no}"
2352     echo "SSE enabled               ${sse-no}"
2353     echo "SSSE3 enabled             ${ssse3-no}"
2354     echo "CMOV enabled              ${cmov-no}"
2355     echo "CMOV is fast              ${fast_cmov-no}"
2356     echo "EBX available             ${ebx_available-no}"
2357     echo "EBP available             ${ebp_available-no}"
2358     echo "10 operands supported     ${ten_operands-no}"
2359 fi
2360 if enabled arm; then
2361     echo "ARMv5TE enabled           ${armv5te-no}"
2362     echo "ARMv6 enabled             ${armv6-no}"
2363     echo "ARMv6T2 enabled           ${armv6t2-no}"
2364     echo "ARM VFP enabled           ${armvfp-no}"
2365     echo "IWMMXT enabled            ${iwmmxt-no}"
2366     echo "NEON enabled              ${neon-no}"
2367 fi
2368 if enabled mips; then
2369     echo "MMI enabled               ${mmi-no}"
2370 fi
2371 if enabled ppc; then
2372     echo "AltiVec enabled           ${altivec-no}"
2373     echo "PPC 4xx optimizations     ${ppc4xx-no}"
2374     echo "dcbzl available           ${dcbzl-no}"
2375     echo "performance report        ${powerpc_perf-no}"
2376 fi
2377 if enabled sparc; then
2378     echo "VIS enabled               ${vis-no}"
2379 fi
2380 echo "gprof enabled             ${gprof-no}"
2381 echo "debug symbols             ${debug-no}"
2382 echo "strip symbols             ${stripping-no}"
2383 echo "optimizations             ${optimizations-no}"
2384 echo "static                    ${static-no}"
2385 echo "shared                    ${shared-no}"
2386 echo "postprocessing support    ${postproc-no}"
2387 echo "new filter support        ${avfilter-no}"
2388 echo "filters using lavformat   ${avfilter_lavf-no}"
2389 echo "network support           ${network-no}"
2390 if enabled network; then
2391     echo "IPv6 support              ${ipv6-no}"
2392 fi
2393 echo "threading support         ${thread_type-no}"
2394 echo "SDL support               ${sdl-no}"
2395 if enabled sdl_too_old; then
2396     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2397 fi
2398 echo "Sun medialib support      ${mlib-no}"
2399 echo "AVISynth enabled          ${avisynth-no}"
2400 echo "libdc1394 support         ${libdc1394-no}"
2401 echo "libdirac enabled          ${libdirac-no}"
2402 echo "libfaac enabled           ${libfaac-no}"
2403 echo "libfaad enabled           ${libfaad-no}"
2404 echo "libfaad dlopened          ${libfaadbin-no}"
2405 echo "libgsm enabled            ${libgsm-no}"
2406 echo "libmp3lame enabled        ${libmp3lame-no}"
2407 echo "libnut enabled            ${libnut-no}"
2408 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2409 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2410 echo "libopenjpeg enabled       ${libopenjpeg-no}"
2411 echo "libschroedinger enabled   ${libschroedinger-no}"
2412 echo "libspeex enabled          ${libspeex-no}"
2413 echo "libtheora enabled         ${libtheora-no}"
2414 echo "libvorbis enabled         ${libvorbis-no}"
2415 echo "libx264 enabled           ${libx264-no}"
2416 echo "libxvid enabled           ${libxvid-no}"
2417 echo "zlib enabled              ${zlib-no}"
2418 echo "bzlib enabled             ${bzlib-no}"
2419 echo
2420
2421 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2422     echo "Enabled ${type}s:"
2423     eval list=\$$(toupper $type)_LIST
2424     for part in $list; do
2425         enabled $part && echo ${part%_*}
2426     done | sort | pr -3 -t
2427     echo
2428 done
2429
2430 license="LGPL version 2.1 or later"
2431 if enabled nonfree; then
2432     license="nonfree and unredistributable"
2433 elif enabled gplv3; then
2434     license="GPL version 3 or later"
2435 elif enabled lgplv3; then
2436     license="LGPL version 3 or later"
2437 elif enabled gpl; then
2438     license="GPL version 2 or later"
2439 fi
2440
2441 echo "License: $license"
2442
2443 echo "Creating config.mak and config.h..."
2444
2445 echo "# Automatically generated by configure - do not modify!" > config.mak
2446 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2447 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2448 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2449 echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
2450 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2451
2452 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2453 echo "prefix=$prefix" >> config.mak
2454 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2455 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2456 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2457 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2458 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2459 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2460 echo "SRC_PATH=\"$source_path\"" >> config.mak
2461 echo "SRC_PATH_BARE=$source_path" >> config.mak
2462 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2463 echo "CC=$cc" >> config.mak
2464 echo "AS=$as" >> config.mak
2465 echo "YASM=$yasmexe" >> config.mak
2466 echo "AR=$ar" >> config.mak
2467 echo "RANLIB=$ranlib" >> config.mak
2468 echo "LN_S=$ln_s" >> config.mak
2469 enabled stripping &&
2470     echo "STRIP=$strip" >> config.mak ||
2471     echo "STRIP=echo ignoring strip" >> config.mak
2472
2473 echo "OPTFLAGS=$CFLAGS" >> config.mak
2474 echo "LDFLAGS=$LDFLAGS" >> config.mak
2475 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2476 echo "SHFLAGS=$SHFLAGS" >> config.mak
2477 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2478 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2479 echo "BUILD_STATIC=$static" >> config.mak
2480 echo "BUILDSUF=$build_suffix" >> config.mak
2481 echo "FULLNAME=$FULLNAME" >> config.mak
2482 echo "LIBPREF=$LIBPREF" >> config.mak
2483 echo "LIBSUF=$LIBSUF" >> config.mak
2484 echo "LIBNAME=$LIBNAME" >> config.mak
2485 echo "SLIBPREF=$SLIBPREF" >> config.mak
2486 echo "SLIBSUF=$SLIBSUF" >> config.mak
2487 echo "EXESUF=$EXESUF" >> config.mak
2488 echo "EXTRA_VERSION=$extra_version" >> config.mak
2489 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2490 echo "HOSTCC=$host_cc" >> config.mak
2491 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2492 echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2493 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2494 echo "HOSTLIBS=$host_libs" >> config.mak
2495 echo "TARGET_EXEC=$target_exec" >> config.mak
2496 echo "TARGET_PATH=$target_path" >> config.mak
2497
2498 if enabled bigendian; then
2499     echo "WORDS_BIGENDIAN=yes" >> config.mak
2500     echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2501 fi
2502
2503 if enabled sdl; then
2504     echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2505     echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2506 fi
2507 if enabled texi2html; then
2508     echo "BUILD_DOC=yes" >> config.mak
2509 fi
2510
2511 get_version(){
2512     name=$1
2513     file=$source_path/$2
2514     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2515     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2516     lcname=$(tolower $name)
2517     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2518     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2519 }
2520
2521 get_version LIBSWSCALE  libswscale/swscale.h
2522 get_version LIBPOSTPROC libpostproc/postprocess.h
2523 get_version LIBAVCODEC  libavcodec/avcodec.h
2524 get_version LIBAVDEVICE libavdevice/avdevice.h
2525 get_version LIBAVFORMAT libavformat/avformat.h
2526 get_version LIBAVUTIL   libavutil/avutil.h
2527 get_version LIBAVFILTER libavfilter/avfilter.h
2528
2529 if enabled shared; then
2530     echo "BUILD_SHARED=yes" >> config.mak
2531     echo "PIC=-fPIC -DPIC" >> config.mak
2532     echo "LIBTARGET=${LIBTARGET}" >> config.mak
2533     echo "SLIBNAME=${SLIBNAME}" >> config.mak
2534     echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2535     echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2536     echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2537     echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2538     echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2539     echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2540 fi
2541 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2542 echo "EXTRALIBS=$extralibs" >> config.mak
2543
2544 echo "ARCH=$arch" >> config.mak
2545
2546 print_config ARCH_   $TMPH config.mak $ARCH_LIST
2547 print_config HAVE_   $TMPH config.mak $HAVE_LIST
2548 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2549                                       $CONFIG_EXTRA      \
2550                                       $DECODER_LIST      \
2551                                       $ENCODER_LIST      \
2552                                       $HWACCEL_LIST      \
2553                                       $PARSER_LIST       \
2554                                       $BSF_LIST          \
2555                                       $DEMUXER_LIST      \
2556                                       $MUXER_LIST        \
2557                                       $FILTER_LIST       \
2558                                       $PROTOCOL_LIST     \
2559                                       $INDEV_LIST        \
2560                                       $OUTDEV_LIST       \
2561
2562 echo "#define restrict $_restrict" >> $TMPH
2563
2564 if enabled small; then
2565     echo "#define av_always_inline"  >> $TMPH
2566 fi
2567
2568
2569 # Apparently it's not possible to portably echo a backslash.
2570 enabled asmalign_pot &&
2571     printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2572     printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2573
2574 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2575
2576 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2577
2578 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2579 cmp -s $TMPH config.h &&
2580     echo "config.h is unchanged" ||
2581     mv -f $TMPH config.h
2582
2583 # build tree in object directory if source path is different from current one
2584 if enabled source_path_used; then
2585     DIRS="\
2586         doc               \
2587         libavcodec        \
2588         libavcodec/alpha  \
2589         libavcodec/arm    \
2590         libavcodec/bfin   \
2591         libavcodec/mlib   \
2592         libavcodec/ppc    \
2593         libavcodec/sh4    \
2594         libavcodec/sparc  \
2595         libavcodec/x86    \
2596         libavdevice       \
2597         libavfilter       \
2598         libavformat       \
2599         libavutil         \
2600         libpostproc       \
2601         libswscale        \
2602         libswscale/bfin   \
2603         libswscale/mlib   \
2604         libswscale/ppc    \
2605         libswscale/sparc  \
2606         libswscale/x86    \
2607         tests             \
2608         tools             \
2609         "
2610     FILES="\
2611         Makefile             \
2612         common.mak           \
2613         subdir.mak           \
2614         doc/texi2pod.pl      \
2615         libavcodec/Makefile  \
2616         libavdevice/Makefile \
2617         libavfilter/Makefile \
2618         libavformat/Makefile \
2619         libavutil/Makefile   \
2620         libpostproc/Makefile \
2621         libswscale/Makefile  \
2622         "
2623     for dir in $DIRS ; do
2624         mkdir -p $dir
2625     done
2626     for f in $FILES ; do
2627         $ln_s "$source_path/$f" $f
2628     done
2629 fi
2630
2631
2632 # build pkg-config files
2633
2634 pkgconfig_generate(){
2635 name=$1
2636 shortname=${name#lib}${build_suffix}
2637 comment=$2
2638 version=$3
2639 libs=$4
2640 requires=$5
2641 cat <<EOF > $name/$name.pc
2642 prefix=$prefix
2643 exec_prefix=\${prefix}
2644 libdir=$libdir
2645 includedir=$incdir
2646
2647 Name: $name
2648 Description: $comment
2649 Version: $version
2650 Requires: $(disabled shared && echo $requires)
2651 Requires.private: $(enabled shared && echo $requires)
2652 Conflicts:
2653 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2654 Libs.private: $(enabled shared && echo $libs)
2655 Cflags: -I\${includedir}
2656 EOF
2657 cat <<EOF > $name/$name-uninstalled.pc
2658 prefix=
2659 exec_prefix=
2660 libdir=\${pcfiledir}
2661 includedir=${source_path}
2662
2663 Name: $name
2664 Description: $comment
2665 Version: $version
2666 Requires: $requires
2667 Conflicts:
2668 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2669 Cflags: -I\${includedir}
2670 EOF
2671 }
2672
2673 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2674 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2675 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2676 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2677 enabled avfilter &&
2678     pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2679 enabled postproc &&
2680     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2681 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"