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