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