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