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