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