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