]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/blob - configure
eb77a52fce9679cd186428a0c2a9ee48a7ed0c34
[frescor/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-mpegaudio-hp   faster (but less accurate)"
139   echo "                           MPEG audio decoding [default=no]"
140   echo "  --enable-gray            enable full grayscale support (slower color)"
141   echo "  --disable-ffmpeg         disable ffmpeg build"
142   echo "  --disable-ffserver       disable ffserver build"
143   echo "  --disable-ffplay         disable ffplay build"
144   echo "  --enable-small           optimize for size instead of speed"
145   echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
146   echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
147   echo "  --disable-encoder=NAME   disables encoder NAME"
148   echo "  --enable-encoder=NAME    enables encoder NAME"
149   echo "  --disable-decoder=NAME   disables decoder NAME"
150   echo "  --enable-decoder=NAME    enables decoder NAME"
151   echo "  --disable-encoders       disables all encoders"
152   echo "  --disable-decoders       disables all decoders"
153   echo "  --disable-muxer=NAME     disables muxer NAME"
154   echo "  --enable-muxer=NAME      enables muxer NAME"
155   echo "  --disable-muxers         disables all muxers"
156   echo "  --disable-demuxer=NAME   disables demuxer NAME"
157   echo "  --enable-demuxer=NAME    enables demuxer NAME"
158   echo "  --disable-demuxers       disables all demuxers"
159   echo "  --enable-parser=NAME     enables parser NAME"
160   echo "  --disable-parser=NAME    disables parser NAME"
161   echo "  --disable-parsers        disables all parsers"
162   echo "  --enable-bsf=NAME        enables bitstream filter NAME"
163   echo "  --disable-bsf=NAME       disables bitstream filter NAME"
164   echo "  --disable-bsfs           disables all bitstream filters"
165   echo "  --enable-protocol=NAME   enables protocol NAME"
166   echo "  --disable-protocol=NAME  disables protocol NAME"
167   echo "  --disable-protocols      disables all protocols"
168   echo "  --disable-devices        disables all devices"
169   echo "  --list-decoders          show all available decoders"
170   echo "  --list-encoders          show all available encoders"
171   echo "  --list-muxers            show all available muxers"
172   echo "  --list-demuxers          show all available demuxers"
173   echo "  --list-parsers           show all available parsers"
174   echo "  --list-protocols         show all available protocols"
175   echo "  --list-bsfs              show all available bitstream filters"
176   echo "  --list-indevs            show all available input devices"
177   echo "  --list-outdevs           show all available output devices"
178   echo
179   echo "Developer options (useful when working on FFmpeg itself):"
180   echo "  --disable-debug          disable debugging symbols"
181   echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
182   echo "  --enable-gprof           enable profiling with gprof [$gprof]"
183   echo "  --disable-optimizations  disable compiler optimizations"
184   echo "  --enable-extra-warnings  enable more compiler warnings"
185   echo "  --disable-stripping      disable stripping of executables and shared libraries"
186   echo ""
187   echo "NOTE: Object files are built at the place where configure is launched."
188   exit 1
189 }
190
191 log(){
192     echo "$@" >> $logfile
193 }
194
195 log_file(){
196     log BEGIN $1
197     pr -n -t $1 >> $logfile
198     log END $1
199 }
200
201 echolog(){
202     log "$@"
203     echo "$@"
204 }
205
206 die(){
207     echolog "$@"
208     cat <<EOF
209 If you think configure made a mistake, make sure you are using the latest
210 version from SVN.  If the latest version fails, report the problem to the
211 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
212 EOF
213     if disabled logging; then
214         cat <<EOF
215 Rerun configure with logging enabled (do not use --disable-logging), and
216 include the log this produces with your report.
217 EOF
218     else
219 cat <<EOF
220 Include the log file "$logfile" produced by configure as this will help
221 solving the problem.
222 EOF
223     fi
224     rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
225     exit 1
226 }
227
228 # Avoid locale weirdness, besides we really just want to translate ASCII.
229 toupper(){
230     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
231 }
232
233 tolower(){
234     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
235 }
236
237 set_all(){
238     value=$1
239     shift
240     for var in $*; do
241         eval $var=$value
242     done
243 }
244
245 pushvar(){
246     for var in $*; do
247         eval level=\${${var}_level:=0}
248         eval ${var}_${level}="\$$var"
249         eval ${var}_level=$(($level+1))
250     done
251 }
252
253 popvar(){
254     for var in $*; do
255         eval level=\${${var}_level:-0}
256         test $level = 0 && continue
257         eval level=$(($level-1))
258         eval $var="\${${var}_${level}}"
259         eval ${var}_level=$level
260         eval unset ${var}_${level}
261     done
262 }
263
264 enable(){
265     set_all yes $*
266 }
267
268 disable(){
269     set_all no $*
270 }
271
272 enabled(){
273     test "${1#!}" = "$1" && op== || op=!=
274     eval test "x\$${1#!}" $op "xyes"
275 }
276
277 disabled(){
278     test "${1#!}" = "$1" && op== || op=!=
279     eval test "x\$${1#!}" $op "xno"
280 }
281
282 enabled_all(){
283     for opt; do
284         enabled $opt || return 1
285     done
286 }
287
288 disabled_all(){
289     for opt; do
290         disabled $opt || return 1
291     done
292 }
293
294 enabled_any(){
295     for opt; do
296         enabled $opt && return 0
297     done
298 }
299
300 disabled_any(){
301     for opt; do
302         disabled $opt && return 0
303     done
304 }
305
306 set_default(){
307     for opt; do
308         eval test -z "\$$opt" && eval $opt=\$${opt}_default
309     done
310 }
311
312 is_in(){
313     value=$1
314     shift
315     for var in $*; do
316         [ $var = $value ] && return 0
317     done
318     return 1
319 }
320
321 check_deps(){
322     for cfg; do
323         cfg="${cfg#!}"
324         enabled ${cfg}_checking && die "Circular dependency for $cfg."
325         disabled ${cfg}_checking && continue
326         enable ${cfg}_checking
327
328         eval dep_all="\$${cfg}_deps"
329         eval dep_any="\$${cfg}_deps_any"
330
331         pushvar cfg dep_all dep_any
332         check_deps $dep_all $dep_any
333         popvar cfg dep_all dep_any
334
335         enabled_all $dep_all || disable $cfg
336         enabled_any $dep_any || disable $cfg
337
338         if enabled $cfg; then
339             eval dep_extralibs="\$${cfg}_extralibs"
340             test -n "$dep_extralibs" && add_extralibs $dep_extralibs
341         fi
342
343         disable ${cfg}_checking
344     done
345 }
346
347 print_config(){
348     pfx=$1
349     header=$2
350     makefile=$3
351     shift 3
352     for cfg; do
353         ucname="`toupper $cfg`"
354         if enabled $cfg; then
355             echo "#define ${pfx}${ucname} 1" >> $header
356             echo "#define ENABLE_${ucname} 1" >> $header
357             echo "${pfx}${ucname}=yes" >> $makefile
358         else
359             echo "#define ENABLE_${ucname} 0" >> $header
360         fi
361     done
362 }
363
364 flags_saved(){
365     (: ${SAVE_CFLAGS?}) 2> /dev/null
366 }
367
368 save_flags(){
369     flags_saved && return
370     SAVE_CFLAGS="$CFLAGS"
371     SAVE_LDFLAGS="$LDFLAGS"
372     SAVE_extralibs="$extralibs"
373 }
374
375 restore_flags(){
376     flags_saved || return
377     CFLAGS="$SAVE_CFLAGS"
378     LDFLAGS="$SAVE_LDFLAGS"
379     extralibs="$SAVE_extralibs"
380     unset SAVE_CFLAGS
381     unset SAVE_LDFLAGS
382     unset SAVE_extralibs
383 }
384
385 temp_cflags(){
386     save_flags
387     CFLAGS="$CFLAGS $*"
388 }
389
390 temp_ldflags(){
391     save_flags
392     LDFLAGS="$LDFLAGS $*"
393 }
394
395 temp_extralibs(){
396     save_flags
397     extralibs="$extralibs $*"
398 }
399
400 append(){
401     var=$1
402     shift
403     flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
404     eval "$var=\"\$$var $*\""
405 }
406
407 add_cflags(){
408     append CFLAGS "$@"
409 }
410
411 add_ldflags(){
412     append LDFLAGS "$@"
413 }
414
415 add_extralibs(){
416     append extralibs "$@"
417 }
418
419 check_cmd(){
420     log "$@"
421     "$@" >> $logfile 2>&1
422 }
423
424 check_cc(){
425     log check_cc "$@"
426     cat > $TMPC
427     log_file $TMPC
428     check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
429 }
430
431 check_cpp(){
432     log check_cpp "$@"
433     cat > $TMPC
434     log_file $TMPC
435     check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
436 }
437
438 check_asm(){
439     log check_asm "$@"
440     name="$1"
441     asm="$2"
442     shift 2
443     check_cc "$@" <<EOF && enable $name || disable $name
444 int foo(void){ asm volatile($asm); }
445 EOF
446 }
447
448 check_ld(){
449     log check_ld "$@"
450     check_cc || return
451     flags=''
452     libs=''
453     for f; do
454         test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
455     done
456     check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
457 }
458
459 check_cflags(){
460     log check_cflags "$@"
461     check_cc "$@" <<EOF && add_cflags "$@"
462 int x;
463 EOF
464 }
465
466 check_ldflags(){
467     log check_ldflags "$@"
468     check_ld "$@" <<EOF && add_ldflags "$@"
469 int main(void){ return 0; }
470 EOF
471 }
472
473 check_header(){
474     log check_header "$@"
475     header=$1
476     shift
477     var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
478     disable $var
479     check_cpp "$@" <<EOF && enable $var
480 #include <$header>
481 int x;
482 EOF
483 }
484
485 check_func(){
486     log check_func "$@"
487     func=$1
488     shift
489     disable $func
490     check_ld "$@" <<EOF && enable $func
491 extern int $func();
492 int main(void){ $func(); }
493 EOF
494 }
495
496 check_func2(){
497     log check_func2 "$@"
498     headers=$1
499     func=$2
500     shift 2
501     disable $func
502     incs=""
503     for hdr in $headers; do
504         incs="$incs
505 #include <$hdr>"
506     done
507     check_ld "$@" <<EOF && enable $func
508 $incs
509 int main(int argc, char **argv){
510     (void) $func;
511     return 0;
512 }
513 EOF
514 }
515
516 check_lib(){
517     log check_lib "$@"
518     header="$1"
519     func="$2"
520     shift 2
521     temp_extralibs "$@"
522     check_header $header && check_func $func && add_extralibs "$@"
523     err=$?
524     restore_flags
525     return $err
526 }
527
528 check_lib2(){
529     log check_lib2 "$@"
530     headers="$1"
531     func="$2"
532     shift 2
533     temp_extralibs "$@"
534     check_func2 "$headers" $func && add_extralibs "$@"
535     err=$?
536     restore_flags
537     return $err
538 }
539
540 check_exec(){
541     check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
542 }
543
544 check_exec_crash(){
545     code=`cat`
546
547     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
548     # are safe but may not be available everywhere.  Thus we use
549     # raise(SIGTERM) instead.  The check is run in a subshell so we
550     # can redirect the "Terminated" message from the shell.  SIGBUS
551     # is not defined by standard C so it is used conditionally.
552
553     (check_exec "$@") >> $logfile 2>&1 <<EOF
554 #include <signal.h>
555 static void sighandler(int sig){
556     raise(SIGTERM);
557 }
558 int main(void){
559     signal(SIGILL, sighandler);
560     signal(SIGFPE, sighandler);
561     signal(SIGSEGV, sighandler);
562 #ifdef SIGBUS
563     signal(SIGBUS, sighandler);
564 #endif
565     { $code }
566 }
567 EOF
568 }
569
570 check_type(){
571     log check_type "$@"
572     headers=$1
573     type=$2
574     shift 2
575     disable $type
576     incs=""
577     for hdr in $headers; do
578         incs="$incs
579 #include <$hdr>"
580     done
581     check_cc "$@" <<EOF && enable $type
582 $incs
583 $type v;
584 EOF
585 }
586
587 require(){
588     name="$1"
589     header="$2"
590     func="$3"
591     shift 3
592     check_lib $header $func "$@" || die "ERROR: $name not found"
593 }
594
595 require2(){
596     name="$1"
597     headers="$2"
598     func="$3"
599     shift 3
600     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
601 }
602
603 check_foo_config(){
604     cfg=$1
605     pkg=$2
606     header=$3
607     func=$4
608     shift 4
609     disable $cfg
610     check_cmd ${pkg}-config --version
611     err=$?
612     if test "$err" = 0; then
613         temp_cflags `${pkg}-config --cflags`
614         temp_extralibs `${pkg}-config --libs`
615         check_lib "$@" $header $func && enable $cfg
616     fi
617     return $err
618 }
619
620 apply(){
621     file=$1
622     shift
623     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
624 }
625
626 COMPONENT_LIST="
627     bsfs
628     decoders
629     demuxers
630     encoders
631     filters
632     indevs
633     muxers
634     outdevs
635     parsers
636     protocols
637 "
638
639 CONFIG_LIST="
640     $COMPONENT_LIST
641     avfilter
642     avfilter_lavf
643     avisynth
644     beos_netserver
645     bzlib
646     ffmpeg
647     ffplay
648     ffserver
649     gpl
650     gprof
651     gray
652     hardcoded_tables
653     ipv6
654     liba52
655     liba52bin
656     libamr_nb
657     libamr_wb
658     libdc1394
659     libdirac
660     libfaac
661     libfaad
662     libfaadbin
663     libgsm
664     libmp3lame
665     libnut
666     libschroedinger
667     libtheora
668     libvorbis
669     libx264
670     libxvid
671     memalign_hack
672     mlib
673     mpegaudio_hp
674     network
675     nonfree
676     postproc
677     powerpc_perf
678     small
679     swscale
680     vhook
681     x11grab
682     zlib
683 "
684
685 THREADS_LIST='
686     beosthreads
687     os2threads
688     pthreads
689     w32threads
690 '
691
692 ARCH_LIST='
693     alpha
694     armv4l
695     bfin
696     ia64
697     m68k
698     mips
699     parisc
700     powerpc
701     s390
702     sh4
703     sparc
704     sparc64
705     x86
706     x86_32
707     x86_64
708 '
709
710 ARCH_EXT_LIST='
711     altivec
712     armv5te
713     armv6
714     armvfp
715     iwmmxt
716     mmi
717     mmx
718     mmx2
719     neon
720     ssse3
721     vis
722 '
723
724 HAVE_LIST="
725     $ARCH_EXT_LIST
726     $THREADS_LIST
727     altivec_h
728     altivec_vector_braces
729     arpa_inet_h
730     bswap
731     byteswap_h
732     closesocket
733     cmov
734     conio_h
735     dcbzl
736     dev_bktr_ioctl_bt848_h
737     dev_bktr_ioctl_meteor_h
738     dev_ic_bt8xx_h
739     dev_video_meteor_ioctl_meteor_h
740     dev_video_bktr_ioctl_bt848_h
741     dlfcn_h
742     dlopen
743     ebp_available
744     ebx_available
745     fast_64bit
746     fast_cmov
747     fast_unaligned
748     fork
749     freetype2
750     gethrtime
751     GetProcessTimes
752     getrusage
753     imlib2
754     inet_aton
755     inline_asm
756     libdc1394_1
757     libdc1394_2
758     llrint
759     lrint
760     lrintf
761     machine_ioctl_bt848_h
762     machine_ioctl_meteor_h
763     malloc_h
764     memalign
765     mkstemp
766     pld
767     ppc64
768     round
769     roundf
770     sdl
771     sdl_video_size
772     socklen_t
773     soundcard_h
774     poll_h
775     sys_mman_h
776     sys_resource_h
777     sys_select_h
778     sys_soundcard_h
779     termios_h
780     threads
781     winsock2_h
782 "
783
784 CMDLINE_SELECT="
785     $ARCH_EXT_LIST
786     $CONFIG_LIST
787     $THREADS_LIST
788     cross_compile
789     debug
790     extra_warnings
791     logging
792     optimizations
793     shared
794     static
795     stripping
796 "
797
798 PATHS_LIST='
799     bindir
800     incdir
801     libdir
802     mandir
803     prefix
804     shlibdir
805 '
806
807 CMDLINE_SET="
808     $PATHS_LIST
809     arch
810     build_suffix
811     cc
812     cpu
813     cross_prefix
814     logfile
815     source_path
816     target_os
817 "
818
819 # code dependency declarations
820
821 # architecture extensions
822 altivec_deps="powerpc"
823 armv5te_deps="armv4l"
824 armv6_deps="armv4l"
825 armvfp_deps="armv4l"
826 iwmmxt_deps="armv4l"
827 mmi_deps="mips"
828 mmx_deps="x86"
829 mmx2_deps="x86 mmx"
830 neon_deps="armv4l"
831 ssse3_deps="x86"
832 vis_deps="sparc"
833
834 # system headers and functions
835 byteswap_h_deps="!armv4l"
836
837 # decoders / encoders
838 ac3_decoder_deps="gpl !liba52"
839 dxa_decoder_deps="zlib"
840 flashsv_decoder_deps="zlib"
841 flashsv_encoder_deps="zlib"
842 mlp_decoder_deps="mlp_parser"
843 mpeg_xvmc_decoder_deps="xvmc"
844 png_decoder_deps="zlib"
845 png_encoder_deps="zlib"
846 zmbv_decoder_deps="zlib"
847 zmbv_encoder_deps="zlib"
848
849 # external libraries
850 liba52_decoder_deps="liba52"
851 liba52bin_decoder_extralibs='$ldl'
852 libamr_nb_decoder_deps="libamr_nb"
853 libamr_nb_encoder_deps="libamr_nb"
854 libamr_wb_decoder_deps="libamr_wb"
855 libamr_wb_encoder_deps="libamr_wb"
856 libdirac_decoder_deps="libdirac !libschroedinger"
857 libdirac_encoder_deps="libdirac"
858 libfaac_encoder_deps="libfaac"
859 libfaad_decoder_deps="libfaad"
860 libfaadbin_decoder_extralibs='$ldl'
861 libgsm_decoder_deps="libgsm"
862 libgsm_encoder_deps="libgsm"
863 libgsm_ms_decoder_deps="libgsm"
864 libgsm_ms_encoder_deps="libgsm"
865 libmp3lame_encoder_deps="libmp3lame"
866 libschroedinger_decoder_deps="libschroedinger"
867 libschroedinger_encoder_deps="libschroedinger"
868 libtheora_encoder_deps="libtheora"
869 libvorbis_encoder_deps="libvorbis"
870 libx264_encoder_deps="libx264"
871 libxvid_encoder_deps="libxvid"
872 mpeg4aac_decoder_deps="libfaad"
873
874 # demuxers / muxers
875 ac3_demuxer_deps="ac3_parser"
876 audio_beos_demuxer_deps="audio_beos"
877 audio_beos_demuxer_extralibs="-lmedia -lbe"
878 audio_beos_muxer_deps="audio_beos"
879 audio_beos_muxer_extralibs="-lmedia -lbe"
880 avisynth_demuxer_deps="avisynth"
881 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
882 dirac_demuxer_deps="dirac_parser"
883 dv1394_demuxer_deps="dv1394 dv_demuxer"
884 libdc1394_demuxer_deps="libdc1394"
885 libnut_demuxer_deps="libnut"
886 libnut_muxer_deps="libnut"
887 mp3_demuxer_deps="mpegaudio_parser"
888 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
889 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
890 redir_demuxer_deps="network"
891 rtp_muxer_deps="network rtp_protocol"
892 rtsp_demuxer_deps="sdp_demuxer"
893 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
894 v4l_demuxer_deps="linux_videodev_h"
895 v4l2_demuxer_deps="linux_videodev2_h"
896 vfwcap_demuxer_deps="capCreateCaptureWindow"
897 vfwcap_demuxer_extralibs="-lvfw32"
898 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
899 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
900
901 # protocols
902 http_protocol_deps="network"
903 rtp_protocol_deps="udp_protocol"
904 tcp_protocol_deps="network"
905 udp_protocol_deps="network"
906
907 # filters
908 movie_filter_deps="avfilter_lavf"
909
910 # programs
911 ffplay_deps="sdl"
912 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
913 ffserver_extralibs='$ldl'
914 vhook_extralibs='$ldl'
915
916
917 # default parameters
918
919 logfile="config.err"
920
921 # installation paths
922 prefix_default="/usr/local"
923 bindir_default='${prefix}/bin'
924 incdir_default='${prefix}/include'
925 libdir_default='${prefix}/lib'
926 mandir_default='${prefix}/share/man'
927 shlibdir_default="$libdir_default"
928
929 # toolchain
930 cc="gcc"
931 ar="ar"
932 nm="nm"
933 ranlib="ranlib"
934 strip="strip"
935 asmalign_pot="unknown"
936 ln_s="ln -sf"
937
938 # machine
939 arch=`uname -m`
940 cpu="generic"
941
942 # OS
943 target_os=$(tolower $(uname -s))
944
945 # libraries
946 enable bzlib
947 enable zlib
948
949 # configurable options
950 enable debug
951 enable ffmpeg
952 enable ffplay
953 enable ffserver
954 enable ipv6
955 enable mpegaudio_hp
956 enable network
957 enable optimizations
958 enable protocols
959 enable static
960 enable stripping
961 vhook="default"
962
963 # build settings
964 SHFLAGS='-shared -Wl,-soname,$$(@F)'
965 VHOOKSHFLAGS='$(SHFLAGS)'
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         enable dv1394
1297         ;;
1298     irix*)
1299         target_os=irix
1300         ranlib="echo ignoring ranlib"
1301         ;;
1302     os/2*)
1303         strip="lxlite"
1304         ln_s="cp -f"
1305         EXESUF=".exe"
1306         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1307         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1308         FFSERVERLDFLAGS=""
1309         LIBSUF="_s.a"
1310         SLIBPREF=""
1311         SLIBSUF=".dll"
1312         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1313         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1314         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1315           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1316           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1317           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1318           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1319           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1320         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1321           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1322         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1323         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1324         disable vhook
1325         ;;
1326     interix)
1327         disable vhook
1328         ;;
1329
1330     *)
1331         target_os="${target_os}-UNKNOWN"
1332         ;;
1333 esac
1334
1335 set_default $PATHS_LIST
1336
1337 add_extralibs $osextralibs
1338
1339 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1340 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1341
1342 test -n "$cross_prefix" && enable cross_compile
1343
1344 # we need to build at least one lib type
1345 if ! enabled_any static shared; then
1346     cat <<EOF
1347 At least one library type must be built.
1348 Specify --enable-static to build the static libraries or --enable-shared to
1349 build the shared libraries as well. To only build the shared libraries specify
1350 --disable-static in addition to --enable-shared.
1351 EOF
1352     exit 1;
1353 fi
1354
1355 disabled static && LIBNAME=""
1356
1357 if enabled_any libfaad libfaadbin ; then
1358     if check_header faad.h; then
1359         check_cc << EOF
1360 #include <faad.h>
1361 #ifndef FAAD2_VERSION
1362 ok faad1
1363 #endif
1364 int main(void) { return 0; }
1365 EOF
1366         test $? = 0 && enable libfaad2
1367     else
1368         die "FAAD test failed."
1369     fi
1370 fi
1371
1372
1373 if ! enabled gpl; then
1374     die_gpl_disabled(){
1375         name=$1
1376         shift
1377         enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1378     }
1379     die_gpl_disabled "The Postprocessing code" postproc
1380     die_gpl_disabled "liba52"                  liba52
1381     die_gpl_disabled "libx264"                 libx264
1382     die_gpl_disabled "libxvidcore"             libxvid
1383     die_gpl_disabled "FAAD2"                   libfaad2
1384     die_gpl_disabled "The X11 grabber"         x11grab
1385     die_gpl_disabled "The software scaler"     swscale
1386 fi
1387
1388 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1389     die "libamr is nonfree and --enable-nonfree is not specified."
1390 fi
1391
1392 check_deps $ARCH_EXT_LIST
1393
1394 test -z "$need_memalign" && need_memalign="$mmx"
1395
1396 #Darwin CC versions
1397 if test $target_os = darwin; then
1398     if $cc -v 2>&1 | grep -q xlc; then
1399         add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1400     else
1401         add_cflags "-pipe"
1402         check_cflags "-force_cpusubtype_ALL"
1403         check_cflags "-Wno-sign-compare"
1404         enabled shared || check_cflags -mdynamic-no-pic
1405     fi
1406 fi
1407
1408 disabled optimizations || check_cflags -fomit-frame-pointer
1409
1410 # Add processor-specific flags
1411 if test $cpu != "generic"; then
1412     warn_altivec(){
1413         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1414     }
1415     case $cpu in
1416         601|ppc601|PowerPC601)
1417             add_cflags "-mcpu=601"
1418             warn_altivec enabled PPC601
1419         ;;
1420         603*|ppc603*|PowerPC603*)
1421             add_cflags "-mcpu=603"
1422             warn_altivec enabled PPC603
1423         ;;
1424         604*|ppc604*|PowerPC604*)
1425             add_cflags "-mcpu=604"
1426             warn_altivec enabled PPC604
1427         ;;
1428         G3|g3|75*|ppc75*|PowerPC75*)
1429             add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1430             warn_altivec enabled PPC75x
1431         ;;
1432         G4|g4|745*|ppc745*|PowerPC745*)
1433             add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1434             warn_altivec disabled PPC745x
1435         ;;
1436         74*|ppc74*|PowerPC74*)
1437             add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1438             warn_altivec disabled PPC74xx
1439         ;;
1440         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1441             add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1442             warn_altivec disabled PPC970
1443             enable ppc64
1444         ;;
1445         Cell|CELL|cell)
1446             add_cflags "-mcpu=cell"
1447             warn_altivec disabled Cell
1448             enable ppc64
1449         ;;
1450         # targets that do NOT support conditional mov (cmov)
1451         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1452             add_cflags "-march=$cpu"
1453             disable cmov
1454         ;;
1455         # targets that do support conditional mov (cmov)
1456         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1457             add_cflags "-march=$cpu"
1458             enable cmov
1459             enable fast_cmov
1460         ;;
1461         # targets that do support conditional mov but on which it's slow
1462         pentium4|pentium4m|prescott|nocona)
1463             add_cflags "-march=$cpu"
1464             enable cmov
1465             disable fast_cmov
1466         ;;
1467         sparc64)
1468             add_cflags "-mcpu=v9"
1469         ;;
1470         arm*|cortex*)
1471             add_cflags "-mcpu=$cpu"
1472         ;;
1473         *)
1474             echo "WARNING: Unknown CPU \"$cpu\", ignored."
1475         ;;
1476     esac
1477 fi
1478
1479 # make sure we can execute files in $TMPDIR
1480 cat > $TMPSH 2>> $logfile <<EOF
1481 #! /bin/sh
1482 EOF
1483 chmod +x $TMPSH >> $logfile 2>&1
1484 if ! $TMPSH >> $logfile 2>&1; then
1485     cat <<EOF
1486 Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1487 variable to another directory and make sure that $TMPDIR1 is not mounted
1488 noexec.
1489 EOF
1490     die "Sanity test failed."
1491 fi
1492 rm $TMPSH
1493
1494 # compiler sanity check
1495 check_exec <<EOF
1496 int main(void){ return 0; }
1497 EOF
1498 if test "$?" != 0; then
1499     echo "$cc is unable to create an executable file."
1500     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1501         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1502         echo "Only do this if you know what cross compiling means."
1503     fi
1504     die "C compiler test failed."
1505 fi
1506
1507 check_cc <<EOF || die "Symbol mangling check failed."
1508 int ff_extern;
1509 EOF
1510 sym=$($nm -P -g $TMPO | grep ff_extern)
1511 extern_prefix=${sym%%ff_extern*}
1512
1513 check_asm inline_asm '""'
1514
1515 if enabled x86; then
1516     # check whether EBP is available on x86
1517     # As 'i' is stored on the stack, this program will crash
1518     # if the base pointer is used to access it because the
1519     # base pointer is cleared in the inline assembly code.
1520     check_exec_crash <<EOF && enable ebp_available
1521     volatile int i=0;
1522     asm volatile (
1523         "xorl %%ebp, %%ebp"
1524     ::: "%ebp");
1525     return i;
1526 EOF
1527
1528     # check wether EBX is available on x86
1529     check_asm ebx_available '"":::"%ebx"'
1530
1531     # check whether binutils is new enough to compile SSSE3/MMX2
1532     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1533     enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1534
1535     check_asm bswap '"bswap %%eax" ::: "%eax"'
1536 fi
1537
1538 # check for assembler specific support
1539
1540 if test $arch = "powerpc"; then
1541 check_cc <<EOF && enable dcbzl
1542 int main(void) {
1543     register long zero = 0;
1544     char data[1024];
1545     asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1546 return 0;
1547 }
1548 EOF
1549 fi
1550
1551 # check for SIMD availability
1552
1553 # AltiVec flags: The FSF version of GCC differs from the Apple version
1554 if enabled altivec; then
1555     check_cflags -maltivec -mabi=altivec &&
1556         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1557         check_cflags -faltivec
1558
1559     # check if our compiler supports Motorola AltiVec C API
1560     check_cc <<EOF || disable altivec
1561 $inc_altivec_h
1562 int main(void) {
1563     vector signed int v1, v2, v3;
1564     v1 = vec_add(v2,v3);
1565     return 0;
1566 }
1567 EOF
1568
1569     # check if our compiler supports braces for vector declarations
1570     check_cc <<EOF && enable altivec_vector_braces
1571 $inc_altivec_h
1572 #define AVV(x...) {x}
1573 int main (void) { (vector int) AVV(1); return 0; }
1574 EOF
1575 fi
1576
1577 # We have to check if pld is a nop and disable it.
1578 enabled armv4l  && check_asm pld     '"pld [r0]"'
1579 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1580 enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1581 enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1582 enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1583 enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1584 enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1585 enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1586
1587 enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1588
1589 # ---
1590 # big/little-endian test
1591 check_cc <<EOF || die "endian test failed"
1592 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1593 EOF
1594 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1595
1596 # ---
1597 # check availability of some header files
1598
1599 if check_func dlopen; then
1600     ldl=
1601 elif check_func dlopen -ldl; then
1602     ldl=-ldl
1603 fi
1604
1605 check_func  fork
1606 check_func  gethrtime
1607 check_func  getrusage
1608 check_func  inet_aton $network_extralibs
1609 check_func  memalign
1610 check_func  mkstemp
1611 check_func2 windows.h GetProcessTimes
1612
1613 check_header byteswap.h
1614 check_header conio.h
1615 check_header dlfcn.h
1616 check_header malloc.h
1617 check_header sys/mman.h
1618 check_header sys/resource.h
1619 check_header termios.h
1620
1621 if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1622     die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1623 fi
1624
1625 enabled  zlib && check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1626 enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1627
1628 # ffserver uses poll(),
1629 # if it's not found we can emulate it using select().
1630 if enabled ffserver; then
1631     check_header poll.h
1632     check_header sys/select.h
1633 fi
1634
1635 # check for some common methods of building with pthread support
1636 # do this before the optional library checks as some of them require pthreads
1637 if enabled pthreads; then
1638     if check_func pthread_create; then
1639         :
1640     elif check_func pthread_create -pthread; then
1641         add_cflags -pthread
1642         add_extralibs -pthread
1643     elif check_func pthread_create -pthreads; then
1644         add_cflags -pthreads
1645         add_extralibs -pthreads
1646     elif check_func pthread_create -lpthreadGC2; then
1647         add_extralibs -lpthreadGC2
1648     elif ! check_lib pthread.h pthread_create -lpthread; then
1649         die "ERROR: can't find pthreads library"
1650     fi
1651 fi
1652
1653 for thread in $THREADS_LIST; do
1654     if enabled $thread; then
1655         test -n "$thread_type" &&
1656             die "ERROR: Only one thread type must be selected." ||
1657             thread_type="$thread"
1658     fi
1659 done
1660
1661 check_lib math.h sin -lm
1662
1663 # test for C99 functions in math.h
1664 for func in llrint lrint lrintf round roundf; do
1665     check_exec <<EOF && enable $func || disable $func
1666 #define _ISOC9X_SOURCE  1
1667 #include <math.h>
1668 int main(void) { return ($func(3.999f) > 0)?0:1; }
1669 EOF
1670 done
1671
1672 # these are off by default, so fail if requested and not available
1673 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1674 enabled liba52     && require  liba52 a52dec/a52.h a52_init -la52
1675 enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1676 enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1677 enabled libdirac   && add_cflags "$(pkg-config --cflags dirac)" \
1678                    && require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder \
1679                    && require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1680 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1681 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1682 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1683 enabled libmp3lame && require  LAME lame/lame.h lame_init -lmp3lame -lm
1684 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
1685 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) \
1686                         && require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
1687 enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
1688 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
1689 enabled libx264    && require  x264 x264.h x264_encoder_open -lx264 -lm
1690 enabled libxvid    && require  Xvid xvid.h xvid_global -lxvidcore
1691 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1692
1693 # libdc1394 check
1694 if enabled libdc1394; then
1695     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
1696         enable libdc1394_2; } ||
1697     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
1698         enable libdc1394_1; } ||
1699     die "ERROR: No version of libdc1394 found "
1700 fi
1701
1702
1703 _restrict=
1704 for restrict_keyword in restrict __restrict__ __restrict; do
1705     check_cc <<EOF && _restrict=$restrict_keyword && break
1706 void foo(char * $restrict_keyword p);
1707 EOF
1708 done
1709
1710 test "$vhook" = "default" && vhook="$dlopen"
1711
1712 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1713     disable vhook
1714     echo
1715     echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1716     echo "Patches welcome."
1717     echo
1718 fi
1719
1720 if enabled vhook; then
1721     check_ldflags -rdynamic
1722     check_ldflags -export-dynamic
1723 fi
1724
1725 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1726 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1727
1728 ##########################################
1729 # SDL check
1730
1731 disable sdl_too_old
1732 disable sdl
1733 SDL_CONFIG="${cross_prefix}sdl-config"
1734 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
1735     sdl_cflags=`"${SDL_CONFIG}" --cflags`
1736     temp_cflags $sdl_cflags
1737     temp_extralibs `"${SDL_CONFIG}" --libs`
1738     if check_lib2 SDL.h SDL_Init; then
1739         _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1740         if test "$_sdlversion" -lt 121 ; then
1741             enable sdl_too_old
1742         else
1743             enable sdl
1744             check_cc $sdl_cflags <<EOF && enable sdl_video_size
1745 #include <SDL.h>
1746 int main(int argc, char **argv){
1747     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1748     int w = vi->current_w;
1749     return 0;
1750 }
1751 EOF
1752         fi
1753     fi
1754     restore_flags
1755 fi
1756
1757 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1758
1759 check_type sys/socket.h socklen_t
1760
1761 ##########################################
1762 # Network check
1763
1764 if enabled network; then
1765     # Prefer arpa/inet.h over winsock2
1766     if check_header arpa/inet.h ; then
1767         check_func closesocket
1768     elif check_header winsock2.h ; then
1769         network_extralibs="-lws2_32"
1770         check_type ws2tcpip.h socklen_t
1771         check_func2 winsock2.h closesocket
1772     fi
1773 fi
1774
1775 ##########################################
1776 # IPv6 check
1777
1778 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1779 #include <sys/types.h>
1780 #include <sys/socket.h>
1781 #include <netinet/in.h>
1782 #include <netdb.h>
1783 int main(void) {
1784     struct sockaddr_storage saddr;
1785     struct ipv6_mreq mreq6;
1786     getaddrinfo(0,0,0,0);
1787     getnameinfo(0,0,0,0,0,0,0);
1788     IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1789 }
1790 EOF
1791
1792 check_header linux/videodev.h
1793 check_header linux/videodev2.h
1794
1795 check_func2 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
1796
1797 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1798 { check_header dev/bktr/ioctl_meteor.h &&
1799   check_header dev/bktr/ioctl_bt848.h; } ||
1800 { check_header machine/ioctl_meteor.h &&
1801   check_header machine/ioctl_bt848.h; } ||
1802 { check_header dev/video/meteor/ioctl_meteor.h &&
1803   check_header dev/video/bktr/ioctl_bt848.h; } ||
1804 check_header dev/ic/bt8xx.h
1805
1806 check_header sys/soundcard.h
1807 check_header soundcard.h
1808
1809 # deal with the X11 frame grabber
1810 enabled x11grab                         &&
1811 check_header X11/Xlib.h                 &&
1812 check_header X11/extensions/XShm.h      &&
1813 check_func XOpenDisplay -lX11           &&
1814 check_func XShmCreateImage -lX11 -lXext
1815
1816 enabled debug && add_cflags -g"$debuglevel"
1817
1818 # add some useful compiler flags if supported
1819 check_cflags -Wdeclaration-after-statement
1820 check_cflags -Wall
1821 check_cflags -Wno-switch
1822 check_cflags -Wdisabled-optimization
1823 check_cflags -Wpointer-arith
1824 check_cflags -Wredundant-decls
1825 check_cflags -Wno-pointer-sign
1826 check_cflags -Wcast-qual
1827 check_cflags -Wwrite-strings
1828 check_cflags -Wtype-limits
1829 enabled extra_warnings && check_cflags -Winline
1830
1831 # add some linker flags
1832 check_ldflags -Wl,--warn-common
1833 check_ldflags -Wl,--as-needed
1834 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'
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