configure: improve temp file creation and cleanup
[platform/upstream/libav.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     exit 1
261 }
262
263 # Avoid locale weirdness, besides we really just want to translate ASCII.
264 toupper(){
265     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
266 }
267
268 tolower(){
269     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
270 }
271
272 c_escape(){
273     echo "$*" | sed 's/["\\]/\\\0/g'
274 }
275
276 set_all(){
277     value=$1
278     shift
279     for var in $*; do
280         eval $var=$value
281     done
282 }
283
284 set_weak(){
285     value=$1
286     shift
287     for var; do
288         eval : \${$var:=$value}
289     done
290 }
291
292 pushvar(){
293     for var in $*; do
294         eval level=\${${var}_level:=0}
295         eval ${var}_${level}="\$$var"
296         eval ${var}_level=$(($level+1))
297     done
298 }
299
300 popvar(){
301     for var in $*; do
302         eval level=\${${var}_level:-0}
303         test $level = 0 && continue
304         eval level=$(($level-1))
305         eval $var="\${${var}_${level}}"
306         eval ${var}_level=$level
307         eval unset ${var}_${level}
308     done
309 }
310
311 enable(){
312     set_all yes $*
313 }
314
315 disable(){
316     set_all no $*
317 }
318
319 enable_weak(){
320     set_weak yes $*
321 }
322
323 disable_weak(){
324     set_weak no $*
325 }
326
327 enable_safe(){
328     enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
329 }
330
331 disable_safe(){
332     disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
333 }
334
335 do_enable_deep(){
336     for var; do
337         enabled $var && continue
338         eval sel="\$${var}_select"
339         eval sgs="\$${var}_suggest"
340         pushvar var sgs
341         enable_deep $sel
342         popvar sgs
343         enable_deep_weak $sgs
344         popvar var
345     done
346 }
347
348 enable_deep(){
349     do_enable_deep $*
350     enable $*
351 }
352
353 enable_deep_weak(){
354     do_enable_deep $*
355     enable_weak $*
356 }
357
358 enabled(){
359     test "${1#!}" = "$1" && op== || op=!=
360     eval test "x\$${1#!}" $op "xyes"
361 }
362
363 disabled(){
364     test "${1#!}" = "$1" && op== || op=!=
365     eval test "x\$${1#!}" $op "xno"
366 }
367
368 enabled_all(){
369     for opt; do
370         enabled $opt || return 1
371     done
372 }
373
374 disabled_all(){
375     for opt; do
376         disabled $opt || return 1
377     done
378 }
379
380 enabled_any(){
381     for opt; do
382         enabled $opt && return 0
383     done
384 }
385
386 disabled_any(){
387     for opt; do
388         disabled $opt && return 0
389     done
390     return 1
391 }
392
393 set_default(){
394     for opt; do
395         eval : \${$opt:=\$${opt}_default}
396     done
397 }
398
399 is_in(){
400     value=$1
401     shift
402     for var in $*; do
403         [ $var = $value ] && return 0
404     done
405     return 1
406 }
407
408 check_deps(){
409     for cfg; do
410         cfg="${cfg#!}"
411         enabled ${cfg}_checking && die "Circular dependency for $cfg."
412         disabled ${cfg}_checking && continue
413         enable ${cfg}_checking
414
415         eval dep_all="\$${cfg}_deps"
416         eval dep_any="\$${cfg}_deps_any"
417         eval dep_sel="\$${cfg}_select"
418         eval dep_sgs="\$${cfg}_suggest"
419
420         pushvar cfg dep_all dep_any dep_sel dep_sgs
421         check_deps $dep_all $dep_any $dep_sel $dep_sgs
422         popvar cfg dep_all dep_any dep_sel dep_sgs
423
424         enabled_all  $dep_all || disable $cfg
425         enabled_any  $dep_any || disable $cfg
426         disabled_any $dep_sel && disable $cfg
427
428         if enabled $cfg; then
429             eval dep_extralibs="\$${cfg}_extralibs"
430             test -n "$dep_extralibs" && add_extralibs $dep_extralibs
431             enable_deep $dep_sel
432             enable_deep_weak $dep_sgs
433         fi
434
435         disable ${cfg}_checking
436     done
437 }
438
439 print_config(){
440     pfx=$1
441     header=$2
442     makefile=$3
443     shift 3
444     for cfg; do
445         ucname="`toupper $cfg`"
446         if enabled $cfg; then
447             echo "#define ${pfx}${ucname} 1" >> $header
448             echo "${pfx}${ucname}=yes" >> $makefile
449         else
450             echo "#define ${pfx}${ucname} 0" >> $header
451         fi
452     done
453 }
454
455 flags_saved(){
456     (: ${SAVE_CFLAGS?}) 2> /dev/null
457 }
458
459 save_flags(){
460     flags_saved && return
461     SAVE_CFLAGS="$CFLAGS"
462     SAVE_LDFLAGS="$LDFLAGS"
463     SAVE_extralibs="$extralibs"
464 }
465
466 restore_flags(){
467     flags_saved || return
468     CFLAGS="$SAVE_CFLAGS"
469     LDFLAGS="$SAVE_LDFLAGS"
470     extralibs="$SAVE_extralibs"
471     unset SAVE_CFLAGS
472     unset SAVE_LDFLAGS
473     unset SAVE_extralibs
474 }
475
476 temp_cflags(){
477     save_flags
478     CFLAGS="$CFLAGS $*"
479 }
480
481 temp_ldflags(){
482     save_flags
483     LDFLAGS="$LDFLAGS $*"
484 }
485
486 temp_extralibs(){
487     save_flags
488     extralibs="$extralibs $*"
489 }
490
491 append(){
492     var=$1
493     shift
494     flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
495     eval "$var=\"\$$var $*\""
496 }
497
498 add_cflags(){
499     append CFLAGS "$@"
500 }
501
502 add_ldflags(){
503     append LDFLAGS "$@"
504 }
505
506 add_extralibs(){
507     append extralibs "$@"
508 }
509
510 check_cmd(){
511     log "$@"
512     "$@" >> $logfile 2>&1
513 }
514
515 check_cc(){
516     log check_cc "$@"
517     cat > $TMPC
518     log_file $TMPC
519     check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
520 }
521
522 check_cpp(){
523     log check_cpp "$@"
524     cat > $TMPC
525     log_file $TMPC
526     check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
527 }
528
529 check_asm(){
530     log check_asm "$@"
531     name="$1"
532     asm="$2"
533     shift 2
534     check_cc "$@" <<EOF && enable $name || disable $name
535 void foo(void){ __asm__ volatile($asm); }
536 EOF
537 }
538
539 check_yasm(){
540     log check_yasm "$@"
541     echo "$1" > $TMPS
542     log_file $TMPS
543     shift 1
544     check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
545 }
546
547 check_ld(){
548     log check_ld "$@"
549     check_cc || return
550     flags=''
551     libs=''
552     for f; do
553         test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
554     done
555     check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
556 }
557
558 check_cflags(){
559     log check_cflags "$@"
560     check_cc "$@" <<EOF && add_cflags "$@"
561 int x;
562 EOF
563 }
564
565 check_ldflags(){
566     log check_ldflags "$@"
567     check_ld "$@" <<EOF && add_ldflags "$@"
568 int main(void){ return 0; }
569 EOF
570 }
571
572 check_header(){
573     log check_header "$@"
574     header=$1
575     shift
576     disable_safe $header
577     check_cpp "$@" <<EOF && enable_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 && enable_safe $headers
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 if ! check_cmd type mktemp; then
1345     # simple replacement for missing mktemp
1346     # NOT SAFE FOR GENERAL USE
1347     mktemp(){
1348         echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1349     }
1350 fi
1351
1352 tmpfile(){
1353     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1354         (set -C; exec > $tmp) 2>/dev/null ||
1355         die "Unable to create temoporary file in $TMPDIR."
1356     append TMPFILES $tmp
1357     eval $1=$tmp
1358 }
1359
1360 trap 'rm -f -- $TMPFILES' EXIT
1361 trap exit HUP INT TERM
1362
1363 tmpfile TMPC  .c
1364 tmpfile TMPE  $EXESUF
1365 tmpfile TMPH  .h
1366 tmpfile TMPO  .o
1367 tmpfile TMPS  .S
1368 tmpfile TMPSH .sh
1369
1370 unset -f mktemp
1371
1372 # make sure we can execute files in $TMPDIR
1373 cat > $TMPSH 2>> $logfile <<EOF
1374 #! /bin/sh
1375 EOF
1376 chmod +x $TMPSH >> $logfile 2>&1
1377 if ! $TMPSH >> $logfile 2>&1; then
1378     cat <<EOF
1379 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1380 variable to another directory and make sure that it is not mounted noexec.
1381 EOF
1382     die "Sanity test failed."
1383 fi
1384
1385 if   $cc --version 2>/dev/null | grep -qi gcc; then
1386     cc_type=gcc
1387 elif $cc --version 2>/dev/null | grep -q Intel; then
1388     cc_type=icc
1389 elif $cc -v 2>&1 | grep -q xlc; then
1390     cc_type=xlc
1391 elif $cc -V 2>/dev/null | grep -q Compaq; then
1392     cc_type=ccc
1393     DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1394     add_ldflags -Wl,-z,now # calls to libots crash without this
1395 fi
1396
1397 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1398
1399 if test -n "$sysroot"; then
1400     case "$cc_type" in
1401         gcc)
1402             add_cflags  --sysroot="$sysroot"
1403             add_ldflags --sysroot="$sysroot"
1404         ;;
1405     esac
1406 fi
1407
1408 # compiler sanity check
1409 check_exec <<EOF
1410 int main(void){ return 0; }
1411 EOF
1412 if test "$?" != 0; then
1413     echo "$cc is unable to create an executable file."
1414     if test -z "$cross_prefix" && ! enabled cross_compile ; then
1415         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1416         echo "Only do this if you know what cross compiling means."
1417     fi
1418     die "C compiler test failed."
1419 fi
1420
1421 check_cflags -std=c99
1422
1423 case "$arch" in
1424     alpha)
1425         arch="alpha"
1426         enable fast_64bit
1427         check_cflags -mieee
1428     ;;
1429     arm|armv[4567]*l)
1430         arch="arm"
1431     ;;
1432     avr32)
1433     ;;
1434     bfin)
1435         arch="bfin"
1436     ;;
1437     ia64)
1438         arch="ia64"
1439         enable fast_64bit
1440     ;;
1441     m68k)
1442         arch="m68k"
1443     ;;
1444     mips|mipsel|IP*)
1445         arch="mips"
1446     ;;
1447     mips64)
1448         arch="mips"
1449         enable fast_64bit
1450     ;;
1451     parisc|hppa)
1452         arch="parisc"
1453     ;;
1454     parisc64|hppa64)
1455         arch="parisc"
1456         enable fast_64bit
1457     ;;
1458     "Power Macintosh"|ppc|powerpc)
1459         arch="ppc"
1460         enable fast_unaligned
1461     ;;
1462     ppc64)
1463         arch="ppc"
1464         enable fast_64bit
1465         enable fast_unaligned
1466     ;;
1467     s390|s390x)
1468         arch="s390"
1469     ;;
1470     sh4|sh)
1471         arch="sh4"
1472     ;;
1473     sparc)
1474         arch="sparc"
1475     ;;
1476     sun4u|sparc64)
1477         arch="sparc"
1478         subarch="sparc64"
1479         enable fast_64bit
1480     ;;
1481     i386|i486|i586|i686|i86pc|BePC)
1482         arch="x86"
1483         subarch="x86_32"
1484         enable fast_unaligned
1485     ;;
1486     x86_64|amd64)
1487         arch="x86"
1488         subarch="x86_32"
1489         enable cmov
1490         enable fast_cmov
1491         enable fast_unaligned
1492         check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1493         int test[sizeof(char*) - 7];
1494 EOF
1495     ;;
1496     *)
1497         arch="unknown"
1498     ;;
1499 esac
1500
1501 enable $arch $subarch
1502
1503 # OS specific
1504 case $target_os in
1505     beos|haiku|zeta)
1506         prefix_default="$HOME/config"
1507         # helps building libavcodec
1508         add_cflags -DPIC -fomit-frame-pointer
1509         # 3 gcc releases known for BeOS, each with ugly bugs
1510         gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1511         case "$gcc_version" in
1512           2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1513             disable mmx
1514             ;;
1515           *20010315*) echo "BeBits gcc"
1516             add_cflags -fno-expensive-optimizations
1517             ;;
1518         esac
1519         SHFLAGS=-nostart
1520         # enable BeOS things
1521         enable audio_beos
1522         # no need for libm, but the inet stuff
1523         # Check for BONE
1524         # XXX: actually should check for NOT net_server
1525         if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1526             network_extralibs="-lbind -lsocket"
1527         else
1528             enable beos_netserver
1529             network_extralibs="-lnet"
1530         fi ;;
1531     sunos)
1532         FFSERVERLDFLAGS=""
1533         SHFLAGS='-shared -Wl,-h,$$(@F)'
1534         network_extralibs="-lsocket -lnsl"
1535         add_cflags -D__EXTENSIONS__
1536         ;;
1537     netbsd)
1538         oss_demuxer_extralibs="-lossaudio"
1539         oss_muxer_extralibs="-lossaudio"
1540         ;;
1541     openbsd)
1542         disable need_memalign
1543         LIBOBJFLAGS='$(PIC)'
1544         SHFLAGS='-shared'
1545         oss_demuxer_extralibs="-lossaudio"
1546         oss_muxer_extralibs="-lossaudio"
1547         ;;
1548     freebsd)
1549         disable need_memalign
1550         ;;
1551     bsd/os)
1552         osextralibs="-lpoll -lgnugetopt"
1553         strip="strip -d"
1554         ;;
1555     darwin)
1556         disable need_memalign
1557         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1558         VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1559         strip="strip -x"
1560         FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1561         SLIBSUF=".dylib"
1562         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1563         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1564         FFSERVERLDFLAGS=-Wl,-bind_at_load
1565         objformat="macho"
1566         enabled x86_64 && objformat="macho64"
1567         ;;
1568     mingw32*)
1569         target_os=mingw32
1570         LIBTARGET=i386
1571         if enabled x86_64; then
1572             disable need_memalign
1573             LIBTARGET=x64
1574         fi
1575         shlibdir_default="$bindir_default"
1576         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1577         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1578         if enabled swscale; then
1579             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1580             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1581         fi
1582         disable ffserver
1583         SLIBPREF=""
1584         SLIBSUF=".dll"
1585         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1586         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1587         SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1588         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1589             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1590         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1591         SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1592         objformat="win32"
1593         enable dos_paths
1594         if ! enabled x86_64; then
1595             check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1596                 die "ERROR: MinGW runtime version must be >= 3.15."
1597             enabled_any avisynth vfwcap_demuxer &&
1598                 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1599                   die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1600             fi
1601         ;;
1602     cygwin*)
1603         target_os=cygwin
1604         shlibdir_default="$bindir_default"
1605         VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1606         VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1607         if enabled swscale; then
1608             VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1609             VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1610         fi
1611         SLIBPREF="cyg"
1612         SLIBSUF=".dll"
1613         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1614         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1615         SHFLAGS='-shared -Wl,--enable-auto-image-base'
1616         objformat="win32"
1617         enable dos_paths
1618         ;;
1619     *-dos|freedos|opendos)
1620         disable ffplay ffserver vhook
1621         disable $INDEV_LIST $OUTDEV_LIST
1622         network_extralibs="-lsocket"
1623         objformat="coff"
1624         enable dos_paths
1625         ;;
1626     linux)
1627         enable dv1394
1628         ;;
1629     irix*)
1630         target_os=irix
1631         ranlib="echo ignoring ranlib"
1632         ;;
1633     os/2*)
1634         strip="lxlite"
1635         ln_s="cp -f"
1636         FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1637         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1638         FFSERVERLDFLAGS=""
1639         LIBSUF="_s.a"
1640         SLIBPREF=""
1641         SLIBSUF=".dll"
1642         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1643         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1644         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1645           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1646           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1647           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1648           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1649           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1650         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1651           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1652         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1653         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1654         disable vhook
1655         enable dos_paths
1656         ;;
1657     interix)
1658         disable vhook
1659         ;;
1660
1661     *)
1662         die "Unknown OS '$target_os'."
1663         ;;
1664 esac
1665
1666 set_default $PATHS_LIST
1667
1668 add_extralibs $osextralibs
1669
1670 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1671 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1672
1673 # we need to build at least one lib type
1674 if ! enabled_any static shared; then
1675     cat <<EOF
1676 At least one library type must be built.
1677 Specify --enable-static to build the static libraries or --enable-shared to
1678 build the shared libraries as well. To only build the shared libraries specify
1679 --disable-static in addition to --enable-shared.
1680 EOF
1681     exit 1;
1682 fi
1683
1684 disabled static && LIBNAME=""
1685
1686 if enabled_any libfaad libfaadbin ; then
1687     if check_header faad.h; then
1688         check_cc <<EOF
1689 #include <faad.h>
1690 #ifndef FAAD2_VERSION
1691 ok faad1
1692 #endif
1693 int main(void) { return 0; }
1694 EOF
1695         test $? = 0 && enable libfaad2
1696     else
1697         die "FAAD test failed."
1698     fi
1699 fi
1700
1701
1702 if ! enabled gpl; then
1703     die_gpl_disabled(){
1704         name=$1
1705         shift
1706         enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1707     }
1708     die_gpl_disabled "The Postprocessing code" postproc
1709     die_gpl_disabled "libx264"                 libx264
1710     die_gpl_disabled "libxvidcore"             libxvid
1711     die_gpl_disabled "FAAD2"                   libfaad2
1712     die_gpl_disabled "The X11 grabber"         x11grab
1713     die_gpl_disabled "The software scaler"     swscale
1714 fi
1715
1716 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1717     die "libamr is nonfree and --enable-nonfree is not specified."
1718 fi
1719
1720 check_deps $ARCH_EXT_LIST
1721
1722 test -z "$need_memalign" && need_memalign="$mmx"
1723
1724 #Darwin CC versions
1725 if test $target_os = darwin; then
1726     if enabled xlc; then
1727         add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1728     else
1729         add_cflags -pipe
1730         check_cflags -force_cpusubtype_ALL
1731         check_cflags -Wno-sign-compare
1732         enabled shared || check_cflags -mdynamic-no-pic
1733     fi
1734 fi
1735
1736 disabled optimizations || check_cflags -fomit-frame-pointer
1737
1738 # Add processor-specific flags
1739 if test $cpu != "generic"; then
1740     warn_altivec(){
1741         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1742     }
1743     case $cpu in
1744         601|ppc601|PowerPC601)
1745             add_cflags -mcpu=601
1746             warn_altivec enabled PPC601
1747         ;;
1748         603*|ppc603*|PowerPC603*)
1749             add_cflags -mcpu=603
1750             warn_altivec enabled PPC603
1751         ;;
1752         604*|ppc604*|PowerPC604*)
1753             add_cflags -mcpu=604
1754             warn_altivec enabled PPC604
1755         ;;
1756         G3|g3|75*|ppc75*|PowerPC75*)
1757             add_cflags -mcpu=750 -mpowerpc-gfxopt
1758             warn_altivec enabled PPC75x
1759         ;;
1760         G4|g4|745*|ppc745*|PowerPC745*)
1761             add_cflags -mcpu=7450 -mpowerpc-gfxopt
1762             warn_altivec disabled PPC745x
1763         ;;
1764         74*|ppc74*|PowerPC74*)
1765             add_cflags -mcpu=7400 -mpowerpc-gfxopt
1766             warn_altivec disabled PPC74xx
1767         ;;
1768         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1769             add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1770             warn_altivec disabled PPC970
1771             enable ppc64
1772         ;;
1773         Cell|CELL|cell)
1774             add_cflags -mcpu=cell
1775             warn_altivec disabled Cell
1776             enable ppc64
1777         ;;
1778         # targets that do NOT support conditional mov (cmov)
1779         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1780             add_cflags -march=$cpu
1781             disable cmov
1782         ;;
1783         # targets that do support conditional mov (cmov)
1784         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1785             add_cflags -march=$cpu
1786             enable cmov
1787             enable fast_cmov
1788         ;;
1789         # targets that do support conditional mov but on which it's slow
1790         pentium4|pentium4m|prescott|nocona)
1791             add_cflags -march=$cpu
1792             enable cmov
1793             disable fast_cmov
1794         ;;
1795         sparc64)
1796             add_cflags -mcpu=v9
1797         ;;
1798         arm11*|cortex*)
1799             add_cflags -mcpu=$cpu
1800             enable fast_unaligned
1801         ;;
1802         armv*)
1803             add_cflags -march=$cpu
1804         ;;
1805         arm*)
1806             add_cflags -mcpu=$cpu
1807         ;;
1808         ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1809             enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1810         ;;
1811         *)
1812             echo "WARNING: Unknown CPU \"$cpu\", ignored."
1813         ;;
1814     esac
1815 fi
1816
1817 check_cc <<EOF || die "Symbol mangling check failed."
1818 int ff_extern;
1819 EOF
1820 sym=$($nm -P -g $TMPO | grep ff_extern)
1821 extern_prefix=${sym%%ff_extern*}
1822
1823 check_asm inline_asm '""'
1824
1825 if enabled x86; then
1826     # check whether EBP is available on x86
1827     # As 'i' is stored on the stack, this program will crash
1828     # if the base pointer is used to access it because the
1829     # base pointer is cleared in the inline assembly code.
1830     check_exec_crash <<EOF && enable ebp_available
1831     volatile int i=0;
1832     __asm__ volatile (
1833         "xorl %%ebp, %%ebp"
1834     ::: "%ebp");
1835     return i;
1836 EOF
1837
1838     # check wether EBX is available on x86
1839     check_asm ebx_available '"":::"%ebx"'
1840
1841     # check whether more than 10 operands are supported
1842     check_cc <<EOF && enable ten_operands
1843 int main(void) {
1844     int x=0;
1845     __asm__ volatile(
1846         ""
1847         :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1848     );
1849     return 0;
1850 }
1851 EOF
1852
1853     # check whether binutils is new enough to compile SSSE3/MMX2
1854     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1855     enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1856
1857     check_asm bswap '"bswap %%eax" ::: "%eax"'
1858
1859     YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1860     enabled     x86_64        && append YASMFLAGS "-m amd64"
1861     enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1862     case "$objformat" in
1863         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1864         macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
1865         *)                    append YASMFLAGS "-DPREFIX"  ;;
1866     esac
1867     disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1868 fi
1869
1870 # check for assembler specific support
1871
1872 enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1873 enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1874
1875 # check for SIMD availability
1876
1877 # AltiVec flags: The FSF version of GCC differs from the Apple version
1878 if enabled altivec; then
1879     check_cflags -maltivec -mabi=altivec &&
1880         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1881         check_cflags -faltivec
1882
1883     # check if our compiler supports Motorola AltiVec C API
1884     check_cc <<EOF || disable altivec
1885 $inc_altivec_h
1886 int main(void) {
1887     vector signed int v1, v2, v3;
1888     v1 = vec_add(v2,v3);
1889     return 0;
1890 }
1891 EOF
1892
1893     # check if our compiler supports braces for vector declarations
1894     check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1895 $inc_altivec_h
1896 int main (void) { (vector int) {1}; return 0; }
1897 EOF
1898 fi
1899
1900 # We have to check if pld is a nop and disable it.
1901 enabled arm     && check_asm pld     '"pld [r0]"'
1902 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1903 enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1904 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1905 enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1906 enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
1907 enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1908 enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1909 enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1910
1911 enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1912
1913 # ---
1914 # big/little-endian test
1915 check_cc <<EOF || die "endian test failed"
1916 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1917 EOF
1918 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1919
1920 # ---
1921 # check availability of some header files
1922
1923 if check_func dlopen; then
1924     ldl=
1925 elif check_func dlopen -ldl; then
1926     ldl=-ldl
1927 fi
1928
1929 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1930 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1931
1932 check_func  fork
1933 check_func  gethrtime
1934 check_func  getrusage
1935 check_func  inet_aton $network_extralibs
1936 check_func  memalign
1937 check_func  mkstemp
1938 check_func  posix_memalign
1939 check_func_headers io.h setmode
1940 check_func_headers windows.h GetProcessTimes
1941
1942 check_header conio.h
1943 check_header dlfcn.h
1944 check_header malloc.h
1945 check_header poll.h
1946 check_header sys/mman.h
1947 check_header sys/resource.h
1948 check_header sys/select.h
1949 check_header termios.h
1950 check_header vdpau/vdpau.h
1951 check_header vdpau/vdpau_x11.h
1952 check_header X11/extensions/XvMClib.h
1953
1954 if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1955     die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1956 fi
1957
1958 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
1959 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1960
1961 # check for some common methods of building with pthread support
1962 # do this before the optional library checks as some of them require pthreads
1963 if enabled pthreads; then
1964     if check_func pthread_create; then
1965         :
1966     elif check_func pthread_create -pthread; then
1967         add_cflags -pthread
1968         add_extralibs -pthread
1969     elif check_func pthread_create -pthreads; then
1970         add_cflags -pthreads
1971         add_extralibs -pthreads
1972     elif check_func pthread_create -lpthreadGC2; then
1973         add_extralibs -lpthreadGC2
1974     elif ! check_lib pthread.h pthread_create -lpthread; then
1975         die "ERROR: can't find pthreads library"
1976     fi
1977 fi
1978
1979 for thread in $THREADS_LIST; do
1980     if enabled $thread; then
1981         test -n "$thread_type" &&
1982             die "ERROR: Only one thread type must be selected." ||
1983             thread_type="$thread"
1984     fi
1985 done
1986
1987 check_lib math.h sin -lm
1988
1989 # test for C99 functions in math.h
1990 for func in llrint lrint lrintf round roundf truncf; do
1991     check_exec <<EOF && enable $func || disable $func
1992 #include <math.h>
1993 int main(void) { return ($func(3.999f) > 0)?0:1; }
1994 EOF
1995 done
1996
1997 # these are off by default, so fail if requested and not available
1998 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1999 enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
2000 enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
2001 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2002                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2003                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2004 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2005 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2006 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2007 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2008 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2009 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2010 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2011                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2012 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2013 enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
2014 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2015 enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
2016                       { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2017                         die "ERROR: libx264 version must be >= 0.65."; }
2018 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2019 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2020
2021 # libdc1394 check
2022 if enabled libdc1394; then
2023     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2024         enable libdc1394_2; } ||
2025     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2026         enable libdc1394_1; } ||
2027     die "ERROR: No version of libdc1394 found "
2028 fi
2029
2030
2031 _restrict=
2032 for restrict_keyword in restrict __restrict__ __restrict; do
2033     check_cc <<EOF && _restrict=$restrict_keyword && break
2034 void foo(char * $restrict_keyword p);
2035 EOF
2036 done
2037
2038 test "$vhook" = "default" && vhook="$dlopen"
2039
2040 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
2041     disable vhook
2042     echo
2043     echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
2044     echo "Patches welcome."
2045     echo
2046 fi
2047
2048 if enabled vhook; then
2049     check_ldflags -rdynamic
2050     check_ldflags -export-dynamic
2051 fi
2052
2053 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
2054 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
2055
2056 ##########################################
2057 # SDL check
2058
2059 disable sdl_too_old
2060 disable sdl
2061 SDL_CONFIG="${cross_prefix}sdl-config"
2062 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2063     sdl_cflags=`"${SDL_CONFIG}" --cflags`
2064     temp_cflags $sdl_cflags
2065     temp_extralibs `"${SDL_CONFIG}" --libs`
2066     if check_lib2 SDL.h SDL_Init; then
2067         _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
2068         if test "$_sdlversion" -lt 121 ; then
2069             enable sdl_too_old
2070         else
2071             enable sdl
2072             check_cc $sdl_cflags <<EOF && enable sdl_video_size
2073 #include <SDL.h>
2074 int main(int argc, char **argv){
2075     const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2076     int w = vi->current_w;
2077     return 0;
2078 }
2079 EOF
2080         fi
2081     fi
2082     restore_flags
2083 fi
2084
2085 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2086
2087 ##########################################
2088 # Network check
2089
2090 if enabled network; then
2091     check_type "sys/types.h sys/socket.h" socklen_t
2092     # Prefer arpa/inet.h over winsock2
2093     if check_header arpa/inet.h ; then
2094         check_func closesocket
2095     elif check_header winsock2.h ; then
2096         network_extralibs="-lws2_32"
2097         check_type ws2tcpip.h socklen_t
2098         check_func_headers winsock2.h closesocket
2099     fi
2100 fi
2101
2102 ##########################################
2103 # IPv6 check
2104
2105 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2106 #include <sys/types.h>
2107 #include <sys/socket.h>
2108 #include <netinet/in.h>
2109 #include <netdb.h>
2110 int main(void) {
2111     struct sockaddr_storage saddr;
2112     struct ipv6_mreq mreq6;
2113     getaddrinfo(0,0,0,0);
2114     getnameinfo(0,0,0,0,0,0,0);
2115     IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2116 }
2117 EOF
2118
2119 check_header linux/videodev.h
2120 check_header linux/videodev2.h
2121 check_header sys/videoio.h
2122
2123 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2124
2125 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2126 { check_header dev/bktr/ioctl_meteor.h &&
2127   check_header dev/bktr/ioctl_bt848.h; } ||
2128 { check_header machine/ioctl_meteor.h &&
2129   check_header machine/ioctl_bt848.h; } ||
2130 { check_header dev/video/meteor/ioctl_meteor.h &&
2131   check_header dev/video/bktr/ioctl_bt848.h; } ||
2132 check_header dev/ic/bt8xx.h
2133
2134 check_header sys/soundcard.h
2135 check_header soundcard.h
2136
2137 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2138
2139 # deal with the X11 frame grabber
2140 enabled x11grab                         &&
2141 check_header X11/Xlib.h                 &&
2142 check_header X11/extensions/XShm.h      &&
2143 check_func XOpenDisplay -lX11           &&
2144 check_func XShmCreateImage -lX11 -lXext
2145
2146 enabled debug && add_cflags -g"$debuglevel"
2147
2148 # add some useful compiler flags if supported
2149 check_cflags -Wdeclaration-after-statement
2150 check_cflags -Wall
2151 check_cflags -Wno-switch
2152 check_cflags -Wdisabled-optimization
2153 check_cflags -Wpointer-arith
2154 check_cflags -Wredundant-decls
2155 check_cflags -Wno-pointer-sign
2156 check_cflags -Wcast-qual
2157 check_cflags -Wwrite-strings
2158 check_cflags -Wtype-limits
2159 check_cflags -Wundef
2160 enabled extra_warnings && check_cflags -Winline
2161
2162 # add some linker flags
2163 check_ldflags -Wl,--warn-common
2164 check_ldflags -Wl,--as-needed
2165 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'
2166 check_ldflags -Wl,-Bsymbolic
2167
2168 if enabled small; then
2169     check_cflags -Os            # not all compilers support -Os
2170     optimizations="small"
2171 elif enabled optimizations; then
2172     if enabled xlc; then
2173         add_cflags  -O5
2174         add_ldflags -O5
2175     elif enabled ccc; then
2176         add_cflags -fast
2177     else
2178         add_cflags -O3
2179     fi
2180 fi
2181 check_cflags -fno-math-errno
2182 check_cflags -fno-signed-zeros
2183
2184 # add some flags for Intel C Compiler
2185 if enabled icc; then
2186     # Just warnings, no remarks
2187     check_cflags -w1
2188     # -wd: Disable following warnings
2189     # 144, 167, 556: -Wno-pointer-sign
2190     # 10006: ignoring unknown option -fno-signed-zeros
2191     # 10156: ignoring option '-W'; no argument required
2192     check_cflags -wd144,167,556,10006,10156
2193     # 11030: Warning unknown option --as-needed
2194     # 10156: ignoring option '-export'; no argument required
2195     check_ldflags -wd10156,11030
2196     # Allow to compile with optimizations
2197     check_ldflags -march=$cpu
2198 elif enabled ccc; then
2199     # disable some annoying warnings
2200     add_cflags -msg_disable cvtu32to64
2201     add_cflags -msg_disable embedcomment
2202     add_cflags -msg_disable needconstext
2203     add_cflags -msg_disable nomainieee
2204     add_cflags -msg_disable ptrmismatch1
2205     add_cflags -msg_disable unreachcode
2206 fi
2207
2208 # PIC flags for shared library objects where they are needed
2209 if enabled shared; then
2210     # LIBOBJFLAGS may have already been set in the OS configuration
2211     if test -z "$LIBOBJFLAGS" ; then
2212         case "${subarch-$arch}" in
2213             x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2214         esac
2215     fi
2216 fi
2217
2218 if enabled gprof; then
2219     add_cflags  -p
2220     add_ldflags -p
2221 fi
2222
2223 VHOOKCFLAGS="-fPIC"
2224
2225 # Find out if the .align argument is a power of two or not.
2226 check_asm asmalign_pot '".align 3"'
2227
2228 enabled_any $DECODER_LIST      && enable decoders
2229 enabled_any $ENCODER_LIST      && enable encoders
2230 enabled_any $BSF_LIST          && enable bsfs
2231 enabled_any $DEMUXER_LIST      && enable demuxers
2232 enabled_any $MUXER_LIST        && enable muxers
2233 enabled_any $FILTER_LIST       && enable filters
2234 enabled_any $INDEV_LIST        && enable demuxers
2235 enabled_any $OUTDEV_LIST       && enable muxers
2236 enabled_any $PROTOCOL_LIST     && enable protocols
2237
2238 enabled_any $THREADS_LIST      && enable threads
2239
2240 check_deps $CONFIG_LIST       \
2241            $CONFIG_EXTRA      \
2242            $HAVE_LIST         \
2243            $DECODER_LIST      \
2244            $ENCODER_LIST      \
2245            $PARSER_LIST       \
2246            $BSF_LIST          \
2247            $DEMUXER_LIST      \
2248            $MUXER_LIST        \
2249            $FILTER_LIST       \
2250            $INDEV_LIST        \
2251            $OUTDEV_LIST       \
2252            $PROTOCOL_LIST     \
2253
2254 echo "install prefix            $prefix"
2255 echo "source path               $source_path"
2256 echo "C compiler                $cc"
2257 echo ".align is power-of-two    $asmalign_pot"
2258 echo "ARCH                      $arch ($cpu)"
2259 if test "$build_suffix" != ""; then
2260     echo "build suffix              $build_suffix"
2261 fi
2262 if test "$extra_version" != ""; then
2263     echo "version string suffix     $extra_version"
2264 fi
2265 echo "big-endian                ${bigendian-no}"
2266 if enabled x86; then
2267     echo "yasm                      ${yasm-no}"
2268     echo "MMX enabled               ${mmx-no}"
2269     echo "MMX2 enabled              ${mmx2-no}"
2270     echo "3DNow! enabled            ${amd3dnow-no}"
2271     echo "3DNow! extended enabled   ${amd3dnowext-no}"
2272     echo "SSE enabled               ${sse-no}"
2273     echo "SSSE3 enabled             ${ssse3-no}"
2274     echo "CMOV enabled              ${cmov-no}"
2275     echo "CMOV is fast              ${fast_cmov-no}"
2276     echo "EBX available             ${ebx_available-no}"
2277     echo "EBP available             ${ebp_available-no}"
2278     echo "10 operands supported     ${ten_operands-no}"
2279 fi
2280 if enabled arm; then
2281     echo "ARMv5TE enabled           ${armv5te-no}"
2282     echo "ARMv6 enabled             ${armv6-no}"
2283     echo "ARMv6T2 enabled           ${armv6t2-no}"
2284     echo "ARM VFP enabled           ${armvfp-no}"
2285     echo "IWMMXT enabled            ${iwmmxt-no}"
2286     echo "NEON enabled              ${neon-no}"
2287 fi
2288 if enabled mips; then
2289     echo "MMI enabled               ${mmi-no}"
2290 fi
2291 if enabled ppc; then
2292     echo "AltiVec enabled           ${altivec-no}"
2293     echo "PPC 4xx optimizations     ${ppc4xx-no}"
2294     echo "dcbzl available           ${dcbzl-no}"
2295     echo "performance report        ${powerpc_perf-no}"
2296 fi
2297 if enabled sparc; then
2298     echo "VIS enabled               ${vis-no}"
2299 fi
2300 echo "gprof enabled             ${gprof-no}"
2301 echo "debug symbols             ${debug-no}"
2302 echo "strip symbols             ${stripping-no}"
2303 echo "optimizations             ${optimizations-no}"
2304 echo "static                    ${static-no}"
2305 echo "shared                    ${shared-no}"
2306 echo "postprocessing support    ${postproc-no}"
2307 echo "software scaler enabled   ${swscale-no}"
2308 echo "new filter support        ${avfilter-no}"
2309 echo "filters using lavformat   ${avfilter_lavf-no}"
2310 echo "video hooking             ${vhook-no}"
2311 if enabled vhook; then
2312     echo "Imlib2 support            ${imlib2-no}"
2313     echo "FreeType support          ${freetype2-no}"
2314 fi
2315 echo "network support           ${network-no}"
2316 if enabled network; then
2317     echo "IPv6 support              ${ipv6-no}"
2318 fi
2319 echo "threading support         ${thread_type-no}"
2320 echo "SDL support               ${sdl-no}"
2321 if enabled sdl_too_old; then
2322     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2323 fi
2324 echo "Sun medialib support      ${mlib-no}"
2325 echo "AVISynth enabled          ${avisynth-no}"
2326 echo "libamr-nb support         ${libamr_nb-no}"
2327 echo "libamr-wb support         ${libamr_wb-no}"
2328 echo "libdc1394 support         ${libdc1394-no}"
2329 echo "libdirac enabled          ${libdirac-no}"
2330 echo "libfaac enabled           ${libfaac-no}"
2331 echo "libfaad enabled           ${libfaad-no}"
2332 echo "libfaad dlopened          ${libfaadbin-no}"
2333 echo "libgsm enabled            ${libgsm-no}"
2334 echo "libmp3lame enabled        ${libmp3lame-no}"
2335 echo "libnut enabled            ${libnut-no}"
2336 echo "libopenjpeg enabled       ${libopenjpeg-no}"
2337 echo "libschroedinger enabled   ${libschroedinger-no}"
2338 echo "libspeex enabled          ${libspeex-no}"
2339 echo "libtheora enabled         ${libtheora-no}"
2340 echo "libvorbis enabled         ${libvorbis-no}"
2341 echo "libx264 enabled           ${libx264-no}"
2342 echo "libxvid enabled           ${libxvid-no}"
2343 echo "vdpau enabled             ${vdpau-no}"
2344 echo "zlib enabled              ${zlib-no}"
2345 echo "bzlib enabled             ${bzlib-no}"
2346 echo
2347
2348 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2349     echo "Enabled ${type}s:"
2350     eval list=\$$(toupper $type)_LIST
2351     for part in $list; do
2352         enabled $part && echo ${part%_*}
2353     done | sort | pr -3 -t
2354     echo
2355 done
2356
2357 license="LGPL"
2358 if enabled nonfree; then
2359     license="unredistributable"
2360 elif enabled gpl; then
2361     license="GPL"
2362 fi
2363
2364 echo "License: $license"
2365
2366 echo "Creating config.mak and config.h..."
2367
2368 echo "# Automatically generated by configure - do not modify!" > config.mak
2369 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2370 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2371 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2372 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2373 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2374
2375 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2376 echo "prefix=$prefix" >> config.mak
2377 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2378 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2379 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2380 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2381 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2382 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2383 echo "CC=$cc" >> config.mak
2384 echo "YASM=$yasmexe" >> config.mak
2385 echo "AR=$ar" >> config.mak
2386 echo "RANLIB=$ranlib" >> config.mak
2387 echo "LN_S=$ln_s" >> config.mak
2388 enabled stripping &&
2389     echo "STRIP=$strip" >> config.mak ||
2390     echo "STRIP=echo ignoring strip" >> config.mak
2391
2392 echo "OPTFLAGS=$CFLAGS" >> config.mak
2393 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2394 echo "LDFLAGS=$LDFLAGS" >> config.mak
2395 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2396 echo "SHFLAGS=$SHFLAGS" >> config.mak
2397 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2398 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2399 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2400 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2401 echo "BUILD_STATIC=$static" >> config.mak
2402 echo "BUILDSUF=$build_suffix" >> config.mak
2403 echo "FULLNAME=$FULLNAME" >> config.mak
2404 echo "LIBPREF=$LIBPREF" >> config.mak
2405 echo "LIBSUF=$LIBSUF" >> config.mak
2406 echo "LIBNAME=$LIBNAME" >> config.mak
2407 echo "SLIBPREF=$SLIBPREF" >> config.mak
2408 echo "SLIBSUF=$SLIBSUF" >> config.mak
2409 echo "EXESUF=$EXESUF" >> config.mak
2410 echo "EXTRA_VERSION=$extra_version" >> config.mak
2411 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2412 echo "HOSTCC=$host_cc" >> config.mak
2413 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2414 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2415 echo "HOSTLIBS=$host_libs" >> config.mak
2416 echo "TARGET_EXEC=$target_exec" >> config.mak
2417 echo "TARGET_PATH=$target_path" >> config.mak
2418
2419 if enabled bigendian; then
2420     echo "WORDS_BIGENDIAN=yes" >> config.mak
2421     echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2422 fi
2423
2424 if enabled sdl; then
2425     echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2426     echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2427 fi
2428 if enabled texi2html; then
2429     echo "BUILD_DOC=yes" >> config.mak
2430 fi
2431
2432 get_version(){
2433     name=$1
2434     file=$source_path/$2
2435     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2436     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2437     lcname=$(tolower $name)
2438     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2439     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2440 }
2441
2442 get_version LIBSWSCALE  libswscale/swscale.h
2443 get_version LIBPOSTPROC libpostproc/postprocess.h
2444 get_version LIBAVCODEC  libavcodec/avcodec.h
2445 get_version LIBAVDEVICE libavdevice/avdevice.h
2446 get_version LIBAVFORMAT libavformat/avformat.h
2447 get_version LIBAVUTIL   libavutil/avutil.h
2448 get_version LIBAVFILTER libavfilter/avfilter.h
2449
2450 if enabled shared; then
2451     echo "BUILD_SHARED=yes" >> config.mak
2452     echo "PIC=-fPIC -DPIC" >> config.mak
2453     echo "LIBTARGET=${LIBTARGET}" >> config.mak
2454     echo "SLIBNAME=${SLIBNAME}" >> config.mak
2455     echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2456     echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2457     echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2458     echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2459     echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2460     echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2461 fi
2462 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2463 echo "EXTRALIBS=$extralibs" >> config.mak
2464
2465 echo "ARCH=$arch" >> config.mak
2466
2467 print_config ARCH_   $TMPH config.mak $ARCH_LIST
2468 print_config HAVE_   $TMPH config.mak $HAVE_LIST
2469 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2470                                       $CONFIG_EXTRA      \
2471                                       $DECODER_LIST      \
2472                                       $ENCODER_LIST      \
2473                                       $PARSER_LIST       \
2474                                       $BSF_LIST          \
2475                                       $DEMUXER_LIST      \
2476                                       $MUXER_LIST        \
2477                                       $FILTER_LIST       \
2478                                       $PROTOCOL_LIST     \
2479                                       $INDEV_LIST        \
2480                                       $OUTDEV_LIST       \
2481
2482 echo "#define restrict $_restrict" >> $TMPH
2483
2484 if enabled small; then
2485     echo "#define av_always_inline"  >> $TMPH
2486 fi
2487
2488 echo "SRC_PATH=\"$source_path\"" >> config.mak
2489 echo "SRC_PATH_BARE=$source_path" >> config.mak
2490 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2491
2492 # Apparently it's not possible to portably echo a backslash.
2493 enabled asmalign_pot &&
2494     printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2495     printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2496
2497 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2498
2499 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2500
2501 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2502 cmp -s $TMPH config.h &&
2503     echo "config.h is unchanged" ||
2504     mv -f $TMPH config.h
2505
2506 # build tree in object directory if source path is different from current one
2507 if enabled source_path_used; then
2508     DIRS="\
2509         doc               \
2510         libavcodec        \
2511         libavcodec/alpha  \
2512         libavcodec/arm    \
2513         libavcodec/bfin   \
2514         libavcodec/mlib   \
2515         libavcodec/ppc    \
2516         libavcodec/sh4    \
2517         libavcodec/sparc  \
2518         libavcodec/x86    \
2519         libavdevice       \
2520         libavfilter       \
2521         libavformat       \
2522         libavutil         \
2523         libpostproc       \
2524         libswscale        \
2525         tests             \
2526         tools             \
2527         vhook             \
2528         "
2529     FILES="\
2530         Makefile             \
2531         common.mak           \
2532         subdir.mak           \
2533         doc/texi2pod.pl      \
2534         libavcodec/Makefile  \
2535         libavdevice/Makefile \
2536         libavfilter/Makefile \
2537         libavformat/Makefile \
2538         libavutil/Makefile   \
2539         libpostproc/Makefile \
2540         libswscale/Makefile  \
2541         "
2542     for dir in $DIRS ; do
2543         mkdir -p $dir
2544     done
2545     for f in $FILES ; do
2546         $ln_s "$source_path/$f" $f
2547     done
2548 fi
2549
2550
2551 # build pkg-config files
2552
2553 pkgconfig_generate(){
2554 name=$1
2555 shortname=${name#lib}${build_suffix}
2556 comment=$2
2557 version=$3
2558 libs=$4
2559 requires=$5
2560 cat <<EOF > $name/$name.pc
2561 prefix=$prefix
2562 exec_prefix=\${prefix}
2563 libdir=$libdir
2564 includedir=$incdir
2565
2566 Name: $name
2567 Description: $comment
2568 Version: $version
2569 Requires: $(disabled shared && echo $requires)
2570 Requires.private: $(enabled shared && echo $requires)
2571 Conflicts:
2572 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2573 Libs.private: $(enabled shared && echo $libs)
2574 Cflags: -I\${includedir}
2575 EOF
2576 cat <<EOF > $name/$name-uninstalled.pc
2577 prefix=
2578 exec_prefix=
2579 libdir=\${pcfiledir}
2580 includedir=${source_path}
2581
2582 Name: $name
2583 Description: $comment
2584 Version: $version
2585 Requires: $requires
2586 Conflicts:
2587 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2588 Cflags: -I\${includedir}
2589 EOF
2590 }
2591
2592 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2593 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2594 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2595 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2596 enabled avfilter &&
2597     pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2598 enabled postproc &&
2599     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2600 if enabled swscale; then
2601     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2602 else
2603     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavcodec = $LIBAVCODEC_VERSION"
2604     apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2605 fi