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