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