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