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