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