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