Merge FreeBSD and DragonFlyBSD OS detection sections.
[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|dragonfly)
1633         disable need_memalign
1634         ;;
1635     bsd/os)
1636         osextralibs="-lpoll -lgnugetopt"
1637         strip="strip -d"
1638         ;;
1639     darwin)
1640         disable need_memalign
1641         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1642         strip="strip -x"
1643         FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1644         SLIBSUF=".dylib"
1645         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1646         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1647         FFSERVERLDFLAGS=-Wl,-bind_at_load
1648         objformat="macho"
1649         enabled x86_64 && objformat="macho64"
1650         ;;
1651     mingw32*)
1652         target_os=mingw32
1653         LIBTARGET=i386
1654         if enabled x86_64; then
1655             disable need_memalign
1656             LIBTARGET=x64
1657         fi
1658         shlibdir_default="$bindir_default"
1659         disable ffserver
1660         SLIBPREF=""
1661         SLIBSUF=".dll"
1662         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1663         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1664         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1665         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1666             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1667         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1668         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'
1669         objformat="win32"
1670         enable dos_paths
1671         check_cflags -fno-common
1672         if ! enabled x86_64; then
1673             check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1674                 die "ERROR: MinGW runtime version must be >= 3.15."
1675             enabled_any avisynth vfwcap_demuxer &&
1676                 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1677                   die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1678             fi
1679         ;;
1680     cygwin*)
1681         target_os=cygwin
1682         shlibdir_default="$bindir_default"
1683         SLIBPREF="cyg"
1684         SLIBSUF=".dll"
1685         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1686         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1687         SHFLAGS='-shared -Wl,--enable-auto-image-base'
1688         objformat="win32"
1689         enable dos_paths
1690         check_cflags -fno-common
1691         ;;
1692     *-dos|freedos|opendos)
1693         disable ffplay ffserver
1694         disable $INDEV_LIST $OUTDEV_LIST
1695         network_extralibs="-lsocket"
1696         objformat="coff"
1697         enable dos_paths
1698         ;;
1699     linux)
1700         enable dv1394
1701         ;;
1702     irix*)
1703         target_os=irix
1704         ranlib="echo ignoring ranlib"
1705         ;;
1706     os/2*)
1707         strip="lxlite"
1708         ln_s="cp -f"
1709         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1710         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1711         FFSERVERLDFLAGS=""
1712         LIBSUF="_s.a"
1713         SLIBPREF=""
1714         SLIBSUF=".dll"
1715         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1716         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1717         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1718           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1719           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1720           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1721           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1722           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1723         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1724           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1725         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1726         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1727         enable dos_paths
1728         ;;
1729     gnu/kfreebsd)
1730         ;;
1731     gnu)
1732         ;;
1733
1734     *)
1735         die "Unknown OS '$target_os'."
1736         ;;
1737 esac
1738
1739 set_default $PATHS_LIST
1740
1741 add_extralibs $osextralibs
1742
1743 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1744 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1745
1746 # we need to build at least one lib type
1747 if ! enabled_any static shared; then
1748     cat <<EOF
1749 At least one library type must be built.
1750 Specify --enable-static to build the static libraries or --enable-shared to
1751 build the shared libraries as well. To only build the shared libraries specify
1752 --disable-static in addition to --enable-shared.
1753 EOF
1754     exit 1;
1755 fi
1756
1757 disabled static && LIBNAME=""
1758
1759 if enabled_any libfaad libfaadbin ; then
1760     if check_header faad.h; then
1761         check_cc <<EOF
1762 #include <faad.h>
1763 #ifndef FAAD2_VERSION
1764 ok faad1
1765 #endif
1766 int main(void) { return 0; }
1767 EOF
1768         test $? = 0 && enable libfaad2
1769     else
1770         die "FAAD test failed."
1771     fi
1772 fi
1773
1774
1775 die_license_disabled() {
1776     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
1777 }
1778
1779 die_license_disabled gpl libfaad2
1780 die_license_disabled gpl libx264
1781 die_license_disabled gpl libxvid
1782 die_license_disabled gpl postproc
1783 die_license_disabled gpl x11grab
1784
1785 die_license_disabled nonfree libamr_nb
1786 die_license_disabled nonfree libamr_wb
1787 die_license_disabled nonfree libfaac
1788
1789 die_license_disabled version3 libopencore_amrnb
1790 die_license_disabled version3 libopencore_amrwb
1791
1792 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
1793
1794 check_deps $ARCH_EXT_LIST
1795
1796 test -z "$need_memalign" && need_memalign="$mmx"
1797
1798 #Darwin CC versions
1799 if test $target_os = darwin; then
1800     if enabled xlc; then
1801         add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1802     else
1803         add_cflags -pipe
1804         check_cflags -force_cpusubtype_ALL
1805         check_cflags -Wno-sign-compare
1806         enabled shared || check_cflags -mdynamic-no-pic
1807     fi
1808 fi
1809
1810 disabled optimizations || check_cflags -fomit-frame-pointer
1811
1812 # Add processor-specific flags
1813 if test $cpu != "generic"; then
1814     warn_altivec(){
1815         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1816     }
1817     case $cpu in
1818         601|ppc601|PowerPC601)
1819             add_cflags -mcpu=601
1820             warn_altivec enabled PPC601
1821         ;;
1822         603*|ppc603*|PowerPC603*)
1823             add_cflags -mcpu=603
1824             warn_altivec enabled PPC603
1825         ;;
1826         604*|ppc604*|PowerPC604*)
1827             add_cflags -mcpu=604
1828             warn_altivec enabled PPC604
1829         ;;
1830         G3|g3|75*|ppc75*|PowerPC75*)
1831             add_cflags -mcpu=750 -mpowerpc-gfxopt
1832             warn_altivec enabled PPC75x
1833         ;;
1834         G4|g4|745*|ppc745*|PowerPC745*)
1835             add_cflags -mcpu=7450 -mpowerpc-gfxopt
1836             warn_altivec disabled PPC745x
1837         ;;
1838         74*|ppc74*|PowerPC74*)
1839             add_cflags -mcpu=7400 -mpowerpc-gfxopt
1840             warn_altivec disabled PPC74xx
1841         ;;
1842         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1843             add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1844             warn_altivec disabled PPC970
1845         ;;
1846         Cell|CELL|cell)
1847             add_cflags -mcpu=cell
1848             warn_altivec disabled Cell
1849             enable ldbrx
1850         ;;
1851         # targets that do NOT support conditional mov (cmov)
1852         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1853             add_cflags -march=$cpu
1854             disable cmov
1855         ;;
1856         # targets that do support conditional mov (cmov)
1857         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1858             add_cflags -march=$cpu
1859             enable cmov
1860             enable fast_cmov
1861         ;;
1862         # targets that do support conditional mov but on which it's slow
1863         pentium4|pentium4m|prescott|nocona)
1864             add_cflags -march=$cpu
1865             enable cmov
1866             disable fast_cmov
1867         ;;
1868         sparc64)
1869             add_cflags -mcpu=v9
1870         ;;
1871         arm11*|cortex*)
1872             add_cflags -mcpu=$cpu
1873             enable fast_unaligned
1874         ;;
1875         armv*)
1876             add_cflags -march=$cpu
1877         ;;
1878         arm*)
1879             add_cflags -mcpu=$cpu
1880         ;;
1881         ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1882             enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1883         ;;
1884         bf*)
1885             add_cflags -mcpu=$cpu
1886         ;;
1887         mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1888             add_cflags -march=$cpu
1889         ;;
1890         *)
1891             echo "WARNING: Unknown CPU \"$cpu\", ignored."
1892         ;;
1893     esac
1894 fi
1895
1896 check_cc <<EOF || die "Symbol mangling check failed."
1897 int ff_extern;
1898 EOF
1899 sym=$($nm -P -g $TMPO | grep ff_extern)
1900 extern_prefix=${sym%%ff_extern*}
1901
1902 check_cc <<EOF && enable inline_asm
1903 void foo(void) { __asm__ volatile ("" ::); }
1904 EOF
1905
1906 if enabled x86; then
1907     # check whether EBP is available on x86
1908     # As 'i' is stored on the stack, this program will crash
1909     # if the base pointer is used to access it because the
1910     # base pointer is cleared in the inline assembly code.
1911     check_exec_crash <<EOF && enable ebp_available
1912     volatile int i=0;
1913     __asm__ volatile (
1914         "xorl %%ebp, %%ebp"
1915     ::: "%ebp");
1916     return i;
1917 EOF
1918
1919     # check wether EBX is available on x86
1920     check_asm ebx_available '"":::"%ebx"'
1921
1922     # check whether more than 10 operands are supported
1923     check_cc <<EOF && enable ten_operands
1924 int main(void) {
1925     int x=0;
1926     __asm__ volatile(
1927         ""
1928         :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1929     );
1930     return 0;
1931 }
1932 EOF
1933
1934     # check whether binutils is new enough to compile SSSE3/MMX2
1935     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1936     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
1937
1938     check_asm bswap '"bswap %%eax" ::: "%eax"'
1939
1940     YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1941     enabled     x86_64        && append YASMFLAGS "-m amd64"
1942     enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1943     case "$objformat" in
1944         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1945         macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1946         *)                    append YASMFLAGS "-DPREFIX"  ;;
1947     esac
1948     disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1949 fi
1950
1951 # check for assembler specific support
1952
1953 enabled mips && check_asm loongson '"dmult.g $1, $2, $3"'
1954
1955 enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1956 enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1957 enabled ppc && check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
1958
1959 # check for SIMD availability
1960
1961 # AltiVec flags: The FSF version of GCC differs from the Apple version
1962 if enabled altivec; then
1963     check_cflags -maltivec -mabi=altivec &&
1964         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1965         check_cflags -faltivec
1966
1967     # check if our compiler supports Motorola AltiVec C API
1968     check_cc <<EOF || disable altivec
1969 $inc_altivec_h
1970 int main(void) {
1971     vector signed int v1, v2, v3;
1972     v1 = vec_add(v2,v3);
1973     return 0;
1974 }
1975 EOF
1976
1977     # check if our compiler supports braces for vector declarations
1978     check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1979 $inc_altivec_h
1980 int main (void) { (vector int) {1}; return 0; }
1981 EOF
1982 fi
1983
1984 # We have to check if pld is a nop and disable it.
1985 enabled arm     && check_asm pld     '"pld [r0]"'
1986 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1987 enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1988 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1989 enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1990 enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1991 enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1992 enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1993 enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1994
1995 enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1996
1997 # ---
1998 # big/little-endian test
1999 check_cc <<EOF || die "endian test failed"
2000 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2001 EOF
2002 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2003
2004 # ---
2005 # check availability of some header files
2006
2007 if check_func dlopen; then
2008     ldl=
2009 elif check_func dlopen -ldl; then
2010     ldl=-ldl
2011 fi
2012
2013 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2014 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2015
2016 check_func  fork
2017 check_func  gethrtime
2018 check_func  getrusage
2019 check_func  inet_aton $network_extralibs
2020 check_func  memalign
2021 check_func  mkstemp
2022 check_func  posix_memalign
2023 check_func_headers io.h setmode
2024 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2025 check_func_headers windows.h GetProcessTimes
2026 check_func_headers windows.h VirtualAlloc
2027
2028 check_header conio.h
2029 check_header dlfcn.h
2030 check_header malloc.h
2031 check_header poll.h
2032 check_header sys/mman.h
2033 check_header sys/resource.h
2034 check_header sys/select.h
2035 check_header termios.h
2036 check_header vdpau/vdpau.h
2037 check_header vdpau/vdpau_x11.h
2038 check_header X11/extensions/XvMClib.h
2039
2040 if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
2041     die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2042 fi
2043
2044 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2045 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2046
2047 # check for some common methods of building with pthread support
2048 # do this before the optional library checks as some of them require pthreads
2049 if enabled pthreads; then
2050     if check_func pthread_create; then
2051         :
2052     elif check_func pthread_create -pthread; then
2053         add_cflags -pthread
2054         add_extralibs -pthread
2055     elif check_func pthread_create -pthreads; then
2056         add_cflags -pthreads
2057         add_extralibs -pthreads
2058     elif check_func pthread_create -lpthreadGC2; then
2059         add_extralibs -lpthreadGC2
2060     elif ! check_lib pthread.h pthread_create -lpthread; then
2061         die "ERROR: can't find pthreads library"
2062     fi
2063 fi
2064
2065 for thread in $THREADS_LIST; do
2066     if enabled $thread; then
2067         test -n "$thread_type" &&
2068             die "ERROR: Only one thread type must be selected." ||
2069             thread_type="$thread"
2070     fi
2071 done
2072
2073 check_lib math.h sin -lm
2074 check_lib va/va.h vaInitialize -lva
2075
2076 # test for C99 functions in math.h
2077 for func in llrint lrint lrintf round roundf truncf; do
2078     check_exec <<EOF && enable $func || disable $func
2079 #include <math.h>
2080 int main(void) { return ($func(3.999f) > 0)?0:1; }
2081 EOF
2082 done
2083
2084 # these are off by default, so fail if requested and not available
2085 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2086 enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Decoder_Interface_init -lamrnb -lm
2087 enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
2088 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2089                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2090                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2091 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2092 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2093 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2094 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2095 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2096 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2097 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2098 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2099 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2100                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2101 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2102 enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2103 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2104 enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
2105                       { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2106                         die "ERROR: libx264 version must be >= 0.65."; }
2107 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2108 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2109
2110 # libdc1394 check
2111 if enabled libdc1394; then
2112     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2113         enable libdc1394_2; } ||
2114     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2115         enable libdc1394_1; } ||
2116     die "ERROR: No version of libdc1394 found "
2117 fi
2118
2119
2120 _restrict=
2121 for restrict_keyword in restrict __restrict__ __restrict; do
2122     check_cc <<EOF && _restrict=$restrict_keyword && break
2123 void foo(char * $restrict_keyword p);
2124 EOF
2125 done
2126
2127 ##########################################
2128 # SDL check
2129
2130 disable sdl_too_old
2131 disable sdl
2132 SDL_CONFIG="${cross_prefix}sdl-config"
2133 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2134     sdl_cflags=$("${SDL_CONFIG}" --cflags)
2135     temp_cflags $sdl_cflags
2136     temp_extralibs $("${SDL_CONFIG}" --libs)
2137     if check_lib2 SDL.h SDL_Init; then
2138         _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2139         if test "$_sdlversion" -lt 121 ; then
2140             enable sdl_too_old
2141         else
2142             enable sdl
2143             check_cc $sdl_cflags <<EOF && enable sdl_video_size
2144 #include <SDL.h>
2145 int main(int argc, char **argv){
2146     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2147     int w = vi->current_w;
2148     return 0;
2149 }
2150 EOF
2151         fi
2152     fi
2153     restore_flags
2154 fi
2155
2156 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2157
2158 ##########################################
2159 # Network check
2160
2161 if enabled network; then
2162     check_type "sys/types.h sys/socket.h" socklen_t
2163     # Prefer arpa/inet.h over winsock2
2164     if check_header arpa/inet.h ; then
2165         check_func closesocket
2166     elif check_header winsock2.h ; then
2167         network_extralibs="-lws2_32"
2168         check_type ws2tcpip.h socklen_t
2169         check_func_headers winsock2.h closesocket
2170     fi
2171 fi
2172
2173 ##########################################
2174 # IPv6 check
2175
2176 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2177 #include <sys/types.h>
2178 #include <sys/socket.h>
2179 #include <netinet/in.h>
2180 #include <netdb.h>
2181 int main(void) {
2182     struct sockaddr_storage saddr;
2183     struct ipv6_mreq mreq6;
2184     getaddrinfo(0,0,0,0);
2185     getnameinfo(0,0,0,0,0,0,0);
2186     IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2187 }
2188 EOF
2189
2190 check_header linux/videodev.h
2191 check_header linux/videodev2.h
2192 check_header sys/videoio.h
2193
2194 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2195
2196 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2197 { check_header dev/bktr/ioctl_meteor.h &&
2198   check_header dev/bktr/ioctl_bt848.h; } ||
2199 { check_header machine/ioctl_meteor.h &&
2200   check_header machine/ioctl_bt848.h; } ||
2201 { check_header dev/video/meteor/ioctl_meteor.h &&
2202   check_header dev/video/bktr/ioctl_bt848.h; } ||
2203 check_header dev/ic/bt8xx.h
2204
2205 check_header sys/soundcard.h
2206 check_header soundcard.h
2207
2208 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2209
2210 check_lib2 jack/jack.h jack_client_open -ljack
2211
2212 # deal with the X11 frame grabber
2213 enabled x11grab                         &&
2214 check_header X11/Xlib.h                 &&
2215 check_header X11/extensions/XShm.h      &&
2216 check_func XOpenDisplay -lX11           &&
2217 check_func XShmCreateImage -lX11 -lXext
2218
2219 enabled debug && add_cflags -g"$debuglevel"
2220
2221 # add some useful compiler flags if supported
2222 check_cflags -Wdeclaration-after-statement
2223 check_cflags -Wall
2224 check_cflags -Wno-switch
2225 check_cflags -Wdisabled-optimization
2226 check_cflags -Wpointer-arith
2227 check_cflags -Wredundant-decls
2228 check_cflags -Wno-pointer-sign
2229 check_cflags -Wcast-qual
2230 check_cflags -Wwrite-strings
2231 check_cflags -Wtype-limits
2232 check_cflags -Wundef
2233 enabled extra_warnings && check_cflags -Winline
2234
2235 # add some linker flags
2236 check_ldflags -Wl,--warn-common
2237 check_ldflags -Wl,--as-needed
2238 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'
2239 check_ldflags -Wl,-Bsymbolic
2240
2241 if enabled small; then
2242     check_cflags -Os            # not all compilers support -Os
2243     optimizations="small"
2244 elif enabled optimizations; then
2245     if enabled xlc; then
2246         add_cflags  -O5
2247         add_ldflags -O5
2248     elif enabled ccc; then
2249         add_cflags -fast
2250     else
2251         add_cflags -O3
2252     fi
2253 fi
2254 check_cflags -fno-math-errno
2255 check_cflags -fno-signed-zeros
2256
2257 # add some flags for Intel C Compiler
2258 if enabled icc; then
2259     # Just warnings, no remarks
2260     check_cflags -w1
2261     # -wd: Disable following warnings
2262     # 144, 167, 556: -Wno-pointer-sign
2263     # 10006: ignoring unknown option -fno-signed-zeros
2264     # 10156: ignoring option '-W'; no argument required
2265     check_cflags -wd144,167,556,10006,10156
2266     # 11030: Warning unknown option --as-needed
2267     # 10156: ignoring option '-export'; no argument required
2268     check_ldflags -wd10156,11030
2269     # Allow to compile with optimizations
2270     check_ldflags -march=$cpu
2271     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2272     enable ebp_available
2273 elif enabled ccc; then
2274     # disable some annoying warnings
2275     add_cflags -msg_disable cvtu32to64
2276     add_cflags -msg_disable embedcomment
2277     add_cflags -msg_disable needconstext
2278     add_cflags -msg_disable nomainieee
2279     add_cflags -msg_disable ptrmismatch1
2280     add_cflags -msg_disable unreachcode
2281 fi
2282
2283 # PIC flags for shared library objects where they are needed
2284 if enabled shared; then
2285     # LIBOBJFLAGS may have already been set in the OS configuration
2286     if test -z "$LIBOBJFLAGS" ; then
2287         case "${subarch-$arch}" in
2288             x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2289         esac
2290     fi
2291 fi
2292
2293 if enabled gprof; then
2294     add_cflags  -p
2295     add_ldflags -p
2296 fi
2297
2298 # Find out if the .align argument is a power of two or not.
2299 check_asm asmalign_pot '".align 3"'
2300
2301 enabled_any $DECODER_LIST      && enable decoders
2302 enabled_any $ENCODER_LIST      && enable encoders
2303 enabled_any $HWACCEL_LIST      && enable hwaccels
2304 enabled_any $BSF_LIST          && enable bsfs
2305 enabled_any $DEMUXER_LIST      && enable demuxers
2306 enabled_any $MUXER_LIST        && enable muxers
2307 enabled_any $FILTER_LIST       && enable filters
2308 enabled_any $INDEV_LIST        && enable demuxers
2309 enabled_any $OUTDEV_LIST       && enable muxers
2310 enabled_any $PROTOCOL_LIST     && enable protocols
2311
2312 enabled_any $THREADS_LIST      && enable threads
2313
2314 check_deps $CONFIG_LIST       \
2315            $CONFIG_EXTRA      \
2316            $HAVE_LIST         \
2317            $DECODER_LIST      \
2318            $ENCODER_LIST      \
2319            $HWACCEL_LIST      \
2320            $PARSER_LIST       \
2321            $BSF_LIST          \
2322            $DEMUXER_LIST      \
2323            $MUXER_LIST        \
2324            $FILTER_LIST       \
2325            $INDEV_LIST        \
2326            $OUTDEV_LIST       \
2327            $PROTOCOL_LIST     \
2328
2329 echo "install prefix            $prefix"
2330 echo "source path               $source_path"
2331 echo "C compiler                $cc"
2332 echo ".align is power-of-two    $asmalign_pot"
2333 echo "ARCH                      $arch ($cpu)"
2334 if test "$build_suffix" != ""; then
2335     echo "build suffix              $build_suffix"
2336 fi
2337 if test "$extra_version" != ""; then
2338     echo "version string suffix     $extra_version"
2339 fi
2340 echo "big-endian                ${bigendian-no}"
2341 echo "runtime cpu detection     ${runtime_cpudetect-no}"
2342 if enabled x86; then
2343     echo "yasm                      ${yasm-no}"
2344     echo "MMX enabled               ${mmx-no}"
2345     echo "MMX2 enabled              ${mmx2-no}"
2346     echo "3DNow! enabled            ${amd3dnow-no}"
2347     echo "3DNow! extended enabled   ${amd3dnowext-no}"
2348     echo "SSE enabled               ${sse-no}"
2349     echo "SSSE3 enabled             ${ssse3-no}"
2350     echo "CMOV enabled              ${cmov-no}"
2351     echo "CMOV is fast              ${fast_cmov-no}"
2352     echo "EBX available             ${ebx_available-no}"
2353     echo "EBP available             ${ebp_available-no}"
2354     echo "10 operands supported     ${ten_operands-no}"
2355 fi
2356 if enabled arm; then
2357     echo "ARMv5TE enabled           ${armv5te-no}"
2358     echo "ARMv6 enabled             ${armv6-no}"
2359     echo "ARMv6T2 enabled           ${armv6t2-no}"
2360     echo "ARM VFP enabled           ${armvfp-no}"
2361     echo "IWMMXT enabled            ${iwmmxt-no}"
2362     echo "NEON enabled              ${neon-no}"
2363 fi
2364 if enabled mips; then
2365     echo "MMI enabled               ${mmi-no}"
2366 fi
2367 if enabled ppc; then
2368     echo "AltiVec enabled           ${altivec-no}"
2369     echo "PPC 4xx optimizations     ${ppc4xx-no}"
2370     echo "dcbzl available           ${dcbzl-no}"
2371     echo "performance report        ${powerpc_perf-no}"
2372 fi
2373 if enabled sparc; then
2374     echo "VIS enabled               ${vis-no}"
2375 fi
2376 echo "gprof enabled             ${gprof-no}"
2377 echo "debug symbols             ${debug-no}"
2378 echo "strip symbols             ${stripping-no}"
2379 echo "optimizations             ${optimizations-no}"
2380 echo "static                    ${static-no}"
2381 echo "shared                    ${shared-no}"
2382 echo "postprocessing support    ${postproc-no}"
2383 echo "new filter support        ${avfilter-no}"
2384 echo "filters using lavformat   ${avfilter_lavf-no}"
2385 echo "network support           ${network-no}"
2386 if enabled network; then
2387     echo "IPv6 support              ${ipv6-no}"
2388 fi
2389 echo "threading support         ${thread_type-no}"
2390 echo "SDL support               ${sdl-no}"
2391 if enabled sdl_too_old; then
2392     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2393 fi
2394 echo "Sun medialib support      ${mlib-no}"
2395 echo "AVISynth enabled          ${avisynth-no}"
2396 echo "libamr-nb support         ${libamr_nb-no}"
2397 echo "libamr-wb support         ${libamr_wb-no}"
2398 echo "libdc1394 support         ${libdc1394-no}"
2399 echo "libdirac enabled          ${libdirac-no}"
2400 echo "libfaac enabled           ${libfaac-no}"
2401 echo "libfaad enabled           ${libfaad-no}"
2402 echo "libfaad dlopened          ${libfaadbin-no}"
2403 echo "libgsm enabled            ${libgsm-no}"
2404 echo "libmp3lame enabled        ${libmp3lame-no}"
2405 echo "libnut enabled            ${libnut-no}"
2406 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2407 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2408 echo "libopenjpeg enabled       ${libopenjpeg-no}"
2409 echo "libschroedinger enabled   ${libschroedinger-no}"
2410 echo "libspeex enabled          ${libspeex-no}"
2411 echo "libtheora enabled         ${libtheora-no}"
2412 echo "libvorbis enabled         ${libvorbis-no}"
2413 echo "libx264 enabled           ${libx264-no}"
2414 echo "libxvid enabled           ${libxvid-no}"
2415 echo "zlib enabled              ${zlib-no}"
2416 echo "bzlib enabled             ${bzlib-no}"
2417 echo
2418
2419 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2420     echo "Enabled ${type}s:"
2421     eval list=\$$(toupper $type)_LIST
2422     for part in $list; do
2423         enabled $part && echo ${part%_*}
2424     done | sort | pr -3 -t
2425     echo
2426 done
2427
2428 license="LGPL version 2.1 or later"
2429 if enabled nonfree; then
2430     license="nonfree and unredistributable"
2431 elif enabled gplv3; then
2432     license="GPL version 3 or later"
2433 elif enabled lgplv3; then
2434     license="LGPL version 3 or later"
2435 elif enabled gpl; then
2436     license="GPL version 2 or later"
2437 fi
2438
2439 echo "License: $license"
2440
2441 echo "Creating config.mak and config.h..."
2442
2443 echo "# Automatically generated by configure - do not modify!" > config.mak
2444 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2445 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2446 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2447 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2448 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2449
2450 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2451 echo "prefix=$prefix" >> config.mak
2452 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2453 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2454 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2455 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2456 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2457 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2458 echo "SRC_PATH=\"$source_path\"" >> config.mak
2459 echo "SRC_PATH_BARE=$source_path" >> config.mak
2460 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2461 echo "CC=$cc" >> config.mak
2462 echo "AS=$as" >> config.mak
2463 echo "YASM=$yasmexe" >> config.mak
2464 echo "AR=$ar" >> config.mak
2465 echo "RANLIB=$ranlib" >> config.mak
2466 echo "LN_S=$ln_s" >> config.mak
2467 enabled stripping &&
2468     echo "STRIP=$strip" >> config.mak ||
2469     echo "STRIP=echo ignoring strip" >> config.mak
2470
2471 echo "OPTFLAGS=$CFLAGS" >> config.mak
2472 echo "LDFLAGS=$LDFLAGS" >> config.mak
2473 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2474 echo "SHFLAGS=$SHFLAGS" >> config.mak
2475 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2476 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2477 echo "BUILD_STATIC=$static" >> config.mak
2478 echo "BUILDSUF=$build_suffix" >> config.mak
2479 echo "FULLNAME=$FULLNAME" >> config.mak
2480 echo "LIBPREF=$LIBPREF" >> config.mak
2481 echo "LIBSUF=$LIBSUF" >> config.mak
2482 echo "LIBNAME=$LIBNAME" >> config.mak
2483 echo "SLIBPREF=$SLIBPREF" >> config.mak
2484 echo "SLIBSUF=$SLIBSUF" >> config.mak
2485 echo "EXESUF=$EXESUF" >> config.mak
2486 echo "EXTRA_VERSION=$extra_version" >> config.mak
2487 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2488 echo "HOSTCC=$host_cc" >> config.mak
2489 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2490 echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2491 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2492 echo "HOSTLIBS=$host_libs" >> config.mak
2493 echo "TARGET_EXEC=$target_exec" >> config.mak
2494 echo "TARGET_PATH=$target_path" >> config.mak
2495
2496 if enabled bigendian; then
2497     echo "WORDS_BIGENDIAN=yes" >> config.mak
2498     echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2499 fi
2500
2501 if enabled sdl; then
2502     echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2503     echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2504 fi
2505 if enabled texi2html; then
2506     echo "BUILD_DOC=yes" >> config.mak
2507 fi
2508
2509 get_version(){
2510     name=$1
2511     file=$source_path/$2
2512     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2513     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2514     lcname=$(tolower $name)
2515     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2516     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2517 }
2518
2519 get_version LIBSWSCALE  libswscale/swscale.h
2520 get_version LIBPOSTPROC libpostproc/postprocess.h
2521 get_version LIBAVCODEC  libavcodec/avcodec.h
2522 get_version LIBAVDEVICE libavdevice/avdevice.h
2523 get_version LIBAVFORMAT libavformat/avformat.h
2524 get_version LIBAVUTIL   libavutil/avutil.h
2525 get_version LIBAVFILTER libavfilter/avfilter.h
2526
2527 if enabled shared; then
2528     echo "BUILD_SHARED=yes" >> config.mak
2529     echo "PIC=-fPIC -DPIC" >> config.mak
2530     echo "LIBTARGET=${LIBTARGET}" >> config.mak
2531     echo "SLIBNAME=${SLIBNAME}" >> config.mak
2532     echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2533     echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2534     echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2535     echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2536     echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2537     echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2538 fi
2539 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2540 echo "EXTRALIBS=$extralibs" >> config.mak
2541
2542 echo "ARCH=$arch" >> config.mak
2543
2544 print_config ARCH_   $TMPH config.mak $ARCH_LIST
2545 print_config HAVE_   $TMPH config.mak $HAVE_LIST
2546 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2547                                       $CONFIG_EXTRA      \
2548                                       $DECODER_LIST      \
2549                                       $ENCODER_LIST      \
2550                                       $HWACCEL_LIST      \
2551                                       $PARSER_LIST       \
2552                                       $BSF_LIST          \
2553                                       $DEMUXER_LIST      \
2554                                       $MUXER_LIST        \
2555                                       $FILTER_LIST       \
2556                                       $PROTOCOL_LIST     \
2557                                       $INDEV_LIST        \
2558                                       $OUTDEV_LIST       \
2559
2560 echo "#define restrict $_restrict" >> $TMPH
2561
2562 if enabled small; then
2563     echo "#define av_always_inline"  >> $TMPH
2564 fi
2565
2566
2567 # Apparently it's not possible to portably echo a backslash.
2568 enabled asmalign_pot &&
2569     printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2570     printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2571
2572 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2573
2574 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2575
2576 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2577 cmp -s $TMPH config.h &&
2578     echo "config.h is unchanged" ||
2579     mv -f $TMPH config.h
2580
2581 # build tree in object directory if source path is different from current one
2582 if enabled source_path_used; then
2583     DIRS="\
2584         doc               \
2585         libavcodec        \
2586         libavcodec/alpha  \
2587         libavcodec/arm    \
2588         libavcodec/bfin   \
2589         libavcodec/mlib   \
2590         libavcodec/ppc    \
2591         libavcodec/sh4    \
2592         libavcodec/sparc  \
2593         libavcodec/x86    \
2594         libavdevice       \
2595         libavfilter       \
2596         libavformat       \
2597         libavutil         \
2598         libpostproc       \
2599         libswscale        \
2600         libswscale/bfin   \
2601         libswscale/mlib   \
2602         libswscale/ppc    \
2603         libswscale/sparc  \
2604         libswscale/x86    \
2605         tests             \
2606         tools             \
2607         "
2608     FILES="\
2609         Makefile             \
2610         common.mak           \
2611         subdir.mak           \
2612         doc/texi2pod.pl      \
2613         libavcodec/Makefile  \
2614         libavdevice/Makefile \
2615         libavfilter/Makefile \
2616         libavformat/Makefile \
2617         libavutil/Makefile   \
2618         libpostproc/Makefile \
2619         libswscale/Makefile  \
2620         "
2621     for dir in $DIRS ; do
2622         mkdir -p $dir
2623     done
2624     for f in $FILES ; do
2625         $ln_s "$source_path/$f" $f
2626     done
2627 fi
2628
2629
2630 # build pkg-config files
2631
2632 pkgconfig_generate(){
2633 name=$1
2634 shortname=${name#lib}${build_suffix}
2635 comment=$2
2636 version=$3
2637 libs=$4
2638 requires=$5
2639 cat <<EOF > $name/$name.pc
2640 prefix=$prefix
2641 exec_prefix=\${prefix}
2642 libdir=$libdir
2643 includedir=$incdir
2644
2645 Name: $name
2646 Description: $comment
2647 Version: $version
2648 Requires: $(disabled shared && echo $requires)
2649 Requires.private: $(enabled shared && echo $requires)
2650 Conflicts:
2651 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2652 Libs.private: $(enabled shared && echo $libs)
2653 Cflags: -I\${includedir}
2654 EOF
2655 cat <<EOF > $name/$name-uninstalled.pc
2656 prefix=
2657 exec_prefix=
2658 libdir=\${pcfiledir}
2659 includedir=${source_path}
2660
2661 Name: $name
2662 Description: $comment
2663 Version: $version
2664 Requires: $requires
2665 Conflicts:
2666 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2667 Cflags: -I\${includedir}
2668 EOF
2669 }
2670
2671 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2672 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2673 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2674 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2675 enabled avfilter &&
2676     pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2677 enabled postproc &&
2678     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2679 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"