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