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