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