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