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