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