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