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