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