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