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