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