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