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