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