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