Add VA API deps.
[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 libdc1394_demuxer_deps="libdc1394"
1116 libnut_demuxer_deps="libnut"
1117 libnut_muxer_deps="libnut"
1118 matroska_demuxer_suggest="zlib bzlib"
1119 mov_demuxer_suggest="zlib"
1120 mp3_demuxer_deps="mpegaudio_parser"
1121 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1122 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1123 redir_demuxer_deps="network"
1124 rtp_muxer_deps="network rtp_protocol"
1125 rtsp_demuxer_deps="sdp_demuxer"
1126 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1127 v4l_demuxer_deps="linux_videodev_h"
1128 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1129 vfwcap_demuxer_deps="capCreateCaptureWindow"
1130 vfwcap_demuxer_extralibs="-lvfw32"
1131 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1132 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1133
1134 # protocols
1135 gopher_protocol_deps="network"
1136 http_protocol_deps="network"
1137 rtp_protocol_deps="udp_protocol"
1138 tcp_protocol_deps="network"
1139 udp_protocol_deps="network"
1140
1141 # filters
1142 movie_filter_deps="avfilter_lavf"
1143
1144 # programs
1145 ffplay_deps="sdl"
1146 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1147 ffserver_extralibs='$ldl'
1148
1149
1150 # default parameters
1151
1152 logfile="config.err"
1153
1154 # installation paths
1155 prefix_default="/usr/local"
1156 bindir_default='${prefix}/bin'
1157 datadir_default='${prefix}/share/ffmpeg'
1158 incdir_default='${prefix}/include'
1159 libdir_default='${prefix}/lib'
1160 mandir_default='${prefix}/share/man'
1161 shlibdir_default="$libdir_default"
1162
1163 # toolchain
1164 ar="ar"
1165 cc_default="gcc"
1166 host_cc_default="gcc"
1167 ln_s="ln -sf"
1168 nm_default="nm"
1169 objformat="elf"
1170 ranlib="ranlib"
1171 strip="strip"
1172 yasmexe="yasm"
1173
1174 # machine
1175 arch=$(uname -m)
1176 cpu="generic"
1177
1178 # OS
1179 target_os=$(tolower $(uname -s))
1180 host_os=$target_os
1181
1182 # configurable options
1183 enable debug
1184 enable fastdiv
1185 enable ffmpeg
1186 enable ffplay
1187 enable ffserver
1188 enable ipv6
1189 enable mpegaudio_hp
1190 enable network
1191 enable optimizations
1192 enable protocols
1193 enable static
1194 enable stripping
1195 enable swscale_alpha
1196
1197 # build settings
1198 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1199 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1200 FFSERVERLDFLAGS=-Wl,-E
1201 LIBPREF="lib"
1202 LIBSUF=".a"
1203 FULLNAME='$(NAME)$(BUILDSUF)'
1204 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1205 SLIBPREF="lib"
1206 SLIBSUF=".so"
1207 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1208 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1209 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1210 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1211
1212 host_cflags='-O3 -g -Wall'
1213 host_libs='-lm'
1214
1215 target_path='.'
1216
1217 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1218 # full relative path for objects in subdirectories for non-recursive Make.
1219 DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1220
1221 # find source path
1222 source_path="$(dirname "$0")"
1223 enable source_path_used
1224 if test -z "$source_path" -o "$source_path" = "." ; then
1225     source_path="$(pwd)"
1226     disable source_path_used
1227 else
1228     source_path="$(cd "$source_path"; pwd)"
1229     echo "$source_path" | grep -q '[[:blank:]]' &&
1230         die "Out of tree builds are impossible with whitespace in source path."
1231     test -e "$source_path/config.h" &&
1232         die "Out of tree builds are impossible with config.h in source dir."
1233 fi
1234
1235 for v in "$@"; do
1236     r="${v#*=}"
1237     l="${v%$r}"
1238     test "$r" = "${r#* }" || r="'$r'"
1239     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1240 done
1241
1242 find_things(){
1243     thing=$1
1244     pattern=$2
1245     file=$source_path/$3
1246     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1247 }
1248
1249 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1250 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1251 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1252 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1253 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1254 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1255 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1256 OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1257 INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1258 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1259 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1260
1261 enable $ARCH_EXT_LIST \
1262        $DECODER_LIST \
1263        $ENCODER_LIST \
1264        $HWACCEL_LIST \
1265        $PARSER_LIST \
1266        $BSF_LIST \
1267        $DEMUXER_LIST \
1268        $MUXER_LIST \
1269        $FILTER_LIST \
1270        $PROTOCOL_LIST \
1271        $INDEV_LIST \
1272        $OUTDEV_LIST \
1273
1274 die_unknown(){
1275     echo "Unknown option \"$1\"."
1276     echo "See $0 --help for available options."
1277     exit 1
1278 }
1279
1280 show_list() {
1281     suffix=_$1
1282     shift
1283     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1284     exit 0
1285 }
1286
1287 for opt do
1288     optval="${opt#*=}"
1289     case "$opt" in
1290     --extra-cflags=*) add_cflags $optval
1291     ;;
1292     --extra-ldflags=*) add_ldflags $optval
1293     ;;
1294     --extra-libs=*) add_extralibs $optval
1295     ;;
1296     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1297     ;;
1298     --enable-debug=*) debuglevel="$optval"
1299     ;;
1300     --enable-*=*|--disable-*=*)
1301     eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
1302     case "$thing" in
1303         encoder|decoder|hwaccel|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1304         *) die_unknown "$opt" ;;
1305     esac
1306     ;;
1307     --enable-?*|--disable-?*)
1308     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1309     if is_in $option $COMPONENT_LIST; then
1310         eval $action \$$(toupper ${option%s})_LIST
1311     elif is_in $option $CMDLINE_SELECT; then
1312         $action $option
1313     else
1314         die_unknown $opt
1315     fi
1316     ;;
1317     --list-*)
1318         NAME="${opt#--list-}"
1319         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1320         NAME=${NAME%s}
1321         eval show_list $NAME \$$(toupper $NAME)_LIST
1322     ;;
1323     --help|-h) show_help
1324     ;;
1325     *)
1326     optname="${opt%%=*}"
1327     optname="${optname#--}"
1328     optname=$(echo "$optname" | sed 's/-/_/g')
1329     is_in $optname $CMDLINE_SET || die_unknown $opt
1330     eval $optname='$optval'
1331     ;;
1332     esac
1333 done
1334
1335 disabled logging && logfile=/dev/null
1336
1337 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1338 set >> $logfile
1339
1340 test -n "$cross_prefix" && enable cross_compile
1341
1342 ar="${cross_prefix}${ar}"
1343 cc_default="${cross_prefix}${cc_default}"
1344 nm_default="${cross_prefix}${nm_default}"
1345 ranlib="${cross_prefix}${ranlib}"
1346 strip="${cross_prefix}${strip}"
1347
1348 sysinclude_default="${sysroot}/usr/include"
1349
1350 set_default cc nm sysinclude
1351 as_default=$cc
1352 enabled cross_compile || host_cc_default=$cc
1353 set_default host_cc
1354
1355 exesuf() {
1356     case $1 in
1357         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1358     esac
1359 }
1360
1361 EXESUF=$(exesuf $target_os)
1362 HOSTEXESUF=$(exesuf $host_os)
1363
1364 # set temporary file name
1365 : ${TMPDIR:=$TEMPDIR}
1366 : ${TMPDIR:=$TMP}
1367 : ${TMPDIR:=/tmp}
1368
1369 if ! check_cmd type mktemp; then
1370     # simple replacement for missing mktemp
1371     # NOT SAFE FOR GENERAL USE
1372     mktemp(){
1373         echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1374     }
1375 fi
1376
1377 tmpfile(){
1378     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1379         (set -C; exec > $tmp) 2>/dev/null ||
1380         die "Unable to create temoporary file in $TMPDIR."
1381     append TMPFILES $tmp
1382     eval $1=$tmp
1383 }
1384
1385 trap 'rm -f -- $TMPFILES' EXIT
1386 trap exit HUP INT TERM
1387
1388 tmpfile TMPC  .c
1389 tmpfile TMPE  $EXESUF
1390 tmpfile TMPH  .h
1391 tmpfile TMPO  .o
1392 tmpfile TMPS  .S
1393 tmpfile TMPSH .sh
1394
1395 unset -f mktemp
1396
1397 # make sure we can execute files in $TMPDIR
1398 cat > $TMPSH 2>> $logfile <<EOF
1399 #! /bin/sh
1400 EOF
1401 chmod +x $TMPSH >> $logfile 2>&1
1402 if ! $TMPSH >> $logfile 2>&1; then
1403     cat <<EOF
1404 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1405 variable to another directory and make sure that it is not mounted noexec.
1406 EOF
1407     die "Sanity test failed."
1408 fi
1409
1410 if   $cc --version 2>/dev/null | grep -qi gcc; then
1411     cc_type=gcc
1412 elif $cc --version 2>/dev/null | grep -q Intel; then
1413     cc_type=icc
1414 elif $cc -v 2>&1 | grep -q xlc; then
1415     cc_type=xlc
1416 elif $cc -V 2>/dev/null | grep -q Compaq; then
1417     cc_type=ccc
1418     DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1419     debuglevel=3
1420     add_ldflags -Wl,-z,now # calls to libots crash without this
1421 elif $cc --vsn 2>/dev/null | grep -q RVCT; then
1422     test -d "$sysroot" || die "No valid sysroot specified."
1423     cc_type=armcc
1424     armcc_conf="$PWD/armcc.conf"
1425     $cc --arm_linux_configure                 \
1426         --arm_linux_config_file="$armcc_conf" \
1427         --configure_sysroot="$sysroot"        \
1428         --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1429         die "Error creating armcc configuration file."
1430     cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1431     as_default="${cross_prefix}gcc"
1432 fi
1433
1434 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1435
1436 set_default as
1437
1438 if test -n "$sysroot"; then
1439     case "$cc_type" in
1440         gcc)
1441             add_cflags  --sysroot="$sysroot"
1442             add_ldflags --sysroot="$sysroot"
1443         ;;
1444     esac
1445 fi
1446
1447 # compiler sanity check
1448 check_exec <<EOF
1449 int main(void){ return 0; }
1450 EOF
1451 if test "$?" != 0; then
1452     echo "$cc is unable to create an executable file."
1453     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1454         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1455         echo "Only do this if you know what cross compiling means."
1456     fi
1457     die "C compiler test failed."
1458 fi
1459
1460 check_cflags -std=c99
1461 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1462 #include <stdlib.h>
1463 EOF
1464 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1465 #include <stdlib.h>
1466 EOF
1467
1468 case "$arch" in
1469     alpha)
1470         arch="alpha"
1471         enable fast_64bit
1472         check_cflags -mieee
1473     ;;
1474     arm|armv[4567]*l)
1475         arch="arm"
1476     ;;
1477     avr32)
1478     ;;
1479     bfin)
1480         arch="bfin"
1481     ;;
1482     ia64)
1483         arch="ia64"
1484         enable fast_64bit
1485     ;;
1486     m68k)
1487         arch="m68k"
1488     ;;
1489     mips|mipsel|IP*)
1490         arch="mips"
1491     ;;
1492     mips64)
1493         arch="mips"
1494         enable fast_64bit
1495     ;;
1496     parisc|hppa)
1497         arch="parisc"
1498     ;;
1499     parisc64|hppa64)
1500         arch="parisc"
1501         enable fast_64bit
1502     ;;
1503     "Power Macintosh"|ppc|powerpc)
1504         arch="ppc"
1505         enable fast_unaligned
1506     ;;
1507     ppc64)
1508         arch="ppc"
1509         enable fast_64bit
1510         enable fast_unaligned
1511     ;;
1512     s390|s390x)
1513         arch="s390"
1514     ;;
1515     sh4|sh)
1516         arch="sh4"
1517     ;;
1518     sparc)
1519         arch="sparc"
1520     ;;
1521     sun4u|sparc64)
1522         arch="sparc"
1523         subarch="sparc64"
1524         enable fast_64bit
1525     ;;
1526     i386|i486|i586|i686|i86pc|BePC)
1527         arch="x86"
1528         subarch="x86_32"
1529         enable fast_unaligned
1530     ;;
1531     x86_64|amd64)
1532         arch="x86"
1533         subarch="x86_32"
1534         enable cmov
1535         enable fast_cmov
1536         enable fast_unaligned
1537         check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1538         int test[sizeof(char*) - 7];
1539 EOF
1540     ;;
1541     *)
1542         arch="unknown"
1543     ;;
1544 esac
1545
1546 enable $arch $subarch
1547
1548 # OS specific
1549 case $target_os in
1550     beos|haiku|zeta)
1551         prefix_default="$HOME/config"
1552         # helps building libavcodec
1553         add_cflags -DPIC -fomit-frame-pointer
1554         # 3 gcc releases known for BeOS, each with ugly bugs
1555         gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1556         case "$gcc_version" in
1557           2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1558             disable mmx
1559             ;;
1560           *20010315*) echo "BeBits gcc"
1561             add_cflags -fno-expensive-optimizations
1562             ;;
1563         esac
1564         SHFLAGS=-nostart
1565         # enable BeOS things
1566         enable audio_beos
1567         # no need for libm, but the inet stuff
1568         # Check for BONE
1569         # XXX: actually should check for NOT net_server
1570         if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1571             network_extralibs="-lbind -lsocket"
1572         else
1573             enable beos_netserver
1574             network_extralibs="-lnet"
1575         fi ;;
1576     sunos)
1577         FFSERVERLDFLAGS=""
1578         SHFLAGS='-shared -Wl,-h,$$(@F)'
1579         network_extralibs="-lsocket -lnsl"
1580         add_cflags -D__EXTENSIONS__
1581         ;;
1582     netbsd)
1583         oss_demuxer_extralibs="-lossaudio"
1584         oss_muxer_extralibs="-lossaudio"
1585         ;;
1586     openbsd)
1587         disable need_memalign
1588         LIBOBJFLAGS='$(PIC)'
1589         SHFLAGS='-shared'
1590         oss_demuxer_extralibs="-lossaudio"
1591         oss_muxer_extralibs="-lossaudio"
1592         ;;
1593     freebsd)
1594         disable need_memalign
1595         ;;
1596     bsd/os)
1597         osextralibs="-lpoll -lgnugetopt"
1598         strip="strip -d"
1599         ;;
1600     darwin)
1601         disable need_memalign
1602         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1603         strip="strip -x"
1604         FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1605         SLIBSUF=".dylib"
1606         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1607         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1608         FFSERVERLDFLAGS=-Wl,-bind_at_load
1609         objformat="macho"
1610         enabled x86_64 && objformat="macho64"
1611         ;;
1612     mingw32*)
1613         target_os=mingw32
1614         LIBTARGET=i386
1615         if enabled x86_64; then
1616             disable need_memalign
1617             LIBTARGET=x64
1618         fi
1619         shlibdir_default="$bindir_default"
1620         disable ffserver
1621         SLIBPREF=""
1622         SLIBSUF=".dll"
1623         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1624         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1625         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1626         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1627             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1628         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1629         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'
1630         objformat="win32"
1631         enable dos_paths
1632         if ! enabled x86_64; then
1633             check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1634                 die "ERROR: MinGW runtime version must be >= 3.15."
1635             enabled_any avisynth vfwcap_demuxer &&
1636                 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1637                   die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1638             fi
1639         ;;
1640     cygwin*)
1641         target_os=cygwin
1642         shlibdir_default="$bindir_default"
1643         SLIBPREF="cyg"
1644         SLIBSUF=".dll"
1645         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1646         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1647         SHFLAGS='-shared -Wl,--enable-auto-image-base'
1648         objformat="win32"
1649         enable dos_paths
1650         ;;
1651     *-dos|freedos|opendos)
1652         disable ffplay ffserver
1653         disable $INDEV_LIST $OUTDEV_LIST
1654         network_extralibs="-lsocket"
1655         objformat="coff"
1656         enable dos_paths
1657         ;;
1658     linux)
1659         enable dv1394
1660         ;;
1661     irix*)
1662         target_os=irix
1663         ranlib="echo ignoring ranlib"
1664         ;;
1665     os/2*)
1666         strip="lxlite"
1667         ln_s="cp -f"
1668         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1669         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1670         FFSERVERLDFLAGS=""
1671         LIBSUF="_s.a"
1672         SLIBPREF=""
1673         SLIBSUF=".dll"
1674         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1675         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1676         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1677           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1678           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1679           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1680           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1681           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1682         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1683           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1684         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1685         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1686         enable dos_paths
1687         ;;
1688
1689     *)
1690         die "Unknown OS '$target_os'."
1691         ;;
1692 esac
1693
1694 set_default $PATHS_LIST
1695
1696 add_extralibs $osextralibs
1697
1698 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1699 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1700
1701 # we need to build at least one lib type
1702 if ! enabled_any static shared; then
1703     cat <<EOF
1704 At least one library type must be built.
1705 Specify --enable-static to build the static libraries or --enable-shared to
1706 build the shared libraries as well. To only build the shared libraries specify
1707 --disable-static in addition to --enable-shared.
1708 EOF
1709     exit 1;
1710 fi
1711
1712 disabled static && LIBNAME=""
1713
1714 if enabled_any libfaad libfaadbin ; then
1715     if check_header faad.h; then
1716         check_cc <<EOF
1717 #include <faad.h>
1718 #ifndef FAAD2_VERSION
1719 ok faad1
1720 #endif
1721 int main(void) { return 0; }
1722 EOF
1723         test $? = 0 && enable libfaad2
1724     else
1725         die "FAAD test failed."
1726     fi
1727 fi
1728
1729
1730 if ! enabled gpl; then
1731     die_gpl_disabled(){
1732         name=$1
1733         shift
1734         enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1735     }
1736     die_gpl_disabled "The Postprocessing code" postproc
1737     die_gpl_disabled "libx264"                 libx264
1738     die_gpl_disabled "libxvidcore"             libxvid
1739     die_gpl_disabled "FAAD2"                   libfaad2
1740     die_gpl_disabled "The X11 grabber"         x11grab
1741 fi
1742
1743 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1744     die "libamr is nonfree and --enable-nonfree is not specified."
1745 fi
1746
1747 check_deps $ARCH_EXT_LIST
1748
1749 test -z "$need_memalign" && need_memalign="$mmx"
1750
1751 #Darwin CC versions
1752 if test $target_os = darwin; then
1753     if enabled xlc; then
1754         add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1755     else
1756         add_cflags -pipe
1757         check_cflags -force_cpusubtype_ALL
1758         check_cflags -Wno-sign-compare
1759         enabled shared || check_cflags -mdynamic-no-pic
1760     fi
1761 fi
1762
1763 disabled optimizations || check_cflags -fomit-frame-pointer
1764
1765 # Add processor-specific flags
1766 if test $cpu != "generic"; then
1767     warn_altivec(){
1768         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1769     }
1770     case $cpu in
1771         601|ppc601|PowerPC601)
1772             add_cflags -mcpu=601
1773             warn_altivec enabled PPC601
1774         ;;
1775         603*|ppc603*|PowerPC603*)
1776             add_cflags -mcpu=603
1777             warn_altivec enabled PPC603
1778         ;;
1779         604*|ppc604*|PowerPC604*)
1780             add_cflags -mcpu=604
1781             warn_altivec enabled PPC604
1782         ;;
1783         G3|g3|75*|ppc75*|PowerPC75*)
1784             add_cflags -mcpu=750 -mpowerpc-gfxopt
1785             warn_altivec enabled PPC75x
1786         ;;
1787         G4|g4|745*|ppc745*|PowerPC745*)
1788             add_cflags -mcpu=7450 -mpowerpc-gfxopt
1789             warn_altivec disabled PPC745x
1790         ;;
1791         74*|ppc74*|PowerPC74*)
1792             add_cflags -mcpu=7400 -mpowerpc-gfxopt
1793             warn_altivec disabled PPC74xx
1794         ;;
1795         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1796             add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1797             warn_altivec disabled PPC970
1798             enable ppc64
1799         ;;
1800         Cell|CELL|cell)
1801             add_cflags -mcpu=cell
1802             warn_altivec disabled Cell
1803             enable ppc64
1804         ;;
1805         # targets that do NOT support conditional mov (cmov)
1806         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1807             add_cflags -march=$cpu
1808             disable cmov
1809         ;;
1810         # targets that do support conditional mov (cmov)
1811         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1812             add_cflags -march=$cpu
1813             enable cmov
1814             enable fast_cmov
1815         ;;
1816         # targets that do support conditional mov but on which it's slow
1817         pentium4|pentium4m|prescott|nocona)
1818             add_cflags -march=$cpu
1819             enable cmov
1820             disable fast_cmov
1821         ;;
1822         sparc64)
1823             add_cflags -mcpu=v9
1824         ;;
1825         arm11*|cortex*)
1826             add_cflags -mcpu=$cpu
1827             enable fast_unaligned
1828         ;;
1829         armv*)
1830             add_cflags -march=$cpu
1831         ;;
1832         arm*)
1833             add_cflags -mcpu=$cpu
1834         ;;
1835         ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1836             enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1837         ;;
1838         *)
1839             echo "WARNING: Unknown CPU \"$cpu\", ignored."
1840         ;;
1841     esac
1842 fi
1843
1844 check_cc <<EOF || die "Symbol mangling check failed."
1845 int ff_extern;
1846 EOF
1847 sym=$($nm -P -g $TMPO | grep ff_extern)
1848 extern_prefix=${sym%%ff_extern*}
1849
1850 check_cc <<EOF && enable inline_asm
1851 void foo(void) { __asm__ volatile ("" ::); }
1852 EOF
1853
1854 if enabled x86; then
1855     # check whether EBP is available on x86
1856     # As 'i' is stored on the stack, this program will crash
1857     # if the base pointer is used to access it because the
1858     # base pointer is cleared in the inline assembly code.
1859     check_exec_crash <<EOF && enable ebp_available
1860     volatile int i=0;
1861     __asm__ volatile (
1862         "xorl %%ebp, %%ebp"
1863     ::: "%ebp");
1864     return i;
1865 EOF
1866
1867     # check wether EBX is available on x86
1868     check_asm ebx_available '"":::"%ebx"'
1869
1870     # check whether more than 10 operands are supported
1871     check_cc <<EOF && enable ten_operands
1872 int main(void) {
1873     int x=0;
1874     __asm__ volatile(
1875         ""
1876         :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1877     );
1878     return 0;
1879 }
1880 EOF
1881
1882     # check whether binutils is new enough to compile SSSE3/MMX2
1883     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1884     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
1885
1886     check_asm bswap '"bswap %%eax" ::: "%eax"'
1887
1888     YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1889     enabled     x86_64        && append YASMFLAGS "-m amd64"
1890     enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1891     case "$objformat" in
1892         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1893         macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1894         *)                    append YASMFLAGS "-DPREFIX"  ;;
1895     esac
1896     disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1897 fi
1898
1899 # check for assembler specific support
1900
1901 enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1902 enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1903
1904 # check for SIMD availability
1905
1906 # AltiVec flags: The FSF version of GCC differs from the Apple version
1907 if enabled altivec; then
1908     check_cflags -maltivec -mabi=altivec &&
1909         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1910         check_cflags -faltivec
1911
1912     # check if our compiler supports Motorola AltiVec C API
1913     check_cc <<EOF || disable altivec
1914 $inc_altivec_h
1915 int main(void) {
1916     vector signed int v1, v2, v3;
1917     v1 = vec_add(v2,v3);
1918     return 0;
1919 }
1920 EOF
1921
1922     # check if our compiler supports braces for vector declarations
1923     check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1924 $inc_altivec_h
1925 int main (void) { (vector int) {1}; return 0; }
1926 EOF
1927 fi
1928
1929 # We have to check if pld is a nop and disable it.
1930 enabled arm     && check_asm pld     '"pld [r0]"'
1931 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1932 enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1933 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1934 enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1935 enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1936 enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1937 enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1938 enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1939
1940 enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1941
1942 # ---
1943 # big/little-endian test
1944 check_cc <<EOF || die "endian test failed"
1945 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1946 EOF
1947 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1948
1949 # ---
1950 # check availability of some header files
1951
1952 if check_func dlopen; then
1953     ldl=
1954 elif check_func dlopen -ldl; then
1955     ldl=-ldl
1956 fi
1957
1958 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1959 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1960
1961 check_func  fork
1962 check_func  gethrtime
1963 check_func  getrusage
1964 check_func  inet_aton $network_extralibs
1965 check_func  memalign
1966 check_func  mkstemp
1967 check_func  posix_memalign
1968 check_func_headers io.h setmode
1969 check_func_headers windows.h GetProcessTimes
1970 check_func_headers windows.h VirtualAlloc
1971
1972 check_header conio.h
1973 check_header dlfcn.h
1974 check_header malloc.h
1975 check_header poll.h
1976 check_header sys/mman.h
1977 check_header sys/resource.h
1978 check_header sys/select.h
1979 check_header termios.h
1980 check_header vdpau/vdpau.h
1981 check_header vdpau/vdpau_x11.h
1982 check_header X11/extensions/XvMClib.h
1983
1984 if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1985     die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1986 fi
1987
1988 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
1989 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1990
1991 # check for some common methods of building with pthread support
1992 # do this before the optional library checks as some of them require pthreads
1993 if enabled pthreads; then
1994     if check_func pthread_create; then
1995         :
1996     elif check_func pthread_create -pthread; then
1997         add_cflags -pthread
1998         add_extralibs -pthread
1999     elif check_func pthread_create -pthreads; then
2000         add_cflags -pthreads
2001         add_extralibs -pthreads
2002     elif check_func pthread_create -lpthreadGC2; then
2003         add_extralibs -lpthreadGC2
2004     elif ! check_lib pthread.h pthread_create -lpthread; then
2005         die "ERROR: can't find pthreads library"
2006     fi
2007 fi
2008
2009 for thread in $THREADS_LIST; do
2010     if enabled $thread; then
2011         test -n "$thread_type" &&
2012             die "ERROR: Only one thread type must be selected." ||
2013             thread_type="$thread"
2014     fi
2015 done
2016
2017 check_lib math.h sin -lm
2018 check_lib va/va.h vaInitialize -lva
2019
2020 # test for C99 functions in math.h
2021 for func in llrint lrint lrintf round roundf truncf; do
2022     check_exec <<EOF && enable $func || disable $func
2023 #include <math.h>
2024 int main(void) { return ($func(3.999f) > 0)?0:1; }
2025 EOF
2026 done
2027
2028 # these are off by default, so fail if requested and not available
2029 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2030 enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
2031 enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
2032 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2033                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2034                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2035 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2036 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2037 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2038 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2039 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2040 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2041 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2042                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2043 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2044 enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2045 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2046 enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
2047                       { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2048                         die "ERROR: libx264 version must be >= 0.65."; }
2049 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2050 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2051
2052 # libdc1394 check
2053 if enabled libdc1394; then
2054     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2055         enable libdc1394_2; } ||
2056     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2057         enable libdc1394_1; } ||
2058     die "ERROR: No version of libdc1394 found "
2059 fi
2060
2061
2062 _restrict=
2063 for restrict_keyword in restrict __restrict__ __restrict; do
2064     check_cc <<EOF && _restrict=$restrict_keyword && break
2065 void foo(char * $restrict_keyword p);
2066 EOF
2067 done
2068
2069 ##########################################
2070 # SDL check
2071
2072 disable sdl_too_old
2073 disable sdl
2074 SDL_CONFIG="${cross_prefix}sdl-config"
2075 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2076     sdl_cflags=$("${SDL_CONFIG}" --cflags)
2077     temp_cflags $sdl_cflags
2078     temp_extralibs $("${SDL_CONFIG}" --libs)
2079     if check_lib2 SDL.h SDL_Init; then
2080         _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2081         if test "$_sdlversion" -lt 121 ; then
2082             enable sdl_too_old
2083         else
2084             enable sdl
2085             check_cc $sdl_cflags <<EOF && enable sdl_video_size
2086 #include <SDL.h>
2087 int main(int argc, char **argv){
2088     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2089     int w = vi->current_w;
2090     return 0;
2091 }
2092 EOF
2093         fi
2094     fi
2095     restore_flags
2096 fi
2097
2098 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2099
2100 ##########################################
2101 # Network check
2102
2103 if enabled network; then
2104     check_type "sys/types.h sys/socket.h" socklen_t
2105     # Prefer arpa/inet.h over winsock2
2106     if check_header arpa/inet.h ; then
2107         check_func closesocket
2108     elif check_header winsock2.h ; then
2109         network_extralibs="-lws2_32"
2110         check_type ws2tcpip.h socklen_t
2111         check_func_headers winsock2.h closesocket
2112     fi
2113 fi
2114
2115 ##########################################
2116 # IPv6 check
2117
2118 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2119 #include <sys/types.h>
2120 #include <sys/socket.h>
2121 #include <netinet/in.h>
2122 #include <netdb.h>
2123 int main(void) {
2124     struct sockaddr_storage saddr;
2125     struct ipv6_mreq mreq6;
2126     getaddrinfo(0,0,0,0);
2127     getnameinfo(0,0,0,0,0,0,0);
2128     IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2129 }
2130 EOF
2131
2132 check_header linux/videodev.h
2133 check_header linux/videodev2.h
2134 check_header sys/videoio.h
2135
2136 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2137
2138 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2139 { check_header dev/bktr/ioctl_meteor.h &&
2140   check_header dev/bktr/ioctl_bt848.h; } ||
2141 { check_header machine/ioctl_meteor.h &&
2142   check_header machine/ioctl_bt848.h; } ||
2143 { check_header dev/video/meteor/ioctl_meteor.h &&
2144   check_header dev/video/bktr/ioctl_bt848.h; } ||
2145 check_header dev/ic/bt8xx.h
2146
2147 check_header sys/soundcard.h
2148 check_header soundcard.h
2149
2150 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2151
2152 # deal with the X11 frame grabber
2153 enabled x11grab                         &&
2154 check_header X11/Xlib.h                 &&
2155 check_header X11/extensions/XShm.h      &&
2156 check_func XOpenDisplay -lX11           &&
2157 check_func XShmCreateImage -lX11 -lXext
2158
2159 enabled debug && add_cflags -g"$debuglevel"
2160
2161 # add some useful compiler flags if supported
2162 check_cflags -Wdeclaration-after-statement
2163 check_cflags -Wall
2164 check_cflags -Wno-switch
2165 check_cflags -Wdisabled-optimization
2166 check_cflags -Wpointer-arith
2167 check_cflags -Wredundant-decls
2168 check_cflags -Wno-pointer-sign
2169 check_cflags -Wcast-qual
2170 check_cflags -Wwrite-strings
2171 check_cflags -Wtype-limits
2172 check_cflags -Wundef
2173 enabled extra_warnings && check_cflags -Winline
2174
2175 # add some linker flags
2176 check_ldflags -Wl,--warn-common
2177 check_ldflags -Wl,--as-needed
2178 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'
2179 check_ldflags -Wl,-Bsymbolic
2180
2181 if enabled small; then
2182     check_cflags -Os            # not all compilers support -Os
2183     optimizations="small"
2184 elif enabled optimizations; then
2185     if enabled xlc; then
2186         add_cflags  -O5
2187         add_ldflags -O5
2188     elif enabled ccc; then
2189         add_cflags -fast
2190     else
2191         add_cflags -O3
2192     fi
2193 fi
2194 check_cflags -fno-math-errno
2195 check_cflags -fno-signed-zeros
2196
2197 # add some flags for Intel C Compiler
2198 if enabled icc; then
2199     # Just warnings, no remarks
2200     check_cflags -w1
2201     # -wd: Disable following warnings
2202     # 144, 167, 556: -Wno-pointer-sign
2203     # 10006: ignoring unknown option -fno-signed-zeros
2204     # 10156: ignoring option '-W'; no argument required
2205     check_cflags -wd144,167,556,10006,10156
2206     # 11030: Warning unknown option --as-needed
2207     # 10156: ignoring option '-export'; no argument required
2208     check_ldflags -wd10156,11030
2209     # Allow to compile with optimizations
2210     check_ldflags -march=$cpu
2211     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2212     enable ebp_available
2213 elif enabled ccc; then
2214     # disable some annoying warnings
2215     add_cflags -msg_disable cvtu32to64
2216     add_cflags -msg_disable embedcomment
2217     add_cflags -msg_disable needconstext
2218     add_cflags -msg_disable nomainieee
2219     add_cflags -msg_disable ptrmismatch1
2220     add_cflags -msg_disable unreachcode
2221 fi
2222
2223 # PIC flags for shared library objects where they are needed
2224 if enabled shared; then
2225     # LIBOBJFLAGS may have already been set in the OS configuration
2226     if test -z "$LIBOBJFLAGS" ; then
2227         case "${subarch-$arch}" in
2228             x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2229         esac
2230     fi
2231 fi
2232
2233 if enabled gprof; then
2234     add_cflags  -p
2235     add_ldflags -p
2236 fi
2237
2238 # Find out if the .align argument is a power of two or not.
2239 check_asm asmalign_pot '".align 3"'
2240
2241 enabled_any $DECODER_LIST      && enable decoders
2242 enabled_any $ENCODER_LIST      && enable encoders
2243 enabled_any $HWACCEL_LIST      && enable hwaccels
2244 enabled_any $BSF_LIST          && enable bsfs
2245 enabled_any $DEMUXER_LIST      && enable demuxers
2246 enabled_any $MUXER_LIST        && enable muxers
2247 enabled_any $FILTER_LIST       && enable filters
2248 enabled_any $INDEV_LIST        && enable demuxers
2249 enabled_any $OUTDEV_LIST       && enable muxers
2250 enabled_any $PROTOCOL_LIST     && enable protocols
2251
2252 enabled_any $THREADS_LIST      && enable threads
2253
2254 check_deps $CONFIG_LIST       \
2255            $CONFIG_EXTRA      \
2256            $HAVE_LIST         \
2257            $DECODER_LIST      \
2258            $ENCODER_LIST      \
2259            $HWACCEL_LIST      \
2260            $PARSER_LIST       \
2261            $BSF_LIST          \
2262            $DEMUXER_LIST      \
2263            $MUXER_LIST        \
2264            $FILTER_LIST       \
2265            $INDEV_LIST        \
2266            $OUTDEV_LIST       \
2267            $PROTOCOL_LIST     \
2268
2269 echo "install prefix            $prefix"
2270 echo "source path               $source_path"
2271 echo "C compiler                $cc"
2272 echo ".align is power-of-two    $asmalign_pot"
2273 echo "ARCH                      $arch ($cpu)"
2274 if test "$build_suffix" != ""; then
2275     echo "build suffix              $build_suffix"
2276 fi
2277 if test "$extra_version" != ""; then
2278     echo "version string suffix     $extra_version"
2279 fi
2280 echo "big-endian                ${bigendian-no}"
2281 if enabled x86; then
2282     echo "yasm                      ${yasm-no}"
2283     echo "MMX enabled               ${mmx-no}"
2284     echo "MMX2 enabled              ${mmx2-no}"
2285     echo "3DNow! enabled            ${amd3dnow-no}"
2286     echo "3DNow! extended enabled   ${amd3dnowext-no}"
2287     echo "SSE enabled               ${sse-no}"
2288     echo "SSSE3 enabled             ${ssse3-no}"
2289     echo "CMOV enabled              ${cmov-no}"
2290     echo "CMOV is fast              ${fast_cmov-no}"
2291     echo "EBX available             ${ebx_available-no}"
2292     echo "EBP available             ${ebp_available-no}"
2293     echo "10 operands supported     ${ten_operands-no}"
2294 fi
2295 if enabled arm; then
2296     echo "ARMv5TE enabled           ${armv5te-no}"
2297     echo "ARMv6 enabled             ${armv6-no}"
2298     echo "ARMv6T2 enabled           ${armv6t2-no}"
2299     echo "ARM VFP enabled           ${armvfp-no}"
2300     echo "IWMMXT enabled            ${iwmmxt-no}"
2301     echo "NEON enabled              ${neon-no}"
2302 fi
2303 if enabled mips; then
2304     echo "MMI enabled               ${mmi-no}"
2305 fi
2306 if enabled ppc; then
2307     echo "AltiVec enabled           ${altivec-no}"
2308     echo "PPC 4xx optimizations     ${ppc4xx-no}"
2309     echo "dcbzl available           ${dcbzl-no}"
2310     echo "performance report        ${powerpc_perf-no}"
2311 fi
2312 if enabled sparc; then
2313     echo "VIS enabled               ${vis-no}"
2314 fi
2315 echo "gprof enabled             ${gprof-no}"
2316 echo "debug symbols             ${debug-no}"
2317 echo "strip symbols             ${stripping-no}"
2318 echo "optimizations             ${optimizations-no}"
2319 echo "static                    ${static-no}"
2320 echo "shared                    ${shared-no}"
2321 echo "postprocessing support    ${postproc-no}"
2322 echo "new filter support        ${avfilter-no}"
2323 echo "filters using lavformat   ${avfilter_lavf-no}"
2324 echo "network support           ${network-no}"
2325 if enabled network; then
2326     echo "IPv6 support              ${ipv6-no}"
2327 fi
2328 echo "threading support         ${thread_type-no}"
2329 echo "SDL support               ${sdl-no}"
2330 if enabled sdl_too_old; then
2331     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2332 fi
2333 echo "Sun medialib support      ${mlib-no}"
2334 echo "AVISynth enabled          ${avisynth-no}"
2335 echo "libamr-nb support         ${libamr_nb-no}"
2336 echo "libamr-wb support         ${libamr_wb-no}"
2337 echo "libdc1394 support         ${libdc1394-no}"
2338 echo "libdirac enabled          ${libdirac-no}"
2339 echo "libfaac enabled           ${libfaac-no}"
2340 echo "libfaad enabled           ${libfaad-no}"
2341 echo "libfaad dlopened          ${libfaadbin-no}"
2342 echo "libgsm enabled            ${libgsm-no}"
2343 echo "libmp3lame enabled        ${libmp3lame-no}"
2344 echo "libnut enabled            ${libnut-no}"
2345 echo "libopenjpeg enabled       ${libopenjpeg-no}"
2346 echo "libschroedinger enabled   ${libschroedinger-no}"
2347 echo "libspeex enabled          ${libspeex-no}"
2348 echo "libtheora enabled         ${libtheora-no}"
2349 echo "libvorbis enabled         ${libvorbis-no}"
2350 echo "libx264 enabled           ${libx264-no}"
2351 echo "libxvid enabled           ${libxvid-no}"
2352 echo "zlib enabled              ${zlib-no}"
2353 echo "bzlib enabled             ${bzlib-no}"
2354 echo
2355
2356 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2357     echo "Enabled ${type}s:"
2358     eval list=\$$(toupper $type)_LIST
2359     for part in $list; do
2360         enabled $part && echo ${part%_*}
2361     done | sort | pr -3 -t
2362     echo
2363 done
2364
2365 license="LGPL"
2366 if enabled nonfree; then
2367     license="unredistributable"
2368 elif enabled gpl; then
2369     license="GPL"
2370 fi
2371
2372 echo "License: $license"
2373
2374 echo "Creating config.mak and config.h..."
2375
2376 echo "# Automatically generated by configure - do not modify!" > config.mak
2377 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2378 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2379 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2380 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2381 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2382
2383 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2384 echo "prefix=$prefix" >> config.mak
2385 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2386 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2387 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2388 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2389 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2390 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2391 echo "SRC_PATH=\"$source_path\"" >> config.mak
2392 echo "SRC_PATH_BARE=$source_path" >> config.mak
2393 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2394 echo "CC=$cc" >> config.mak
2395 echo "AS=$as" >> config.mak
2396 echo "YASM=$yasmexe" >> config.mak
2397 echo "AR=$ar" >> config.mak
2398 echo "RANLIB=$ranlib" >> config.mak
2399 echo "LN_S=$ln_s" >> config.mak
2400 enabled stripping &&
2401     echo "STRIP=$strip" >> config.mak ||
2402     echo "STRIP=echo ignoring strip" >> config.mak
2403
2404 echo "OPTFLAGS=$CFLAGS" >> config.mak
2405 echo "LDFLAGS=$LDFLAGS" >> config.mak
2406 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2407 echo "SHFLAGS=$SHFLAGS" >> config.mak
2408 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2409 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2410 echo "BUILD_STATIC=$static" >> config.mak
2411 echo "BUILDSUF=$build_suffix" >> config.mak
2412 echo "FULLNAME=$FULLNAME" >> config.mak
2413 echo "LIBPREF=$LIBPREF" >> config.mak
2414 echo "LIBSUF=$LIBSUF" >> config.mak
2415 echo "LIBNAME=$LIBNAME" >> config.mak
2416 echo "SLIBPREF=$SLIBPREF" >> config.mak
2417 echo "SLIBSUF=$SLIBSUF" >> config.mak
2418 echo "EXESUF=$EXESUF" >> config.mak
2419 echo "EXTRA_VERSION=$extra_version" >> config.mak
2420 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2421 echo "HOSTCC=$host_cc" >> config.mak
2422 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2423 echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2424 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2425 echo "HOSTLIBS=$host_libs" >> config.mak
2426 echo "TARGET_EXEC=$target_exec" >> config.mak
2427 echo "TARGET_PATH=$target_path" >> config.mak
2428
2429 if enabled bigendian; then
2430     echo "WORDS_BIGENDIAN=yes" >> config.mak
2431     echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2432 fi
2433
2434 if enabled sdl; then
2435     echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
2436     echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2437 fi
2438 if enabled texi2html; then
2439     echo "BUILD_DOC=yes" >> config.mak
2440 fi
2441
2442 get_version(){
2443     name=$1
2444     file=$source_path/$2
2445     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2446     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2447     lcname=$(tolower $name)
2448     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2449     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2450 }
2451
2452 get_version LIBSWSCALE  libswscale/swscale.h
2453 get_version LIBPOSTPROC libpostproc/postprocess.h
2454 get_version LIBAVCODEC  libavcodec/avcodec.h
2455 get_version LIBAVDEVICE libavdevice/avdevice.h
2456 get_version LIBAVFORMAT libavformat/avformat.h
2457 get_version LIBAVUTIL   libavutil/avutil.h
2458 get_version LIBAVFILTER libavfilter/avfilter.h
2459
2460 if enabled shared; then
2461     echo "BUILD_SHARED=yes" >> config.mak
2462     echo "PIC=-fPIC -DPIC" >> config.mak
2463     echo "LIBTARGET=${LIBTARGET}" >> config.mak
2464     echo "SLIBNAME=${SLIBNAME}" >> config.mak
2465     echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2466     echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2467     echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2468     echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2469     echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2470     echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2471 fi
2472 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2473 echo "EXTRALIBS=$extralibs" >> config.mak
2474
2475 echo "ARCH=$arch" >> config.mak
2476
2477 print_config ARCH_   $TMPH config.mak $ARCH_LIST
2478 print_config HAVE_   $TMPH config.mak $HAVE_LIST
2479 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2480                                       $CONFIG_EXTRA      \
2481                                       $DECODER_LIST      \
2482                                       $ENCODER_LIST      \
2483                                       $HWACCEL_LIST      \
2484                                       $PARSER_LIST       \
2485                                       $BSF_LIST          \
2486                                       $DEMUXER_LIST      \
2487                                       $MUXER_LIST        \
2488                                       $FILTER_LIST       \
2489                                       $PROTOCOL_LIST     \
2490                                       $INDEV_LIST        \
2491                                       $OUTDEV_LIST       \
2492
2493 echo "#define restrict $_restrict" >> $TMPH
2494
2495 if enabled small; then
2496     echo "#define av_always_inline"  >> $TMPH
2497 fi
2498
2499
2500 # Apparently it's not possible to portably echo a backslash.
2501 enabled asmalign_pot &&
2502     printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2503     printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2504
2505 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2506
2507 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2508
2509 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2510 cmp -s $TMPH config.h &&
2511     echo "config.h is unchanged" ||
2512     mv -f $TMPH config.h
2513
2514 # build tree in object directory if source path is different from current one
2515 if enabled source_path_used; then
2516     DIRS="\
2517         doc               \
2518         libavcodec        \
2519         libavcodec/alpha  \
2520         libavcodec/arm    \
2521         libavcodec/bfin   \
2522         libavcodec/mlib   \
2523         libavcodec/ppc    \
2524         libavcodec/sh4    \
2525         libavcodec/sparc  \
2526         libavcodec/x86    \
2527         libavdevice       \
2528         libavfilter       \
2529         libavformat       \
2530         libavutil         \
2531         libpostproc       \
2532         libswscale        \
2533         libswscale/bfin   \
2534         libswscale/mlib   \
2535         libswscale/ppc    \
2536         libswscale/sparc  \
2537         libswscale/x86    \
2538         tests             \
2539         tools             \
2540         "
2541     FILES="\
2542         Makefile             \
2543         common.mak           \
2544         subdir.mak           \
2545         doc/texi2pod.pl      \
2546         libavcodec/Makefile  \
2547         libavdevice/Makefile \
2548         libavfilter/Makefile \
2549         libavformat/Makefile \
2550         libavutil/Makefile   \
2551         libpostproc/Makefile \
2552         libswscale/Makefile  \
2553         "
2554     for dir in $DIRS ; do
2555         mkdir -p $dir
2556     done
2557     for f in $FILES ; do
2558         $ln_s "$source_path/$f" $f
2559     done
2560 fi
2561
2562
2563 # build pkg-config files
2564
2565 pkgconfig_generate(){
2566 name=$1
2567 shortname=${name#lib}${build_suffix}
2568 comment=$2
2569 version=$3
2570 libs=$4
2571 requires=$5
2572 cat <<EOF > $name/$name.pc
2573 prefix=$prefix
2574 exec_prefix=\${prefix}
2575 libdir=$libdir
2576 includedir=$incdir
2577
2578 Name: $name
2579 Description: $comment
2580 Version: $version
2581 Requires: $(disabled shared && echo $requires)
2582 Requires.private: $(enabled shared && echo $requires)
2583 Conflicts:
2584 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2585 Libs.private: $(enabled shared && echo $libs)
2586 Cflags: -I\${includedir}
2587 EOF
2588 cat <<EOF > $name/$name-uninstalled.pc
2589 prefix=
2590 exec_prefix=
2591 libdir=\${pcfiledir}
2592 includedir=${source_path}
2593
2594 Name: $name
2595 Description: $comment
2596 Version: $version
2597 Requires: $requires
2598 Conflicts:
2599 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2600 Cflags: -I\${includedir}
2601 EOF
2602 }
2603
2604 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2605 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2606 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2607 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2608 enabled avfilter &&
2609     pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2610 enabled postproc &&
2611     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2612 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"