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