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