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