Don't include byteswap.h anymore.
[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, but we need the
1016 # full relative path for objects in subdirectories for non-recursive Make.
1017 DEPEND_CMD='$(CC) $(CFLAGS) -MM -MG -MT $@ $<'
1018
1019 # find source path
1020 source_path="`dirname \"$0\"`"
1021 enable source_path_used
1022 if test -z "$source_path" -o "$source_path" = "." ; then
1023     source_path="`pwd`"
1024     disable source_path_used
1025 else
1026     source_path="`cd \"$source_path\"; pwd`"
1027     echo "$source_path" | grep -q '[[:blank:]]' &&
1028         die "Out of tree builds are impossible with whitespace in source path."
1029 fi
1030
1031 FFMPEG_CONFIGURATION="$@"
1032
1033 find_things(){
1034     thing=$1
1035     pattern=$2
1036     file=$source_path/$3
1037     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1038 }
1039
1040 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1041 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1042 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1043 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1044 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1045 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1046 OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1047 INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1048 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1049 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1050
1051 enable $ARCH_EXT_LIST \
1052        $DECODER_LIST \
1053        $ENCODER_LIST \
1054        $PARSER_LIST \
1055        $BSF_LIST \
1056        $DEMUXER_LIST \
1057        $MUXER_LIST \
1058        $FILTER_LIST \
1059        $PROTOCOL_LIST \
1060        $INDEV_LIST \
1061        $OUTDEV_LIST \
1062
1063 die_unknown(){
1064     echo "Unknown option \"$1\"."
1065     echo "See $0 --help for available options."
1066     exit 1
1067 }
1068
1069 show_list() {
1070     suffix=_$1
1071     shift
1072     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1073     exit 0
1074 }
1075
1076 for opt do
1077     optval="${opt#*=}"
1078     case "$opt" in
1079     --extra-cflags=*) add_cflags "$optval"
1080     ;;
1081     --extra-ldflags=*) add_ldflags "$optval"
1082     ;;
1083     --extra-libs=*) add_extralibs "$optval"
1084     ;;
1085     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1086     ;;
1087     --enable-debug=*) debuglevel="$optval"
1088     ;;
1089     --enable-*=*|--disable-*=*)
1090     eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1091     case "$thing" in
1092         encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1093         *) die_unknown "$opt" ;;
1094     esac
1095     ;;
1096     --enable-?*|--disable-?*)
1097     eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1098     if is_in $option $COMPONENT_LIST; then
1099         eval $action \$$(toupper ${option%s})_LIST
1100     elif is_in $option $CMDLINE_SELECT; then
1101         $action $option
1102     else
1103         die_unknown $opt
1104     fi
1105     ;;
1106     --list-*)
1107         NAME="${opt#--list-}"
1108         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1109         NAME=${NAME%s}
1110         eval show_list $NAME \$$(toupper $NAME)_LIST
1111     ;;
1112     --help|-h) show_help
1113     ;;
1114     *)
1115     optname="${opt%=*}"
1116     optname="${optname#--}"
1117     optname=$(echo "$optname" | sed 's/-/_/g')
1118     is_in $optname $CMDLINE_SET || die_unknown $opt
1119     eval $optname='$optval'
1120     ;;
1121     esac
1122 done
1123
1124 disabled logging && logfile=/dev/null
1125
1126 echo "# $0 $@" > $logfile
1127 set >> $logfile
1128
1129 cc="${cross_prefix}${cc}"
1130 yasmexe="${cross_prefix}${yasmexe}"
1131 ar="${cross_prefix}${ar}"
1132 nm="${cross_prefix}${nm}"
1133 ranlib="${cross_prefix}${ranlib}"
1134 strip="${cross_prefix}${strip}"
1135
1136 # set temporary file name
1137 if test ! -z "$TMPDIR" ; then
1138     TMPDIR1="${TMPDIR}"
1139 elif test ! -z "$TEMPDIR" ; then
1140     TMPDIR1="${TEMPDIR}"
1141 else
1142     TMPDIR1="/tmp"
1143 fi
1144
1145 TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1146 TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1147 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1148 TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1149 TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1150 TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1151
1152 check_cflags -fasm
1153 check_cflags -std=c99
1154
1155 case "$arch" in
1156     i386|i486|i586|i686|i86pc|BePC)
1157         arch="x86_32"
1158         enable fast_unaligned
1159     ;;
1160     x86_64|amd64)
1161         arch="x86_32"
1162         enable fast_unaligned
1163         check_cc <<EOF && enable fast_64bit && arch="x86_64"
1164         int test[sizeof(char*) - 7];
1165 EOF
1166     ;;
1167     # armv4l is a subset of armv[567]*l
1168     arm|armv[4567]*l)
1169         arch="armv4l"
1170     ;;
1171     alpha)
1172         arch="alpha"
1173         enable fast_64bit
1174     ;;
1175     "Power Macintosh"|ppc|powerpc)
1176         arch="powerpc"
1177     ;;
1178     ppc64)
1179         arch="powerpc"
1180         enable fast_64bit
1181     ;;
1182     mips|mipsel|IP*)
1183         arch="mips"
1184     ;;
1185     sun4u|sparc64)
1186         arch="sparc64"
1187         enable fast_64bit
1188     ;;
1189     sparc)
1190         arch="sparc"
1191     ;;
1192     sh4)
1193         arch="sh4"
1194     ;;
1195     parisc)
1196         arch="parisc"
1197     ;;
1198     parisc64)
1199         arch="parisc"
1200         enable fast_64bit
1201     ;;
1202     s390|s390x)
1203         arch="s390"
1204     ;;
1205     m68k)
1206         arch="m68k"
1207     ;;
1208     ia64)
1209         arch="ia64"
1210         enable fast_64bit
1211     ;;
1212     bfin)
1213         arch="bfin"
1214     ;;
1215     *)
1216         arch="unknown"
1217     ;;
1218 esac
1219
1220 enable $arch
1221 enabled_any x86_32 x86_64 && enable x86
1222 enabled     sparc64       && enable sparc
1223
1224 # OS specific
1225 case $target_os in
1226     beos|haiku|zeta)
1227         prefix_default="$HOME/config"
1228         # helps building libavcodec
1229         add_cflags "-DPIC -fomit-frame-pointer"
1230         # 3 gcc releases known for BeOS, each with ugly bugs
1231         gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1232         case "$gcc_version" in
1233           2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1234             disable mmx
1235             ;;
1236           *20010315*) echo "BeBits gcc"
1237             add_cflags "-fno-expensive-optimizations"
1238             ;;
1239         esac
1240         SHFLAGS=-nostart
1241         # enable BeOS things
1242         enable audio_beos
1243         # no need for libm, but the inet stuff
1244         # Check for BONE
1245         # XXX: actually should check for NOT net_server
1246         if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1247             network_extralibs="-lbind -lsocket"
1248         else
1249             enable beos_netserver
1250             network_extralibs="-lnet"
1251         fi ;;
1252     sunos)
1253         FFSERVERLDFLAGS=""
1254         SHFLAGS='-shared -Wl,-h,$$(@F)'
1255         network_extralibs="-lsocket -lnsl"
1256         ;;
1257     netbsd)
1258         oss_demuxer_extralibs="-lossaudio"
1259         oss_muxer_extralibs="-lossaudio"
1260         ;;
1261     openbsd)
1262         disable need_memalign
1263         LIBOBJFLAGS='$(PIC)'
1264         SHFLAGS='-shared'
1265         SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1266         SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1267         SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1268         oss_demuxer_extralibs="-lossaudio"
1269         oss_muxer_extralibs="-lossaudio"
1270         ;;
1271     freebsd)
1272         disable need_memalign
1273         ;;
1274     bsd/os)
1275         osextralibs="-lpoll -lgnugetopt"
1276         strip="strip -d"
1277         ;;
1278     darwin)
1279         disable need_memalign
1280         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1281         VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1282         strip="strip -x"
1283         FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1284         SLIBSUF=".dylib"
1285         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1286         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1287         FFSERVERLDFLAGS=-Wl,-bind_at_load
1288         objformat="macho"
1289         enabled x86_64 && objformat="macho64"
1290         ;;
1291     mingw32*)
1292         target_os=mingw32
1293         LIBTARGET=i386
1294         if test $arch = x86_64; then
1295             disable need_memalign
1296             LIBTARGET=x64
1297         fi
1298         shlibdir_default="$bindir_default"
1299         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1300         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1301         if enabled swscale; then
1302             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1303             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1304         fi
1305         disable ffserver
1306         SLIBPREF=""
1307         SLIBSUF=".dll"
1308         EXESUF=".exe"
1309         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1310         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1311         SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1312         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1313             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1314         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1315         SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1316         objformat="win32"
1317         enable dos_paths
1318         ;;
1319     cygwin*)
1320         target_os=cygwin
1321         shlibdir_default="$bindir_default"
1322         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1323         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1324         if enabled swscale; then
1325             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1326             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1327         fi
1328         EXESUF=".exe"
1329         SLIBPREF="cyg"
1330         SLIBSUF=".dll"
1331         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1332         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1333         SHFLAGS='-shared -Wl,--enable-auto-image-base'
1334         objformat="win32"
1335         enable dos_paths
1336         ;;
1337     *-dos|freedos|opendos)
1338         disable ffplay ffserver vhook
1339         disable $INDEV_LIST $OUTDEV_LIST
1340         network_extralibs="-lsocket"
1341         EXESUF=".exe"
1342         objformat="win32"
1343         enable dos_paths
1344         ;;
1345     linux)
1346         enable dv1394
1347         ;;
1348     irix*)
1349         target_os=irix
1350         ranlib="echo ignoring ranlib"
1351         ;;
1352     os/2*)
1353         strip="lxlite"
1354         ln_s="cp -f"
1355         EXESUF=".exe"
1356         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1357         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1358         FFSERVERLDFLAGS=""
1359         LIBSUF="_s.a"
1360         SLIBPREF=""
1361         SLIBSUF=".dll"
1362         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1363         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1364         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1365           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1366           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1367           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1368           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1369           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1370         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1371           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1372         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1373         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1374         disable vhook
1375         enable dos_paths
1376         ;;
1377     interix)
1378         disable vhook
1379         ;;
1380
1381     *)
1382         target_os="${target_os}-UNKNOWN"
1383         ;;
1384 esac
1385
1386 set_default $PATHS_LIST
1387
1388 add_extralibs $osextralibs
1389
1390 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1391 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1392
1393 test -n "$cross_prefix" && enable cross_compile
1394
1395 # we need to build at least one lib type
1396 if ! enabled_any static shared; then
1397     cat <<EOF
1398 At least one library type must be built.
1399 Specify --enable-static to build the static libraries or --enable-shared to
1400 build the shared libraries as well. To only build the shared libraries specify
1401 --disable-static in addition to --enable-shared.
1402 EOF
1403     exit 1;
1404 fi
1405
1406 disabled static && LIBNAME=""
1407
1408 if enabled_any libfaad libfaadbin ; then
1409     if check_header faad.h; then
1410         check_cc <<EOF
1411 #include <faad.h>
1412 #ifndef FAAD2_VERSION
1413 ok faad1
1414 #endif
1415 int main(void) { return 0; }
1416 EOF
1417         test $? = 0 && enable libfaad2
1418     else
1419         die "FAAD test failed."
1420     fi
1421 fi
1422
1423
1424 if ! enabled gpl; then
1425     die_gpl_disabled(){
1426         name=$1
1427         shift
1428         enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1429     }
1430     die_gpl_disabled "The Postprocessing code" postproc
1431     die_gpl_disabled "libx264"                 libx264
1432     die_gpl_disabled "libxvidcore"             libxvid
1433     die_gpl_disabled "FAAD2"                   libfaad2
1434     die_gpl_disabled "The X11 grabber"         x11grab
1435     die_gpl_disabled "The software scaler"     swscale
1436 fi
1437
1438 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1439     die "libamr is nonfree and --enable-nonfree is not specified."
1440 fi
1441
1442 check_deps $ARCH_EXT_LIST
1443
1444 test -z "$need_memalign" && need_memalign="$mmx"
1445
1446 #Darwin CC versions
1447 if test $target_os = darwin; then
1448     if $cc -v 2>&1 | grep -q xlc; then
1449         add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1450     else
1451         add_cflags "-pipe"
1452         check_cflags "-force_cpusubtype_ALL"
1453         check_cflags "-Wno-sign-compare"
1454         enabled shared || check_cflags -mdynamic-no-pic
1455     fi
1456 fi
1457
1458 disabled optimizations || check_cflags -fomit-frame-pointer
1459
1460 # Add processor-specific flags
1461 if test $cpu != "generic"; then
1462     warn_altivec(){
1463         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1464     }
1465     case $cpu in
1466         601|ppc601|PowerPC601)
1467             add_cflags "-mcpu=601"
1468             warn_altivec enabled PPC601
1469         ;;
1470         603*|ppc603*|PowerPC603*)
1471             add_cflags "-mcpu=603"
1472             warn_altivec enabled PPC603
1473         ;;
1474         604*|ppc604*|PowerPC604*)
1475             add_cflags "-mcpu=604"
1476             warn_altivec enabled PPC604
1477         ;;
1478         G3|g3|75*|ppc75*|PowerPC75*)
1479             add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1480             warn_altivec enabled PPC75x
1481         ;;
1482         G4|g4|745*|ppc745*|PowerPC745*)
1483             add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1484             warn_altivec disabled PPC745x
1485         ;;
1486         74*|ppc74*|PowerPC74*)
1487             add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1488             warn_altivec disabled PPC74xx
1489         ;;
1490         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1491             add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1492             warn_altivec disabled PPC970
1493             enable ppc64
1494         ;;
1495         Cell|CELL|cell)
1496             add_cflags "-mcpu=cell"
1497             warn_altivec disabled Cell
1498             enable ppc64
1499         ;;
1500         # targets that do NOT support conditional mov (cmov)
1501         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1502             add_cflags "-march=$cpu"
1503             disable cmov
1504         ;;
1505         # targets that do support conditional mov (cmov)
1506         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1507             add_cflags "-march=$cpu"
1508             enable cmov
1509             enable fast_cmov
1510         ;;
1511         # targets that do support conditional mov but on which it's slow
1512         pentium4|pentium4m|prescott|nocona)
1513             add_cflags "-march=$cpu"
1514             enable cmov
1515             disable fast_cmov
1516         ;;
1517         sparc64)
1518             add_cflags "-mcpu=v9"
1519         ;;
1520         arm*|cortex*)
1521             add_cflags "-mcpu=$cpu"
1522         ;;
1523         *)
1524             echo "WARNING: Unknown CPU \"$cpu\", ignored."
1525         ;;
1526     esac
1527 fi
1528
1529 # make sure we can execute files in $TMPDIR
1530 cat > $TMPSH 2>> $logfile <<EOF
1531 #! /bin/sh
1532 EOF
1533 chmod +x $TMPSH >> $logfile 2>&1
1534 if ! $TMPSH >> $logfile 2>&1; then
1535     cat <<EOF
1536 Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1537 variable to another directory and make sure that $TMPDIR1 is not mounted
1538 noexec.
1539 EOF
1540     die "Sanity test failed."
1541 fi
1542 rm $TMPSH
1543
1544 # compiler sanity check
1545 check_exec <<EOF
1546 int main(void){ return 0; }
1547 EOF
1548 if test "$?" != 0; then
1549     echo "$cc is unable to create an executable file."
1550     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1551         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1552         echo "Only do this if you know what cross compiling means."
1553     fi
1554     die "C compiler test failed."
1555 fi
1556
1557 check_cc <<EOF || die "Symbol mangling check failed."
1558 int ff_extern;
1559 EOF
1560 sym=$($nm -P -g $TMPO | grep ff_extern)
1561 extern_prefix=${sym%%ff_extern*}
1562
1563 check_asm inline_asm '""'
1564
1565 if enabled x86; then
1566     # check whether EBP is available on x86
1567     # As 'i' is stored on the stack, this program will crash
1568     # if the base pointer is used to access it because the
1569     # base pointer is cleared in the inline assembly code.
1570     check_exec_crash <<EOF && enable ebp_available
1571     volatile int i=0;
1572     asm volatile (
1573         "xorl %%ebp, %%ebp"
1574     ::: "%ebp");
1575     return i;
1576 EOF
1577
1578     # check wether EBX is available on x86
1579     check_asm ebx_available '"":::"%ebx"'
1580
1581     # check whether binutils is new enough to compile SSSE3/MMX2
1582     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1583     enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1584
1585     check_asm bswap '"bswap %%eax" ::: "%eax"'
1586
1587     YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
1588     enabled     x86_64        && append YASMFLAGS "-m amd64"
1589     enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1590     case "$objformat" in
1591         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1592         macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1593         *)                    append YASMFLAGS "-DPREFIX"  ;;
1594     esac
1595     check_yasm "pabsw xmm0, xmm0" && enable yasm
1596 fi
1597
1598 # check for assembler specific support
1599
1600 if test $arch = "powerpc"; then
1601 check_cc <<EOF && enable dcbzl
1602 int main(void) {
1603     register long zero = 0;
1604     char data[1024];
1605     asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1606 return 0;
1607 }
1608 EOF
1609 fi
1610
1611 # check for SIMD availability
1612
1613 # AltiVec flags: The FSF version of GCC differs from the Apple version
1614 if enabled altivec; then
1615     check_cflags -maltivec -mabi=altivec &&
1616         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1617         check_cflags -faltivec
1618
1619     # check if our compiler supports Motorola AltiVec C API
1620     check_cc <<EOF || disable altivec
1621 $inc_altivec_h
1622 int main(void) {
1623     vector signed int v1, v2, v3;
1624     v1 = vec_add(v2,v3);
1625     return 0;
1626 }
1627 EOF
1628
1629     # check if our compiler supports braces for vector declarations
1630     check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1631 $inc_altivec_h
1632 int main (void) { (vector int) {1}; return 0; }
1633 EOF
1634 fi
1635
1636 # We have to check if pld is a nop and disable it.
1637 enabled armv4l  && check_asm pld     '"pld [r0]"'
1638 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1639 enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1640 enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1641 enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1642 enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1643 enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1644 enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1645
1646 enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1647
1648 # ---
1649 # big/little-endian test
1650 check_cc <<EOF || die "endian test failed"
1651 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1652 EOF
1653 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1654
1655 # ---
1656 # check availability of some header files
1657
1658 if check_func dlopen; then
1659     ldl=
1660 elif check_func dlopen -ldl; then
1661     ldl=-ldl
1662 fi
1663
1664 check_func  fork
1665 check_func  gethrtime
1666 check_func  getrusage
1667 check_func  inet_aton $network_extralibs
1668 check_func  memalign
1669 check_func  mkstemp
1670 check_func_headers windows.h GetProcessTimes
1671
1672 check_header conio.h
1673 check_header dlfcn.h
1674 check_header malloc.h
1675 check_header poll.h
1676 check_header sys/mman.h
1677 check_header sys/resource.h
1678 check_header sys/select.h
1679 check_header termios.h
1680
1681 if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1682     die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1683 fi
1684
1685 enabled  zlib && check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1686 enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1687
1688 # check for some common methods of building with pthread support
1689 # do this before the optional library checks as some of them require pthreads
1690 if enabled pthreads; then
1691     if check_func pthread_create; then
1692         :
1693     elif check_func pthread_create -pthread; then
1694         add_cflags -pthread
1695         add_extralibs -pthread
1696     elif check_func pthread_create -pthreads; then
1697         add_cflags -pthreads
1698         add_extralibs -pthreads
1699     elif check_func pthread_create -lpthreadGC2; then
1700         add_extralibs -lpthreadGC2
1701     elif ! check_lib pthread.h pthread_create -lpthread; then
1702         die "ERROR: can't find pthreads library"
1703     fi
1704 fi
1705
1706 for thread in $THREADS_LIST; do
1707     if enabled $thread; then
1708         test -n "$thread_type" &&
1709             die "ERROR: Only one thread type must be selected." ||
1710             thread_type="$thread"
1711     fi
1712 done
1713
1714 check_lib math.h sin -lm
1715
1716 # test for C99 functions in math.h
1717 for func in llrint lrint lrintf round roundf; do
1718     check_exec <<EOF && enable $func || disable $func
1719 #include <math.h>
1720 int main(void) { return ($func(3.999f) > 0)?0:1; }
1721 EOF
1722 done
1723
1724 # these are off by default, so fail if requested and not available
1725 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1726 enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1727 enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1728 enabled libdirac   && add_cflags "$(pkg-config --cflags dirac)" \
1729                    && require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder \
1730                    && require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1731 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1732 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1733 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1734 enabled libmp3lame && require  LAME lame/lame.h lame_init -lmp3lame -lm
1735 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1736 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) \
1737                         && require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1738 enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1739 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1740 enabled libx264    && require  x264 x264.h x264_encoder_open -lx264 -lm \
1741                    && require_cpp_condition x264 x264.h "X264_BUILD >= 65"
1742 enabled libxvid    && require  Xvid xvid.h xvid_global -lxvidcore
1743 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1744
1745 # libdc1394 check
1746 if enabled libdc1394; then
1747     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1748         enable libdc1394_2; } ||
1749     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1750         enable libdc1394_1; } ||
1751     die "ERROR: No version of libdc1394 found "
1752 fi
1753
1754
1755 _restrict=
1756 for restrict_keyword in restrict __restrict__ __restrict; do
1757     check_cc <<EOF && _restrict=$restrict_keyword && break
1758 void foo(char * $restrict_keyword p);
1759 EOF
1760 done
1761
1762 test "$vhook" = "default" && vhook="$dlopen"
1763
1764 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1765     disable vhook
1766     echo
1767     echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1768     echo "Patches welcome."
1769     echo
1770 fi
1771
1772 if enabled vhook; then
1773     check_ldflags -rdynamic
1774     check_ldflags -export-dynamic
1775 fi
1776
1777 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1778 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1779
1780 ##########################################
1781 # SDL check
1782
1783 disable sdl_too_old
1784 disable sdl
1785 SDL_CONFIG="${cross_prefix}sdl-config"
1786 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1787     sdl_cflags=`"${SDL_CONFIG}" --cflags`
1788     temp_cflags $sdl_cflags
1789     temp_extralibs `"${SDL_CONFIG}" --libs`
1790     if check_lib2 SDL.h SDL_Init; then
1791         _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1792         if test "$_sdlversion" -lt 121 ; then
1793             enable sdl_too_old
1794         else
1795             enable sdl
1796             check_cc $sdl_cflags <<EOF && enable sdl_video_size
1797 #include <SDL.h>
1798 int main(int argc, char **argv){
1799     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1800     int w = vi->current_w;
1801     return 0;
1802 }
1803 EOF
1804         fi
1805     fi
1806     restore_flags
1807 fi
1808
1809 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1810
1811 ##########################################
1812 # Network check
1813
1814 if enabled network; then
1815     check_type sys/socket.h socklen_t
1816     # Prefer arpa/inet.h over winsock2
1817     if check_header arpa/inet.h ; then
1818         check_func closesocket
1819     elif check_header winsock2.h ; then
1820         network_extralibs="-lws2_32"
1821         check_type ws2tcpip.h socklen_t
1822         check_func_headers winsock2.h closesocket
1823     fi
1824 fi
1825
1826 ##########################################
1827 # IPv6 check
1828
1829 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1830 #include <sys/types.h>
1831 #include <sys/socket.h>
1832 #include <netinet/in.h>
1833 #include <netdb.h>
1834 int main(void) {
1835     struct sockaddr_storage saddr;
1836     struct ipv6_mreq mreq6;
1837     getaddrinfo(0,0,0,0);
1838     getnameinfo(0,0,0,0,0,0,0);
1839     IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1840 }
1841 EOF
1842
1843 check_header linux/videodev.h
1844 check_header linux/videodev2.h
1845 check_header sys/videoio.h
1846
1847 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1848
1849 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1850 { check_header dev/bktr/ioctl_meteor.h &&
1851   check_header dev/bktr/ioctl_bt848.h; } ||
1852 { check_header machine/ioctl_meteor.h &&
1853   check_header machine/ioctl_bt848.h; } ||
1854 { check_header dev/video/meteor/ioctl_meteor.h &&
1855   check_header dev/video/bktr/ioctl_bt848.h; } ||
1856 check_header dev/ic/bt8xx.h
1857
1858 check_header sys/soundcard.h
1859 check_header soundcard.h
1860
1861 # deal with the X11 frame grabber
1862 enabled x11grab                         &&
1863 check_header X11/Xlib.h                 &&
1864 check_header X11/extensions/XShm.h      &&
1865 check_func XOpenDisplay -lX11           &&
1866 check_func XShmCreateImage -lX11 -lXext
1867
1868 enabled debug && add_cflags -g"$debuglevel"
1869
1870 # add some useful compiler flags if supported
1871 check_cflags -Wdeclaration-after-statement
1872 check_cflags -Wall
1873 check_cflags -Wno-switch
1874 check_cflags -Wdisabled-optimization
1875 check_cflags -Wpointer-arith
1876 check_cflags -Wredundant-decls
1877 check_cflags -Wno-pointer-sign
1878 check_cflags -Wcast-qual
1879 check_cflags -Wwrite-strings
1880 check_cflags -Wtype-limits
1881 enabled extra_warnings && check_cflags -Winline
1882
1883 # add some linker flags
1884 check_ldflags -Wl,--warn-common
1885 check_ldflags -Wl,--as-needed
1886 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'
1887 check_ldflags -Wl,-Bsymbolic
1888
1889 if enabled small; then
1890     check_cflags -Os            # not all compilers support -Os
1891     optimizations="small"
1892 elif enabled optimizations; then
1893     if $cc -v 2>&1 | grep -q xlc; then
1894         add_cflags  "-O5"
1895         add_ldflags "-O5"
1896     else
1897         add_cflags "-O3"
1898     fi
1899 fi
1900 check_cflags -fno-math-errno
1901 check_cflags -fno-signed-zeros
1902
1903 # add some flags for Intel C Compiler
1904 if $cc --version 2> /dev/null | grep -q Intel; then
1905   # Just warnings, no remarks
1906   check_cflags -w1
1907   # -wd: Disable following warnings
1908   # 144, 167, 556: -Wno-pointer-sign
1909   # 10006: ignoring unknown option -fno-signed-zeros
1910   # 10156: ignoring option '-W'; no argument required
1911   check_cflags -wd144,167,556,10006,10156
1912   # 11030: Warning unknown option --as-needed
1913   # 10156: ignoring option '-export'; no argument required
1914   check_ldflags -wd10156,11030
1915   # Allow to compile with optimizations
1916   check_ldflags -march=$cpu
1917 fi
1918
1919 # PIC flags for shared library objects where they are needed
1920 if enabled shared; then
1921     # LIBOBJFLAGS may have already been set in the OS configuration
1922     if test -z "$LIBOBJFLAGS" ; then
1923         case "$arch" in
1924             x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
1925         esac
1926     fi
1927 fi
1928
1929 if enabled gprof; then
1930     add_cflags  "-p"
1931     add_ldflags "-p"
1932 fi
1933
1934 VHOOKCFLAGS="-fPIC"
1935
1936 # Find out if the .align argument is a power of two or not.
1937 if test $asmalign_pot = "unknown"; then
1938     disable asmalign_pot
1939     echo 'asm (".align 3");' | check_cc && enable asmalign_pot
1940 fi
1941
1942 enabled_any $DECODER_LIST      && enable decoders
1943 enabled_any $ENCODER_LIST      && enable encoders
1944 enabled_any $BSF_LIST          && enable bsfs
1945 enabled_any $DEMUXER_LIST      && enable demuxers
1946 enabled_any $MUXER_LIST        && enable muxers
1947 enabled_any $FILTER_LIST       && enable filters
1948 enabled_any $INDEV_LIST        && enable demuxers
1949 enabled_any $OUTDEV_LIST       && enable muxers
1950 enabled_any $PROTOCOL_LIST     && enable protocols
1951
1952 enabled_any $THREADS_LIST      && enable threads
1953
1954 check_deps $CONFIG_LIST       \
1955            $HAVE_LIST         \
1956            $DECODER_LIST      \
1957            $ENCODER_LIST      \
1958            $PARSER_LIST       \
1959            $BSF_LIST          \
1960            $DEMUXER_LIST      \
1961            $MUXER_LIST        \
1962            $FILTER_LIST       \
1963            $INDEV_LIST        \
1964            $OUTDEV_LIST       \
1965            $PROTOCOL_LIST     \
1966
1967 enabled libdc1394 && append pkg_requires "libraw1394"
1968 enabled libdirac  && append pkg_requires "dirac"
1969 enabled libtheora && append pkg_requires "theora"
1970 enabled libvorbis && append pkg_requires "vorbisenc"
1971
1972 echo "install prefix            $prefix"
1973 echo "source path               $source_path"
1974 echo "C compiler                $cc"
1975 echo ".align is power-of-two    $asmalign_pot"
1976 echo "ARCH                      $arch ($cpu)"
1977 if test "$build_suffix" != ""; then
1978     echo "build suffix              $build_suffix"
1979 fi
1980 if test "$extra_version" != ""; then
1981     echo "version string suffix     $extra_version"
1982 fi
1983 echo "big-endian                ${bigendian-no}"
1984 if test $arch = "x86_32" -o $arch = "x86_64"; then
1985     echo "yasm                      ${yasm-no}"
1986     echo "MMX enabled               ${mmx-no}"
1987     echo "CMOV enabled              ${cmov-no}"
1988     echo "CMOV is fast              ${fast_cmov-no}"
1989     echo "EBX available             ${ebx_available-no}"
1990     echo "EBP available             ${ebp_available-no}"
1991 fi
1992 if test $arch = "armv4l"; then
1993     echo "ARMv5TE enabled           ${armv5te-no}"
1994     echo "ARMv6 enabled             ${armv6-no}"
1995     echo "ARM VFP enabled           ${armvfp-no}"
1996     echo "IWMMXT enabled            ${iwmmxt-no}"
1997     echo "NEON enabled              ${neon-no}"
1998 fi
1999 if test $arch = "mips"; then
2000     echo "MMI enabled               ${mmi-no}"
2001 fi
2002 if test $arch = "powerpc"; then
2003     echo "AltiVec enabled           ${altivec-no}"
2004     echo "dcbzl available           ${dcbzl-no}"
2005 fi
2006 echo "gprof enabled             ${gprof-no}"
2007 echo "debug symbols             ${debug-no}"
2008 echo "strip symbols             ${stripping-no}"
2009 echo "optimizations             ${optimizations-no}"
2010 echo "static                    ${static-no}"
2011 echo "shared                    ${shared-no}"
2012 echo "postprocessing support    ${postproc-no}"
2013 echo "software scaler enabled   ${swscale-no}"
2014 echo "new filter support        ${avfilter-no}"
2015 echo "filters using lavformat   ${avfilter_lavf-no}"
2016 echo "video hooking             ${vhook-no}"
2017 if enabled vhook; then
2018     echo "Imlib2 support            ${imlib2-no}"
2019     echo "FreeType support          ${freetype2-no}"
2020 fi
2021 echo "network support           ${network-no}"
2022 if enabled network; then
2023     echo "IPv6 support              ${ipv6-no}"
2024 fi
2025 echo "threading support         ${thread_type-no}"
2026 echo "SDL support               ${sdl-no}"
2027 if enabled sdl_too_old; then
2028     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2029 fi
2030 echo "Sun medialib support      ${mlib-no}"
2031 echo "AVISynth enabled          ${avisynth-no}"
2032 echo "libamr-nb support         ${libamr_nb-no}"
2033 echo "libamr-wb support         ${libamr_wb-no}"
2034 echo "libdc1394 support         ${libdc1394-no}"
2035 echo "libdirac enabled          ${libdirac-no}"
2036 echo "libfaac enabled           ${libfaac-no}"
2037 echo "libfaad enabled           ${libfaad-no}"
2038 echo "libfaad dlopened          ${libfaadbin-no}"
2039 echo "libgsm enabled            ${libgsm-no}"
2040 echo "libmp3lame enabled        ${libmp3lame-no}"
2041 echo "libnut enabled            ${libnut-no}"
2042 echo "libschroedinger enabled   ${libschroedinger-no}"
2043 echo "libtheora enabled         ${libtheora-no}"
2044 echo "libvorbis enabled         ${libvorbis-no}"
2045 echo "libx264 enabled           ${libx264-no}"
2046 echo "libxvid enabled           ${libxvid-no}"
2047 echo "zlib enabled              ${zlib-no}"
2048 echo "bzlib enabled             ${bzlib-no}"
2049 echo
2050
2051 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2052     echo "Enabled ${type}s:"
2053     eval list=\$$(toupper $type)_LIST
2054     for part in $list; do
2055         enabled $part && echo ${part%_*}
2056     done | sort | pr -3 -t
2057     echo
2058 done
2059
2060 license="LGPL"
2061 if enabled nonfree; then
2062     license="unredistributable"
2063 elif enabled gpl; then
2064     license="GPL"
2065 fi
2066
2067 echo "License: $license"
2068
2069 echo "Creating config.mak and config.h..."
2070
2071 echo "# Automatically generated by configure - do not modify!" > config.mak
2072 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2073 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2074 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2075 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2076
2077 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2078 echo "prefix=$prefix" >> config.mak
2079 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2080 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2081 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2082 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2083 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2084 echo "CC=$cc" >> config.mak
2085 echo "YASM=$yasmexe" >> config.mak
2086 echo "AR=$ar" >> config.mak
2087 echo "RANLIB=$ranlib" >> config.mak
2088 echo "LN_S=$ln_s" >> config.mak
2089 enabled stripping &&
2090     echo "STRIP=$strip" >> config.mak ||
2091     echo "STRIP=echo ignoring strip" >> config.mak
2092
2093 echo "OPTFLAGS=$CFLAGS" >> config.mak
2094 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2095 echo "LDFLAGS=$LDFLAGS" >> config.mak
2096 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2097 echo "SHFLAGS=$SHFLAGS" >> config.mak
2098 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2099 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2100 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2101 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2102 echo "BUILD_STATIC=$static" >> config.mak
2103 echo "BUILDSUF=$build_suffix" >> config.mak
2104 echo "FULLNAME=$FULLNAME" >> config.mak
2105 echo "LIBPREF=$LIBPREF" >> config.mak
2106 echo "LIBSUF=$LIBSUF" >> config.mak
2107 echo "LIBNAME=$LIBNAME" >> config.mak
2108 echo "SLIBPREF=$SLIBPREF" >> config.mak
2109 echo "SLIBSUF=$SLIBSUF" >> config.mak
2110 echo "EXESUF=$EXESUF" >> config.mak
2111 echo "EXTRA_VERSION=$extra_version" >> config.mak
2112 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2113
2114 if enabled bigendian; then
2115     echo "WORDS_BIGENDIAN=yes" >> config.mak
2116     echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2117 fi
2118
2119 if enabled sdl; then
2120     echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2121     echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2122 fi
2123 if enabled texi2html; then
2124     echo "BUILD_DOC=yes" >> config.mak
2125 fi
2126
2127 get_version(){
2128     name=$1
2129     file=$source_path/$2
2130     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2131     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2132     lcname=$(tolower $name)
2133     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2134     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2135 }
2136
2137 get_version LIBSWSCALE  libswscale/swscale.h
2138 get_version LIBPOSTPROC libpostproc/postprocess.h
2139 get_version LIBAVCODEC  libavcodec/avcodec.h
2140 get_version LIBAVDEVICE libavdevice/avdevice.h
2141 get_version LIBAVFORMAT libavformat/avformat.h
2142 get_version LIBAVUTIL   libavutil/avutil.h
2143 get_version LIBAVFILTER libavfilter/avfilter.h
2144
2145 if enabled shared; then
2146     echo "BUILD_SHARED=yes" >> config.mak
2147     echo "PIC=-fPIC -DPIC" >> config.mak
2148     echo "LIBTARGET=${LIBTARGET}" >> config.mak
2149     echo "SLIBNAME=${SLIBNAME}" >> config.mak
2150     echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2151     echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2152     echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2153     echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2154     echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2155     echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2156 fi
2157 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2158 echo "EXTRALIBS=$extralibs" >> config.mak
2159
2160 print_config ARCH_   $TMPH config.mak $ARCH_LIST
2161 print_config HAVE_   $TMPH config.mak $HAVE_LIST
2162 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2163                                       $DECODER_LIST      \
2164                                       $ENCODER_LIST      \
2165                                       $PARSER_LIST       \
2166                                       $BSF_LIST          \
2167                                       $DEMUXER_LIST      \
2168                                       $MUXER_LIST        \
2169                                       $FILTER_LIST       \
2170                                       $PROTOCOL_LIST     \
2171                                       $INDEV_LIST        \
2172                                       $OUTDEV_LIST       \
2173
2174 echo "#define restrict $_restrict" >> $TMPH
2175
2176 if enabled small; then
2177     echo "#define av_always_inline"  >> $TMPH
2178 fi
2179
2180 echo "SRC_PATH=\"$source_path\"" >> config.mak
2181 echo "SRC_PATH_BARE=$source_path" >> config.mak
2182 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2183
2184 # Apparently it's not possible to portably echo a backslash.
2185 enabled asmalign_pot &&
2186     printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2187     printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2188
2189 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2190
2191 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2192
2193 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2194 cmp -s $TMPH config.h &&
2195     echo "config.h is unchanged" ||
2196     mv -f $TMPH config.h
2197
2198 rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2199
2200 # build tree in object directory if source path is different from current one
2201 if enabled source_path_used; then
2202     DIRS="\
2203         doc               \
2204         libavcodec        \
2205         libavcodec/alpha  \
2206         libavcodec/armv4l \
2207         libavcodec/bfin   \
2208         libavcodec/i386   \
2209         libavcodec/mlib   \
2210         libavcodec/ppc    \
2211         libavcodec/sh4    \
2212         libavcodec/sparc  \
2213         libavdevice       \
2214         libavfilter       \
2215         libavformat       \
2216         libavutil         \
2217         libpostproc       \
2218         libswscale        \
2219         tests             \
2220         tools             \
2221         vhook             \
2222         "
2223     FILES="\
2224         Makefile             \
2225         common.mak           \
2226         subdir.mak           \
2227         doc/texi2pod.pl      \
2228         libavcodec/Makefile  \
2229         libavdevice/Makefile \
2230         libavfilter/Makefile \
2231         libavformat/Makefile \
2232         libavutil/Makefile   \
2233         libpostproc/Makefile \
2234         libswscale/Makefile  \
2235         "
2236     for dir in $DIRS ; do
2237         mkdir -p $dir
2238     done
2239     for f in $FILES ; do
2240         $ln_s "$source_path/$f" $f
2241     done
2242 fi
2243
2244
2245 # build pkg-config files
2246
2247 pkgconfig_generate(){
2248 name=$1
2249 shortname=${name#lib}
2250 comment=$2
2251 version=$3
2252 libs=$4
2253 requires=$5
2254 cat <<EOF > $name/$name.pc
2255 prefix=$prefix
2256 exec_prefix=\${prefix}
2257 libdir=$libdir
2258 includedir=$incdir
2259
2260 Name: $name
2261 Description: $comment
2262 Version: $version
2263 Requires: $(disabled shared && echo $requires)
2264 Requires.private: $(enabled shared && echo $requires)
2265 Conflicts:
2266 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2267 Libs.private: $(enabled shared && echo $libs)
2268 Cflags: -I\${includedir}
2269 EOF
2270 cat <<EOF > $name/$name-uninstalled.pc
2271 prefix=
2272 exec_prefix=
2273 libdir=\${pcfiledir}
2274 includedir=${source_path}
2275
2276 Name: $name
2277 Description: $comment
2278 Version: $version
2279 Requires: $requires
2280 Conflicts:
2281 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2282 Cflags: -I\${includedir}
2283 EOF
2284 }
2285
2286 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2287 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2288 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2289 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2290 enabled avfilter &&
2291     pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2292 enabled postproc &&
2293     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2294 if enabled swscale; then
2295     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2296 else
2297     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2298     apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2299 fi