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