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