]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/blob - configure
524a818ba969bd8a5dd7b452fd30f468d9b591a1
[frescor/ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000, 2001, 2002 Fabrice Bellard
6 # Copyright (c) 2005-2006 Diego Biurrun
7 # Copyright (c) 2005-2006 Mans Rullgard
8 #
9
10 # make sure we are running under a compatible shell
11 # try to make this part work with most shells
12
13 try_exec(){
14     echo "Trying shell $1"
15     type "$1" >/dev/null 2>&1 && exec "$@"
16 }
17
18 unset foo
19 (: ${foo%%bar}) 2>/dev/null
20 E1="$?"
21
22 (: ${foo?}) 2>/dev/null
23 E2="$?"
24
25 if test "$E1" != 0 || test "$E2" = 0; then
26     echo "Broken shell detected.  Trying alternatives."
27     export FF_CONF_EXEC
28     if test "0$FF_CONF_EXEC" -lt 1; then
29         FF_CONF_EXEC=1
30         try_exec bash "$0" "$@"
31     fi
32     if test "0$FF_CONF_EXEC" -lt 2; then
33         FF_CONF_EXEC=2
34         try_exec ksh "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 3; then
37         FF_CONF_EXEC=3
38         try_exec /usr/xpg4/bin/sh "$0" "$@"
39     fi
40     echo "No compatible shell script interpreter found."
41     echo "This configure script requires a POSIX-compatible shell"
42     echo "such as bash or ksh."
43     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
44     echo "Instead, install a working POSIX-compatible shell."
45     echo "Disabling this configure test will create a broken FFmpeg."
46     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
47         echo "This bash version ($BASH_VERSION) is broken on your platform."
48         echo "Upgrade to a later version if available."
49     fi
50     exit 1
51 fi
52
53 show_help(){
54   echo "Usage: configure [options]"
55   echo "Options: [defaults in brackets after descriptions]"
56   echo
57   echo "Standard options:"
58   echo "  --help                   print this message"
59   echo "  --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-optimizations  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     optimizations
729     shared
730     static
731 "
732
733 # code dependency declarations
734
735 # architecture extensions
736 altivec_deps="powerpc"
737 armv5te_deps="armv4l"
738 armv6_deps="armv4l"
739 iwmmxt_deps="armv4l"
740 mmi_deps="mips"
741 mmx_deps="x86"
742 ssse3_deps="x86"
743 vis_deps="sparc"
744
745 # decoders / encoders
746 ac3_decoder_deps="gpl"
747 dxa_decoder_deps="zlib"
748 flashsv_decoder_deps="zlib"
749 flashsv_encoder_deps="zlib"
750 flv_decoder_deps="h263_decoder"
751 h263_decoder_deps="h263_parser mpeg4video_parser"
752 h263i_decoder_deps="h263_decoder"
753 h264_decoder_deps="h264_parser"
754 mpeg_xvmc_decoder_deps="xvmc"
755 mpeg4_decoder_deps="h263_decoder"
756 msmpeg4v1_decoder_deps="h263_decoder"
757 msmpeg4v2_decoder_deps="h263_decoder"
758 msmpeg4v3_decoder_deps="h263_decoder"
759 png_decoder_deps="zlib"
760 png_encoder_deps="zlib"
761 svq3_decoder_deps="h264_parser"
762 vc1_decoder_deps="h263_decoder"
763 wmv1_decoder_deps="h263_decoder"
764 wmv2_decoder_deps="h263_decoder"
765 wmv3_decoder_deps="h263_decoder"
766 zmbv_decoder_deps="zlib"
767 zmbv_encoder_deps="zlib"
768
769 # external libraries
770 liba52_decoder_deps="liba52"
771 liba52bin_decoder_extralibs='$ldl'
772 libamr_nb_decoder_deps="libamr_nb"
773 libamr_nb_encoder_deps="libamr_nb"
774 libamr_wb_decoder_deps="libamr_wb"
775 libamr_wb_encoder_deps="libamr_wb"
776 libfaac_encoder_deps="libfaac"
777 libfaad_decoder_deps="libfaad"
778 libfaadbin_decoder_extralibs='$ldl'
779 libgsm_decoder_deps="libgsm"
780 libgsm_encoder_deps="libgsm"
781 libgsm_ms_decoder_deps="libgsm"
782 libgsm_ms_encoder_deps="libgsm"
783 libmp3lame_encoder_deps="libmp3lame"
784 libtheora_encoder_deps="libtheora"
785 libvorbis_decoder_deps="libvorbis"
786 libvorbis_encoder_deps="libvorbis"
787 libx264_encoder_deps="libx264"
788 libxvid_encoder_deps="libxvid"
789 mpeg4aac_decoder_deps="libfaad"
790
791 # demuxers / muxers
792 ac3_demuxer_deps="ac3_parser"
793 audio_beos_demuxer_deps="audio_beos"
794 audio_beos_demuxer_extralibs="-lmedia -lbe"
795 audio_beos_muxer_deps="audio_beos"
796 audio_beos_muxer_extralibs="-lmedia -lbe"
797 avisynth_demuxer_deps="avisynth"
798 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
799 dv1394_demuxer_deps="dv1394"
800 libdc1394_demuxer_deps="libdc1394"
801 libnut_demuxer_deps="libnut"
802 libnut_muxer_deps="libnut"
803 mp3_demuxer_deps="mpegaudio_parser"
804 ogg_muxer_deps="libogg"
805 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
806 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
807 redir_demuxer_deps="network"
808 rtp_muxer_deps="network mpegts_demuxer"
809 rtsp_demuxer_deps="rtp_protocol rtp_muxer"
810 sdp_demuxer_deps="rtsp_demuxer"
811 v4l2_demuxer_deps="linux_videodev2_h"
812 v4l_demuxer_deps="linux_videodev_h"
813 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
814 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
815
816 # protocols
817 http_protocol_deps="network"
818 rtp_protocol_deps="udp_protocol"
819 tcp_protocol_deps="network"
820 udp_protocol_deps="network"
821
822 # programs
823 ffplay_deps="sdl"
824 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
825 ffserver_extralibs='$ldl'
826 vhook_extralibs='$ldl'
827
828
829 # set temporary file name
830 if test ! -z "$TMPDIR" ; then
831     TMPDIR1="${TMPDIR}"
832 elif test ! -z "$TEMPDIR" ; then
833     TMPDIR1="${TEMPDIR}"
834 else
835     TMPDIR1="/tmp"
836 fi
837
838 TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
839 TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
840 TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
841 TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
842 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
843
844 # default parameters
845
846 enable logging
847 logfile="config.err"
848
849 # installation paths
850 PREFIX="/usr/local"
851 libdir='$(PREFIX)/lib'
852 shlibdir="$libdir"
853 incdir='$(PREFIX)/include/ffmpeg'
854 mandir='$(PREFIX)/share/man'
855 bindir='$(PREFIX)/bin'
856
857 # toolchain
858 cc="gcc"
859 ar="ar"
860 ranlib="ranlib"
861 make="make"
862 strip="strip"
863 asmalign_pot="unknown"
864 ln_s="ln -sf"
865
866 # machine
867 arch=`uname -m`
868 cpu="generic"
869
870 # OS
871 targetos=$(tolower $(uname -s))
872
873 # libraries
874 enable zlib
875
876 # configurable options
877 enable debug
878 enable dostrip
879 enable ffmpeg
880 enable ffplay
881 enable ffserver
882 enable ipv6
883 enable static
884 enable mpegaudio_hp
885 enable network
886 enable optimizations
887 enable protocols
888 vhook="default"
889
890 # build settings
891 SHFLAGS='-shared -Wl,-soname,$@'
892 VHOOKSHFLAGS='$(SHFLAGS)'
893 LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
894 FFSERVERLDFLAGS=-Wl,-E
895 LDCONFIG="ldconfig"
896 LIBPREF="lib"
897 LIBSUF=".a"
898 FULLNAME='$(NAME)$(BUILDSUF)'
899 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
900 SLIBPREF="lib"
901 SLIBSUF=".so"
902 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
903 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
904 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
905 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
906
907 # find source path
908 source_path="`dirname \"$0\"`"
909 enable source_path_used
910 if test -z "$source_path" -o "$source_path" = "." ; then
911     source_path="`pwd`"
912     disable source_path_used
913 else
914     source_path="`cd \"$source_path\"; pwd`"
915     echo "$source_path" | grep -q '[[:blank:]]' &&
916       die "Out of tree builds are impossible with whitespace in source path."
917 fi
918
919 FFMPEG_CONFIGURATION="$@"
920
921 ENCODER_LIST=`sed -n 's/^[^#]*ENC.*(.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
922 DECODER_LIST=`sed -n 's/^[^#]*DEC.*(.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
923 PARSER_LIST=`sed -n 's/^[^#]*PARSER.*(.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
924 BSF_LIST=`sed -n 's/^[^#]*BSF.*(.*, *\(.*\)).*/\1_bsf/p' "$source_path/libavcodec/allcodecs.c"`
925 MUXER_LIST=`sed -n 's/^[^#]*_MUX.*(.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
926 DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*(.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
927 PROTOCOL_LIST=`sed -n 's/^[^#]*PROTOCOL.*(.*, *\(.*\)).*/\1_protocol/p' "$source_path/libavformat/allformats.c"`
928
929 enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST $PROTOCOL_LIST $BSF_LIST
930 enable $ARCH_EXT_LIST
931
932 die_unknown(){
933     echo "Unknown option \"$1\"."
934     echo "See $0 --help for available options."
935     exit 1
936 }
937
938 show_list() {
939     suffix=_$1
940     shift
941     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
942     exit 0
943 }
944
945 for opt do
946   optval="${opt#*=}"
947   case "$opt" in
948   --log)
949   ;;
950   --log=*) logging="$optval"
951   ;;
952   --prefix=*) PREFIX="$optval"
953   ;;
954   --libdir=*) libdir="$optval"
955   ;;
956   --shlibdir=*) shlibdir="$optval"
957   ;;
958   --incdir=*) incdir="$optval"
959   ;;
960   --mandir=*) mandir="$optval"
961   ;;
962   --source-path=*) source_path="$optval"
963   ;;
964   --cross-prefix=*) cross_prefix="$optval"
965   ;;
966   --cross-compile) enable cross_compile
967   ;;
968   --target-os=*) targetos="$optval"
969   ;;
970   --cc=*) cc="$optval"
971   ;;
972   --make=*) make="$optval"
973   ;;
974   --extra-cflags=*) add_cflags "$optval"
975   ;;
976   --extra-ldflags=*) add_ldflags "$optval"
977   ;;
978   --extra-libs=*) add_extralibs "$optval"
979   ;;
980   --build-suffix=*) BUILDSUF="$optval"
981   ;;
982   --arch=*) arch="$optval"
983   ;;
984   --cpu=*) cpu="$optval"
985   ;;
986   --enable-sunmlib) enable mlib
987   ;;
988   --disable-strip) disable dostrip
989   ;;
990   --disable-encoders) disable $ENCODER_LIST
991   ;;
992   --disable-decoders) disable $DECODER_LIST
993   ;;
994   --disable-muxers) disable $MUXER_LIST
995   ;;
996   --disable-demuxers) disable $DEMUXER_LIST
997   ;;
998   --disable-parsers) disable $PARSER_LIST
999   ;;
1000   --disable-bsfs) disable $BSF_LIST
1001   ;;
1002   --disable-protocols) disable $PROTOCOL_LIST
1003   ;;
1004   --enable-*=*|--disable-*=*)
1005   eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1006   case "$thing" in
1007       encoder|decoder|muxer|demuxer|parser|bsf|protocol) $action ${optval}_${thing} ;;
1008       *) die_unknown "$opt" ;;
1009   esac
1010   ;;
1011   --enable-?*|--disable-?*)
1012   eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1013   echo "$CMDLINE_SELECT" | grep -q "^ *$option\$" || die_unknown $opt
1014   $action $option
1015   ;;
1016   --list-*)
1017     NAME="${opt#--list-}"
1018     is_in $NAME $COMPONENT_LIST || die_unknown $opt
1019     NAME=${NAME%s}
1020     eval show_list $NAME \$$(toupper $NAME)_LIST
1021   ;;
1022   --help|-h) show_help
1023   ;;
1024   *)
1025   die_unknown $opt
1026   ;;
1027   esac
1028 done
1029
1030 case "$arch" in
1031   i386|i486|i586|i686|i86pc|BePC)
1032     arch="x86_32"
1033     enable fast_unaligned
1034   ;;
1035   x86_64|amd64)
1036     arch="x86_32"
1037     enable fast_unaligned
1038     canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
1039     if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
1040       if [ -z "`echo $CFLAGS | grep -- -m32`"  ]; then
1041         arch="x86_64"
1042         enable fast_64bit
1043       fi
1044     fi
1045   ;;
1046   # armv4l is a subset of armv[567]*l
1047   arm|armv[4567]*l)
1048     arch="armv4l"
1049   ;;
1050   alpha)
1051     arch="alpha"
1052     enable fast_64bit
1053   ;;
1054   "Power Macintosh"|ppc|powerpc)
1055     arch="powerpc"
1056   ;;
1057   ppc64)
1058     arch="powerpc"
1059     enable fast_64bit
1060   ;;
1061   mips|mipsel|IP*)
1062     arch="mips"
1063   ;;
1064   sun4u|sparc64)
1065     arch="sparc64"
1066     enable fast_64bit
1067   ;;
1068   sparc)
1069     arch="sparc"
1070   ;;
1071   sh4)
1072     arch="sh4"
1073   ;;
1074   parisc)
1075     arch="parisc"
1076   ;;
1077   parisc64)
1078     arch="parisc"
1079     enable fast_64bit
1080   ;;
1081   s390|s390x)
1082     arch="s390"
1083   ;;
1084   m68k)
1085     arch="m68k"
1086   ;;
1087   ia64)
1088     arch="ia64"
1089     enable fast_64bit
1090   ;;
1091   bfin)
1092     arch="bfin"
1093   ;;
1094   *)
1095     arch="unknown"
1096   ;;
1097 esac
1098
1099 enable $arch
1100 enabled_any x86_32 x86_64 && enable x86
1101 enabled     sparc64       && enable sparc
1102
1103 # OS specific
1104 case $targetos in
1105   beos|haiku|zeta)
1106     PREFIX="$HOME/config"
1107     # helps building libavcodec
1108     add_cflags "-DPIC -fomit-frame-pointer"
1109     # 3 gcc releases known for BeOS, each with ugly bugs
1110     gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1111     case "$gcc_version" in
1112       2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1113         disable mmx
1114         ;;
1115       *20010315*) echo "BeBits gcc"
1116         add_cflags "-fno-expensive-optimizations"
1117         ;;
1118     esac
1119     LDCONFIG="echo ignoring ldconfig"
1120     SHFLAGS=-nostart
1121     # enable BeOS things
1122     enable audio_beos
1123     # no need for libm, but the inet stuff
1124     # Check for BONE
1125     # XXX: actually should check for NOT net_server
1126     if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
1127         network_extralibs="-lbind -lsocket"
1128     else
1129         enable beos_netserver
1130         network_extralibs="-lnet"
1131     fi ;;
1132   sunos)
1133     FFSERVERLDFLAGS=""
1134     SHFLAGS='-shared -Wl,-h,$@'
1135     network_extralibs="-lsocket -lnsl"
1136     ;;
1137   netbsd)
1138     oss_demuxer_extralibs="-lossaudio"
1139     oss_muxer_extralibs="-lossaudio"
1140     ;;
1141   openbsd)
1142     disable need_memalign
1143     LIBOBJFLAGS='$(PIC)'
1144     LDCONFIG='ldconfig -m $(SHLIBDIR)'
1145     SHFLAGS='-shared'
1146     SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
1147     SLIBNAME_WITH_VERSION='$(SLIBNAME)'
1148     SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
1149     oss_demuxer_extralibs="-lossaudio"
1150     oss_muxer_extralibs="-lossaudio"
1151     ;;
1152   freebsd)
1153     disable need_memalign
1154     ;;
1155   bsd/os)
1156     osextralibs="-lpoll -lgnugetopt"
1157     strip="strip -d"
1158     ;;
1159   darwin)
1160     disable need_memalign
1161     SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(SPPVERSION),-compatibility_version,$(SPPVERSION) -Wl,-read_only_relocs,suppress'
1162     VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$@'
1163     strip="strip -x"
1164     FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1165     SLIBSUF=".dylib"
1166     SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1167     SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1168     FFSERVERLDFLAGS=-Wl,-bind_at_load
1169     ;;
1170   mingw32*)
1171     targetos=mingw32
1172     shlibdir="$bindir"
1173     VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1174     VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1175     if enabled swscaler; then
1176         VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1177         VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1178     fi
1179     disable ffserver
1180     SLIBPREF=""
1181     SLIBSUF=".dll"
1182     EXESUF=".exe"
1183     SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1184     SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1185     SLIB_EXTRA_CMD='-lib /machine:i386 /def:$(@:$(SLIBSUF)=.def)'
1186     SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1187     SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1188     SHFLAGS='-shared -Wl,--output-def,$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1189     ;;
1190   cygwin*)
1191     targetos=cygwin
1192     shlibdir="$bindir"
1193     VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1194     VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1195     if enabled swscaler; then
1196         VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1197         VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1198     fi
1199     EXESUF=".exe"
1200     SLIBPREF="cyg"
1201     SLIBSUF=".dll"
1202     SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1203     SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1204     SHFLAGS='-shared -Wl,--enable-auto-image-base'
1205     ;;
1206   linux)
1207     LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
1208     enable dv1394
1209     ;;
1210   irix*)
1211     targetos=irix
1212     ranlib="echo ignoring ranlib"
1213     ;;
1214   *)
1215     targetos="${targetos}-UNKNOWN"
1216     ;;
1217 esac
1218
1219 add_extralibs $osextralibs
1220
1221 if ! disabled logging ; then
1222     enabled logging || logfile="$logging"
1223     echo "# $0 $@" >$logfile
1224     set >>$logfile
1225 else
1226     logfile=/dev/null
1227 fi
1228
1229 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1230 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1231
1232 test -n "$cross_prefix" && enable cross_compile
1233 cc="${cross_prefix}${cc}"
1234 ar="${cross_prefix}${ar}"
1235 ranlib="${cross_prefix}${ranlib}"
1236 strip="${cross_prefix}${strip}"
1237
1238 # we need to build at least one lib type
1239 if ! enabled_any static shared; then
1240     cat <<EOF
1241 At least one library type must be built.
1242 Specify --enable-static to build the static libraries or --enable-shared to
1243 build the shared libraries as well. To only build the shared libraries specify
1244 --disable-static in addition to --enable-shared.
1245 EOF
1246     exit 1;
1247 fi
1248
1249 disabled static && LIBNAME=""
1250
1251 if ! enabled libogg; then
1252     enabled libtheora && die "libogg must be enabled to enable libtheora."
1253     enabled libvorbis && die "libogg must be enabled to enable libvorbis."
1254 fi
1255
1256 if enabled_any libfaad libfaadbin ; then
1257     if check_header faad.h; then
1258         check_cc << EOF
1259 #include <faad.h>
1260 #ifndef FAAD2_VERSION
1261 ok faad1
1262 #endif
1263 int main( void ) { return 0; }
1264 EOF
1265         test $? = 0 && enable libfaad2
1266     else
1267         die "FAAD test failed."
1268     fi
1269 fi
1270
1271
1272 if ! enabled gpl; then
1273     die_gpl_disabled(){
1274         name=$1
1275         shift
1276         enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1277     }
1278     die_gpl_disabled "The Postprocessing code" pp
1279     die_gpl_disabled "liba52"                  liba52
1280     die_gpl_disabled "libx264"                 libx264
1281     die_gpl_disabled "libxvidcore"             libxvid
1282     die_gpl_disabled "FAAD2"                   libfaad2
1283     die_gpl_disabled "The X11 grabber"         x11grab
1284     die_gpl_disabled "The software scaler"     swscaler
1285 fi
1286
1287 check_deps $ARCH_EXT_LIST
1288
1289 test -z "$need_memalign" && need_memalign="$mmx"
1290
1291 #Darwin CC versions
1292 if test $targetos = darwin; then
1293     if test -n "`$cc -v 2>&1 | grep xlc`"; then
1294         add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1295     else
1296         add_cflags "-no-cpp-precomp -pipe"
1297         check_cflags "-force_cpusubtype_ALL"
1298         check_cflags "-Wno-sign-compare"
1299         disabled shared && add_cflags -mdynamic-no-pic
1300     fi
1301 fi
1302
1303 disabled optimizations || add_cflags -fomit-frame-pointer
1304
1305 # Add processor-specific flags
1306 if test $cpu != "generic"; then
1307     warn_altivec(){
1308         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1309     }
1310     case $cpu in
1311         601|ppc601|PowerPC601)
1312             add_cflags "-mcpu=601"
1313             warn_altivec enabled PPC601
1314         ;;
1315         603*|ppc603*|PowerPC603*)
1316             add_cflags "-mcpu=603"
1317             warn_altivec enabled PPC603
1318         ;;
1319         604*|ppc604*|PowerPC604*)
1320             add_cflags "-mcpu=604"
1321             warn_altivec enabled PPC604
1322         ;;
1323         G3|g3|75*|ppc75*|PowerPC75*)
1324             add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1325             warn_altivec enabled PPC75x
1326         ;;
1327         G4|g4|745*|ppc745*|PowerPC745*)
1328             add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1329             warn_altivec disabled PPC745x
1330         ;;
1331         74*|ppc74*|PowerPC74*)
1332             add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1333             warn_altivec disabled PPC74xx
1334         ;;
1335         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1336             add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1337             warn_altivec disabled PPC970
1338             enable ppc64
1339         ;;
1340         Cell|CELL|cell)
1341             add_cflags "-mcpu=cell"
1342             warn_altivec disabled Cell
1343             enable ppc64
1344         ;;
1345         # targets that do NOT support conditional mov (cmov)
1346         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1347             add_cflags "-march=$cpu"
1348             disable cmov
1349         ;;
1350         # targets that do support conditional mov (cmov)
1351         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1352             add_cflags "-march=$cpu"
1353             enable cmov
1354             enable fast_cmov
1355         ;;
1356         # targets that do support conditional mov but on which it's slow
1357         pentium4|prescott|nocona)
1358             add_cflags "-march=$cpu"
1359             enable cmov
1360             disable fast_cmov
1361         ;;
1362         sparc64)
1363             add_cflags "-mcpu=v9"
1364         ;;
1365         bf*) #bf531 bf532 bf533 bf561 bf5xx all get this config
1366             add_cflags "-mfdpic"
1367             add_ldflags "-mfdpic"
1368         ;;
1369         arm*)
1370             add_cflags "-mcpu=$cpu"
1371         ;;
1372         *)
1373         echo "WARNING: Unknown CPU \"$cpu\", ignored."
1374         ;;
1375     esac
1376 fi
1377
1378 gnu_make(){
1379     $1 --version 2>&1 | grep -q GNU
1380 }
1381
1382 if ! gnu_make $make; then
1383     gnu_make gmake && make=gmake || die "GNU make not found."
1384 fi
1385
1386 # make sure we can execute files in $TMPDIR
1387 cat >$TMPE 2>>$logfile <<EOF
1388 #! /bin/sh
1389 EOF
1390 chmod +x $TMPE >>$logfile 2>&1
1391 if ! $TMPE >>$logfile 2>&1; then
1392     cat <<EOF
1393 Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1394 variable to another directory and make sure that $TMPDIR1 is not mounted
1395 noexec.
1396 EOF
1397     die "Sanity test failed."
1398 fi
1399 rm $TMPE
1400
1401 # compiler sanity check
1402 check_exec <<EOF
1403 int main(){
1404     return 0;
1405 }
1406 EOF
1407 if test "$?" != 0; then
1408     echo "$cc is unable to create an executable file."
1409     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1410         echo "If $cc is a cross-compiler, use the --cross-compile option."
1411         echo "Only do this if you know what cross compiling means."
1412     fi
1413     die "C compiler test failed."
1414 fi
1415
1416 if enabled x86; then
1417     # check whether EBP is available on x86
1418     # As 'i' is stored on the stack, this program will crash
1419     # if the base pointer is used to access it because the
1420     # base pointer is cleared in the inline assembly code.
1421     check_exec_crash <<EOF && enable ebp_available
1422     volatile int i=0;
1423     asm volatile (
1424         "xorl %%ebp, %%ebp"
1425     ::: "%ebp");
1426     return i;
1427 EOF
1428
1429     # check wether EBX is available on x86
1430     check_asm ebx_available '"":::"%ebx"'
1431
1432     # check whether binutils is new enough to compile SSSE3
1433     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1434 fi
1435
1436 # check for assembler specific support
1437
1438 if test $arch = "powerpc"; then
1439 check_cc <<EOF && enable dcbzl
1440 int main(void) {
1441     register long zero = 0;
1442     char data[1024];
1443     asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
1444 return 0;
1445 }
1446 EOF
1447 fi
1448
1449 # check for SIMD availability
1450
1451 # AltiVec flags: The FSF version of GCC differs from the Apple version
1452 if enabled altivec; then
1453     test -n "`$cc -v 2>&1 | grep version | grep Apple`" &&
1454         add_cflags "-faltivec" ||
1455         add_cflags "-maltivec -mabi=altivec"
1456
1457     check_header altivec.h
1458
1459     # check if our compiler supports Motorola AltiVec C API
1460     enabled altivec_h &&
1461         inc_altivec_h="#include <altivec.h>" ||
1462         inc_altivec_h=
1463     check_cc <<EOF || disable altivec
1464 $inc_altivec_h
1465 int main(void) {
1466     vector signed int v1, v2, v3;
1467     v1 = vec_add(v2,v3);
1468     return 0;
1469 }
1470 EOF
1471 fi
1472
1473 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1474 enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1475 enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1476 enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1477 enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1478
1479 enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
1480
1481 # ---
1482 # big/little-endian test
1483 check_cc <<EOF || die "endian test failed"
1484 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1485 EOF
1486 grep -q BIGE $TMPO && enable bigendian
1487
1488 # ---
1489 # check availability of some header files
1490
1491 if check_func dlopen; then
1492     ldl=
1493 elif check_func dlopen -ldl; then
1494     ldl=-ldl
1495 fi
1496
1497 check_func fork
1498 check_func gethrtime
1499 check_func getrusage
1500 check_func inet_aton
1501 check_func memalign
1502 check_func mkstemp
1503 check_func2 windows.h GetProcessTimes
1504
1505 check_header byteswap.h
1506 check_header conio.h
1507 check_header dlfcn.h
1508 check_header malloc.h
1509 check_header termios.h
1510
1511 if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
1512     die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1513 fi
1514
1515 enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
1516
1517 # ffserver uses poll(),
1518 # if it's not found we can emulate it using select().
1519 if enabled ffserver; then
1520     check_header sys/poll.h
1521 fi
1522
1523 # check for some common methods of building with pthread support
1524 # do this before the optional library checks as some of them require pthreads
1525 if enabled pthreads; then
1526     if check_func pthread_create; then
1527         :
1528     elif check_func pthread_create -pthread; then
1529         add_cflags -pthread
1530         add_ldflags -pthread
1531     elif check_func pthread_create -pthreads; then
1532         add_cflags -pthreads
1533         add_ldflags -pthreads
1534     elif ! check_lib pthread.h pthread_create -lpthread; then
1535         die "ERROR: can't find pthreads library"
1536     fi
1537 fi
1538
1539 for thread in $THREADS_LIST; do
1540     if enabled $thread; then
1541         test -n "$thread_type" &&
1542             die "ERROR: Only one thread type must be selected." ||
1543             thread_type="$thread"
1544     fi
1545 done
1546
1547 check_lib math.h sin -lm
1548
1549 # test for lrintf in math.h
1550 check_exec <<EOF && enable lrintf || disable lrintf
1551 #define _ISOC9X_SOURCE  1
1552 #include <math.h>
1553 int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
1554 EOF
1555
1556 enabled_any libamr_nb libamr_wb && enable libamr
1557
1558 # these are off by default, so fail if requested and not available
1559 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1560 enabled liba52     && require liba52 a52dec/a52.h a52_init -la52
1561 enabled libamr_nb  && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
1562 enabled libamr_wb  && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1563 enabled libdc1394  && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
1564 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
1565 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1566 enabled libgsm     && require libgsm gsm.h gsm_create -lgsm
1567 enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1568 enabled libnut     && require libnut libnut.h nut_demuxer_init -lnut
1569 enabled libogg     && require libogg ogg/ogg.h ogg_sync_init -logg
1570 enabled libtheora  && require libtheora theora/theora.h theora_info_init -ltheora -logg
1571 enabled libvorbis  && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1572 enabled libx264    && require x264 x264.h x264_encoder_open -lx264
1573 enabled libxvid    && require Xvid xvid.h xvid_global -lxvidcore
1574 enabled mlib       && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1575
1576 # disable the native AC-3 decoder if liba52 is enabled
1577 enabled liba52 && disable ac3_decoder
1578
1579 _restrict=
1580 for restrict_keyword in restrict __restrict__ __restrict; do
1581     check_cc <<EOF && _restrict=$restrict_keyword && break
1582 void foo(char * $restrict_keyword p);
1583 EOF
1584 done
1585
1586 test "$vhook" = "default" && vhook="$dlopen"
1587
1588 if test "$targetos" = cygwin -o "$targetos" = mingw32 && enabled_all static vhook ; then
1589     disable vhook
1590     echo
1591     echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1592     echo "Patches welcome."
1593     echo
1594 fi
1595
1596 if enabled vhook; then
1597     check_ldflags -rdynamic
1598     check_ldflags -export-dynamic
1599 fi
1600
1601 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
1602 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1603
1604 ##########################################
1605 # SDL check
1606
1607 disable sdl_too_old
1608 disable sdl
1609 SDL_CONFIG="${cross_prefix}sdl-config"
1610 if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
1611     sdl_cflags=`"${SDL_CONFIG}" --cflags`
1612     temp_cflags $sdl_cflags
1613     temp_extralibs `"${SDL_CONFIG}" --libs`
1614     if check_lib SDL.h SDL_Init; then
1615         _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1616         if test "$_sdlversion" -lt 121 ; then
1617             enable sdl_too_old
1618         else
1619             enable sdl
1620             check_cc $sdl_cflags <<EOF && enable sdl_video_size
1621 #include <SDL.h>
1622 int main(void){
1623     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
1624     int w = vi->current_w;
1625     return 0;
1626 }
1627 EOF
1628         fi
1629     fi
1630     restore_flags
1631 fi
1632
1633 texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
1634
1635 ##########################################
1636 # Network check
1637
1638 if enabled network; then
1639     # Prefer arpa/inet.h over winsock2
1640     if check_header arpa/inet.h ; then
1641         check_func closesocket
1642     elif check_header winsock2.h ; then
1643         network_extralibs="-lws2_32"
1644         check_func2 winsock2.h closesocket
1645     fi
1646 fi
1647
1648 ##########################################
1649 # IPv6 check
1650
1651 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1652 #include <sys/types.h>
1653 #include <sys/socket.h>
1654 #include <netinet/in.h>
1655 #include <netdb.h>
1656 int main( void ) {
1657   struct sockaddr_storage saddr;
1658   struct ipv6_mreq mreq6;
1659   getaddrinfo(0,0,0,0);
1660   getnameinfo(0,0,0,0,0,0,0);
1661   IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1662 }
1663 EOF
1664
1665 check_header linux/videodev.h
1666 check_header linux/videodev2.h
1667
1668 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
1669 { check_header dev/bktr/ioctl_meteor.h &&
1670   check_header dev/bktr/ioctl_bt848.h; } ||
1671 { check_header machine/ioctl_meteor.h &&
1672   check_header machine/ioctl_bt848.h; } ||
1673 { check_header dev/video/meteor/ioctl_meteor.h &&
1674   check_header dev/video/bktr/ioctl_bt848.h; } ||
1675 check_header dev/ic/bt8xx.h
1676
1677 check_header sys/soundcard.h
1678 check_header soundcard.h
1679
1680 # Deal with the x11 frame grabber
1681 enabled x11grab                         &&
1682 check_header X11/Xlib.h                 &&
1683 check_header X11/extensions/XShm.h      &&
1684 check_func XOpenDisplay -lX11           &&
1685 check_func XShmCreateImage -lX11 -lXext
1686
1687 enabled debug && add_cflags -g
1688
1689 # add some useful compiler flags if supported
1690 check_cflags -Wdeclaration-after-statement
1691 check_cflags -Wall
1692 check_cflags -Wno-switch
1693 check_cflags -Wdisabled-optimization
1694 check_cflags -Wpointer-arith
1695 check_cflags -Wredundant-decls
1696 check_cflags -Wno-pointer-sign
1697 enabled extra_warnings && check_cflags -Winline
1698
1699 # add some linker flags
1700 check_ldflags -Wl,--warn-common
1701 check_ldflags $LDLATEFLAGS
1702
1703 if enabled small; then
1704     check_cflags -Os            # not all compilers support -Os
1705     optimizations="small"
1706 elif enabled optimizations; then
1707     if test -n "`$cc -v 2>&1 | grep xlc`"; then
1708         add_cflags  "-O5"
1709         add_ldflags "-O5"
1710     else
1711         add_cflags "-O3"
1712     fi
1713 fi
1714
1715 # PIC flags for shared library objects where they are needed
1716 if enabled shared; then
1717     # LIBOBJFLAGS may have already been set in the OS configuration
1718     if test -z "$LIBOBJFLAGS" ; then
1719         case "$arch" in
1720             x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS='$(PIC)' ;;
1721         esac
1722     fi
1723 fi
1724
1725 if enabled gprof; then
1726     add_cflags  "-p"
1727     add_ldflags "-p"
1728 fi
1729
1730 VHOOKCFLAGS="-fPIC"
1731
1732 # Find out if the .align argument is a power of two or not.
1733 if test $asmalign_pot = "unknown"; then
1734     disable asmalign_pot
1735     echo 'asm (".align 3");' | check_cc && enable asmalign_pot
1736 fi
1737
1738 enabled_any $ENCODER_LIST  && enable encoders
1739 enabled_any $DECODER_LIST  && enable decoders
1740 enabled_any $MUXER_LIST    && enable muxers
1741 enabled_any $DEMUXER_LIST  && enable demuxers
1742 enabled_any $PROTOCOL_LIST && enable protocols
1743 enabled_any $BSF_LIST      && enable bsfs
1744
1745 enabled_any $THREADS_LIST  && enable threads
1746
1747 check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
1748     $BSF_LIST $DEMUXER_LIST $MUXER_LIST $PROTOCOL_LIST
1749
1750 enabled libdc1394 && append pkg_requires "libraw1394"
1751 enabled libogg    && append pkg_requires "ogg >= 1.1"
1752 enabled libtheora && append pkg_requires "theora"
1753 enabled libvorbis && append pkg_requires "vorbis vorbisenc"
1754
1755 echo "install prefix            $PREFIX"
1756 echo "source path               $source_path"
1757 echo "C compiler                $cc"
1758 echo "make                      $make"
1759 echo ".align is power-of-two    $asmalign_pot"
1760 echo "ARCH                      $arch ($cpu)"
1761 if test "$BUILDSUF" != ""; then
1762     echo "build suffix              $BUILDSUF"
1763 fi
1764 echo "big-endian                ${bigendian-no}"
1765 if test $arch = "x86_32" -o $arch = "x86_64"; then
1766     echo "MMX enabled               ${mmx-no}"
1767     echo "CMOV enabled              ${cmov-no}"
1768     echo "CMOV is fast              ${fast_cmov-no}"
1769     echo "EBX available             ${ebx_available-no}"
1770     echo "EBP available             ${ebp_available-no}"
1771 fi
1772 if test $arch = "armv4l"; then
1773     echo "ARMv5TE enabled           ${armv5te-no}"
1774     echo "ARMv6 enabled             ${armv6-no}"
1775     echo "IWMMXT enabled            ${iwmmxt-no}"
1776 fi
1777 if test $arch = "mips"; then
1778     echo "MMI enabled               ${mmi-no}"
1779 fi
1780 if test $arch = "powerpc"; then
1781     echo "AltiVec enabled           ${altivec-no}"
1782     echo "dcbzl available           ${dcbzl-no}"
1783 fi
1784 echo "gprof enabled             ${gprof-no}"
1785 echo "debug symbols             ${debug-no}"
1786 echo "strip symbols             ${dostrip-no}"
1787 echo "optimizations             ${optimizations-no}"
1788 echo "static                    ${static-no}"
1789 echo "shared                    ${shared-no}"
1790 echo "postprocessing support    ${pp-no}"
1791 echo "software scaler enabled   ${swscaler-no}"
1792 echo "video hooking             ${vhook-no}"
1793 if enabled vhook; then
1794     echo "Imlib2 support            ${imlib2-no}"
1795     echo "FreeType support          ${freetype2-no}"
1796 fi
1797 echo "network support           ${network-no}"
1798 if enabled network; then
1799     echo "IPv6 support              ${ipv6-no}"
1800 fi
1801 echo "threading support         ${thread_type-no}"
1802 echo "SDL support               ${sdl-no}"
1803 if enabled sdl_too_old; then
1804     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1805 fi
1806 echo "Sun medialib support      ${mlib-no}"
1807 echo "AVISynth enabled          ${avisynth-no}"
1808 echo "liba52 support            ${liba52-no}"
1809 echo "liba52 dlopened           ${liba52bin-no}"
1810 echo "libamr-nb support         ${libamr_nb-no}"
1811 echo "libamr-wb support         ${libamr_wb-no}"
1812 echo "libdc1394 support         ${libdc1394-no}"
1813 echo "libfaac enabled           ${libfaac-no}"
1814 echo "libfaad enabled           ${libfaad-no}"
1815 echo "libfaad dlopened          ${libfaadbin-no}"
1816 echo "libgsm enabled            ${libgsm-no}"
1817 echo "libmp3lame enabled        ${libmp3lame-no}"
1818 echo "libnut enabled            ${libnut-no}"
1819 echo "libogg enabled            ${libogg-no}"
1820 echo "libtheora enabled         ${libtheora-no}"
1821 echo "libvorbis enabled         ${libvorbis-no}"
1822 echo "x264 enabled              ${libx264-no}"
1823 echo "XviD enabled              ${libxvid-no}"
1824 echo "zlib enabled              ${zlib-no}"
1825 enabled gpl &&
1826     echo "License: GPL" ||
1827     echo "License: LGPL"
1828
1829 for type in decoder encoder parser demuxer muxer protocol bsf; do
1830     echo "Enabled ${type}s:"
1831     ucname="\$`toupper $type`_LIST"
1832     list="`eval echo $ucname`"
1833     partlist=""
1834     for part in $list; do
1835         enabled $part && partlist="$partlist $part"
1836     done
1837     partlist=`echo $partlist | sed s/_$type//g | tr ' ' '\n' | sort`
1838     echo $partlist
1839 done
1840
1841 echo "Creating config.mak and config.h..."
1842
1843 echo "# Automatically generated by configure - do not modify!" > config.mak
1844 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1845 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
1846 echo "#define FFMPEG_CONFIG_H" >> $TMPH
1847 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
1848
1849 echo "PREFIX=$PREFIX" >> config.mak
1850 echo "prefix=\$(DESTDIR)\$(PREFIX)" >> config.mak
1851 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
1852 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
1853 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
1854 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
1855 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
1856 echo "MAKE=$make" >> config.mak
1857 echo "CC=$cc" >> config.mak
1858 echo "AR=$ar" >> config.mak
1859 echo "RANLIB=$ranlib" >> config.mak
1860 echo "LDCONFIG=$LDCONFIG" >> config.mak
1861 echo "LN_S=$ln_s" >> config.mak
1862 enabled dostrip &&
1863     echo "STRIP=$strip" >> config.mak ||
1864     echo "STRIP=echo ignoring strip" >> config.mak
1865
1866 echo "OPTFLAGS=$CFLAGS" >> config.mak
1867 echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1868 echo "LDFLAGS=$LDFLAGS" >> config.mak
1869 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1870 echo "SHFLAGS=$SHFLAGS" >> config.mak
1871 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1872 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1873 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1874 echo "BUILD_STATIC=$static" >> config.mak
1875 echo "BUILDSUF=$BUILDSUF" >> config.mak
1876 echo "FULLNAME=$FULLNAME" >> config.mak
1877 echo "LIBPREF=$LIBPREF" >> config.mak
1878 echo "LIBSUF=$LIBSUF" >> config.mak
1879 echo "LIBNAME=$LIBNAME" >> config.mak
1880 echo "SLIBPREF=$SLIBPREF" >> config.mak
1881 echo "SLIBSUF=$SLIBSUF" >> config.mak
1882 echo "EXESUF=$EXESUF" >> config.mak
1883
1884 if enabled bigendian; then
1885   echo "WORDS_BIGENDIAN=yes" >> config.mak
1886   echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1887 fi
1888 if enabled mmx; then
1889   echo "#define __CPU__ 586" >> $TMPH
1890 fi
1891
1892 if enabled sdl; then
1893   echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
1894   echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1895 fi
1896 if enabled texi2html; then
1897   echo "BUILD_DOC=yes" >> config.mak
1898 fi
1899
1900 sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1901 pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
1902 lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
1903 lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
1904 lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
1905
1906
1907
1908 if enabled shared; then
1909   echo "BUILD_SHARED=yes" >> config.mak
1910   echo "PIC=-fPIC -DPIC" >> config.mak
1911   echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
1912   echo "SPPVERSION=$pp_version" >> config.mak
1913   echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
1914   echo "LAVCVERSION=$lavc_version" >> config.mak
1915   echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
1916   echo "LAVFVERSION=$lavf_version" >> config.mak
1917   echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
1918   echo "LAVUVERSION=$lavu_version" >> config.mak
1919   echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
1920   echo "SWSVERSION=$sws_version" >> config.mak
1921   echo "SLIBNAME=${SLIBNAME}" >> config.mak
1922   echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
1923   echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
1924   echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
1925   echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
1926   echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
1927 fi
1928 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
1929 echo "EXTRALIBS=$extralibs" >> config.mak
1930
1931 print_config ARCH_   $TMPH config.mak $ARCH_LIST
1932 print_config HAVE_   $TMPH config.mak $HAVE_LIST
1933 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST   \
1934                                       $DECODER_LIST  \
1935                                       $ENCODER_LIST  \
1936                                       $PARSER_LIST   \
1937                                       $BSF_LIST      \
1938                                       $DEMUXER_LIST  \
1939                                       $MUXER_LIST    \
1940                                       $PROTOCOL_LIST \
1941
1942 echo "#define restrict $_restrict" >> $TMPH
1943
1944 if enabled small; then
1945   echo "#define av_always_inline"  >> $TMPH
1946 fi
1947
1948 echo "SRC_PATH=\"$source_path\"" >> config.mak
1949 echo "SRC_PATH_BARE=$source_path" >> config.mak
1950 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
1951
1952 # Apparently it's not possible to portably echo a backslash.
1953 enabled asmalign_pot &&
1954   printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
1955   printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
1956
1957
1958 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
1959
1960 # Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
1961 cmp -s $TMPH config.h &&
1962     echo "config.h is unchanged" ||
1963     mv -f $TMPH config.h
1964
1965 rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
1966
1967 # build tree in object directory if source path is different from current one
1968 if enabled source_path_used; then
1969     DIRS="\
1970          doc \
1971          libavcodec \
1972          libavcodec/alpha \
1973          libavcodec/armv4l \
1974          libavcodec/bfin \
1975          libavcodec/i386 \
1976          libavcodec/mlib \
1977          libavcodec/ppc \
1978          libavcodec/sh4 \
1979          libavcodec/sparc \
1980          libavformat \
1981          libavutil \
1982          libpostproc \
1983          libswscale \
1984          tests \
1985          tools \
1986          vhook \
1987          "
1988     FILES="\
1989           Makefile \
1990           common.mak \
1991           doc/texi2pod.pl \
1992           libavcodec/Makefile \
1993           libavformat/Makefile \
1994           libavutil/Makefile \
1995           libpostproc/Makefile \
1996           libswscale/Makefile \
1997           "
1998     for dir in $DIRS ; do
1999             mkdir -p $dir
2000     done
2001     for f in $FILES ; do
2002         $ln_s "$source_path/$f" $f
2003     done
2004 fi
2005
2006
2007 # build pkg-config files
2008 # FIXME: libdir and includedir are hardcoded and may differ from the real path.
2009
2010 pkgconfig_generate(){
2011 name=$1
2012 comment=$2
2013 version=$3
2014 libs=$4
2015 requires=$5
2016 include=$6
2017 cat <<EOF >$name.pc
2018 prefix=$PREFIX
2019 exec_prefix=\${prefix}
2020 libdir=\${exec_prefix}/lib
2021 includedir=\${prefix}/include
2022
2023 Name: $name
2024 Description: $comment
2025 Version: $version
2026 Requires: $requires
2027 Conflicts:
2028 Libs: -L\${libdir} $libs
2029 Cflags: -I\${includedir} -I\${includedir}/$include
2030 EOF
2031 }
2032
2033 pkgconfig_generate_uninstalled(){
2034 name=$1
2035 shortname=${name#lib}
2036 comment=$2
2037 version=$3
2038 libs=$4
2039 requires=$5
2040 cat <<EOF >$name-uninstalled.pc
2041 prefix=
2042 exec_prefix=
2043 libdir=\${pcfiledir}/$name
2044 includedir=\${pcfiledir}/$name
2045
2046 Name: $name
2047 Description: $comment
2048 Version: $version
2049 Requires: $requires
2050 Conflicts:
2051 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2052 Cflags: -I\${includedir}
2053 EOF
2054 }
2055
2056 pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2057 pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2058
2059 pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
2060 pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2061
2062 pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2063 pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2064
2065 if enabled pp; then
2066   pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
2067   pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
2068 fi
2069
2070 if enabled swscaler; then
2071   pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" -lswscale "libavutil = $lavu_version" ffmpeg
2072   pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2073 else
2074   pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" ffmpeg
2075   pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2076   apply libswscale.pc sed s/^Libs:.*$/Libs:/
2077   apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2078 fi