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