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