Explain the difference between HAVE_LIST and CONFIG_LIST in a short comment.
[libav.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 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
627 # system-dependent things.
628
629 COMPONENT_LIST="
630     bsfs
631     decoders
632     demuxers
633     encoders
634     filters
635     indevs
636     muxers
637     outdevs
638     parsers
639     protocols
640 "
641
642 CONFIG_LIST="
643     $COMPONENT_LIST
644     avfilter
645     avfilter_lavf
646     avisynth
647     beos_netserver
648     bzlib
649     ffmpeg
650     ffplay
651     ffserver
652     gpl
653     gprof
654     gray
655     hardcoded_tables
656     ipv6
657     liba52
658     liba52bin
659     libamr_nb
660     libamr_wb
661     libdc1394
662     libdirac
663     libfaac
664     libfaad
665     libfaadbin
666     libgsm
667     libmp3lame
668     libnut
669     libschroedinger
670     libtheora
671     libvorbis
672     libx264
673     libxvid
674     memalign_hack
675     mlib
676     mpegaudio_hp
677     network
678     nonfree
679     postproc
680     powerpc_perf
681     small
682     swscale
683     vhook
684     x11grab
685     zlib
686 "
687
688 THREADS_LIST='
689     beosthreads
690     os2threads
691     pthreads
692     w32threads
693 '
694
695 ARCH_LIST='
696     alpha
697     armv4l
698     bfin
699     ia64
700     m68k
701     mips
702     parisc
703     powerpc
704     s390
705     sh4
706     sparc
707     sparc64
708     x86
709     x86_32
710     x86_64
711 '
712
713 ARCH_EXT_LIST='
714     altivec
715     armv5te
716     armv6
717     armvfp
718     iwmmxt
719     mmi
720     mmx
721     mmx2
722     neon
723     ssse3
724     vis
725 '
726
727 HAVE_LIST="
728     $ARCH_EXT_LIST
729     $THREADS_LIST
730     altivec_h
731     arpa_inet_h
732     bswap
733     byteswap_h
734     closesocket
735     cmov
736     conio_h
737     dcbzl
738     dev_bktr_ioctl_bt848_h
739     dev_bktr_ioctl_meteor_h
740     dev_ic_bt8xx_h
741     dev_video_meteor_ioctl_meteor_h
742     dev_video_bktr_ioctl_bt848_h
743     dlfcn_h
744     dlopen
745     ebp_available
746     ebx_available
747     fast_64bit
748     fast_cmov
749     fast_unaligned
750     fork
751     freetype2
752     gethrtime
753     GetProcessTimes
754     getrusage
755     imlib2
756     inet_aton
757     inline_asm
758     libdc1394_1
759     libdc1394_2
760     llrint
761     lrint
762     lrintf
763     machine_ioctl_bt848_h
764     machine_ioctl_meteor_h
765     malloc_h
766     memalign
767     mkstemp
768     pld
769     ppc64
770     round
771     roundf
772     sdl
773     sdl_video_size
774     socklen_t
775     soundcard_h
776     poll_h
777     sys_mman_h
778     sys_resource_h
779     sys_select_h
780     sys_soundcard_h
781     termios_h
782     threads
783     winsock2_h
784 "
785
786 CMDLINE_SELECT="
787     $ARCH_EXT_LIST
788     $CONFIG_LIST
789     $THREADS_LIST
790     cross_compile
791     debug
792     extra_warnings
793     logging
794     optimizations
795     shared
796     static
797     stripping
798 "
799
800 PATHS_LIST='
801     bindir
802     incdir
803     libdir
804     mandir
805     prefix
806     shlibdir
807 '
808
809 CMDLINE_SET="
810     $PATHS_LIST
811     arch
812     build_suffix
813     cc
814     cpu
815     cross_prefix
816     logfile
817     source_path
818     target_os
819 "
820
821 # code dependency declarations
822
823 # architecture extensions
824 altivec_deps="powerpc"
825 armv5te_deps="armv4l"
826 armv6_deps="armv4l"
827 armvfp_deps="armv4l"
828 iwmmxt_deps="armv4l"
829 mmi_deps="mips"
830 mmx_deps="x86"
831 mmx2_deps="x86 mmx"
832 neon_deps="armv4l"
833 ssse3_deps="x86"
834 vis_deps="sparc"
835
836 # system headers and functions
837 byteswap_h_deps="!armv4l"
838
839 # decoders / encoders
840 ac3_decoder_deps="gpl !liba52"
841 dxa_decoder_deps="zlib"
842 flashsv_decoder_deps="zlib"
843 flashsv_encoder_deps="zlib"
844 mlp_decoder_deps="mlp_parser"
845 mpeg_xvmc_decoder_deps="xvmc"
846 png_decoder_deps="zlib"
847 png_encoder_deps="zlib"
848 zmbv_decoder_deps="zlib"
849 zmbv_encoder_deps="zlib"
850
851 # external libraries
852 liba52_decoder_deps="liba52"
853 liba52bin_decoder_extralibs='$ldl'
854 libamr_nb_decoder_deps="libamr_nb"
855 libamr_nb_encoder_deps="libamr_nb"
856 libamr_wb_decoder_deps="libamr_wb"
857 libamr_wb_encoder_deps="libamr_wb"
858 libdirac_decoder_deps="libdirac !libschroedinger"
859 libdirac_encoder_deps="libdirac"
860 libfaac_encoder_deps="libfaac"
861 libfaad_decoder_deps="libfaad"
862 libfaadbin_decoder_extralibs='$ldl'
863 libgsm_decoder_deps="libgsm"
864 libgsm_encoder_deps="libgsm"
865 libgsm_ms_decoder_deps="libgsm"
866 libgsm_ms_encoder_deps="libgsm"
867 libmp3lame_encoder_deps="libmp3lame"
868 libschroedinger_decoder_deps="libschroedinger"
869 libschroedinger_encoder_deps="libschroedinger"
870 libtheora_encoder_deps="libtheora"
871 libvorbis_encoder_deps="libvorbis"
872 libx264_encoder_deps="libx264"
873 libxvid_encoder_deps="libxvid"
874 mpeg4aac_decoder_deps="libfaad"
875
876 # demuxers / muxers
877 ac3_demuxer_deps="ac3_parser"
878 audio_beos_demuxer_deps="audio_beos"
879 audio_beos_demuxer_extralibs="-lmedia -lbe"
880 audio_beos_muxer_deps="audio_beos"
881 audio_beos_muxer_extralibs="-lmedia -lbe"
882 avisynth_demuxer_deps="avisynth"
883 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
884 dirac_demuxer_deps="dirac_parser"
885 dv1394_demuxer_deps="dv1394 dv_demuxer"
886 libdc1394_demuxer_deps="libdc1394"
887 libnut_demuxer_deps="libnut"
888 libnut_muxer_deps="libnut"
889 mp3_demuxer_deps="mpegaudio_parser"
890 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
891 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
892 redir_demuxer_deps="network"
893 rtp_muxer_deps="network rtp_protocol"
894 rtsp_demuxer_deps="sdp_demuxer"
895 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
896 v4l_demuxer_deps="linux_videodev_h"
897 v4l2_demuxer_deps="linux_videodev2_h"
898 vfwcap_demuxer_deps="capCreateCaptureWindow"
899 vfwcap_demuxer_extralibs="-lvfw32"
900 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
901 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
902
903 # protocols
904 http_protocol_deps="network"
905 rtp_protocol_deps="udp_protocol"
906 tcp_protocol_deps="network"
907 udp_protocol_deps="network"
908
909 # filters
910 movie_filter_deps="avfilter_lavf"
911
912 # programs
913 ffplay_deps="sdl"
914 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
915 ffserver_extralibs='$ldl'
916 vhook_extralibs='$ldl'
917
918
919 # default parameters
920
921 logfile="config.err"
922
923 # installation paths
924 prefix_default="/usr/local"
925 bindir_default='${prefix}/bin'
926 incdir_default='${prefix}/include'
927 libdir_default='${prefix}/lib'
928 mandir_default='${prefix}/share/man'
929 shlibdir_default="$libdir_default"
930
931 # toolchain
932 cc="gcc"
933 ar="ar"
934 nm="nm"
935 ranlib="ranlib"
936 strip="strip"
937 asmalign_pot="unknown"
938 ln_s="ln -sf"
939
940 # machine
941 arch=`uname -m`
942 cpu="generic"
943
944 # OS
945 target_os=$(tolower $(uname -s))
946
947 # libraries
948 enable bzlib
949 enable zlib
950
951 # configurable options
952 enable debug
953 enable ffmpeg
954 enable ffplay
955 enable ffserver
956 enable ipv6
957 enable mpegaudio_hp
958 enable network
959 enable optimizations
960 enable protocols
961 enable static
962 enable stripping
963 vhook="default"
964
965 # build settings
966 SHFLAGS='-shared -Wl,-soname,$$(@F)'
967 VHOOKSHFLAGS='$(SHFLAGS)'
968 FFSERVERLDFLAGS=-Wl,-E
969 LIBPREF="lib"
970 LIBSUF=".a"
971 FULLNAME='$(NAME)$(BUILDSUF)'
972 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
973 SLIBPREF="lib"
974 SLIBSUF=".so"
975 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
976 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
977 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
978 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
979
980 # gcc stupidly only outputs the basename of targets with -MM
981 DEPEND_CMD='$(CC) $(CFLAGS) -MM -MG $< | sed -e "/^\#.*/d" -e "1s,^,$(@D)/," -e "s,\\([[:space:]]\\)\\(version\\.h\\),\\1\$$(BUILD_ROOT_REL)/\\2,"'
982
983 # find source path
984 source_path="`dirname \"$0\"`"
985 enable source_path_used
986 if test -z "$source_path" -o "$source_path" = "." ; then
987     source_path="`pwd`"
988     disable source_path_used
989 else
990     source_path="`cd \"$source_path\"; pwd`"
991     echo "$source_path" | grep -q '[[:blank:]]' &&
992         die "Out of tree builds are impossible with whitespace in source path."
993 fi
994
995 FFMPEG_CONFIGURATION="$@"
996
997 find_things(){
998     thing=$1
999     pattern=$2
1000     file=$source_path/$3
1001     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1002 }
1003
1004 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1005 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1006 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1007 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1008 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1009 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1010 OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
1011 INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
1012 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1013 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1014
1015 enable $ARCH_EXT_LIST \
1016        $DECODER_LIST \
1017        $ENCODER_LIST \
1018        $PARSER_LIST \
1019        $BSF_LIST \
1020        $DEMUXER_LIST \
1021        $MUXER_LIST \
1022        $FILTER_LIST \
1023        $PROTOCOL_LIST \
1024        $INDEV_LIST \
1025        $OUTDEV_LIST \
1026
1027 die_unknown(){
1028     echo "Unknown option \"$1\"."
1029     echo "See $0 --help for available options."
1030     exit 1
1031 }
1032
1033 show_list() {
1034     suffix=_$1
1035     shift
1036     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1037     exit 0
1038 }
1039
1040 for opt do
1041     optval="${opt#*=}"
1042     case "$opt" in
1043     --extra-cflags=*) add_cflags "$optval"
1044     ;;
1045     --extra-ldflags=*) add_ldflags "$optval"
1046     ;;
1047     --extra-libs=*) add_extralibs "$optval"
1048     ;;
1049     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1050     ;;
1051     --enable-debug=*) debuglevel="$optval"
1052     ;;
1053     --enable-*=*|--disable-*=*)
1054     eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1055     case "$thing" in
1056         encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1057         *) die_unknown "$opt" ;;
1058     esac
1059     ;;
1060     --enable-?*|--disable-?*)
1061     eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1062     if is_in $option $COMPONENT_LIST; then
1063         eval $action \$$(toupper ${option%s})_LIST
1064     elif is_in $option $CMDLINE_SELECT; then
1065         $action $option
1066     else
1067         die_unknown $opt
1068     fi
1069     ;;
1070     --list-*)
1071         NAME="${opt#--list-}"
1072         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1073         NAME=${NAME%s}
1074         eval show_list $NAME \$$(toupper $NAME)_LIST
1075     ;;
1076     --help|-h) show_help
1077     ;;
1078     *)
1079     optname="${opt%=*}"
1080     optname="${optname#--}"
1081     optname=$(echo "$optname" | sed 's/-/_/g')
1082     is_in $optname $CMDLINE_SET || die_unknown $opt
1083     eval $optname='$optval'
1084     ;;
1085     esac
1086 done
1087
1088 disabled logging && logfile=/dev/null
1089
1090 echo "# $0 $@" > $logfile
1091 set >> $logfile
1092
1093 cc="${cross_prefix}${cc}"
1094 ar="${cross_prefix}${ar}"
1095 nm="${cross_prefix}${nm}"
1096 ranlib="${cross_prefix}${ranlib}"
1097 strip="${cross_prefix}${strip}"
1098
1099 # set temporary file name
1100 if test ! -z "$TMPDIR" ; then
1101     TMPDIR1="${TMPDIR}"
1102 elif test ! -z "$TEMPDIR" ; then
1103     TMPDIR1="${TEMPDIR}"
1104 else
1105     TMPDIR1="/tmp"
1106 fi
1107
1108 TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
1109 TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
1110 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
1111 TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
1112 TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
1113 TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
1114
1115 case "$arch" in
1116     i386|i486|i586|i686|i86pc|BePC)
1117         arch="x86_32"
1118         enable fast_unaligned
1119     ;;
1120     x86_64|amd64)
1121         arch="x86_32"
1122         enable fast_unaligned
1123         check_cc <<EOF && enable fast_64bit && arch="x86_64"
1124         int test[sizeof(char*) - 7];
1125 EOF
1126     ;;
1127     # armv4l is a subset of armv[567]*l
1128     arm|armv[4567]*l)
1129         arch="armv4l"
1130     ;;
1131     alpha)
1132         arch="alpha"
1133         enable fast_64bit
1134     ;;
1135     "Power Macintosh"|ppc|powerpc)
1136         arch="powerpc"
1137     ;;
1138     ppc64)
1139         arch="powerpc"
1140         enable fast_64bit
1141     ;;
1142     mips|mipsel|IP*)
1143         arch="mips"
1144     ;;
1145     sun4u|sparc64)
1146         arch="sparc64"
1147         enable fast_64bit
1148     ;;
1149     sparc)
1150         arch="sparc"
1151     ;;
1152     sh4)
1153         arch="sh4"
1154     ;;
1155     parisc)
1156         arch="parisc"
1157     ;;
1158     parisc64)
1159         arch="parisc"
1160         enable fast_64bit
1161     ;;
1162     s390|s390x)
1163         arch="s390"
1164     ;;
1165     m68k)
1166         arch="m68k"
1167     ;;
1168     ia64)
1169         arch="ia64"
1170         enable fast_64bit
1171     ;;
1172     bfin)
1173         arch="bfin"
1174     ;;
1175     *)
1176         arch="unknown"
1177     ;;
1178 esac
1179
1180 enable $arch
1181 enabled_any x86_32 x86_64 && enable x86
1182 enabled     sparc64       && enable sparc
1183
1184 # OS specific
1185 case $target_os in
1186     beos|haiku|zeta)
1187         prefix_default="$HOME/config"
1188         # helps building libavcodec
1189         add_cflags "-DPIC -fomit-frame-pointer"
1190         # 3 gcc releases known for BeOS, each with ugly bugs
1191         gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1192         case "$gcc_version" in
1193           2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1194             disable mmx
1195             ;;
1196           *20010315*) echo "BeBits gcc"
1197             add_cflags "-fno-expensive-optimizations"
1198             ;;
1199         esac
1200         SHFLAGS=-nostart
1201         # enable BeOS things
1202         enable audio_beos
1203         # no need for libm, but the inet stuff
1204         # Check for BONE
1205         # XXX: actually should check for NOT net_server
1206         if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1207             network_extralibs="-lbind -lsocket"
1208         else
1209             enable beos_netserver
1210             network_extralibs="-lnet"
1211         fi ;;
1212     sunos)
1213         FFSERVERLDFLAGS=""
1214         SHFLAGS='-shared -Wl,-h,$$(@F)'
1215         network_extralibs="-lsocket -lnsl"
1216         ;;
1217     netbsd)
1218         oss_demuxer_extralibs="-lossaudio"
1219         oss_muxer_extralibs="-lossaudio"
1220         ;;
1221     openbsd)
1222         disable need_memalign
1223         LIBOBJFLAGS='$(PIC)'
1224         SHFLAGS='-shared'
1225         SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1226         SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1227         SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1228         oss_demuxer_extralibs="-lossaudio"
1229         oss_muxer_extralibs="-lossaudio"
1230         ;;
1231     freebsd)
1232         disable need_memalign
1233         ;;
1234     bsd/os)
1235         osextralibs="-lpoll -lgnugetopt"
1236         strip="strip -d"
1237         ;;
1238     darwin)
1239         disable need_memalign
1240         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1241         VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1242         strip="strip -x"
1243         FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1244         SLIBSUF=".dylib"
1245         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1246         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1247         FFSERVERLDFLAGS=-Wl,-bind_at_load
1248         ;;
1249     mingw32*)
1250         target_os=mingw32
1251         LIBTARGET=i386
1252         if test $arch = x86_64; then
1253             disable need_memalign
1254             LIBTARGET=x64
1255         fi
1256         shlibdir_default="$bindir_default"
1257         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1258         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1259         if enabled swscale; then
1260             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1261             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1262         fi
1263         disable ffserver
1264         SLIBPREF=""
1265         SLIBSUF=".dll"
1266         EXESUF=".exe"
1267         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1268         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1269         SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1270         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1271             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1272         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1273         SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1274         ;;
1275     cygwin*)
1276         target_os=cygwin
1277         shlibdir_default="$bindir_default"
1278         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1279         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1280         if enabled swscale; then
1281             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1282             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1283         fi
1284         EXESUF=".exe"
1285         SLIBPREF="cyg"
1286         SLIBSUF=".dll"
1287         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1288         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1289         SHFLAGS='-shared -Wl,--enable-auto-image-base'
1290         ;;
1291     *-dos|freedos|opendos)
1292         disable ffplay ffserver vhook
1293         disable $INDEV_LIST $OUTDEV_LIST
1294         network_extralibs="-lsocket"
1295         EXESUF=".exe"
1296         ;;
1297     linux)
1298         enable dv1394
1299         ;;
1300     irix*)
1301         target_os=irix
1302         ranlib="echo ignoring ranlib"
1303         ;;
1304     os/2*)
1305         strip="lxlite"
1306         ln_s="cp -f"
1307         EXESUF=".exe"
1308         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1309         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1310         FFSERVERLDFLAGS=""
1311         LIBSUF="_s.a"
1312         SLIBPREF=""
1313         SLIBSUF=".dll"
1314         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1315         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1316         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1317           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1318           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1319           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1320           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1321           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1322         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1323           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1324         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1325         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1326         disable vhook
1327         ;;
1328     interix)
1329         disable vhook
1330         ;;
1331
1332     *)
1333         target_os="${target_os}-UNKNOWN"
1334         ;;
1335 esac
1336
1337 set_default $PATHS_LIST
1338
1339 add_extralibs $osextralibs
1340
1341 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1342 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1343
1344 test -n "$cross_prefix" && enable cross_compile
1345
1346 # we need to build at least one lib type
1347 if ! enabled_any static shared; then
1348     cat <<EOF
1349 At least one library type must be built.
1350 Specify --enable-static to build the static libraries or --enable-shared to
1351 build the shared libraries as well. To only build the shared libraries specify
1352 --disable-static in addition to --enable-shared.
1353 EOF
1354     exit 1;
1355 fi
1356
1357 disabled static && LIBNAME=""
1358
1359 if enabled_any libfaad libfaadbin ; then
1360     if check_header faad.h; then
1361         check_cc << EOF
1362 #include <faad.h>
1363 #ifndef FAAD2_VERSION
1364 ok faad1
1365 #endif
1366 int main(void) { return 0; }
1367 EOF
1368         test $? = 0 && enable libfaad2
1369     else
1370         die "FAAD test failed."
1371     fi
1372 fi
1373
1374
1375 if ! enabled gpl; then
1376     die_gpl_disabled(){
1377         name=$1
1378         shift
1379         enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1380     }
1381     die_gpl_disabled "The Postprocessing code" postproc
1382     die_gpl_disabled "liba52"                  liba52
1383     die_gpl_disabled "libx264"                 libx264
1384     die_gpl_disabled "libxvidcore"             libxvid
1385     die_gpl_disabled "FAAD2"                   libfaad2
1386     die_gpl_disabled "The X11 grabber"         x11grab
1387     die_gpl_disabled "The software scaler"     swscale
1388 fi
1389
1390 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1391     die "libamr is nonfree and --enable-nonfree is not specified."
1392 fi
1393
1394 check_deps $ARCH_EXT_LIST
1395
1396 test -z "$need_memalign" && need_memalign="$mmx"
1397
1398 #Darwin CC versions
1399 if test $target_os = darwin; then
1400     if $cc -v 2>&1 | grep -q xlc; then
1401         add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1402     else
1403         add_cflags "-pipe"
1404         check_cflags "-force_cpusubtype_ALL"
1405         check_cflags "-Wno-sign-compare"
1406         enabled shared || check_cflags -mdynamic-no-pic
1407     fi
1408 fi
1409
1410 disabled optimizations || check_cflags -fomit-frame-pointer
1411
1412 # Add processor-specific flags
1413 if test $cpu != "generic"; then
1414     warn_altivec(){
1415         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1416     }
1417     case $cpu in
1418         601|ppc601|PowerPC601)
1419             add_cflags "-mcpu=601"
1420             warn_altivec enabled PPC601
1421         ;;
1422         603*|ppc603*|PowerPC603*)
1423             add_cflags "-mcpu=603"
1424             warn_altivec enabled PPC603
1425         ;;
1426         604*|ppc604*|PowerPC604*)
1427             add_cflags "-mcpu=604"
1428             warn_altivec enabled PPC604
1429         ;;
1430         G3|g3|75*|ppc75*|PowerPC75*)
1431             add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1432             warn_altivec enabled PPC75x
1433         ;;
1434         G4|g4|745*|ppc745*|PowerPC745*)
1435             add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1436             warn_altivec disabled PPC745x
1437         ;;
1438         74*|ppc74*|PowerPC74*)
1439             add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1440             warn_altivec disabled PPC74xx
1441         ;;
1442         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1443             add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1444             warn_altivec disabled PPC970
1445             enable ppc64
1446         ;;
1447         Cell|CELL|cell)
1448             add_cflags "-mcpu=cell"
1449             warn_altivec disabled Cell
1450             enable ppc64
1451         ;;
1452         # targets that do NOT support conditional mov (cmov)
1453         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1454             add_cflags "-march=$cpu"
1455             disable cmov
1456         ;;
1457         # targets that do support conditional mov (cmov)
1458         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1459             add_cflags "-march=$cpu"
1460             enable cmov
1461             enable fast_cmov
1462         ;;
1463         # targets that do support conditional mov but on which it's slow
1464         pentium4|pentium4m|prescott|nocona)
1465             add_cflags "-march=$cpu"
1466             enable cmov
1467             disable fast_cmov
1468         ;;
1469         sparc64)
1470             add_cflags "-mcpu=v9"
1471         ;;
1472         arm*|cortex*)
1473             add_cflags "-mcpu=$cpu"
1474         ;;
1475         *)
1476             echo "WARNING: Unknown CPU \"$cpu\", ignored."
1477         ;;
1478     esac
1479 fi
1480
1481 # make sure we can execute files in $TMPDIR
1482 cat > $TMPSH 2>> $logfile <<EOF
1483 #! /bin/sh
1484 EOF
1485 chmod +x $TMPSH >> $logfile 2>&1
1486 if ! $TMPSH >> $logfile 2>&1; then
1487     cat <<EOF
1488 Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1489 variable to another directory and make sure that $TMPDIR1 is not mounted
1490 noexec.
1491 EOF
1492     die "Sanity test failed."
1493 fi
1494 rm $TMPSH
1495
1496 # compiler sanity check
1497 check_exec <<EOF
1498 int main(void){ return 0; }
1499 EOF
1500 if test "$?" != 0; then
1501     echo "$cc is unable to create an executable file."
1502     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1503         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1504         echo "Only do this if you know what cross compiling means."
1505     fi
1506     die "C compiler test failed."
1507 fi
1508
1509 check_cc <<EOF || die "Symbol mangling check failed."
1510 int ff_extern;
1511 EOF
1512 sym=$($nm -P -g $TMPO | grep ff_extern)
1513 extern_prefix=${sym%%ff_extern*}
1514
1515 check_asm inline_asm '""'
1516
1517 if enabled x86; then
1518     # check whether EBP is available on x86
1519     # As 'i' is stored on the stack, this program will crash
1520     # if the base pointer is used to access it because the
1521     # base pointer is cleared in the inline assembly code.
1522     check_exec_crash <<EOF && enable ebp_available
1523     volatile int i=0;
1524     asm volatile (
1525         "xorl %%ebp, %%ebp"
1526     ::: "%ebp");
1527     return i;
1528 EOF
1529
1530     # check wether EBX is available on x86
1531     check_asm ebx_available '"":::"%ebx"'
1532
1533     # check whether binutils is new enough to compile SSSE3/MMX2
1534     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1535     enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1536
1537     check_asm bswap '"bswap %%eax" ::: "%eax"'
1538 fi
1539
1540 # check for assembler specific support
1541
1542 if test $arch = "powerpc"; then
1543 check_cc <<EOF && enable dcbzl
1544 int main(void) {
1545     register long zero = 0;
1546     char data[1024];
1547     asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1548 return 0;
1549 }
1550 EOF
1551 fi
1552
1553 # check for SIMD availability
1554
1555 # AltiVec flags: The FSF version of GCC differs from the Apple version
1556 if enabled altivec; then
1557     check_cflags -maltivec -mabi=altivec &&
1558         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1559         check_cflags -faltivec
1560
1561     # check if our compiler supports Motorola AltiVec C API
1562     check_cc <<EOF || disable altivec
1563 $inc_altivec_h
1564 int main(void) {
1565     vector signed int v1, v2, v3;
1566     v1 = vec_add(v2,v3);
1567     return 0;
1568 }
1569 EOF
1570
1571     # check if our compiler supports braces for vector declarations
1572     check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1573 $inc_altivec_h
1574 int main (void) { (vector int) {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 ##########################################
1761 # Network check
1762
1763 if enabled network; then
1764     check_type sys/socket.h socklen_t
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