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