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