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