]> git.sesse.net Git - ffmpeg/blob - configure
b92c91fb70c6678f469fd8dc3a1c02affa43b907
[ffmpeg] / 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 cat <<EOF
59 Usage: configure [options]
60 Options: [defaults in brackets after descriptions]
61
62 Standard options:
63   --help                   print this message
64   --logfile=FILE           log tests and output to FILE [config.log]
65   --disable-logging        do not log configure debug information
66   --prefix=PREFIX          install in PREFIX [$prefix]
67   --bindir=DIR             install binaries in DIR [PREFIX/bin]
68   --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
69   --libdir=DIR             install libs in DIR [PREFIX/lib]
70   --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
71   --incdir=DIR             install includes in DIR [PREFIX/include]
72   --mandir=DIR             install man page in DIR [PREFIX/share/man]
73
74 Configuration options:
75   --disable-static         do not build static libraries [no]
76   --enable-shared          build shared libraries [no]
77   --enable-gpl             allow use of GPL code, the resulting libs
78                            and binaries will be under GPL [no]
79   --enable-version3        upgrade (L)GPL to version 3 [no]
80   --enable-nonfree         allow use of nonfree code, the resulting libs
81                            and binaries will be unredistributable [no]
82   --disable-doc            do not build documentation
83   --disable-ffmpeg         disable ffmpeg build
84   --disable-ffplay         disable ffplay build
85   --disable-ffprobe        disable ffprobe build
86   --disable-ffserver       disable ffserver build
87   --disable-avdevice       disable libavdevice build
88   --disable-avcodec        disable libavcodec build
89   --disable-avcore         disable libavcore build
90   --disable-avformat       disable libavformat build
91   --disable-swscale        disable libswscale build
92   --enable-postproc        enable GPLed postprocessing support [no]
93   --disable-avfilter       disable video filter support [no]
94   --disable-pthreads       disable pthreads [auto]
95   --enable-w32threads      use Win32 threads [no]
96   --enable-x11grab         enable X11 grabbing [no]
97   --disable-network        disable network support [no]
98   --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]
99   --enable-gray            enable full grayscale support (slower color)
100   --disable-swscale-alpha  disable alpha channel support in swscale
101   --disable-fastdiv        disable table-based division
102   --enable-small           optimize for size instead of speed
103   --disable-aandct         disable AAN DCT code
104   --disable-dct            disable DCT code
105   --disable-fft            disable FFT code
106   --disable-golomb         disable Golomb code
107   --disable-huffman        disable Huffman code
108   --disable-lpc            disable LPC code
109   --disable-mdct           disable MDCT code
110   --disable-rdft           disable RDFT code
111   --disable-vaapi          disable VAAPI code
112   --disable-vdpau          disable VDPAU code
113   --disable-dxva2          disable DXVA2 code
114   --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
115   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
116   --enable-memalign-hack   emulate memalign, interferes with memory debuggers
117   --disable-everything     disable all components listed below
118   --disable-encoder=NAME   disable encoder NAME
119   --enable-encoder=NAME    enable encoder NAME
120   --disable-encoders       disable all encoders
121   --disable-decoder=NAME   disable decoder NAME
122   --enable-decoder=NAME    enable decoder NAME
123   --disable-decoders       disable all decoders
124   --disable-hwaccel=NAME   disable hwaccel NAME
125   --enable-hwaccel=NAME    enable hwaccel NAME
126   --disable-hwaccels       disable all hwaccels
127   --disable-muxer=NAME     disable muxer NAME
128   --enable-muxer=NAME      enable muxer NAME
129   --disable-muxers         disable all muxers
130   --disable-demuxer=NAME   disable demuxer NAME
131   --enable-demuxer=NAME    enable demuxer NAME
132   --disable-demuxers       disable all demuxers
133   --enable-parser=NAME     enable parser NAME
134   --disable-parser=NAME    disable parser NAME
135   --disable-parsers        disable all parsers
136   --enable-bsf=NAME        enable bitstream filter NAME
137   --disable-bsf=NAME       disable bitstream filter NAME
138   --disable-bsfs           disable all bitstream filters
139   --enable-protocol=NAME   enable protocol NAME
140   --disable-protocol=NAME  disable protocol NAME
141   --disable-protocols      disable all protocols
142   --disable-indev=NAME     disable input device NAME
143   --disable-outdev=NAME    disable output device NAME
144   --disable-indevs         disable input devices
145   --disable-outdevs        disable output devices
146   --disable-devices        disable all devices
147   --enable-filter=NAME     enable filter NAME
148   --disable-filter=NAME    disable filter NAME
149   --disable-filters        disable all filters
150   --list-decoders          show all available decoders
151   --list-encoders          show all available encoders
152   --list-hwaccels          show all available hardware accelerators
153   --list-muxers            show all available muxers
154   --list-demuxers          show all available demuxers
155   --list-parsers           show all available parsers
156   --list-protocols         show all available protocols
157   --list-bsfs              show all available bitstream filters
158   --list-indevs            show all available input devices
159   --list-outdevs           show all available output devices
160   --list-filters           show all available filters
161
162 External library support:
163   --enable-avisynth        enable reading of AVISynth script files [no]
164   --enable-bzlib           enable bzlib [autodetect]
165   --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
166   --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
167   --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
168                            and libraw1394 [no]
169   --enable-libdirac        enable Dirac support via libdirac [no]
170   --enable-libfaac         enable FAAC support via libfaac [no]
171   --enable-libgsm          enable GSM support via libgsm [no]
172   --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
173   --enable-libnut          enable NUT (de)muxing via libnut,
174                            native (de)muxer exists [no]
175   --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]
176   --enable-librtmp         enable RTMP[E] support via librtmp [no]
177   --enable-libschroedinger enable Dirac support via libschroedinger [no]
178   --enable-libspeex        enable Speex decoding via libspeex [no]
179   --enable-libtheora       enable Theora encoding via libtheora [no]
180   --enable-libvorbis       enable Vorbis encoding via libvorbis,
181                            native implementation exists [no]
182   --enable-libvpx          enable VP8 support via libvpx [no]
183   --enable-libx264         enable H.264 encoding via x264 [no]
184   --enable-libxavs         enable AVS encoding via xavs [no]
185   --enable-libxvid         enable Xvid encoding via xvidcore,
186                            native MPEG-4/Xvid encoder exists [no]
187   --enable-mlib            enable Sun medialib [no]
188   --enable-zlib            enable zlib [autodetect]
189
190 Advanced options (experts only):
191   --source-path=PATH       path to source code [$source_path]
192   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
193   --enable-cross-compile   assume a cross-compiler is used
194   --sysroot=PATH           root of cross-build tree
195   --sysinclude=PATH        location of cross-build system headers
196   --target-os=OS           compiler targets OS [$target_os]
197   --target-exec=CMD        command to run executables on target
198   --target-path=DIR        path to view of build directory on target
199   --nm=NM                  use nm tool
200   --ar=AR                  use archive tool AR [$ar_default]
201   --as=AS                  use assembler AS [$as_default]
202   --cc=CC                  use C compiler CC [$cc_default]
203   --ld=LD                  use linker LD
204   --host-cc=HOSTCC         use host C compiler HOSTCC
205   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
206   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
207   --host-libs=HLIBS        use libs HLIBS when linking for host
208   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
209   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
210   --extra-libs=ELIBS       add ELIBS [$ELIBS]
211   --extra-version=STRING   version string suffix []
212   --build-suffix=SUFFIX    library name suffix []
213   --arch=ARCH              select architecture [$arch]
214   --cpu=CPU                select the minimum required CPU (affects
215                            instruction selection, may crash on older CPUs)
216   --disable-asm            disable all assembler optimizations
217   --disable-altivec        disable AltiVec optimizations
218   --disable-amd3dnow       disable 3DNow! optimizations
219   --disable-amd3dnowext    disable 3DNow! extended optimizations
220   --disable-mmx            disable MMX optimizations
221   --disable-mmx2           disable MMX2 optimizations
222   --disable-sse            disable SSE optimizations
223   --disable-ssse3          disable SSSE3 optimizations
224   --disable-armv5te        disable armv5te optimizations
225   --disable-armv6          disable armv6 optimizations
226   --disable-armv6t2        disable armv6t2 optimizations
227   --disable-armvfp         disable ARM VFP optimizations
228   --disable-iwmmxt         disable iwmmxt optimizations
229   --disable-mmi            disable MMI optimizations
230   --disable-neon           disable neon optimizations
231   --disable-vis            disable VIS optimizations
232   --disable-yasm           disable use of yasm assembler
233   --enable-pic             build position-independent code
234   --malloc-prefix=PFX      prefix malloc and related names with PFX
235   --enable-sram            allow use of on-chip SRAM
236
237 Developer options (useful when working on FFmpeg itself):
238   --disable-debug          disable debugging symbols
239   --enable-debug=LEVEL     set the debug level [$debuglevel]
240   --disable-optimizations  disable compiler optimizations
241   --enable-extra-warnings  enable more compiler warnings
242   --disable-stripping      disable stripping of executables and shared libraries
243   --samples=PATH           location of test samples for FATE
244
245 NOTE: Object files are built at the place where configure is launched.
246 EOF
247   exit 0
248 }
249
250 quotes='""'
251
252 log(){
253     echo "$@" >> $logfile
254 }
255
256 log_file(){
257     log BEGIN $1
258     pr -n -t $1 >> $logfile
259     log END $1
260 }
261
262 echolog(){
263     log "$@"
264     echo "$@"
265 }
266
267 warn(){
268     log "WARNING: $*"
269     WARNINGS="${WARNINGS}WARNING: $*\n"
270 }
271
272 die(){
273     echolog "$@"
274     cat <<EOF
275
276 If you think configure made a mistake, make sure you are using the latest
277 version from SVN.  If the latest version fails, report the problem to the
278 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
279 EOF
280     if disabled logging; then
281         cat <<EOF
282 Rerun configure with logging enabled (do not use --disable-logging), and
283 include the log this produces with your report.
284 EOF
285     else
286 cat <<EOF
287 Include the log file "$logfile" produced by configure as this will help
288 solving the problem.
289 EOF
290     fi
291     exit 1
292 }
293
294 # Avoid locale weirdness, besides we really just want to translate ASCII.
295 toupper(){
296     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
297 }
298
299 tolower(){
300     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
301 }
302
303 c_escape(){
304     echo "$*" | sed 's/["\\]/\\\0/g'
305 }
306
307 sh_quote(){
308     v=$(echo "$1" | sed "s/'/'\\\\''/g")
309     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
310     echo "$v"
311 }
312
313 filter(){
314     pat=$1
315     shift
316     for v; do
317         eval "case $v in $pat) echo $v ;; esac"
318     done
319 }
320
321 map(){
322     m=$1
323     shift
324     for v; do eval $m; done
325 }
326
327 set_all(){
328     value=$1
329     shift
330     for var in $*; do
331         eval $var=$value
332     done
333 }
334
335 set_weak(){
336     value=$1
337     shift
338     for var; do
339         eval : \${$var:=$value}
340     done
341 }
342
343 pushvar(){
344     for var in $*; do
345         eval level=\${${var}_level:=0}
346         eval ${var}_${level}="\$$var"
347         eval ${var}_level=$(($level+1))
348     done
349 }
350
351 popvar(){
352     for var in $*; do
353         eval level=\${${var}_level:-0}
354         test $level = 0 && continue
355         eval level=$(($level-1))
356         eval $var="\${${var}_${level}}"
357         eval ${var}_level=$level
358         eval unset ${var}_${level}
359     done
360 }
361
362 enable(){
363     set_all yes $*
364 }
365
366 disable(){
367     set_all no $*
368 }
369
370 enable_weak(){
371     set_weak yes $*
372 }
373
374 disable_weak(){
375     set_weak no $*
376 }
377
378 enable_safe(){
379     for var; do
380         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
381     done
382 }
383
384 disable_safe(){
385     for var; do
386         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
387     done
388 }
389
390 do_enable_deep(){
391     for var; do
392         enabled $var && continue
393         eval sel="\$${var}_select"
394         eval sgs="\$${var}_suggest"
395         pushvar var sgs
396         enable_deep $sel
397         popvar sgs
398         enable_deep_weak $sgs
399         popvar var
400     done
401 }
402
403 enable_deep(){
404     do_enable_deep $*
405     enable $*
406 }
407
408 enable_deep_weak(){
409     do_enable_deep $*
410     enable_weak $*
411 }
412
413 enabled(){
414     test "${1#!}" = "$1" && op== || op=!=
415     eval test "x\$${1#!}" $op "xyes"
416 }
417
418 disabled(){
419     test "${1#!}" = "$1" && op== || op=!=
420     eval test "x\$${1#!}" $op "xno"
421 }
422
423 enabled_all(){
424     for opt; do
425         enabled $opt || return 1
426     done
427 }
428
429 disabled_all(){
430     for opt; do
431         disabled $opt || return 1
432     done
433 }
434
435 enabled_any(){
436     for opt; do
437         enabled $opt && return 0
438     done
439 }
440
441 disabled_any(){
442     for opt; do
443         disabled $opt && return 0
444     done
445     return 1
446 }
447
448 set_default(){
449     for opt; do
450         eval : \${$opt:=\$${opt}_default}
451     done
452 }
453
454 is_in(){
455     value=$1
456     shift
457     for var in $*; do
458         [ $var = $value ] && return 0
459     done
460     return 1
461 }
462
463 check_deps(){
464     for cfg; do
465         cfg="${cfg#!}"
466         enabled ${cfg}_checking && die "Circular dependency for $cfg."
467         disabled ${cfg}_checking && continue
468         enable ${cfg}_checking
469
470         eval dep_all="\$${cfg}_deps"
471         eval dep_any="\$${cfg}_deps_any"
472         eval dep_sel="\$${cfg}_select"
473         eval dep_sgs="\$${cfg}_suggest"
474         eval dep_ifa="\$${cfg}_if"
475         eval dep_ifn="\$${cfg}_if_any"
476
477         pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
478         check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
479         popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
480
481         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
482         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
483         enabled_all  $dep_all || disable $cfg
484         enabled_any  $dep_any || disable $cfg
485         disabled_any $dep_sel && disable $cfg
486
487         if enabled $cfg; then
488             eval dep_extralibs="\$${cfg}_extralibs"
489             test -n "$dep_extralibs" && add_extralibs $dep_extralibs
490             enable_deep $dep_sel
491             enable_deep_weak $dep_sgs
492         fi
493
494         disable ${cfg}_checking
495     done
496 }
497
498 print_config_h(){
499     enabled $1 && v=1 || v=0
500     echo "#define $2 $v"
501 }
502
503 print_config_mak(){
504     enabled $1 && v= || v=!
505     echo "$v$2=yes"
506 }
507
508 print_config(){
509     pfx=$1
510     files=$2
511     shift 2
512     for cfg; do
513         ucname="$(toupper $cfg)"
514         for f in $files; do
515             "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
516         done
517     done
518 }
519
520 print_enabled(){
521     test "$1" = -n && end=" " && shift || end="\n"
522     suf=$1
523     shift
524     for v; do
525         enabled $v && printf "%s$end" ${v%$suf};
526     done
527 }
528
529 append(){
530     var=$1
531     shift
532     eval "$var=\"\$$var $*\""
533 }
534
535 prepend(){
536     var=$1
537     shift
538     eval "$var=\"$* \$$var\""
539 }
540
541 add_cppflags(){
542     append CPPFLAGS $($filter_cppflags "$@")
543 }
544
545 add_cflags(){
546     append CFLAGS $($filter_cflags "$@")
547 }
548
549 add_asflags(){
550     append ASFLAGS $($filter_asflags "$@")
551 }
552
553 add_ldflags(){
554     append LDFLAGS "$@"
555 }
556
557 add_extralibs(){
558     prepend extralibs "$@"
559 }
560
561 check_cmd(){
562     log "$@"
563     "$@" >> $logfile 2>&1
564 }
565
566 check_cc(){
567     log check_cc "$@"
568     cat > $TMPC
569     log_file $TMPC
570     check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
571 }
572
573 check_cpp(){
574     log check_cpp "$@"
575     cat > $TMPC
576     log_file $TMPC
577     check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
578 }
579
580 check_as(){
581     log check_as "$@"
582     cat > $TMPC
583     log_file $TMPC
584     check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
585 }
586
587 check_asm(){
588     log check_asm "$@"
589     name="$1"
590     code="$2"
591     shift 2
592     disable $name
593     check_as "$@" <<EOF && enable $name
594 void foo(void){ __asm__ volatile($code); }
595 EOF
596 }
597
598 check_yasm(){
599     log check_yasm "$@"
600     echo "$1" > $TMPS
601     log_file $TMPS
602     shift 1
603     check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
604 }
605
606 check_ld(){
607     log check_ld "$@"
608     flags=''
609     libs=''
610     for f; do
611         test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
612     done
613     check_cc $($filter_cflags $flags) || return
614     check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
615 }
616
617 check_cppflags(){
618     log check_cppflags "$@"
619     set -- $($filter_cppflags "$@")
620     check_cc "$@" <<EOF && append CPPFLAGS "$@"
621 int x;
622 EOF
623 }
624
625 check_cflags(){
626     log check_cflags "$@"
627     set -- $($filter_cflags "$@")
628     check_cc "$@" <<EOF && append CFLAGS "$@"
629 int x;
630 EOF
631 }
632
633 test_ldflags(){
634     log test_ldflags "$@"
635     check_ld "$@" <<EOF
636 int main(void){ return 0; }
637 EOF
638 }
639
640 check_ldflags(){
641     log check_ldflags "$@"
642     test_ldflags "$@" && add_ldflags "$@"
643 }
644
645 check_header(){
646     log check_header "$@"
647     header=$1
648     shift
649     disable_safe $header
650     check_cpp "$@" <<EOF && enable_safe $header
651 #include <$header>
652 int x;
653 EOF
654 }
655
656 check_func(){
657     log check_func "$@"
658     func=$1
659     shift
660     disable $func
661     check_ld "$@" <<EOF && enable $func
662 extern int $func();
663 int main(void){ $func(); }
664 EOF
665 }
666
667 check_mathfunc(){
668     log check_mathfunc "$@"
669     func=$1
670     shift
671     disable $func
672     check_ld "$@" <<EOF && enable $func
673 #include <math.h>
674 float foo(float f) { return $func(f); }
675 int main(void){ return 0; }
676 EOF
677 }
678
679 check_func_headers(){
680     log check_func_headers "$@"
681     headers=$1
682     func=$2
683     shift 2
684     disable $func
685     incs=""
686     for hdr in $headers; do
687         incs="$incs
688 #include <$hdr>"
689     done
690     check_ld "$@" <<EOF && enable $func && enable_safe $headers
691 $incs
692 int main(int argc, char **argv){
693     return (long) $func;
694 }
695 EOF
696 }
697
698 check_cpp_condition(){
699     log check_cpp_condition "$@"
700     header=$1
701     condition=$2
702     shift 2
703     check_cpp $($filter_cppflags "$@") <<EOF
704 #include <$header>
705 #if !($condition)
706 #error "unsatisfied condition: $condition"
707 #endif
708 EOF
709 }
710
711 check_lib(){
712     log check_lib "$@"
713     header="$1"
714     func="$2"
715     shift 2
716     check_header $header && check_func $func "$@" && add_extralibs "$@"
717 }
718
719 check_lib2(){
720     log check_lib2 "$@"
721     headers="$1"
722     func="$2"
723     shift 2
724     check_func_headers "$headers" $func "$@" && add_extralibs "$@"
725 }
726
727 check_exec(){
728     check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
729 }
730
731 check_exec_crash(){
732     code=$(cat)
733
734     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
735     # are safe but may not be available everywhere.  Thus we use
736     # raise(SIGTERM) instead.  The check is run in a subshell so we
737     # can redirect the "Terminated" message from the shell.  SIGBUS
738     # is not defined by standard C so it is used conditionally.
739
740     (check_exec "$@") >> $logfile 2>&1 <<EOF
741 #include <signal.h>
742 static void sighandler(int sig){
743     raise(SIGTERM);
744 }
745 int main(void){
746     signal(SIGILL, sighandler);
747     signal(SIGFPE, sighandler);
748     signal(SIGSEGV, sighandler);
749 #ifdef SIGBUS
750     signal(SIGBUS, sighandler);
751 #endif
752     { $code }
753 }
754 EOF
755 }
756
757 check_type(){
758     log check_type "$@"
759     headers=$1
760     type=$2
761     shift 2
762     disable_safe "$type"
763     incs=""
764     for hdr in $headers; do
765         incs="$incs
766 #include <$hdr>"
767     done
768     check_cc "$@" <<EOF && enable_safe "$type"
769 $incs
770 $type v;
771 EOF
772 }
773
774 check_struct(){
775     log check_type "$@"
776     headers=$1
777     struct=$2
778     member=$3
779     shift 3
780     disable_safe "${struct}_${member}"
781     incs=""
782     for hdr in $headers; do
783         incs="$incs
784 #include <$hdr>"
785     done
786     check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
787 $incs
788 const void *p = &(($struct *)0)->$member;
789 EOF
790 }
791
792 require(){
793     name="$1"
794     header="$2"
795     func="$3"
796     shift 3
797     check_lib $header $func "$@" || die "ERROR: $name not found"
798 }
799
800 require2(){
801     name="$1"
802     headers="$2"
803     func="$3"
804     shift 3
805     check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
806 }
807
808 check_host_cc(){
809     log check_host_cc "$@"
810     cat > $TMPC
811     log_file $TMPC
812     check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
813 }
814
815 check_host_cflags(){
816     log check_host_cflags "$@"
817     check_host_cc "$@" <<EOF && append host_cflags "$@"
818 int x;
819 EOF
820 }
821
822 apply(){
823     file=$1
824     shift
825     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
826 }
827
828 cp_if_changed(){
829     cmp -s "$1" "$2" &&
830         echo "$2 is unchanged" ||
831         cp -f "$1" "$2"
832 }
833
834 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
835 # system-dependent things.
836
837 COMPONENT_LIST="
838     bsfs
839     decoders
840     demuxers
841     encoders
842     filters
843     hwaccels
844     indevs
845     muxers
846     outdevs
847     parsers
848     protocols
849 "
850
851 CONFIG_LIST="
852     $COMPONENT_LIST
853     aandct
854     avcodec
855     avcore
856     avdevice
857     avfilter
858     avformat
859     avisynth
860     bzlib
861     dct
862     doc
863     dwt
864     dxva2
865     fastdiv
866     ffmpeg
867     ffplay
868     ffprobe
869     ffserver
870     fft
871     golomb
872     gpl
873     gray
874     h264dsp
875     h264pred
876     hardcoded_tables
877     huffman
878     libdc1394
879     libdirac
880     libfaac
881     libgsm
882     libmp3lame
883     libnut
884     libopencore_amrnb
885     libopencore_amrwb
886     libopenjpeg
887     librtmp
888     libschroedinger
889     libspeex
890     libtheora
891     libvorbis
892     libvpx
893     libx264
894     libxavs
895     libxvid
896     lpc
897     lsp
898     mdct
899     memalign_hack
900     mlib
901     mpegaudio_hp
902     network
903     nonfree
904     pic
905     postproc
906     rdft
907     runtime_cpudetect
908     shared
909     small
910     sram
911     static
912     swscale
913     swscale_alpha
914     vaapi
915     vdpau
916     version3
917     x11grab
918     zlib
919 "
920
921 THREADS_LIST='
922     pthreads
923     w32threads
924 '
925
926 ARCH_LIST='
927     alpha
928     arm
929     avr32
930     avr32_ap
931     avr32_uc
932     bfin
933     ia64
934     m68k
935     mips
936     mips64
937     parisc
938     ppc
939     ppc64
940     s390
941     sh4
942     sparc
943     sparc64
944     tomi
945     x86
946     x86_32
947     x86_64
948 '
949
950 ARCH_EXT_LIST='
951     altivec
952     amd3dnow
953     amd3dnowext
954     armv5te
955     armv6
956     armv6t2
957     armvfp
958     iwmmxt
959     mmi
960     mmx
961     mmx2
962     neon
963     ppc4xx
964     sse
965     ssse3
966     vis
967 '
968
969 HAVE_LIST_PUB='
970     bigendian
971     fast_unaligned
972 '
973
974 HAVE_LIST="
975     $ARCH_EXT_LIST
976     $HAVE_LIST_PUB
977     $THREADS_LIST
978     alsa_asoundlib_h
979     altivec_h
980     arpa_inet_h
981     attribute_may_alias
982     attribute_packed
983     bswap
984     closesocket
985     cmov
986     conio_h
987     dcbzl
988     dev_bktr_ioctl_bt848_h
989     dev_bktr_ioctl_meteor_h
990     dev_ic_bt8xx_h
991     dev_video_meteor_ioctl_meteor_h
992     dev_video_bktr_ioctl_bt848_h
993     dlfcn_h
994     dlopen
995     dos_paths
996     ebp_available
997     ebx_available
998     exp2
999     exp2f
1000     fast_64bit
1001     fast_clz
1002     fast_cmov
1003     fcntl
1004     fork
1005     getaddrinfo
1006     gethrtime
1007     GetProcessMemoryInfo
1008     GetProcessTimes
1009     getrusage
1010     gnu_as
1011     struct_rusage_ru_maxrss
1012     ibm_asm
1013     inet_aton
1014     inline_asm
1015     isatty
1016     ldbrx
1017     libdc1394_1
1018     libdc1394_2
1019     llrint
1020     llrintf
1021     local_aligned_16
1022     local_aligned_8
1023     log2
1024     log2f
1025     loongson
1026     lrint
1027     lrintf
1028     lzo1x_999_compress
1029     machine_ioctl_bt848_h
1030     machine_ioctl_meteor_h
1031     malloc_h
1032     memalign
1033     mkstemp
1034     pld
1035     posix_memalign
1036     round
1037     roundf
1038     sdl
1039     sdl_video_size
1040     setmode
1041     socklen_t
1042     soundcard_h
1043     poll_h
1044     setrlimit
1045     strerror_r
1046     struct_addrinfo
1047     struct_ipv6_mreq
1048     struct_sockaddr_in6
1049     struct_sockaddr_sa_len
1050     struct_sockaddr_storage
1051     symver
1052     symver_gnu_asm
1053     symver_asm_label
1054     sys_mman_h
1055     sys_resource_h
1056     sys_select_h
1057     sys_soundcard_h
1058     sys_videoio_h
1059     ten_operands
1060     termios_h
1061     threads
1062     truncf
1063     vfp_args
1064     VirtualAlloc
1065     winsock2_h
1066     xform_asm
1067     yasm
1068 "
1069
1070 # options emitted with CONFIG_ prefix but not available on command line
1071 CONFIG_EXTRA="
1072     avutil
1073     gplv3
1074     lgplv3
1075 "
1076
1077 CMDLINE_SELECT="
1078     $ARCH_EXT_LIST
1079     $CONFIG_LIST
1080     $THREADS_LIST
1081     asm
1082     cross_compile
1083     debug
1084     extra_warnings
1085     logging
1086     optimizations
1087     stripping
1088     yasm
1089 "
1090
1091 PATHS_LIST='
1092     bindir
1093     datadir
1094     incdir
1095     libdir
1096     mandir
1097     prefix
1098     shlibdir
1099 '
1100
1101 CMDLINE_SET="
1102     $PATHS_LIST
1103     ar
1104     arch
1105     as
1106     build_suffix
1107     cc
1108     cpu
1109     cross_prefix
1110     dep_cc
1111     extra_version
1112     host_cc
1113     host_cflags
1114     host_ldflags
1115     host_libs
1116     host_os
1117     ld
1118     logfile
1119     malloc_prefix
1120     nm
1121     samples
1122     source_path
1123     strip
1124     sysinclude
1125     sysroot
1126     target_exec
1127     target_os
1128     target_path
1129 "
1130
1131 CMDLINE_APPEND="
1132     extra_cflags
1133 "
1134
1135 # code dependency declarations
1136
1137 # architecture extensions
1138
1139 armv5te_deps="arm"
1140 armv6_deps="arm"
1141 armv6t2_deps="arm"
1142 armvfp_deps="arm"
1143 iwmmxt_deps="arm"
1144 neon_deps="arm"
1145
1146 mmi_deps="mips"
1147
1148 altivec_deps="ppc"
1149 ppc4xx_deps="ppc"
1150
1151 vis_deps="sparc"
1152
1153 x86_64_suggest="cmov fast_cmov"
1154 amd3dnow_deps="mmx"
1155 amd3dnowext_deps="amd3dnow"
1156 mmx_deps="x86"
1157 mmx2_deps="mmx"
1158 sse_deps="mmx"
1159 ssse3_deps="sse"
1160
1161 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1162 fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1163 fast_unaligned_if_any="armv6 ppc x86"
1164
1165 need_memalign="altivec neon sse"
1166 inline_asm_deps="!tms470"
1167
1168 symver_if_any="symver_asm_label symver_gnu_asm"
1169
1170 # subsystems
1171 dct_select="rdft"
1172 mdct_select="fft"
1173 rdft_select="fft"
1174
1175 # decoders / encoders / hardware accelerators
1176 aac_decoder_select="mdct rdft"
1177 aac_encoder_select="mdct"
1178 ac3_decoder_select="mdct ac3_parser"
1179 alac_encoder_select="lpc"
1180 amrnb_decoder_select="lsp"
1181 atrac1_decoder_select="mdct"
1182 atrac3_decoder_select="mdct"
1183 binkaudio_dct_decoder_select="mdct rdft dct"
1184 binkaudio_rdft_decoder_select="mdct rdft"
1185 cavs_decoder_select="golomb"
1186 cook_decoder_select="mdct"
1187 cscd_decoder_suggest="zlib"
1188 dca_decoder_select="mdct"
1189 dnxhd_encoder_select="aandct"
1190 dxa_decoder_select="zlib"
1191 eac3_decoder_select="ac3_decoder"
1192 eamad_decoder_select="aandct"
1193 eatgq_decoder_select="aandct"
1194 eatqi_decoder_select="aandct"
1195 ffv1_decoder_select="golomb"
1196 flac_decoder_select="golomb"
1197 flac_encoder_select="golomb lpc"
1198 flashsv_decoder_select="zlib"
1199 flashsv_encoder_select="zlib"
1200 flv_decoder_select="h263_decoder"
1201 flv_encoder_select="h263_encoder"
1202 fraps_decoder_select="huffman"
1203 h261_encoder_select="aandct"
1204 h263_decoder_select="h263_parser"
1205 h263_encoder_select="aandct"
1206 h263_vaapi_hwaccel_select="vaapi h263_decoder"
1207 h263i_decoder_select="h263_decoder"
1208 h263p_encoder_select="h263_encoder"
1209 h264_decoder_select="golomb h264dsp h264pred"
1210 h264_dxva2_hwaccel_deps="dxva2api_h"
1211 h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1212 h264_vaapi_hwaccel_select="vaapi"
1213 h264_vdpau_decoder_select="vdpau h264_decoder"
1214 imc_decoder_select="fft mdct"
1215 jpegls_decoder_select="golomb"
1216 jpegls_encoder_select="golomb"
1217 ljpeg_encoder_select="aandct"
1218 loco_decoder_select="golomb"
1219 mjpeg_encoder_select="aandct"
1220 mlp_decoder_select="mlp_parser"
1221 mp1float_decoder_select="dct"
1222 mp2float_decoder_select="dct"
1223 mp3adufloat_decoder_select="dct"
1224 mp3float_decoder_select="dct"
1225 mp3on4float_decoder_select="dct"
1226 mpeg1video_encoder_select="aandct"
1227 mpeg2video_encoder_select="aandct"
1228 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1229 mpeg4_encoder_select="h263_encoder"
1230 mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1231 mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1232 mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1233 mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1234 mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1235 mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1236 mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1237 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1238 mpeg_xvmc_decoder_select="mpegvideo_decoder"
1239 msmpeg4v1_decoder_select="h263_decoder"
1240 msmpeg4v1_encoder_select="h263_encoder"
1241 msmpeg4v2_decoder_select="h263_decoder"
1242 msmpeg4v2_encoder_select="h263_encoder"
1243 msmpeg4v3_decoder_select="h263_decoder"
1244 msmpeg4v3_encoder_select="h263_encoder"
1245 nellymoser_decoder_select="mdct"
1246 nellymoser_encoder_select="mdct"
1247 png_decoder_select="zlib"
1248 png_encoder_select="zlib"
1249 qcelp_decoder_select="lsp"
1250 qdm2_decoder_select="mdct rdft"
1251 ra_144_encoder_select="lpc"
1252 rv10_decoder_select="h263_decoder"
1253 rv10_encoder_select="h263_encoder"
1254 rv20_decoder_select="h263_decoder"
1255 rv20_encoder_select="h263_encoder"
1256 rv30_decoder_select="golomb h264pred"
1257 rv40_decoder_select="golomb h264pred"
1258 shorten_decoder_select="golomb"
1259 sipr_decoder_select="lsp"
1260 snow_decoder_select="dwt"
1261 snow_encoder_select="aandct dwt"
1262 sonic_decoder_select="golomb"
1263 sonic_encoder_select="golomb"
1264 sonic_ls_encoder_select="golomb"
1265 svq1_encoder_select="aandct"
1266 svq3_decoder_select="golomb h264dsp h264pred"
1267 svq3_decoder_suggest="zlib"
1268 theora_decoder_select="vp3_decoder"
1269 tiff_decoder_suggest="zlib"
1270 tiff_encoder_suggest="zlib"
1271 truehd_decoder_select="mlp_decoder"
1272 tscc_decoder_select="zlib"
1273 twinvq_decoder_select="mdct lsp"
1274 vc1_decoder_select="h263_decoder"
1275 vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
1276 vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1277 vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1278 vc1_vdpau_decoder_select="vdpau vc1_decoder"
1279 vorbis_decoder_select="mdct"
1280 vorbis_encoder_select="mdct"
1281 vp6_decoder_select="huffman"
1282 vp6a_decoder_select="vp6_decoder"
1283 vp6f_decoder_select="vp6_decoder"
1284 vp8_decoder_select="h264pred"
1285 wmapro_decoder_select="mdct"
1286 wmav1_decoder_select="mdct"
1287 wmav1_encoder_select="mdct"
1288 wmav2_decoder_select="mdct"
1289 wmav2_encoder_select="mdct"
1290 wmavoice_decoder_select="lsp rdft dct mdct"
1291 wmv1_decoder_select="h263_decoder"
1292 wmv1_encoder_select="h263_encoder"
1293 wmv2_decoder_select="h263_decoder"
1294 wmv2_encoder_select="h263_encoder"
1295 wmv3_decoder_select="vc1_decoder"
1296 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1297 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1298 wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1299 zlib_decoder_select="zlib"
1300 zlib_encoder_select="zlib"
1301 zmbv_decoder_select="zlib"
1302 zmbv_encoder_select="zlib"
1303
1304 vaapi_deps="va_va_h"
1305 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1306
1307 # parsers
1308 h264_parser_select="golomb h264dsp h264pred"
1309
1310 # external libraries
1311 libdirac_decoder_deps="libdirac !libschroedinger"
1312 libdirac_encoder_deps="libdirac"
1313 libfaac_encoder_deps="libfaac"
1314 libgsm_decoder_deps="libgsm"
1315 libgsm_encoder_deps="libgsm"
1316 libgsm_ms_decoder_deps="libgsm"
1317 libgsm_ms_encoder_deps="libgsm"
1318 libmp3lame_encoder_deps="libmp3lame"
1319 libopencore_amrnb_decoder_deps="libopencore_amrnb"
1320 libopencore_amrnb_encoder_deps="libopencore_amrnb"
1321 libopencore_amrwb_decoder_deps="libopencore_amrwb"
1322 libopenjpeg_decoder_deps="libopenjpeg"
1323 libschroedinger_decoder_deps="libschroedinger"
1324 libschroedinger_encoder_deps="libschroedinger"
1325 libspeex_decoder_deps="libspeex"
1326 libtheora_encoder_deps="libtheora"
1327 libvorbis_encoder_deps="libvorbis"
1328 libvpx_decoder_deps="libvpx"
1329 libvpx_encoder_deps="libvpx"
1330 libx264_encoder_deps="libx264"
1331 libxavs_encoder_deps="libxavs"
1332 libxvid_encoder_deps="libxvid"
1333
1334 # demuxers / muxers
1335 ac3_demuxer_deps="ac3_parser"
1336 asf_stream_muxer_select="asf_muxer"
1337 avisynth_demuxer_deps="avisynth"
1338 dirac_demuxer_deps="dirac_parser"
1339 eac3_demuxer_select="ac3_parser"
1340 ipod_muxer_select="mov_muxer"
1341 libnut_demuxer_deps="libnut"
1342 libnut_muxer_deps="libnut"
1343 matroska_audio_muxer_select="matroska_muxer"
1344 matroska_demuxer_suggest="zlib bzlib"
1345 mov_demuxer_suggest="zlib"
1346 mp3_demuxer_deps="mpegaudio_parser"
1347 mp4_muxer_select="mov_muxer"
1348 mpegtsraw_demuxer_select="mpegts_demuxer"
1349 mxf_d10_muxer_select="mxf_muxer"
1350 ogg_demuxer_select="golomb"
1351 psp_muxer_select="mov_muxer"
1352 rtsp_demuxer_deps="sdp_demuxer"
1353 rtsp_muxer_deps="sdp_demuxer"
1354 rtsp_muxer_select="rtp_muxer"
1355 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1356 sdp_demuxer_select="asf_demuxer rm_demuxer"
1357 spdif_muxer_select="aac_parser"
1358 tg2_muxer_select="mov_muxer"
1359 tgp_muxer_select="mov_muxer"
1360 w64_demuxer_deps="wav_demuxer"
1361
1362 # indevs / outdevs
1363 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1364 alsa_outdev_deps="alsa_asoundlib_h"
1365 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1366 dv1394_indev_deps="dv1394 dv_demuxer"
1367 jack_indev_deps="jack_jack_h"
1368 libdc1394_indev_deps="libdc1394"
1369 oss_indev_deps_any="soundcard_h sys_soundcard_h"
1370 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1371 v4l_indev_deps="linux_videodev_h"
1372 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1373 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1374 vfwcap_indev_extralibs="-lavicap32"
1375 x11_grab_device_indev_deps="x11grab XShmCreateImage"
1376 x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1377
1378 # protocols
1379 gopher_protocol_deps="network"
1380 http_protocol_deps="network"
1381 http_protocol_select="tcp_protocol"
1382 mmsh_protocol_select="http_protocol"
1383 mmst_protocol_deps="network"
1384 rtmp_protocol_select="tcp_protocol"
1385 rtp_protocol_select="udp_protocol"
1386 tcp_protocol_deps="network"
1387 udp_protocol_deps="network"
1388
1389 # libraries
1390 avdevice_deps="avcodec avformat"
1391 avformat_deps="avcodec"
1392
1393 # programs
1394 ffmpeg_deps="avcodec avformat swscale"
1395 ffmpeg_select="buffer_filter"
1396 ffplay_deps="avcodec avformat swscale sdl"
1397 ffplay_select="rdft"
1398 ffprobe_deps="avcodec avformat"
1399 ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1400 ffserver_extralibs='$ldl'
1401
1402 doc_deps="texi2html"
1403
1404 # tests
1405
1406 test_deps(){
1407     suf1=$1
1408     suf2=$2
1409     shift 2
1410     for v; do
1411         dep=${v%=*}
1412         tests=${v#*=}
1413         for name in ${tests}; do
1414             eval ${name}_test_deps="'${dep}$suf1 ${dep}$suf2'"
1415         done
1416     done
1417 }
1418
1419 set_ne_test_deps(){
1420     eval ${1}_be_test_deps="bigendian"
1421     eval ${1}_le_test_deps="!bigendian"
1422 }
1423
1424 test_deps _encoder _decoder                                             \
1425     ac3                                                                 \
1426     adpcm_g726=g726                                                     \
1427     adpcm_ima_qt                                                        \
1428     adpcm_ima_wav                                                       \
1429     adpcm_ms                                                            \
1430     adpcm_swf                                                           \
1431     adpcm_yamaha=adpcm_yam                                              \
1432     alac                                                                \
1433     asv1                                                                \
1434     asv2                                                                \
1435     bmp                                                                 \
1436     dnxhd="dnxhd_1080i dnxhd_720p dnxhd_720p_rd"                        \
1437     dvvideo="dv dv50"                                                   \
1438     ffv1                                                                \
1439     flac                                                                \
1440     flashsv                                                             \
1441     flv                                                                 \
1442     gif                                                                 \
1443     h261                                                                \
1444     h263="h263 h263p"                                                   \
1445     huffyuv                                                             \
1446     jpegls                                                              \
1447     mjpeg="jpg mjpeg ljpeg"                                             \
1448     mp2                                                                 \
1449     mpeg1video="mpeg mpeg1b"                                            \
1450     mpeg2video="mpeg2 mpeg2thread"                                      \
1451     mpeg4="mpeg4 mpeg4adv mpeg4nr mpeg4thread error rc"                 \
1452     msmpeg4v3=msmpeg4                                                   \
1453     msmpeg4v2                                                           \
1454     pbm=pbmpipe                                                         \
1455     pcx                                                                 \
1456     pgm="pgm pgmpipe"                                                   \
1457     ppm="ppm ppmpipe"                                                   \
1458     rawvideo="rgb yuv"                                                  \
1459     roq                                                                 \
1460     rv10                                                                \
1461     rv20                                                                \
1462     sgi                                                                 \
1463     snow="snow snowll"                                                  \
1464     svq1                                                                \
1465     targa=tga                                                           \
1466     tiff                                                                \
1467     wmav1                                                               \
1468     wmav2                                                               \
1469     wmv1                                                                \
1470     wmv2                                                                \
1471
1472 test_deps _muxer _demuxer                                               \
1473     aiff                                                                \
1474     pcm_alaw=alaw                                                       \
1475     asf                                                                 \
1476     au                                                                  \
1477     avi                                                                 \
1478     dv=dv_fmt                                                           \
1479     ffm                                                                 \
1480     flv=flv_fmt                                                         \
1481     gxf                                                                 \
1482     matroska=mkv                                                        \
1483     mmf                                                                 \
1484     mov                                                                 \
1485     pcm_mulaw=mulaw                                                     \
1486     mxf                                                                 \
1487     nut                                                                 \
1488     ogg                                                                 \
1489     rawvideo=pixfmt                                                     \
1490     rm                                                                  \
1491     swf                                                                 \
1492     mpegts=ts                                                           \
1493     voc                                                                 \
1494     wav                                                                 \
1495     yuv4mpegpipe=yuv4mpeg                                               \
1496
1497 mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1498
1499 set_ne_test_deps pixdesc
1500 set_ne_test_deps pixfmts_crop
1501 set_ne_test_deps pixfmts_hflip
1502 set_ne_test_deps pixfmts_null
1503 set_ne_test_deps pixfmts_pad
1504 set_ne_test_deps pixfmts_scale
1505 set_ne_test_deps pixfmts_vflip
1506
1507 # default parameters
1508
1509 logfile="config.log"
1510
1511 # installation paths
1512 prefix_default="/usr/local"
1513 bindir_default='${prefix}/bin'
1514 datadir_default='${prefix}/share/ffmpeg'
1515 incdir_default='${prefix}/include'
1516 libdir_default='${prefix}/lib'
1517 mandir_default='${prefix}/share/man'
1518 shlibdir_default="$libdir_default"
1519
1520 # toolchain
1521 ar_default="ar"
1522 cc_default="gcc"
1523 cc_version=\"unknown\"
1524 host_cc_default="gcc"
1525 ln_s="ln -sf"
1526 nm_default="nm"
1527 objformat="elf"
1528 ranlib="ranlib"
1529 strip_default="strip"
1530 yasmexe="yasm"
1531 nogas=":"
1532
1533 nm_opts='-g'
1534
1535 # machine
1536 arch_default=$(uname -m)
1537 cpu="generic"
1538
1539 # OS
1540 target_os_default=$(tolower $(uname -s))
1541 host_os=$target_os_default
1542
1543 # configurable options
1544 enable avcodec
1545 enable avcore
1546 enable avdevice
1547 enable avfilter
1548 enable avformat
1549 enable avutil
1550 enable asm
1551 enable debug
1552 enable doc
1553 enable fastdiv
1554 enable ffmpeg
1555 enable ffplay
1556 enable ffprobe
1557 enable ffserver
1558 enable mpegaudio_hp
1559 enable network
1560 enable optimizations
1561 enable protocols
1562 enable static
1563 enable stripping
1564 enable swscale
1565 enable swscale_alpha
1566
1567 # build settings
1568 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1569 FFSERVERLDFLAGS=-Wl,-E
1570 LIBPREF="lib"
1571 LIBSUF=".a"
1572 FULLNAME='$(NAME)$(BUILDSUF)'
1573 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1574 SLIBPREF="lib"
1575 SLIBSUF=".so"
1576 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1577 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1578 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1579 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1580
1581 CC_O='-o $@'
1582
1583 host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1584 host_libs='-lm'
1585
1586 target_path='$(CURDIR)'
1587
1588 # since the object filename is not given with the -MM flag, the compiler
1589 # is only able to print the basename, and we must add the path ourselves
1590 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1591 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1592
1593 # find source path
1594 source_path="$(dirname "$0")"
1595 enable source_path_used
1596 if test -f configure; then
1597     source_path="$(pwd)"
1598     disable source_path_used
1599 else
1600     source_path="$(cd "$source_path"; pwd)"
1601     echo "$source_path" | grep -q '[[:blank:]]' &&
1602         die "Out of tree builds are impossible with whitespace in source path."
1603     test -e "$source_path/config.h" &&
1604         die "Out of tree builds are impossible with config.h in source dir."
1605 fi
1606
1607 for v in "$@"; do
1608     r=${v#*=}
1609     l=${v%"$r"}
1610     r=$(sh_quote "$r")
1611     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1612 done
1613
1614 find_things(){
1615     thing=$1
1616     pattern=$2
1617     file=$source_path/$3
1618     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1619 }
1620
1621 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1622 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1623 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1624 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1625 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1626 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1627 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1628 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1629 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1630 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1631 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1632
1633 find_tests(){
1634     map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1635 }
1636
1637 ACODEC_TESTS=$(find_tests acodec)
1638 VCODEC_TESTS=$(find_tests vsynth1)
1639 LAVF_TESTS=$(find_tests lavf)
1640 LAVFI_TESTS=$(find_tests lavfi)
1641 SEEK_TESTS=$(find_tests seek seek_)
1642
1643 pcm_test_deps=$(map 'echo ${v%_*}_decoder $v' $(filter pcm_* $ENCODER_LIST))
1644
1645 for n in $COMPONENT_LIST; do
1646     v=$(toupper ${n%s})_LIST
1647     eval enable \$$v
1648     eval ${n}_if_any="\$$v"
1649 done
1650
1651 enable $ARCH_EXT_LIST $ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS
1652
1653 die_unknown(){
1654     echo "Unknown option \"$1\"."
1655     echo "See $0 --help for available options."
1656     exit 1
1657 }
1658
1659 show_list() {
1660     suffix=_$1
1661     shift
1662     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1663     exit 0
1664 }
1665
1666 for opt do
1667     optval="${opt#*=}"
1668     case "$opt" in
1669     --extra-ldflags=*) add_ldflags $optval
1670     ;;
1671     --extra-libs=*) add_extralibs $optval
1672     ;;
1673     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1674     ;;
1675     --enable-debug=*) debuglevel="$optval"
1676     ;;
1677     --disable-everything)
1678     map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1679     ;;
1680     --enable-*=*|--disable-*=*)
1681     eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1682     is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1683     eval list=\$$(toupper $thing)_LIST
1684     name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1685     $action $(filter "$name" $list)
1686     ;;
1687     --enable-?*|--disable-?*)
1688     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1689     if is_in $option $COMPONENT_LIST; then
1690         test $action = disable && action=unset
1691         eval $action \$$(toupper ${option%s})_LIST
1692     elif is_in $option $CMDLINE_SELECT; then
1693         $action $option
1694     else
1695         die_unknown $opt
1696     fi
1697     ;;
1698     --list-*)
1699         NAME="${opt#--list-}"
1700         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1701         NAME=${NAME%s}
1702         eval show_list $NAME \$$(toupper $NAME)_LIST
1703     ;;
1704     --help|-h) show_help
1705     ;;
1706     *)
1707     optname="${opt%%=*}"
1708     optname="${optname#--}"
1709     optname=$(echo "$optname" | sed 's/-/_/g')
1710     if is_in $optname $CMDLINE_SET; then
1711         eval $optname='$optval'
1712     elif is_in $optname $CMDLINE_APPEND; then
1713         append $optname "$optval"
1714     else
1715          die_unknown $opt
1716     fi
1717     ;;
1718     esac
1719 done
1720
1721 disabled logging && logfile=/dev/null
1722
1723 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1724 set >> $logfile
1725
1726 test -n "$cross_prefix" && enable cross_compile
1727
1728 if enabled cross_compile; then
1729     test -n "$arch" && test -n "$target_os" ||
1730         die "Must specify target arch and OS when cross-compiling"
1731 fi
1732
1733 set_default arch target_os
1734
1735 ar_default="${cross_prefix}${ar_default}"
1736 cc_default="${cross_prefix}${cc_default}"
1737 nm_default="${cross_prefix}${nm_default}"
1738 ranlib="${cross_prefix}${ranlib}"
1739 strip_default="${cross_prefix}${strip_default}"
1740
1741 sysinclude_default="${sysroot}/usr/include"
1742
1743 set_default cc nm strip sysinclude
1744 enabled cross_compile || host_cc_default=$cc
1745 set_default host_cc
1746
1747 exesuf() {
1748     case $1 in
1749         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1750     esac
1751 }
1752
1753 EXESUF=$(exesuf $target_os)
1754 HOSTEXESUF=$(exesuf $host_os)
1755
1756 # set temporary file name
1757 : ${TMPDIR:=$TEMPDIR}
1758 : ${TMPDIR:=$TMP}
1759 : ${TMPDIR:=/tmp}
1760
1761 if ! check_cmd type mktemp; then
1762     # simple replacement for missing mktemp
1763     # NOT SAFE FOR GENERAL USE
1764     mktemp(){
1765         echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1766     }
1767 fi
1768
1769 tmpfile(){
1770     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1771         (set -C; exec > $tmp) 2>/dev/null ||
1772         die "Unable to create temporary file in $TMPDIR."
1773     append TMPFILES $tmp
1774     eval $1=$tmp
1775 }
1776
1777 trap 'rm -f -- $TMPFILES' EXIT
1778 trap exit HUP INT TERM
1779
1780 tmpfile TMPC  .c
1781 tmpfile TMPE  $EXESUF
1782 tmpfile TMPH  .h
1783 tmpfile TMPO  .o
1784 tmpfile TMPS  .S
1785 tmpfile TMPV  .ver
1786 tmpfile TMPSH .sh
1787
1788 unset -f mktemp
1789
1790 # make sure we can execute files in $TMPDIR
1791 cat > $TMPSH 2>> $logfile <<EOF
1792 #! /bin/sh
1793 EOF
1794 chmod +x $TMPSH >> $logfile 2>&1
1795 if ! $TMPSH >> $logfile 2>&1; then
1796     cat <<EOF
1797 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1798 variable to another directory and make sure that it is not mounted noexec.
1799 EOF
1800     die "Sanity test failed."
1801 fi
1802
1803 filter_cflags=echo
1804 filter_cppflags=echo
1805 filter_asflags=echo
1806
1807 if   $cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
1808     cc_type=llvm_gcc
1809     cc_version=__VERSION__
1810     gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
1811     cc_ident="llvm-gcc $($cc -dumpversion) $gcc_extra_ver"
1812     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1813     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1814     speed_cflags='-O3'
1815     size_cflags='-Os'
1816 elif $cc -v 2>&1 | grep -qi ^gcc; then
1817     cc_type=gcc
1818     cc_version=__VERSION__
1819     gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
1820     cc_ident="gcc $($cc -dumpversion) $gcc_extra_ver"
1821     if ! $cc -dumpversion | grep -q '^2\.'; then
1822         CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1823         AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1824     fi
1825     speed_cflags='-O3'
1826     size_cflags='-Os'
1827 elif $cc --version 2>/dev/null | grep -q Intel; then
1828     cc_type=icc
1829     cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1830     cc_ident=$($cc --version | head -n1)
1831     CC_DEPFLAGS='-MMD'
1832     AS_DEPFLAGS='-MMD'
1833     speed_cflags='-O3'
1834     size_cflags='-Os'
1835     noopt_cflags='-O1'
1836 elif $cc -v 2>&1 | grep -q xlc; then
1837     cc_type=xlc
1838     cc_version="AV_STRINGIFY(__IBMC__)"
1839     cc_ident=$($cc -qversion 2>/dev/null | head -n1)
1840     speed_cflags='-O5'
1841     size_cflags='-O5 -qcompact'
1842 elif $cc -V 2>/dev/null | grep -q Compaq; then
1843     cc_type=ccc
1844     cc_version="AV_STRINGIFY(__DECC_VER)"
1845     cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3)
1846     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1847     debuglevel=3
1848     add_ldflags -Wl,-z,now # calls to libots crash without this
1849     speed_cflags='-fast'
1850     size_cflags='-O1'
1851 elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1852     test -d "$sysroot" || die "No valid sysroot specified."
1853     cc_type=armcc
1854     cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1855     cc_ident=$($cc --vsn | head -n1)
1856     armcc_conf="$PWD/armcc.conf"
1857     $cc --arm_linux_configure                 \
1858         --arm_linux_config_file="$armcc_conf" \
1859         --configure_sysroot="$sysroot"        \
1860         --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1861         die "Error creating armcc configuration file."
1862     $cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
1863     cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1864     as_default="${cross_prefix}gcc"
1865     CC_DEPFLAGS='-MMD'
1866     AS_DEPFLAGS='-MMD'
1867     speed_cflags='-O3'
1868     size_cflags='-Os'
1869 elif $cc -version 2>/dev/null | grep -q TMS470; then
1870     cc_type=tms470
1871     cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1872     cc_ident=$($cc -version | head -n1 | tr -s ' ')
1873     cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1874     CC_O='-fr=$(@D)'
1875     as_default="${cross_prefix}gcc"
1876     ld_default="${cross_prefix}gcc"
1877     TMPO=$(basename $TMPC .c).o
1878     append TMPFILES $TMPO
1879     add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1880     CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1881     AS_DEPFLAGS='-MMD'
1882     speed_cflags='-O3 -mf=5'
1883     size_cflags='-O3 -mf=2'
1884     filter_cflags=tms470_flags
1885     tms470_flags(){
1886         for flag; do
1887             case $flag in
1888                 -march=*|-mcpu=*)
1889                     case "${flag#*=}" in
1890                         armv7-a|cortex-a*)      echo -mv=7a8 ;;
1891                         armv7-r|cortex-r*)      echo -mv=7r4 ;;
1892                         armv7-m|cortex-m*)      echo -mv=7m3 ;;
1893                         armv6*|arm11*)          echo -mv=6   ;;
1894                         armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1895                                                 echo -mv=5e  ;;
1896                         armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1897                     esac
1898                     ;;
1899                 -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1900                 -mfpu=vfp)      echo --float_support=vfpv2        ;;
1901                 -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
1902                 -msoft-float)   echo --float_support=vfplib       ;;
1903                 -O[0-3]|-mf=*)  echo $flag                        ;;
1904                 -g)             echo -g -mn                       ;;
1905                 -pds=*)         echo $flag                        ;;
1906             esac
1907         done
1908     }
1909 elif $cc -v 2>&1 | grep -q clang; then
1910     cc_type=clang
1911     $cc -dM -E $TMPC | grep -q __clang_version__ &&
1912         cc_version=__clang_version__ || cc_version=__VERSION__
1913     cc_ident=$($cc --version | head -n1)
1914     CC_DEPFLAGS='-MMD'
1915     AS_DEPFLAGS='-MMD'
1916     speed_cflags='-O3'
1917     size_cflags='-Os'
1918 elif $cc -V 2>&1 | grep -q Sun; then
1919     cc_type=suncc
1920     cc_version="AV_STRINGIFY(__SUNPRO_C)"
1921     cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
1922     DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1923     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1924     speed_cflags='-O5'
1925     size_cflags='-O5 -xspace'
1926     filter_cflags=suncc_flags
1927     suncc_flags(){
1928         for flag; do
1929             case $flag in
1930                 -march=*|-mcpu=*)
1931                     case "${flag#*=}" in
1932                         native)                   echo -xtarget=native       ;;
1933                         v9|niagara)               echo -xarch=sparc          ;;
1934                         ultrasparc)               echo -xarch=sparcvis       ;;
1935                         ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
1936                         i586|pentium)             echo -xchip=pentium        ;;
1937                         i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
1938                         pentium3*|c3-2)           echo -xtarget=pentium3     ;;
1939                         pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
1940                         pentium4*)          echo -xtarget=pentium4           ;;
1941                         prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
1942                         *-sse3)             echo -xarch=sse3                 ;;
1943                         core2)              echo -xarch=ssse3 -xchip=core2   ;;
1944                         amdfam10|barcelona)       echo -xarch=sse4_1         ;;
1945                         athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
1946                         k8|opteron|athlon64|athlon-fx)
1947                                                   echo -xarch=sse2a          ;;
1948                         athlon*)                  echo -xarch=pentium_proa   ;;
1949                     esac
1950                     ;;
1951                 -std=c99)             echo -xc99              ;;
1952                 -fomit-frame-pointer) echo -xregs=frameptr    ;;
1953                 -fPIC)                echo -KPIC -xcode=pic32 ;;
1954                 -W*,*)                echo $flag              ;;
1955                 -f*-*|-W*)                                    ;;
1956                 *)                    echo $flag              ;;
1957             esac
1958         done
1959     }
1960 elif $cc -v 2>&1 | grep -q PathScale; then
1961     cc_type=pathscale
1962     cc_version=__PATHSCALE__
1963     cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
1964     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1965     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1966     speed_cflags='-O2'
1967     size_cflags='-Os'
1968 fi
1969
1970 test -n "$cc_type" && enable $cc_type ||
1971     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
1972
1973 : ${as_default:=$cc}
1974 : ${dep_cc_default:=$cc}
1975 : ${ld_default:=$cc}
1976 set_default ar as dep_cc ld
1977
1978 test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
1979 test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
1980
1981 add_cflags $extra_cflags
1982 add_asflags $extra_cflags
1983
1984 if test -n "$sysroot"; then
1985     case "$cc_type" in
1986         gcc|llvm_gcc)
1987             add_cppflags --sysroot="$sysroot"
1988             add_ldflags --sysroot="$sysroot"
1989         ;;
1990         tms470)
1991             add_cppflags -I"$sysinclude"
1992             add_ldflags  --sysroot="$sysroot"
1993         ;;
1994         clang)
1995             add_cppflags -isysroot "$sysroot"
1996             add_ldflags -isysroot "$sysroot"
1997         ;;
1998     esac
1999 fi
2000
2001 if test "$cpu" = host; then
2002     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2003
2004     case "$cc_type" in
2005         gcc|llvm_gcc)
2006             check_native(){
2007                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2008                 sed -n "/$1=/{
2009                             s/.*$1=\\([^ ]*\\).*/\\1/
2010                             p
2011                             q
2012                         }" $TMPE
2013             }
2014             cpu=$(check_native -march || check_native -mcpu)
2015         ;;
2016     esac
2017
2018     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2019 fi
2020
2021 # Deal with common $arch aliases
2022 case "$arch" in
2023     arm*)
2024         arch="arm"
2025     ;;
2026     mips|mipsel|IP*)
2027         arch="mips"
2028     ;;
2029     mips64*)
2030         arch="mips"
2031         subarch="mips64"
2032     ;;
2033     parisc|hppa)
2034         arch="parisc"
2035     ;;
2036     parisc64|hppa64)
2037         arch="parisc"
2038         subarch="parisc64"
2039     ;;
2040     "Power Macintosh"|ppc|powerpc)
2041         arch="ppc"
2042     ;;
2043     ppc64|powerpc64)
2044         arch="ppc"
2045         subarch="ppc64"
2046     ;;
2047     s390|s390x)
2048         arch="s390"
2049     ;;
2050     sh4|sh)
2051         arch="sh4"
2052     ;;
2053     sun4u|sparc64)
2054         arch="sparc"
2055         subarch="sparc64"
2056     ;;
2057     i[3-6]86|i86pc|BePC|x86_64|amd64)
2058         arch="x86"
2059     ;;
2060 esac
2061
2062 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2063 enable $arch
2064
2065 # Add processor-specific flags
2066 if test "$cpu" = generic; then
2067     : do nothing
2068 elif enabled ppc; then
2069
2070     case $(tolower $cpu) in
2071         601|ppc601|powerpc601)
2072             cpuflags="-mcpu=601"
2073             disable altivec
2074         ;;
2075         603*|ppc603*|powerpc603*)
2076             cpuflags="-mcpu=603"
2077             disable altivec
2078         ;;
2079         604*|ppc604*|powerpc604*)
2080             cpuflags="-mcpu=604"
2081             disable altivec
2082         ;;
2083         g3|75*|ppc75*|powerpc75*)
2084             cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2085             disable altivec
2086         ;;
2087         g4|745*|ppc745*|powerpc745*)
2088             cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2089         ;;
2090         74*|ppc74*|powerpc74*)
2091             cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2092         ;;
2093         g5|970|ppc970|powerpc970|power4*)
2094             cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2095         ;;
2096         cell)
2097             cpuflags="-mcpu=cell"
2098             enable ldbrx
2099         ;;
2100         e500v2)
2101             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2102             disable altivec
2103         ;;
2104         e500)
2105             cpuflags="-mcpu=8540 -mhard-float"
2106             disable altivec
2107         ;;
2108     esac
2109
2110 elif enabled x86; then
2111
2112     case $cpu in
2113         i[345]86|pentium)
2114             cpuflags="-march=$cpu"
2115             disable mmx
2116         ;;
2117         # targets that do NOT support conditional mov (cmov)
2118         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2119             cpuflags="-march=$cpu"
2120             disable cmov
2121         ;;
2122         # targets that do support conditional mov (cmov)
2123         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona|atom)
2124             cpuflags="-march=$cpu"
2125             enable cmov
2126             enable fast_cmov
2127         ;;
2128         # targets that do support conditional mov but on which it's slow
2129         pentium4|pentium4m|prescott|nocona)
2130             cpuflags="-march=$cpu"
2131             enable cmov
2132             disable fast_cmov
2133         ;;
2134     esac
2135
2136 elif enabled sparc; then
2137
2138     case $cpu in
2139         niagara)
2140             cpuflags="-mcpu=$cpu"
2141             disable vis
2142         ;;
2143         sparc64)
2144             cpuflags="-mcpu=v9"
2145         ;;
2146     esac
2147
2148 elif enabled arm; then
2149
2150     case $cpu in
2151         armv*)
2152             cpuflags="-march=$cpu"
2153             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2154         ;;
2155         *)
2156             cpuflags="-mcpu=$cpu"
2157             case $cpu in
2158                 cortex-a*)                               subarch=armv7a  ;;
2159                 cortex-r*)                               subarch=armv7r  ;;
2160                 cortex-m*)                               subarch=armv7m  ;;
2161                 arm11*)                                  subarch=armv6   ;;
2162                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2163                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2164             esac
2165         ;;
2166     esac
2167
2168 elif enabled alpha; then
2169
2170     enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2171
2172 elif enabled bfin; then
2173
2174     cpuflags="-mcpu=$cpu"
2175
2176 elif enabled mips; then
2177
2178     cpuflags="-march=$cpu"
2179
2180 elif enabled avr32; then
2181
2182     case $cpu in
2183         ap7[02]0[0-2])
2184             subarch="avr32_ap"
2185             cpuflags="-mpart=$cpu"
2186         ;;
2187         ap)
2188             subarch="avr32_ap"
2189             cpuflags="-march=$cpu"
2190         ;;
2191         uc3[ab]*)
2192             subarch="avr32_uc"
2193             cpuflags="-mcpu=$cpu"
2194         ;;
2195         uc)
2196             subarch="avr32_uc"
2197             cpuflags="-march=$cpu"
2198         ;;
2199     esac
2200
2201 fi
2202
2203 add_cflags $cpuflags
2204 add_asflags $cpuflags
2205
2206 # compiler sanity check
2207 check_exec <<EOF
2208 int main(void){ return 0; }
2209 EOF
2210 if test "$?" != 0; then
2211     echo "$cc is unable to create an executable file."
2212     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2213         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2214         echo "Only do this if you know what cross compiling means."
2215     fi
2216     die "C compiler test failed."
2217 fi
2218
2219 add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2220 check_cflags -std=c99
2221 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2222 #include <stdlib.h>
2223 EOF
2224 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2225 #include <stdlib.h>
2226 EOF
2227
2228 check_host_cflags -std=c99
2229
2230 case "$arch" in
2231     alpha|ia64|mips|parisc|sparc)
2232         spic=$shared
2233     ;;
2234     x86)
2235         subarch="x86_32"
2236         check_cc <<EOF && subarch="x86_64"
2237         int test[(int)sizeof(char*) - 7];
2238 EOF
2239         if test "$subarch" = "x86_64"; then
2240             spic=$shared
2241         fi
2242     ;;
2243 esac
2244
2245 enable $subarch
2246 enabled spic && enable pic
2247
2248 # OS specific
2249 case $target_os in
2250     haiku)
2251         prefix_default="/boot/common"
2252         network_extralibs="-lnetwork"
2253         ;;
2254     sunos)
2255         FFSERVERLDFLAGS=""
2256         SHFLAGS='-shared -Wl,-h,$$(@F)'
2257         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2258         network_extralibs="-lsocket -lnsl"
2259         add_cppflags -D__EXTENSIONS__
2260         nm_opts='-P -g'
2261         ;;
2262     netbsd)
2263         oss_indev_extralibs="-lossaudio"
2264         oss_outdev_extralibs="-lossaudio"
2265         add_cppflags -D_XOPEN_SOURCE=600
2266         ;;
2267     openbsd)
2268         enable malloc_aligned
2269         # On OpenBSD 4.5. the compiler does not use PIC unless
2270         # explicitly using -fPIC. FFmpeg builds fine without PIC,
2271         # however the generated executable will not do anything
2272         # (simply quits with exit-code 1, no crash, no output).
2273         # Thus explicitly enable PIC here.
2274         enable pic
2275         SHFLAGS='-shared'
2276         oss_indev_extralibs="-lossaudio"
2277         oss_outdev_extralibs="-lossaudio"
2278         ;;
2279     freebsd|dragonfly)
2280         enable malloc_aligned
2281         ;;
2282     bsd/os)
2283         add_extralibs -lpoll -lgnugetopt
2284         strip="strip -d"
2285         ;;
2286     darwin)
2287         enable malloc_aligned
2288         gas="gas-preprocessor.pl $cc"
2289         enabled ppc && add_asflags -force_cpusubtype_ALL
2290         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
2291         strip="${strip} -x"
2292         add_ldflags -Wl,-dynamic,-search_paths_first
2293         SLIBSUF=".dylib"
2294         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2295         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2296         FFSERVERLDFLAGS=-Wl,-bind_at_load
2297         objformat="macho"
2298         enabled x86_64 && objformat="macho64"
2299         enabled_any pic shared ||
2300             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2301         ;;
2302     mingw32*)
2303         if test $target_os = "mingw32ce"; then
2304             disable network
2305         else
2306             target_os=mingw32
2307         fi
2308         LIBTARGET=i386
2309         if enabled x86_64; then
2310             enable malloc_aligned
2311             LIBTARGET=x64
2312         elif enabled arm; then
2313             LIBTARGET=arm
2314         fi
2315         shlibdir_default="$bindir_default"
2316         disable ffserver
2317         SLIBPREF=""
2318         SLIBSUF=".dll"
2319         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2320         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2321         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2322         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2323             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2324             install -d "$(LIBDIR)"; \
2325             install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2326         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2327         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'
2328         objformat="win32"
2329         enable dos_paths
2330         check_cflags -fno-common
2331         check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2332                                       || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2333                 die "ERROR: MinGW runtime version must be >= 3.15."
2334         ;;
2335     cygwin*)
2336         target_os=cygwin
2337         shlibdir_default="$bindir_default"
2338         SLIBPREF="cyg"
2339         SLIBSUF=".dll"
2340         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2341         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2342         SHFLAGS='-shared -Wl,--enable-auto-image-base'
2343         objformat="win32"
2344         enable dos_paths
2345         check_cflags -fno-common
2346         ;;
2347     *-dos|freedos|opendos)
2348         disable ffplay ffserver
2349         disable $INDEV_LIST $OUTDEV_LIST
2350         network_extralibs="-lsocket"
2351         objformat="coff"
2352         enable dos_paths
2353         ;;
2354     linux)
2355         enable dv1394
2356         ;;
2357     irix*)
2358         target_os=irix
2359         ranlib="echo ignoring ranlib"
2360         ;;
2361     os/2*)
2362         strip="lxlite"
2363         ln_s="cp -f"
2364         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2365         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2366         FFSERVERLDFLAGS=""
2367         LIBSUF="_s.a"
2368         SLIBPREF=""
2369         SLIBSUF=".dll"
2370         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2371         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2372         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2373           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2374           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2375           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2376           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2377           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2378         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2379           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2380         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2381         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2382         enable dos_paths
2383         ;;
2384     gnu/kfreebsd)
2385         ;;
2386     gnu)
2387         ;;
2388     none)
2389         ;;
2390     *)
2391         die "Unknown OS '$target_os'."
2392         ;;
2393 esac
2394
2395 echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate
2396
2397 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2398
2399 set_default $PATHS_LIST
2400
2401 # we need to build at least one lib type
2402 if ! enabled_any static shared; then
2403     cat <<EOF
2404 At least one library type must be built.
2405 Specify --enable-static to build the static libraries or --enable-shared to
2406 build the shared libraries as well. To only build the shared libraries specify
2407 --disable-static in addition to --enable-shared.
2408 EOF
2409     exit 1;
2410 fi
2411
2412 disabled static && LIBNAME=""
2413
2414 die_license_disabled() {
2415     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2416 }
2417
2418 die_license_disabled gpl libx264
2419 die_license_disabled gpl libxavs
2420 die_license_disabled gpl libxvid
2421 die_license_disabled gpl postproc
2422 die_license_disabled gpl x11grab
2423
2424 die_license_disabled nonfree libfaac
2425
2426 die_license_disabled version3 libopencore_amrnb
2427 die_license_disabled version3 libopencore_amrwb
2428
2429 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2430
2431 check_deps $ARCH_EXT_LIST
2432
2433 disabled optimizations || check_cflags -fomit-frame-pointer
2434
2435 enable_pic() {
2436     enable pic
2437     add_cppflags -DPIC
2438     add_cflags   -fPIC
2439     add_asflags  -fPIC
2440 }
2441
2442 enabled pic && enable_pic
2443
2444 check_cc <<EOF || die "Symbol mangling check failed."
2445 int ff_extern;
2446 EOF
2447 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2448 extern_prefix=${sym%%ff_extern*}
2449
2450 check_cc <<EOF && enable inline_asm
2451 void foo(void) { __asm__ volatile ("" ::); }
2452 EOF
2453
2454 _restrict=
2455 for restrict_keyword in restrict __restrict__ __restrict; do
2456     check_cc <<EOF && _restrict=$restrict_keyword && break
2457 void foo(char * $restrict_keyword p);
2458 EOF
2459 done
2460
2461 check_cc <<EOF && enable attribute_packed
2462 struct { int x; } __attribute__((packed)) x;
2463 EOF
2464
2465 check_cc <<EOF && enable attribute_may_alias
2466 union { int x; } __attribute__((may_alias)) x;
2467 EOF
2468
2469 check_cc <<EOF || die "endian test failed"
2470 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2471 EOF
2472 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2473
2474 if enabled alpha; then
2475
2476     check_cflags -mieee
2477
2478 elif enabled arm; then
2479
2480     check_cflags -marm
2481     nogas=die
2482
2483     check_ld <<EOF && enable vfp_args
2484 __asm__ (".eabi_attribute 28, 1");
2485 int main(void) { return 0; }
2486 EOF
2487
2488     # We have to check if pld is a nop and disable it.
2489     check_asm pld '"pld [r0]"'
2490
2491     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2492     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2493     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2494     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2495     enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2496     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2497
2498     enabled_all armv6t2 shared !pic && enable_pic
2499
2500 elif enabled mips; then
2501
2502     check_asm loongson '"dmult.g $1, $2, $3"'
2503     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2504
2505 elif enabled ppc; then
2506
2507     enable local_aligned_8 local_aligned_16
2508
2509     check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2510     check_asm ibm_asm   '"add 0, 0, 0"'
2511     check_asm ppc4xx    '"maclhw r10, r11, r12"'
2512     check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2513
2514     # AltiVec flags: The FSF version of GCC differs from the Apple version
2515     if enabled altivec; then
2516         nogas=warn
2517         check_cflags -maltivec -mabi=altivec &&
2518         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2519         check_cflags -faltivec
2520
2521         # check if our compiler supports Motorola AltiVec C API
2522         check_cc <<EOF || disable altivec
2523 $inc_altivec_h
2524 int main(void) {
2525     vector signed int v1, v2, v3;
2526     v1 = vec_add(v2,v3);
2527     return 0;
2528 }
2529 EOF
2530
2531         # check if our compiler supports braces for vector declarations
2532         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2533 $inc_altivec_h
2534 int main (void) { (vector int) {1}; return 0; }
2535 EOF
2536     fi
2537
2538 elif enabled sparc; then
2539
2540     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2541         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2542
2543 elif enabled x86; then
2544
2545     enable local_aligned_8 local_aligned_16
2546
2547     # check whether EBP is available on x86
2548     # As 'i' is stored on the stack, this program will crash
2549     # if the base pointer is used to access it because the
2550     # base pointer is cleared in the inline assembly code.
2551     check_exec_crash <<EOF && enable ebp_available
2552     volatile int i=0;
2553     __asm__ volatile (
2554         "xorl %%ebp, %%ebp"
2555     ::: "%ebp");
2556     return i;
2557 EOF
2558
2559     # check whether EBX is available on x86
2560     check_asm ebx_available '""::"b"(0)' &&
2561         check_asm ebx_available '"":::"%ebx"'
2562
2563     # check whether more than 10 operands are supported
2564     check_cc <<EOF && enable ten_operands
2565 int main(void) {
2566     int x=0;
2567     __asm__ volatile(
2568         ""
2569         :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2570     );
2571     return 0;
2572 }
2573 EOF
2574
2575     # check whether binutils is new enough to compile SSSE3/MMX2
2576     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2577     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2578
2579     check_asm bswap '"bswap %%eax" ::: "%eax"'
2580
2581     YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2582     enabled     x86_64        && append YASMFLAGS "-m amd64"
2583     enabled     pic           && append YASMFLAGS "-DPIC"
2584     test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2585     case "$objformat" in
2586         elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2587     esac
2588     if ! disabled_any asm mmx yasm; then
2589         check_yasm "pabsw xmm0, xmm0" && enable yasm ||
2590             die "yasm not found, use --disable-yasm for a crippled build"
2591     fi
2592
2593     case "$cpu" in
2594         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2595             disable fast_clz
2596         ;;
2597     esac
2598
2599 fi
2600
2601 if enabled asm; then
2602     as=${gas:=$as}
2603     check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2604         $nogas "GNU assembler not found, install gas-preprocessor"
2605 fi
2606
2607 if check_func dlopen; then
2608     ldl=
2609 elif check_func dlopen -ldl; then
2610     ldl=-ldl
2611 fi
2612
2613 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2614 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2615
2616 check_func  fcntl
2617 check_func  fork
2618 check_func  getaddrinfo $network_extralibs
2619 check_func  gethrtime
2620 check_func  getrusage
2621 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2622 check_func  inet_aton $network_extralibs
2623 check_func  isatty
2624 check_func  ${malloc_prefix}memalign            && enable memalign
2625 check_func  mkstemp
2626 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2627 check_func  setrlimit
2628 check_func  strerror_r
2629 check_func_headers io.h setmode
2630 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2631 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2632 check_func_headers windows.h GetProcessTimes
2633 check_func_headers windows.h VirtualAlloc
2634
2635 check_header conio.h
2636 check_header dlfcn.h
2637 check_header dxva2api.h
2638 check_header malloc.h
2639 check_header poll.h
2640 check_header sys/mman.h
2641 check_header sys/resource.h
2642 check_header sys/select.h
2643 check_header termios.h
2644 check_header vdpau/vdpau.h
2645 check_header vdpau/vdpau_x11.h
2646 check_header X11/extensions/XvMClib.h
2647
2648 check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2649
2650 if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2651      enabled_any $need_memalign ; then
2652     die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2653 fi
2654
2655 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2656 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2657
2658 # check for some common methods of building with pthread support
2659 # do this before the optional library checks as some of them require pthreads
2660 if ! disabled pthreads && ! enabled w32threads; then
2661     enable pthreads
2662     if check_func pthread_create; then
2663         :
2664     elif check_func pthread_create -pthread; then
2665         add_cflags -pthread
2666         add_extralibs -pthread
2667     elif check_func pthread_create -pthreads; then
2668         add_cflags -pthreads
2669         add_extralibs -pthreads
2670     elif check_func pthread_create -lpthreadGC2; then
2671         add_extralibs -lpthreadGC2
2672     elif ! check_lib pthread.h pthread_create -lpthread; then
2673         disable pthreads
2674     fi
2675 fi
2676
2677 for thread in $THREADS_LIST; do
2678     if enabled $thread; then
2679         test -n "$thread_type" &&
2680             die "ERROR: Only one thread type must be selected." ||
2681             thread_type="$thread"
2682     fi
2683 done
2684
2685 check_lib math.h sin -lm
2686 disabled vaapi || check_lib va/va.h vaInitialize -lva
2687
2688 check_mathfunc exp2
2689 check_mathfunc exp2f
2690 check_mathfunc llrint
2691 check_mathfunc llrintf
2692 check_mathfunc log2
2693 check_mathfunc log2f
2694 check_mathfunc lrint
2695 check_mathfunc lrintf
2696 check_mathfunc round
2697 check_mathfunc roundf
2698 check_mathfunc truncf
2699
2700 # these are off by default, so fail if requested and not available
2701 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2702 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2703                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2704                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2705 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2706 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2707 enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame
2708 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2709 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2710 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
2711 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2712 enabled librtmp    && { check_lib librtmp/rtmp.h RTMP_Socket $(pkg-config --libs librtmp) ||
2713                         die "ERROR: librtmp not found or RTMP_Socket() missing, librtmp version must be >= 2.2.f"; }
2714 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2715                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2716 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2717 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2718 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2719 enabled libvpx     && {
2720     enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
2721                                 die "ERROR: libvpx decoder version must be >=0.9.1"; }
2722     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
2723                                 die "ERROR: libvpx encoder version must be >=0.9.1"; } }
2724 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
2725                       { check_cpp_condition x264.h "X264_BUILD >= 98" ||
2726                         die "ERROR: libx264 version must be >= 0.98."; }
2727 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
2728 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2729 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2730
2731 # libdc1394 check
2732 if enabled libdc1394; then
2733     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2734         enable libdc1394_2; } ||
2735     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2736         enable libdc1394_1; } ||
2737     die "ERROR: No version of libdc1394 found "
2738 fi
2739
2740 SDL_CONFIG="${cross_prefix}sdl-config"
2741 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2742     sdl_cflags=$("${SDL_CONFIG}" --cflags)
2743     sdl_libs=$("${SDL_CONFIG}" --libs)
2744     check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2745     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2746     enable sdl &&
2747     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2748 fi
2749
2750 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2751
2752 if enabled network; then
2753     check_type "sys/types.h sys/socket.h" socklen_t
2754     check_type netdb.h "struct addrinfo"
2755     check_type netinet/in.h "struct ipv6_mreq"
2756     check_type netinet/in.h "struct sockaddr_in6"
2757     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2758     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2759     # Prefer arpa/inet.h over winsock2
2760     if check_header arpa/inet.h ; then
2761         check_func closesocket
2762     elif check_header winsock2.h ; then
2763         check_func_headers winsock2.h closesocket -lws2 && \
2764             network_extralibs="-lws2" || \
2765         { check_func_headers winsock2.h closesocket -lws2_32 && \
2766             network_extralibs="-lws2_32"; }
2767         check_type ws2tcpip.h socklen_t
2768         check_type ws2tcpip.h "struct addrinfo"
2769         check_type ws2tcpip.h "struct ipv6_mreq"
2770         check_type ws2tcpip.h "struct sockaddr_in6"
2771         check_type ws2tcpip.h "struct sockaddr_storage"
2772         check_struct winsock2.h "struct sockaddr" sa_len
2773     else
2774         disable network
2775     fi
2776 fi
2777
2778 check_header linux/videodev.h
2779 check_header linux/videodev2.h
2780 check_header sys/videoio.h
2781
2782 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2783 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2784 # w32api 3.12 had it defined wrong
2785 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2786
2787 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2788 { check_header dev/bktr/ioctl_meteor.h &&
2789   check_header dev/bktr/ioctl_bt848.h; } ||
2790 { check_header machine/ioctl_meteor.h &&
2791   check_header machine/ioctl_bt848.h; } ||
2792 { check_header dev/video/meteor/ioctl_meteor.h &&
2793   check_header dev/video/bktr/ioctl_bt848.h; } ||
2794 check_header dev/ic/bt8xx.h
2795
2796 check_header sys/soundcard.h
2797 check_header soundcard.h
2798
2799 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2800
2801 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2802
2803 enabled x11grab                         &&
2804 check_header X11/Xlib.h                 &&
2805 check_header X11/extensions/XShm.h      &&
2806 check_header X11/extensions/Xfixes.h    &&
2807 check_func XOpenDisplay -lX11           &&
2808 check_func XShmCreateImage -lX11 -lXext &&
2809 check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2810
2811 if ! disabled vdpau && enabled vdpau_vdpau_h; then
2812 check_cpp_condition \
2813     vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2814     { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2815       disable vdpau; }
2816 fi
2817
2818 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2819
2820 # add some useful compiler flags if supported
2821 check_cflags -Wdeclaration-after-statement
2822 check_cflags -Wall
2823 check_cflags -Wno-parentheses
2824 check_cflags -Wno-switch
2825 check_cflags -Wdisabled-optimization
2826 check_cflags -Wpointer-arith
2827 check_cflags -Wredundant-decls
2828 check_cflags -Wno-pointer-sign
2829 check_cflags -Wcast-qual
2830 check_cflags -Wwrite-strings
2831 check_cflags -Wtype-limits
2832 check_cflags -Wundef
2833 check_cflags -Wmissing-prototypes
2834 enabled extra_warnings && check_cflags -Winline
2835
2836 # add some linker flags
2837 check_ldflags -Wl,--warn-common
2838 check_ldflags -Wl,--as-needed
2839 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)/libavcore -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
2840 check_ldflags -Wl,-Bsymbolic
2841
2842 echo "X{};" > $TMPV
2843 if test_ldflags -Wl,--version-script,$TMPV; then
2844     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2845     check_cc <<EOF && enable symver_asm_label
2846 void ff_foo(void) __asm__ ("av_foo@VERSION");
2847 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2848 EOF
2849     check_cc <<EOF && enable symver_gnu_asm
2850 __asm__(".symver ff_foo,av_foo@VERSION");
2851 void ff_foo(void) {}
2852 EOF
2853 fi
2854
2855 if enabled small; then
2856     add_cflags $size_cflags
2857     optimizations="small"
2858 elif enabled optimizations; then
2859     add_cflags $speed_cflags
2860 else
2861     add_cflags $noopt_cflags
2862 fi
2863 check_cflags -fno-math-errno
2864 check_cflags -fno-signed-zeros
2865
2866 if enabled icc; then
2867     # Just warnings, no remarks
2868     check_cflags -w1
2869     # -wd: Disable following warnings
2870     # 144, 167, 556: -Wno-pointer-sign
2871     # 10006: ignoring unknown option -fno-signed-zeros
2872     # 10156: ignoring option '-W'; no argument required
2873     check_cflags -wd144,167,556,10006,10156
2874     # 11030: Warning unknown option --as-needed
2875     # 10156: ignoring option '-export'; no argument required
2876     check_ldflags -wd10156,11030
2877     # Allow to compile with optimizations
2878     check_ldflags -march=$cpu
2879     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2880     enable ebp_available
2881 elif enabled ccc; then
2882     # disable some annoying warnings
2883     add_cflags -msg_disable cvtu32to64
2884     add_cflags -msg_disable embedcomment
2885     add_cflags -msg_disable needconstext
2886     add_cflags -msg_disable nomainieee
2887     add_cflags -msg_disable ptrmismatch1
2888     add_cflags -msg_disable unreachcode
2889 elif enabled gcc; then
2890     check_cflags -fno-tree-vectorize
2891     check_cflags -Werror=implicit-function-declaration
2892     check_cflags -Werror=missing-prototypes
2893 elif enabled llvm_gcc; then
2894     check_cflags -mllvm -stack-alignment=16
2895 elif enabled clang; then
2896     check_cflags -mllvm -stack-alignment=16
2897     check_cflags -Qunused-arguments
2898 elif enabled armcc; then
2899     # 2523: use of inline assembler is deprecated
2900     add_cflags -W${armcc_opt},--diag_suppress=2523
2901     add_cflags -W${armcc_opt},--diag_suppress=1207
2902 elif enabled tms470; then
2903     add_cflags -pds=824 -pds=837
2904 fi
2905
2906 enabled_any $THREADS_LIST      && enable threads
2907
2908 check_deps $CONFIG_LIST       \
2909            $CONFIG_EXTRA      \
2910            $HAVE_LIST         \
2911            $DECODER_LIST      \
2912            $ENCODER_LIST      \
2913            $HWACCEL_LIST      \
2914            $PARSER_LIST       \
2915            $BSF_LIST          \
2916            $DEMUXER_LIST      \
2917            $MUXER_LIST        \
2918            $FILTER_LIST       \
2919            $INDEV_LIST        \
2920            $OUTDEV_LIST       \
2921            $PROTOCOL_LIST     \
2922            $ACODEC_TESTS      \
2923            $VCODEC_TESTS      \
2924            $LAVF_TESTS        \
2925            $LAVFI_TESTS       \
2926            $SEEK_TESTS        \
2927
2928 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
2929
2930 echo "install prefix            $prefix"
2931 echo "source path               $source_path"
2932 echo "C compiler                $cc"
2933 echo "ARCH                      $arch ($cpu)"
2934 if test "$build_suffix" != ""; then
2935     echo "build suffix              $build_suffix"
2936 fi
2937 if test "$extra_version" != ""; then
2938     echo "version string suffix     $extra_version"
2939 fi
2940 echo "big-endian                ${bigendian-no}"
2941 echo "runtime cpu detection     ${runtime_cpudetect-no}"
2942 if enabled x86; then
2943     echo "yasm                      ${yasm-no}"
2944     echo "MMX enabled               ${mmx-no}"
2945     echo "MMX2 enabled              ${mmx2-no}"
2946     echo "3DNow! enabled            ${amd3dnow-no}"
2947     echo "3DNow! extended enabled   ${amd3dnowext-no}"
2948     echo "SSE enabled               ${sse-no}"
2949     echo "SSSE3 enabled             ${ssse3-no}"
2950     echo "CMOV enabled              ${cmov-no}"
2951     echo "CMOV is fast              ${fast_cmov-no}"
2952     echo "EBX available             ${ebx_available-no}"
2953     echo "EBP available             ${ebp_available-no}"
2954     echo "10 operands supported     ${ten_operands-no}"
2955 fi
2956 if enabled arm; then
2957     echo "ARMv5TE enabled           ${armv5te-no}"
2958     echo "ARMv6 enabled             ${armv6-no}"
2959     echo "ARMv6T2 enabled           ${armv6t2-no}"
2960     echo "ARM VFP enabled           ${armvfp-no}"
2961     echo "IWMMXT enabled            ${iwmmxt-no}"
2962     echo "NEON enabled              ${neon-no}"
2963 fi
2964 if enabled mips; then
2965     echo "MMI enabled               ${mmi-no}"
2966 fi
2967 if enabled ppc; then
2968     echo "AltiVec enabled           ${altivec-no}"
2969     echo "PPC 4xx optimizations     ${ppc4xx-no}"
2970     echo "dcbzl available           ${dcbzl-no}"
2971 fi
2972 if enabled sparc; then
2973     echo "VIS enabled               ${vis-no}"
2974 fi
2975 echo "debug symbols             ${debug-no}"
2976 echo "strip symbols             ${stripping-no}"
2977 echo "optimizations             ${optimizations-no}"
2978 echo "static                    ${static-no}"
2979 echo "shared                    ${shared-no}"
2980 echo "postprocessing support    ${postproc-no}"
2981 echo "new filter support        ${avfilter-no}"
2982 echo "network support           ${network-no}"
2983 echo "threading support         ${thread_type-no}"
2984 echo "SDL support               ${sdl-no}"
2985 echo "Sun medialib support      ${mlib-no}"
2986 echo "AVISynth enabled          ${avisynth-no}"
2987 echo "libdc1394 support         ${libdc1394-no}"
2988 echo "libdirac enabled          ${libdirac-no}"
2989 echo "libfaac enabled           ${libfaac-no}"
2990 echo "libgsm enabled            ${libgsm-no}"
2991 echo "libmp3lame enabled        ${libmp3lame-no}"
2992 echo "libnut enabled            ${libnut-no}"
2993 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2994 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2995 echo "libopenjpeg enabled       ${libopenjpeg-no}"
2996 echo "librtmp enabled           ${librtmp-no}"
2997 echo "libschroedinger enabled   ${libschroedinger-no}"
2998 echo "libspeex enabled          ${libspeex-no}"
2999 echo "libtheora enabled         ${libtheora-no}"
3000 echo "libvorbis enabled         ${libvorbis-no}"
3001 echo "libvpx enabled            ${libvpx-no}"
3002 echo "libx264 enabled           ${libx264-no}"
3003 echo "libxavs enabled           ${libxavs-no}"
3004 echo "libxvid enabled           ${libxvid-no}"
3005 echo "zlib enabled              ${zlib-no}"
3006 echo "bzlib enabled             ${bzlib-no}"
3007 echo
3008
3009 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3010     echo "Enabled ${type}s:"
3011     eval list=\$$(toupper $type)_LIST
3012     print_enabled '_*' $list | sort | pr -3 -t
3013     echo
3014 done
3015
3016 license="LGPL version 2.1 or later"
3017 if enabled nonfree; then
3018     license="nonfree and unredistributable"
3019 elif enabled gplv3; then
3020     license="GPL version 3 or later"
3021 elif enabled lgplv3; then
3022     license="LGPL version 3 or later"
3023 elif enabled gpl; then
3024     license="GPL version 2 or later"
3025 fi
3026
3027 echo "License: $license"
3028
3029 echo "Creating config.mak and config.h..."
3030
3031 # build tree in object directory if source path is different from current one
3032 if enabled source_path_used; then
3033     DIRS="
3034         doc
3035         libavcodec
3036         libavcodec/$arch
3037         libavcore
3038         libavdevice
3039         libavfilter
3040         libavformat
3041         libavutil
3042         libavutil/$arch
3043         libpostproc
3044         libswscale
3045         libswscale/$arch
3046         tests
3047         tools
3048     "
3049     FILES="
3050         Makefile
3051         common.mak
3052         subdir.mak
3053         doc/texi2pod.pl
3054         libavcodec/Makefile
3055         libavcodec/${arch}/Makefile
3056         libavcore/Makefile
3057         libavdevice/Makefile
3058         libavfilter/Makefile
3059         libavformat/Makefile
3060         libavutil/Makefile
3061         libpostproc/Makefile
3062         libswscale/Makefile
3063     "
3064     map 'mkdir -p $v' $DIRS;
3065     map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
3066 fi
3067
3068 enabled stripping || strip="echo skipping strip"
3069
3070 config_files="$TMPH config.mak"
3071
3072 cat > config.mak <<EOF
3073 # Automatically generated by configure - do not modify!
3074 ifndef FFMPEG_CONFIG_MAK
3075 FFMPEG_CONFIG_MAK=1
3076 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3077 prefix=$prefix
3078 LIBDIR=\$(DESTDIR)$libdir
3079 SHLIBDIR=\$(DESTDIR)$shlibdir
3080 INCDIR=\$(DESTDIR)$incdir
3081 BINDIR=\$(DESTDIR)$bindir
3082 DATADIR=\$(DESTDIR)$datadir
3083 MANDIR=\$(DESTDIR)$mandir
3084 SRC_PATH="$source_path"
3085 SRC_PATH_BARE=$source_path
3086 BUILD_ROOT="$PWD"
3087 CC_IDENT=$cc_ident
3088 ARCH=$arch
3089 CC=$cc
3090 AS=$as
3091 LD=$ld
3092 DEPCC=$dep_cc
3093 YASM=$yasmexe
3094 YASMDEP=$yasmexe
3095 AR=$ar
3096 RANLIB=$ranlib
3097 CP=cp -p
3098 LN_S=$ln_s
3099 STRIP=$strip
3100 CPPFLAGS=$CPPFLAGS
3101 CFLAGS=$CFLAGS
3102 ASFLAGS=$ASFLAGS
3103 CC_O=$CC_O
3104 LDFLAGS=$LDFLAGS
3105 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3106 SHFLAGS=$SHFLAGS
3107 YASMFLAGS=$YASMFLAGS
3108 BUILDSUF=$build_suffix
3109 FULLNAME=$FULLNAME
3110 LIBPREF=$LIBPREF
3111 LIBSUF=$LIBSUF
3112 LIBNAME=$LIBNAME
3113 SLIBPREF=$SLIBPREF
3114 SLIBSUF=$SLIBSUF
3115 EXESUF=$EXESUF
3116 EXTRA_VERSION=$extra_version
3117 DEPFLAGS=$DEPFLAGS
3118 CCDEP=$CCDEP
3119 ASDEP=$ASDEP
3120 CC_DEPFLAGS=$CC_DEPFLAGS
3121 AS_DEPFLAGS=$AS_DEPFLAGS
3122 HOSTCC=$host_cc
3123 HOSTCFLAGS=$host_cflags
3124 HOSTEXESUF=$HOSTEXESUF
3125 HOSTLDFLAGS=$host_ldflags
3126 HOSTLIBS=$host_libs
3127 TARGET_EXEC=$target_exec
3128 TARGET_PATH=$target_path
3129 SDL_LIBS=$sdl_libs
3130 SDL_CFLAGS=$sdl_cflags
3131 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3132 EXTRALIBS=$extralibs
3133 INSTALL=install
3134 LIBTARGET=${LIBTARGET}
3135 SLIBNAME=${SLIBNAME}
3136 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3137 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3138 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3139 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3140 SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
3141 SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
3142 SAMPLES=$samples
3143 EOF
3144
3145 get_version(){
3146     name=$1
3147     file=$source_path/$2
3148     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3149     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3150     lcname=$(tolower $name)
3151     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3152     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3153 }
3154
3155 get_version LIBSWSCALE  libswscale/swscale.h
3156 get_version LIBPOSTPROC libpostproc/postprocess.h
3157 get_version LIBAVCODEC  libavcodec/avcodec.h
3158 get_version LIBAVCORE   libavcore/avcore.h
3159 get_version LIBAVDEVICE libavdevice/avdevice.h
3160 get_version LIBAVFORMAT libavformat/avformat.h
3161 get_version LIBAVUTIL   libavutil/avutil.h
3162 get_version LIBAVFILTER libavfilter/avfilter.h
3163
3164 cat > $TMPH <<EOF
3165 /* Automatically generated by configure - do not modify! */
3166 #ifndef FFMPEG_CONFIG_H
3167 #define FFMPEG_CONFIG_H
3168 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3169 #define FFMPEG_LICENSE "$(c_escape $license)"
3170 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3171 #define CC_TYPE "$cc_type"
3172 #define CC_VERSION $cc_version
3173 #define restrict $_restrict
3174 #define ASMALIGN(ZEROBITS) ".p2align " #ZEROBITS "\\n\\t"
3175 #define EXTERN_PREFIX "${extern_prefix}"
3176 #define EXTERN_ASM ${extern_prefix}
3177 EOF
3178
3179 test -n "$malloc_prefix" &&
3180     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3181
3182 if enabled small || disabled optimizations; then
3183     echo "#undef  av_always_inline"  >> $TMPH
3184     echo "#define av_always_inline"  >> $TMPH
3185 fi
3186
3187 print_config ARCH_   "$config_files" $ARCH_LIST
3188 print_config HAVE_   "$config_files" $HAVE_LIST
3189 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
3190                                       $CONFIG_EXTRA      \
3191                                       $DECODER_LIST      \
3192                                       $ENCODER_LIST      \
3193                                       $HWACCEL_LIST      \
3194                                       $PARSER_LIST       \
3195                                       $BSF_LIST          \
3196                                       $DEMUXER_LIST      \
3197                                       $MUXER_LIST        \
3198                                       $FILTER_LIST       \
3199                                       $PROTOCOL_LIST     \
3200                                       $INDEV_LIST        \
3201                                       $OUTDEV_LIST       \
3202
3203 cat >>config.mak <<EOF
3204 ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3205 VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3206 LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3207 LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3208 SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3209 EOF
3210
3211 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3212 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3213
3214 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3215 cp_if_changed $TMPH config.h
3216 touch .config
3217
3218 cat > $TMPH <<EOF
3219 /* Generated by ffconf */
3220 #ifndef AVUTIL_AVCONFIG_H
3221 #define AVUTIL_AVCONFIG_H
3222 EOF
3223
3224 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3225
3226 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3227
3228 cp_if_changed $TMPH libavutil/avconfig.h
3229
3230 test -n "$WARNINGS" && printf "\n$WARNINGS"
3231
3232 # build pkg-config files
3233
3234 pkgconfig_generate(){
3235 name=$1
3236 shortname=${name#lib}${build_suffix}
3237 comment=$2
3238 version=$3
3239 libs=$4
3240 requires=$5
3241 enabled ${name#lib} || return 0
3242 cat <<EOF > $name/$name.pc
3243 prefix=$prefix
3244 exec_prefix=\${prefix}
3245 libdir=$libdir
3246 includedir=$incdir
3247
3248 Name: $name
3249 Description: $comment
3250 Version: $version
3251 Requires: $(enabled shared || echo $requires)
3252 Requires.private: $(enabled shared && echo $requires)
3253 Conflicts:
3254 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3255 Libs.private: $(enabled shared && echo $libs)
3256 Cflags: -I\${includedir}
3257 EOF
3258 cat <<EOF > $name/$name-uninstalled.pc
3259 prefix=
3260 exec_prefix=
3261 libdir=\${pcfiledir}
3262 includedir=${source_path}
3263
3264 Name: $name
3265 Description: $comment
3266 Version: $version
3267 Requires: $requires
3268 Conflicts:
3269 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3270 Cflags: -I\${includedir}
3271 EOF
3272 }
3273
3274 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3275 pkgconfig_generate libavcore "FFmpeg multimedia shared core utilities library" "$LIBAVCORE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
3276 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavcore = $LIBAVCORE_VERSION"
3277 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3278 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3279 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavcore = $LIBAVCORE_VERSION"
3280 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3281 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"