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