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