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