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