Add av_file_map() and av_file_unmap() functions.
[ffmpeg.git] / configure
1 #!/bin/sh
2 #
3 # FFmpeg configure script
4 #
5 # Copyright (c) 2000-2002 Fabrice Bellard
6 # Copyright (c) 2005-2008 Diego Biurrun
7 # Copyright (c) 2005-2008 Mans Rullgard
8 #
9
10 # Prevent locale nonsense from breaking basic text processing.
11 LC_ALL=C
12 export LC_ALL
13
14 # make sure we are running under a compatible shell
15 # try to make this part work with most shells
16
17 try_exec(){
18     echo "Trying shell $1"
19     type "$1" > /dev/null 2>&1 && exec "$@"
20 }
21
22 unset foo
23 (: ${foo%%bar}) 2> /dev/null
24 E1="$?"
25
26 (: ${foo?}) 2> /dev/null
27 E2="$?"
28
29 if test "$E1" != 0 || test "$E2" = 0; then
30     echo "Broken shell detected.  Trying alternatives."
31     export FF_CONF_EXEC
32     if test "0$FF_CONF_EXEC" -lt 1; then
33         FF_CONF_EXEC=1
34         try_exec bash "$0" "$@"
35     fi
36     if test "0$FF_CONF_EXEC" -lt 2; then
37         FF_CONF_EXEC=2
38         try_exec ksh "$0" "$@"
39     fi
40     if test "0$FF_CONF_EXEC" -lt 3; then
41         FF_CONF_EXEC=3
42         try_exec /usr/xpg4/bin/sh "$0" "$@"
43     fi
44     echo "No compatible shell script interpreter found."
45     echo "This configure script requires a POSIX-compatible shell"
46     echo "such as bash or ksh."
47     echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48     echo "Instead, install a working POSIX-compatible shell."
49     echo "Disabling this configure test will create a broken FFmpeg."
50     if test "$BASH_VERSION" = '2.04.0(1)-release'; then
51         echo "This bash version ($BASH_VERSION) is broken on your platform."
52         echo "Upgrade to a later version if available."
53     fi
54     exit 1
55 fi
56
57 show_help(){
58 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_smooth_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_crop
1531 set_ne_test_deps pixfmts_hflip
1532 set_ne_test_deps pixfmts_null
1533 set_ne_test_deps pixfmts_pad
1534 set_ne_test_deps pixfmts_scale
1535 set_ne_test_deps pixfmts_vflip
1536
1537 # default parameters
1538
1539 logfile="config.log"
1540
1541 # installation paths
1542 prefix_default="/usr/local"
1543 bindir_default='${prefix}/bin'
1544 datadir_default='${prefix}/share/ffmpeg'
1545 incdir_default='${prefix}/include'
1546 libdir_default='${prefix}/lib'
1547 mandir_default='${prefix}/share/man'
1548 shlibdir_default="$libdir_default"
1549
1550 # toolchain
1551 ar_default="ar"
1552 cc_default="gcc"
1553 cc_version=\"unknown\"
1554 host_cc_default="gcc"
1555 ln_s="ln -sf"
1556 nm_default="nm"
1557 objformat="elf"
1558 ranlib="ranlib"
1559 strip_default="strip"
1560 yasmexe="yasm"
1561 nogas=":"
1562
1563 nm_opts='-g'
1564
1565 # machine
1566 arch_default=$(uname -m)
1567 cpu="generic"
1568
1569 # OS
1570 target_os_default=$(tolower $(uname -s))
1571 host_os=$target_os_default
1572
1573 # configurable options
1574 enable avcodec
1575 enable avcore
1576 enable avdevice
1577 enable avfilter
1578 enable avformat
1579 enable avutil
1580 enable asm
1581 enable debug
1582 enable doc
1583 enable fastdiv
1584 enable ffmpeg
1585 enable ffplay
1586 enable ffprobe
1587 enable ffserver
1588 enable mpegaudio_hp
1589 enable network
1590 enable optimizations
1591 enable protocols
1592 enable static
1593 enable stripping
1594 enable swscale
1595 enable swscale_alpha
1596
1597 # build settings
1598 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1599 FFSERVERLDFLAGS=-Wl,-E
1600 LIBPREF="lib"
1601 LIBSUF=".a"
1602 FULLNAME='$(NAME)$(BUILDSUF)'
1603 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1604 SLIBPREF="lib"
1605 SLIBSUF=".so"
1606 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1607 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1608 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1609 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1610
1611 CC_O='-o $@'
1612
1613 host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1614 host_libs='-lm'
1615
1616 target_path='$(CURDIR)'
1617
1618 # since the object filename is not given with the -MM flag, the compiler
1619 # is only able to print the basename, and we must add the path ourselves
1620 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1621 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1622
1623 # find source path
1624 source_path="$(dirname "$0")"
1625 enable source_path_used
1626 if test -f configure; then
1627     source_path="$(pwd)"
1628     disable source_path_used
1629 else
1630     source_path="$(cd "$source_path"; pwd)"
1631     echo "$source_path" | grep -q '[[:blank:]]' &&
1632         die "Out of tree builds are impossible with whitespace in source path."
1633     test -e "$source_path/config.h" &&
1634         die "Out of tree builds are impossible with config.h in source dir."
1635 fi
1636
1637 for v in "$@"; do
1638     r=${v#*=}
1639     l=${v%"$r"}
1640     r=$(sh_quote "$r")
1641     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1642 done
1643
1644 find_things(){
1645     thing=$1
1646     pattern=$2
1647     file=$source_path/$3
1648     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1649 }
1650
1651 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1652 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1653 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1654 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1655 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1656 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1657 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1658 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1659 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1660 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1661 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1662
1663 find_tests(){
1664     map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1665 }
1666
1667 ACODEC_TESTS=$(find_tests acodec)
1668 VCODEC_TESTS=$(find_tests vsynth1)
1669 LAVF_TESTS=$(find_tests lavf)
1670 LAVFI_TESTS=$(find_tests lavfi)
1671 SEEK_TESTS=$(find_tests seek seek_)
1672
1673 pcm_test_deps=$(map 'echo ${v%_*}_decoder $v' $(filter pcm_* $ENCODER_LIST))
1674
1675 for n in $COMPONENT_LIST; do
1676     v=$(toupper ${n%s})_LIST
1677     eval enable \$$v
1678     eval ${n}_if_any="\$$v"
1679 done
1680
1681 enable $ARCH_EXT_LIST $ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS
1682
1683 die_unknown(){
1684     echo "Unknown option \"$1\"."
1685     echo "See $0 --help for available options."
1686     exit 1
1687 }
1688
1689 show_list() {
1690     suffix=_$1
1691     shift
1692     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1693     exit 0
1694 }
1695
1696 for opt do
1697     optval="${opt#*=}"
1698     case "$opt" in
1699     --extra-ldflags=*) add_ldflags $optval
1700     ;;
1701     --extra-libs=*) add_extralibs $optval
1702     ;;
1703     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1704     ;;
1705     --enable-debug=*) debuglevel="$optval"
1706     ;;
1707     --disable-everything)
1708     map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1709     ;;
1710     --enable-*=*|--disable-*=*)
1711     eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1712     is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1713     eval list=\$$(toupper $thing)_LIST
1714     name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1715     $action $(filter "$name" $list)
1716     ;;
1717     --enable-?*|--disable-?*)
1718     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1719     if is_in $option $COMPONENT_LIST; then
1720         test $action = disable && action=unset
1721         eval $action \$$(toupper ${option%s})_LIST
1722     elif is_in $option $CMDLINE_SELECT; then
1723         $action $option
1724     else
1725         die_unknown $opt
1726     fi
1727     ;;
1728     --list-*)
1729         NAME="${opt#--list-}"
1730         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1731         NAME=${NAME%s}
1732         eval show_list $NAME \$$(toupper $NAME)_LIST
1733     ;;
1734     --help|-h) show_help
1735     ;;
1736     *)
1737     optname="${opt%%=*}"
1738     optname="${optname#--}"
1739     optname=$(echo "$optname" | sed 's/-/_/g')
1740     if is_in $optname $CMDLINE_SET; then
1741         eval $optname='$optval'
1742     elif is_in $optname $CMDLINE_APPEND; then
1743         append $optname "$optval"
1744     else
1745          die_unknown $opt
1746     fi
1747     ;;
1748     esac
1749 done
1750
1751 disabled logging && logfile=/dev/null
1752
1753 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1754 set >> $logfile
1755
1756 test -n "$cross_prefix" && enable cross_compile
1757
1758 if enabled cross_compile; then
1759     test -n "$arch" && test -n "$target_os" ||
1760         die "Must specify target arch and OS when cross-compiling"
1761 fi
1762
1763 set_default arch target_os
1764
1765 ar_default="${cross_prefix}${ar_default}"
1766 cc_default="${cross_prefix}${cc_default}"
1767 nm_default="${cross_prefix}${nm_default}"
1768 ranlib="${cross_prefix}${ranlib}"
1769 strip_default="${cross_prefix}${strip_default}"
1770
1771 sysinclude_default="${sysroot}/usr/include"
1772
1773 set_default cc nm strip sysinclude
1774 enabled cross_compile || host_cc_default=$cc
1775 set_default host_cc
1776
1777 exesuf() {
1778     case $1 in
1779         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1780     esac
1781 }
1782
1783 EXESUF=$(exesuf $target_os)
1784 HOSTEXESUF=$(exesuf $host_os)
1785
1786 # set temporary file name
1787 : ${TMPDIR:=$TEMPDIR}
1788 : ${TMPDIR:=$TMP}
1789 : ${TMPDIR:=/tmp}
1790
1791 if ! check_cmd type mktemp; then
1792     # simple replacement for missing mktemp
1793     # NOT SAFE FOR GENERAL USE
1794     mktemp(){
1795         echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1796     }
1797 fi
1798
1799 tmpfile(){
1800     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1801         (set -C; exec > $tmp) 2>/dev/null ||
1802         die "Unable to create temporary file in $TMPDIR."
1803     append TMPFILES $tmp
1804     eval $1=$tmp
1805 }
1806
1807 trap 'rm -f -- $TMPFILES' EXIT
1808 trap exit HUP INT TERM
1809
1810 tmpfile TMPC  .c
1811 tmpfile TMPE  $EXESUF
1812 tmpfile TMPH  .h
1813 tmpfile TMPO  .o
1814 tmpfile TMPS  .S
1815 tmpfile TMPV  .ver
1816 tmpfile TMPSH .sh
1817 tmpfile TMPASM .asm
1818
1819 unset -f mktemp
1820
1821 # make sure we can execute files in $TMPDIR
1822 cat > $TMPSH 2>> $logfile <<EOF
1823 #! /bin/sh
1824 EOF
1825 chmod +x $TMPSH >> $logfile 2>&1
1826 if ! $TMPSH >> $logfile 2>&1; then
1827     cat <<EOF
1828 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
1829 variable to another directory and make sure that it is not mounted noexec.
1830 EOF
1831     die "Sanity test failed."
1832 fi
1833
1834 filter_cflags=echo
1835 filter_cppflags=echo
1836 filter_asflags=echo
1837
1838 if   $cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
1839     cc_type=llvm_gcc
1840     cc_version=__VERSION__
1841     gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
1842     cc_ident="llvm-gcc $($cc -dumpversion) $gcc_extra_ver"
1843     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1844     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1845     speed_cflags='-O3'
1846     size_cflags='-Os'
1847 elif $cc -v 2>&1 | grep -qi ^gcc; then
1848     cc_type=gcc
1849     cc_version=__VERSION__
1850     gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
1851     cc_ident="gcc $($cc -dumpversion) $gcc_extra_ver"
1852     if ! $cc -dumpversion | grep -q '^2\.'; then
1853         CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1854         AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1855     fi
1856     speed_cflags='-O3'
1857     size_cflags='-Os'
1858 elif $cc --version 2>/dev/null | grep -q Intel; then
1859     cc_type=icc
1860     cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1861     cc_ident=$($cc --version | head -n1)
1862     icc_version=$($cc -dumpversion)
1863     CC_DEPFLAGS='-MMD'
1864     AS_DEPFLAGS='-MMD'
1865     speed_cflags='-O3'
1866     size_cflags='-Os'
1867     noopt_cflags='-O1'
1868 elif $cc -v 2>&1 | grep -q xlc; then
1869     cc_type=xlc
1870     cc_version="AV_STRINGIFY(__IBMC__)"
1871     cc_ident=$($cc -qversion 2>/dev/null | head -n1)
1872     speed_cflags='-O5'
1873     size_cflags='-O5 -qcompact'
1874 elif $cc -V 2>/dev/null | grep -q Compaq; then
1875     cc_type=ccc
1876     cc_version="AV_STRINGIFY(__DECC_VER)"
1877     cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3)
1878     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1879     debuglevel=3
1880     add_ldflags -Wl,-z,now # calls to libots crash without this
1881     speed_cflags='-fast'
1882     size_cflags='-O1'
1883 elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1884     test -d "$sysroot" || die "No valid sysroot specified."
1885     cc_type=armcc
1886     cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1887     cc_ident=$($cc --vsn | head -n1)
1888     armcc_conf="$PWD/armcc.conf"
1889     $cc --arm_linux_configure                 \
1890         --arm_linux_config_file="$armcc_conf" \
1891         --configure_sysroot="$sysroot"        \
1892         --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1893         die "Error creating armcc configuration file."
1894     $cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
1895     cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1896     as_default="${cross_prefix}gcc"
1897     CC_DEPFLAGS='-MMD'
1898     AS_DEPFLAGS='-MMD'
1899     speed_cflags='-O3'
1900     size_cflags='-Os'
1901 elif $cc -version 2>/dev/null | grep -q TMS470; then
1902     cc_type=tms470
1903     cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1904     cc_ident=$($cc -version | head -n1 | tr -s ' ')
1905     cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1906     CC_O='-fr=$(@D)'
1907     as_default="${cross_prefix}gcc"
1908     ld_default="${cross_prefix}gcc"
1909     TMPO=$(basename $TMPC .c).o
1910     append TMPFILES $TMPO
1911     add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1912     CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1913     AS_DEPFLAGS='-MMD'
1914     speed_cflags='-O3 -mf=5'
1915     size_cflags='-O3 -mf=2'
1916     filter_cflags=tms470_flags
1917     tms470_flags(){
1918         for flag; do
1919             case $flag in
1920                 -march=*|-mcpu=*)
1921                     case "${flag#*=}" in
1922                         armv7-a|cortex-a*)      echo -mv=7a8 ;;
1923                         armv7-r|cortex-r*)      echo -mv=7r4 ;;
1924                         armv7-m|cortex-m*)      echo -mv=7m3 ;;
1925                         armv6*|arm11*)          echo -mv=6   ;;
1926                         armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1927                                                 echo -mv=5e  ;;
1928                         armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
1929                     esac
1930                     ;;
1931                 -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
1932                 -mfpu=vfp)      echo --float_support=vfpv2        ;;
1933                 -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
1934                 -msoft-float)   echo --float_support=vfplib       ;;
1935                 -O[0-3]|-mf=*)  echo $flag                        ;;
1936                 -g)             echo -g -mn                       ;;
1937                 -pds=*)         echo $flag                        ;;
1938             esac
1939         done
1940     }
1941 elif $cc -v 2>&1 | grep -q clang; then
1942     cc_type=clang
1943     $cc -dM -E $TMPC | grep -q __clang_version__ &&
1944         cc_version=__clang_version__ || cc_version=__VERSION__
1945     cc_ident=$($cc --version | head -n1)
1946     CC_DEPFLAGS='-MMD'
1947     AS_DEPFLAGS='-MMD'
1948     speed_cflags='-O3'
1949     size_cflags='-Os'
1950 elif $cc -V 2>&1 | grep -q Sun; then
1951     cc_type=suncc
1952     cc_version="AV_STRINGIFY(__SUNPRO_C)"
1953     cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
1954     DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1955     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1956     speed_cflags='-O5'
1957     size_cflags='-O5 -xspace'
1958     filter_cflags=suncc_flags
1959     suncc_flags(){
1960         for flag; do
1961             case $flag in
1962                 -march=*|-mcpu=*)
1963                     case "${flag#*=}" in
1964                         native)                   echo -xtarget=native       ;;
1965                         v9|niagara)               echo -xarch=sparc          ;;
1966                         ultrasparc)               echo -xarch=sparcvis       ;;
1967                         ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
1968                         i586|pentium)             echo -xchip=pentium        ;;
1969                         i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
1970                         pentium3*|c3-2)           echo -xtarget=pentium3     ;;
1971                         pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
1972                         pentium4*)          echo -xtarget=pentium4           ;;
1973                         prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
1974                         *-sse3)             echo -xarch=sse3                 ;;
1975                         core2)              echo -xarch=ssse3 -xchip=core2   ;;
1976                         amdfam10|barcelona)       echo -xarch=sse4_1         ;;
1977                         athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
1978                         k8|opteron|athlon64|athlon-fx)
1979                                                   echo -xarch=sse2a          ;;
1980                         athlon*)                  echo -xarch=pentium_proa   ;;
1981                     esac
1982                     ;;
1983                 -std=c99)             echo -xc99              ;;
1984                 -fomit-frame-pointer) echo -xregs=frameptr    ;;
1985                 -fPIC)                echo -KPIC -xcode=pic32 ;;
1986                 -W*,*)                echo $flag              ;;
1987                 -f*-*|-W*)                                    ;;
1988                 *)                    echo $flag              ;;
1989             esac
1990         done
1991     }
1992 elif $cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
1993     cc_type=pathscale
1994     cc_version=__PATHSCALE__
1995     cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
1996     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1997     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1998     speed_cflags='-O2'
1999     size_cflags='-Os'
2000 elif $cc -v 2>&1 | grep -q Open64; then
2001     cc_type=open64
2002     cc_version=__OPEN64__
2003     cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2004     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2005     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2006     speed_cflags='-O2'
2007     size_cflags='-Os'
2008 fi
2009
2010 test -n "$cc_type" && enable $cc_type ||
2011     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2012
2013 : ${as_default:=$cc}
2014 : ${dep_cc_default:=$cc}
2015 : ${ld_default:=$cc}
2016 set_default ar as dep_cc ld
2017
2018 test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
2019 test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
2020
2021 add_cflags $extra_cflags
2022 add_asflags $extra_cflags
2023
2024 if test -n "$sysroot"; then
2025     case "$cc_type" in
2026         gcc|llvm_gcc)
2027             add_cppflags --sysroot="$sysroot"
2028             add_ldflags --sysroot="$sysroot"
2029         ;;
2030         tms470)
2031             add_cppflags -I"$sysinclude"
2032             add_ldflags  --sysroot="$sysroot"
2033         ;;
2034         clang)
2035             add_cppflags -isysroot "$sysroot"
2036             add_ldflags -isysroot "$sysroot"
2037         ;;
2038     esac
2039 fi
2040
2041 if test "$cpu" = host; then
2042     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2043
2044     case "$cc_type" in
2045         gcc|llvm_gcc)
2046             check_native(){
2047                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2048                 sed -n "/$1=/{
2049                             s/.*$1=\\([^ ]*\\).*/\\1/
2050                             p
2051                             q
2052                         }" $TMPE
2053             }
2054             cpu=$(check_native -march || check_native -mcpu)
2055         ;;
2056     esac
2057
2058     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2059 fi
2060
2061 # Deal with common $arch aliases
2062 case "$arch" in
2063     arm*)
2064         arch="arm"
2065     ;;
2066     mips|mipsel|IP*)
2067         arch="mips"
2068     ;;
2069     mips64*)
2070         arch="mips"
2071         subarch="mips64"
2072     ;;
2073     parisc|hppa)
2074         arch="parisc"
2075     ;;
2076     parisc64|hppa64)
2077         arch="parisc"
2078         subarch="parisc64"
2079     ;;
2080     "Power Macintosh"|ppc|powerpc)
2081         arch="ppc"
2082     ;;
2083     ppc64|powerpc64)
2084         arch="ppc"
2085         subarch="ppc64"
2086     ;;
2087     s390|s390x)
2088         arch="s390"
2089     ;;
2090     sh4|sh)
2091         arch="sh4"
2092     ;;
2093     sun4u|sparc64)
2094         arch="sparc"
2095         subarch="sparc64"
2096     ;;
2097     i[3-6]86|i86pc|BePC|x86_64|amd64)
2098         arch="x86"
2099     ;;
2100 esac
2101
2102 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2103 enable $arch
2104
2105 # Add processor-specific flags
2106 if test "$cpu" = generic; then
2107     : do nothing
2108 elif enabled ppc; then
2109
2110     case $(tolower $cpu) in
2111         601|ppc601|powerpc601)
2112             cpuflags="-mcpu=601"
2113             disable altivec
2114         ;;
2115         603*|ppc603*|powerpc603*)
2116             cpuflags="-mcpu=603"
2117             disable altivec
2118         ;;
2119         604*|ppc604*|powerpc604*)
2120             cpuflags="-mcpu=604"
2121             disable altivec
2122         ;;
2123         g3|75*|ppc75*|powerpc75*)
2124             cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2125             disable altivec
2126         ;;
2127         g4|745*|ppc745*|powerpc745*)
2128             cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2129         ;;
2130         74*|ppc74*|powerpc74*)
2131             cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2132         ;;
2133         g5|970|ppc970|powerpc970|power4*)
2134             cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2135         ;;
2136         cell)
2137             cpuflags="-mcpu=cell"
2138             enable ldbrx
2139         ;;
2140         e500v2)
2141             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2142             disable altivec
2143         ;;
2144         e500)
2145             cpuflags="-mcpu=8540 -mhard-float"
2146             disable altivec
2147         ;;
2148     esac
2149
2150 elif enabled x86; then
2151
2152     case $cpu in
2153         i[345]86|pentium)
2154             cpuflags="-march=$cpu"
2155             disable mmx
2156         ;;
2157         # targets that do NOT support conditional mov (cmov)
2158         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2159             cpuflags="-march=$cpu"
2160             disable cmov
2161         ;;
2162         # targets that do support conditional mov (cmov)
2163         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona|atom)
2164             cpuflags="-march=$cpu"
2165             enable cmov
2166             enable fast_cmov
2167         ;;
2168         # targets that do support conditional mov but on which it's slow
2169         pentium4|pentium4m|prescott|nocona)
2170             cpuflags="-march=$cpu"
2171             enable cmov
2172             disable fast_cmov
2173         ;;
2174     esac
2175
2176 elif enabled sparc; then
2177
2178     case $cpu in
2179         niagara)
2180             cpuflags="-mcpu=$cpu"
2181             disable vis
2182         ;;
2183         sparc64)
2184             cpuflags="-mcpu=v9"
2185         ;;
2186     esac
2187
2188 elif enabled arm; then
2189
2190     case $cpu in
2191         armv*)
2192             cpuflags="-march=$cpu"
2193             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2194         ;;
2195         *)
2196             cpuflags="-mcpu=$cpu"
2197             case $cpu in
2198                 cortex-a*)                               subarch=armv7a  ;;
2199                 cortex-r*)                               subarch=armv7r  ;;
2200                 cortex-m*)                               subarch=armv7m  ;;
2201                 arm11*)                                  subarch=armv6   ;;
2202                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2203                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2204             esac
2205         ;;
2206     esac
2207
2208 elif enabled alpha; then
2209
2210     enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2211
2212 elif enabled bfin; then
2213
2214     cpuflags="-mcpu=$cpu"
2215
2216 elif enabled mips; then
2217
2218     cpuflags="-march=$cpu"
2219
2220 elif enabled avr32; then
2221
2222     case $cpu in
2223         ap7[02]0[0-2])
2224             subarch="avr32_ap"
2225             cpuflags="-mpart=$cpu"
2226         ;;
2227         ap)
2228             subarch="avr32_ap"
2229             cpuflags="-march=$cpu"
2230         ;;
2231         uc3[ab]*)
2232             subarch="avr32_uc"
2233             cpuflags="-mcpu=$cpu"
2234         ;;
2235         uc)
2236             subarch="avr32_uc"
2237             cpuflags="-march=$cpu"
2238         ;;
2239     esac
2240
2241 fi
2242
2243 add_cflags $cpuflags
2244 add_asflags $cpuflags
2245
2246 # compiler sanity check
2247 check_exec <<EOF
2248 int main(void){ return 0; }
2249 EOF
2250 if test "$?" != 0; then
2251     echo "$cc is unable to create an executable file."
2252     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2253         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2254         echo "Only do this if you know what cross compiling means."
2255     fi
2256     die "C compiler test failed."
2257 fi
2258
2259 add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2260 check_cflags -std=c99
2261 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2262 #include <stdlib.h>
2263 EOF
2264 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2265 #include <stdlib.h>
2266 EOF
2267
2268 check_host_cflags -std=c99
2269
2270 case "$arch" in
2271     alpha|ia64|mips|parisc|sparc)
2272         spic=$shared
2273     ;;
2274     x86)
2275         subarch="x86_32"
2276         check_cc <<EOF && subarch="x86_64"
2277         int test[(int)sizeof(char*) - 7];
2278 EOF
2279         if test "$subarch" = "x86_64"; then
2280             spic=$shared
2281         fi
2282     ;;
2283 esac
2284
2285 enable $subarch
2286 enabled spic && enable pic
2287
2288 # OS specific
2289 case $target_os in
2290     haiku)
2291         prefix_default="/boot/common"
2292         network_extralibs="-lnetwork"
2293         ;;
2294     sunos)
2295         FFSERVERLDFLAGS=""
2296         SHFLAGS='-shared -Wl,-h,$$(@F)'
2297         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2298         network_extralibs="-lsocket -lnsl"
2299         add_cppflags -D__EXTENSIONS__
2300         nm_opts='-P -g'
2301         ;;
2302     netbsd)
2303         oss_indev_extralibs="-lossaudio"
2304         oss_outdev_extralibs="-lossaudio"
2305         add_cppflags -D_XOPEN_SOURCE=600
2306         ;;
2307     openbsd)
2308         enable malloc_aligned
2309         # On OpenBSD 4.5. the compiler does not use PIC unless
2310         # explicitly using -fPIC. FFmpeg builds fine without PIC,
2311         # however the generated executable will not do anything
2312         # (simply quits with exit-code 1, no crash, no output).
2313         # Thus explicitly enable PIC here.
2314         enable pic
2315         SHFLAGS='-shared'
2316         oss_indev_extralibs="-lossaudio"
2317         oss_outdev_extralibs="-lossaudio"
2318         ;;
2319     freebsd|dragonfly)
2320         enable malloc_aligned
2321         ;;
2322     bsd/os)
2323         add_extralibs -lpoll -lgnugetopt
2324         strip="strip -d"
2325         ;;
2326     darwin)
2327         enable malloc_aligned
2328         gas="gas-preprocessor.pl $cc"
2329         enabled ppc && add_asflags -force_cpusubtype_ALL
2330         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
2331         strip="${strip} -x"
2332         add_ldflags -Wl,-dynamic,-search_paths_first
2333         SLIBSUF=".dylib"
2334         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2335         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2336         FFSERVERLDFLAGS=-Wl,-bind_at_load
2337         objformat="macho"
2338         enabled x86_64 && objformat="macho64"
2339         enabled_any pic shared ||
2340             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2341         ;;
2342     mingw32*)
2343         if test $target_os = "mingw32ce"; then
2344             disable network
2345         else
2346             target_os=mingw32
2347         fi
2348         LIBTARGET=i386
2349         if enabled x86_64; then
2350             enable malloc_aligned
2351             LIBTARGET=x64
2352         elif enabled arm; then
2353             LIBTARGET=arm
2354         fi
2355         shlibdir_default="$bindir_default"
2356         disable ffserver
2357         SLIBPREF=""
2358         SLIBSUF=".dll"
2359         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2360         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2361         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2362         SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2363             install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2364             install -d "$(LIBDIR)"; \
2365             install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2366         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2367         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'
2368         objformat="win32"
2369         enable dos_paths
2370         check_cflags -fno-common
2371         check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2372                                       || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2373                 die "ERROR: MinGW runtime version must be >= 3.15."
2374         ;;
2375     cygwin*)
2376         target_os=cygwin
2377         shlibdir_default="$bindir_default"
2378         SLIBPREF="cyg"
2379         SLIBSUF=".dll"
2380         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2381         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2382         SHFLAGS='-shared -Wl,--enable-auto-image-base'
2383         objformat="win32"
2384         enable dos_paths
2385         check_cflags -fno-common
2386         ;;
2387     *-dos|freedos|opendos)
2388         disable ffplay ffserver
2389         disable $INDEV_LIST $OUTDEV_LIST
2390         network_extralibs="-lsocket"
2391         objformat="coff"
2392         enable dos_paths
2393         ;;
2394     linux)
2395         enable dv1394
2396         ;;
2397     irix*)
2398         target_os=irix
2399         ranlib="echo ignoring ranlib"
2400         ;;
2401     os/2*)
2402         strip="lxlite"
2403         ln_s="cp -f"
2404         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2405         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2406         FFSERVERLDFLAGS=""
2407         LIBSUF="_s.a"
2408         SLIBPREF=""
2409         SLIBSUF=".dll"
2410         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2411         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2412         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2413           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2414           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2415           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2416           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2417           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2418         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2419           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2420         SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2421         SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2422         enable dos_paths
2423         ;;
2424     gnu/kfreebsd)
2425         ;;
2426     gnu)
2427         ;;
2428     none)
2429         ;;
2430     *)
2431         die "Unknown OS '$target_os'."
2432         ;;
2433 esac
2434
2435 echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate
2436
2437 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2438
2439 set_default $PATHS_LIST
2440
2441 # we need to build at least one lib type
2442 if ! enabled_any static shared; then
2443     cat <<EOF
2444 At least one library type must be built.
2445 Specify --enable-static to build the static libraries or --enable-shared to
2446 build the shared libraries as well. To only build the shared libraries specify
2447 --disable-static in addition to --enable-shared.
2448 EOF
2449     exit 1;
2450 fi
2451
2452 disabled static && LIBNAME=""
2453
2454 die_license_disabled() {
2455     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2456 }
2457
2458 die_license_disabled gpl libx264
2459 die_license_disabled gpl libxavs
2460 die_license_disabled gpl libxvid
2461 die_license_disabled gpl postproc
2462 die_license_disabled gpl x11grab
2463
2464 die_license_disabled nonfree libfaac
2465
2466 die_license_disabled version3 libopencore_amrnb
2467 die_license_disabled version3 libopencore_amrwb
2468
2469 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2470
2471 check_deps $ARCH_EXT_LIST
2472
2473 disabled optimizations || check_cflags -fomit-frame-pointer
2474
2475 enable_pic() {
2476     enable pic
2477     add_cppflags -DPIC
2478     add_cflags   -fPIC
2479     add_asflags  -fPIC
2480 }
2481
2482 enabled pic && enable_pic
2483
2484 check_cc <<EOF || die "Symbol mangling check failed."
2485 int ff_extern;
2486 EOF
2487 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2488 extern_prefix=${sym%%ff_extern*}
2489
2490 check_cc <<EOF && enable inline_asm
2491 void foo(void) { __asm__ volatile ("" ::); }
2492 EOF
2493
2494 _restrict=
2495 for restrict_keyword in restrict __restrict__ __restrict; do
2496     check_cc <<EOF && _restrict=$restrict_keyword && break
2497 void foo(char * $restrict_keyword p);
2498 EOF
2499 done
2500
2501 check_cc <<EOF && enable attribute_packed
2502 struct { int x; } __attribute__((packed)) x;
2503 EOF
2504
2505 check_cc <<EOF && enable attribute_may_alias
2506 union { int x; } __attribute__((may_alias)) x;
2507 EOF
2508
2509 check_cc <<EOF || die "endian test failed"
2510 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2511 EOF
2512 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2513
2514 if enabled alpha; then
2515
2516     check_cflags -mieee
2517
2518 elif enabled arm; then
2519
2520     check_cflags -marm
2521     nogas=die
2522
2523     check_ld <<EOF && enable vfp_args
2524 __asm__ (".eabi_attribute 28, 1");
2525 int main(void) { return 0; }
2526 EOF
2527
2528     # We have to check if pld is a nop and disable it.
2529     check_asm pld '"pld [r0]"'
2530
2531     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2532     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2533     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2534     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2535     enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2536     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2537
2538     enabled_all armv6t2 shared !pic && enable_pic
2539
2540 elif enabled mips; then
2541
2542     check_asm loongson '"dmult.g $1, $2, $3"'
2543     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2544
2545 elif enabled ppc; then
2546
2547     enable local_aligned_8 local_aligned_16
2548
2549     check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2550     check_asm ibm_asm   '"add 0, 0, 0"'
2551     check_asm ppc4xx    '"maclhw r10, r11, r12"'
2552     check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2553
2554     # AltiVec flags: The FSF version of GCC differs from the Apple version
2555     if enabled altivec; then
2556         nogas=warn
2557         check_cflags -maltivec -mabi=altivec &&
2558         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2559         check_cflags -faltivec
2560
2561         # check if our compiler supports Motorola AltiVec C API
2562         check_cc <<EOF || disable altivec
2563 $inc_altivec_h
2564 int main(void) {
2565     vector signed int v1, v2, v3;
2566     v1 = vec_add(v2,v3);
2567     return 0;
2568 }
2569 EOF
2570
2571         # check if our compiler supports braces for vector declarations
2572         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2573 $inc_altivec_h
2574 int main (void) { (vector int) {1}; return 0; }
2575 EOF
2576     fi
2577
2578 elif enabled sparc; then
2579
2580     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2581         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2582
2583 elif enabled x86; then
2584
2585     enable local_aligned_8 local_aligned_16
2586
2587     # check whether EBP is available on x86
2588     # As 'i' is stored on the stack, this program will crash
2589     # if the base pointer is used to access it because the
2590     # base pointer is cleared in the inline assembly code.
2591     check_exec_crash <<EOF && enable ebp_available
2592     volatile int i=0;
2593     __asm__ volatile (
2594         "xorl %%ebp, %%ebp"
2595     ::: "%ebp");
2596     return i;
2597 EOF
2598
2599     # check whether EBX is available on x86
2600     check_asm ebx_available '""::"b"(0)' &&
2601         check_asm ebx_available '"":::"%ebx"'
2602
2603     # check whether xmm clobbers are supported
2604     check_asm xmm_clobbers '"":::"%xmm0"'
2605
2606     # check whether more than 10 operands are supported
2607     check_cc <<EOF && enable ten_operands
2608 int main(void) {
2609     int x=0;
2610     __asm__ volatile(
2611         ""
2612         :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2613     );
2614     return 0;
2615 }
2616 EOF
2617
2618     # check whether binutils is new enough to compile SSSE3/MMX2
2619     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2620     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2621
2622     check_asm bswap '"bswap %%eax" ::: "%eax"'
2623
2624     if ! disabled_any asm mmx yasm; then
2625         if check_cmd $yasmexe --version; then
2626             enabled x86_64 && yasm_extra="-m amd64"
2627             yasm_debug="-g dwarf2"
2628         elif check_cmd nasm -v; then
2629             yasmexe=nasm
2630             yasm_debug="-g -F dwarf"
2631             enabled x86_64 && test "$objformat" = elf && objformat=elf64
2632         fi
2633
2634         YASMFLAGS="-f $objformat $yasm_extra"
2635         enabled pic               && append YASMFLAGS "-DPIC"
2636         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2637         case "$objformat" in
2638             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
2639         esac
2640
2641         check_yasm "pabsw xmm0, xmm0" && enable yasm ||
2642             die "yasm not found, use --disable-yasm for a crippled build"
2643     fi
2644
2645     case "$cpu" in
2646         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2647             disable fast_clz
2648         ;;
2649     esac
2650
2651 fi
2652
2653 if enabled asm; then
2654     as=${gas:=$as}
2655     check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2656         $nogas "GNU assembler not found, install gas-preprocessor"
2657 fi
2658
2659 if check_func dlopen; then
2660     ldl=
2661 elif check_func dlopen -ldl; then
2662     ldl=-ldl
2663 fi
2664
2665 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2666 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2667
2668 check_func  fcntl
2669 check_func  fork
2670 check_func  getaddrinfo $network_extralibs
2671 check_func  gethrtime
2672 check_func  getrusage
2673 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2674 check_func  inet_aton $network_extralibs
2675 check_func  isatty
2676 check_func  ${malloc_prefix}memalign            && enable memalign
2677 check_func  mkstemp
2678 check_func  mmap
2679 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
2680 check_func  setrlimit
2681 check_func  strerror_r
2682 check_func  strtok_r
2683 check_func_headers io.h setmode
2684 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2685 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2686 check_func_headers windows.h GetProcessTimes
2687 check_func_headers windows.h VirtualAlloc
2688
2689 check_header conio.h
2690 check_header dlfcn.h
2691 check_header dxva2api.h
2692 check_header malloc.h
2693 check_header poll.h
2694 check_header sys/mman.h
2695 check_header sys/resource.h
2696 check_header sys/select.h
2697 check_header termios.h
2698 check_header vdpau/vdpau.h
2699 check_header vdpau/vdpau_x11.h
2700 check_header X11/extensions/XvMClib.h
2701
2702 check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2703
2704 if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2705      enabled_any $need_memalign ; then
2706     die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2707 fi
2708
2709 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2710 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2711
2712 # check for some common methods of building with pthread support
2713 # do this before the optional library checks as some of them require pthreads
2714 if ! disabled pthreads && ! enabled w32threads; then
2715     enable pthreads
2716     if check_func pthread_create; then
2717         :
2718     elif check_func pthread_create -pthread; then
2719         add_cflags -pthread
2720         add_extralibs -pthread
2721     elif check_func pthread_create -pthreads; then
2722         add_cflags -pthreads
2723         add_extralibs -pthreads
2724     elif check_func pthread_create -lpthreadGC2; then
2725         add_extralibs -lpthreadGC2
2726     elif ! check_lib pthread.h pthread_create -lpthread; then
2727         disable pthreads
2728     fi
2729 fi
2730
2731 for thread in $THREADS_LIST; do
2732     if enabled $thread; then
2733         test -n "$thread_type" &&
2734             die "ERROR: Only one thread type must be selected." ||
2735             thread_type="$thread"
2736     fi
2737 done
2738
2739 check_lib math.h sin -lm
2740 disabled vaapi || check_lib va/va.h vaInitialize -lva
2741
2742 check_mathfunc exp2
2743 check_mathfunc exp2f
2744 check_mathfunc llrint
2745 check_mathfunc llrintf
2746 check_mathfunc log2
2747 check_mathfunc log2f
2748 check_mathfunc lrint
2749 check_mathfunc lrintf
2750 check_mathfunc round
2751 check_mathfunc roundf
2752 check_mathfunc truncf
2753
2754 # these are off by default, so fail if requested and not available
2755 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2756 enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
2757 enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
2758                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2759                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2760 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2761 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2762 enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
2763 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2764 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2765 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
2766 enabled libopencv  && { check_lib opencv/cv.h cvCreateImageHeader $(pkg-config --libs opencv) ||
2767                         die "ERROR: libopencv not found"; }
2768 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2769 enabled librtmp    && { check_lib librtmp/rtmp.h RTMP_Socket $(pkg-config --libs librtmp) ||
2770                         die "ERROR: librtmp not found or RTMP_Socket() missing, librtmp version must be >= 2.2.f"; }
2771 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2772                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2773 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2774 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2775 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2776 enabled libvpx     && {
2777     enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
2778                                 die "ERROR: libvpx decoder version must be >=0.9.1"; }
2779     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
2780                                 die "ERROR: libvpx encoder version must be >=0.9.1"; } }
2781 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
2782                       { check_cpp_condition x264.h "X264_BUILD >= 99" ||
2783                         die "ERROR: libx264 version must be >= 0.99."; }
2784 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
2785 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2786 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2787
2788 # libdc1394 check
2789 if enabled libdc1394; then
2790     { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2791         enable libdc1394_2; } ||
2792     { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2793         enable libdc1394_1; } ||
2794     die "ERROR: No version of libdc1394 found "
2795 fi
2796
2797 SDL_CONFIG="${cross_prefix}sdl-config"
2798 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2799     sdl_cflags=$("${SDL_CONFIG}" --cflags)
2800     sdl_libs=$("${SDL_CONFIG}" --libs)
2801     check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2802     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2803     enable sdl &&
2804     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2805 fi
2806
2807 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2808
2809 if enabled network; then
2810     check_type "sys/types.h sys/socket.h" socklen_t
2811     check_type netdb.h "struct addrinfo"
2812     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
2813     check_type netinet/in.h "struct sockaddr_in6"
2814     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2815     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2816     # Prefer arpa/inet.h over winsock2
2817     if check_header arpa/inet.h ; then
2818         check_func closesocket
2819     elif check_header winsock2.h ; then
2820         check_func_headers winsock2.h closesocket -lws2 && \
2821             network_extralibs="-lws2" || \
2822         { check_func_headers winsock2.h closesocket -lws2_32 && \
2823             network_extralibs="-lws2_32"; }
2824         check_type ws2tcpip.h socklen_t
2825         check_type ws2tcpip.h "struct addrinfo"
2826         check_type ws2tcpip.h "struct ipv6_mreq"
2827         check_type ws2tcpip.h "struct sockaddr_in6"
2828         check_type ws2tcpip.h "struct sockaddr_storage"
2829         check_struct winsock2.h "struct sockaddr" sa_len
2830     else
2831         disable network
2832     fi
2833 fi
2834
2835 check_header linux/videodev.h
2836 check_header linux/videodev2.h
2837 check_header sys/videoio.h
2838
2839 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2840 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2841 # w32api 3.12 had it defined wrong
2842 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2843
2844 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2845 { check_header dev/bktr/ioctl_meteor.h &&
2846   check_header dev/bktr/ioctl_bt848.h; } ||
2847 { check_header machine/ioctl_meteor.h &&
2848   check_header machine/ioctl_bt848.h; } ||
2849 { check_header dev/video/meteor/ioctl_meteor.h &&
2850   check_header dev/video/bktr/ioctl_bt848.h; } ||
2851 check_header dev/ic/bt8xx.h
2852
2853 check_header sys/soundcard.h
2854 check_header soundcard.h
2855
2856 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2857
2858 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2859
2860 enabled x11grab                         &&
2861 check_header X11/Xlib.h                 &&
2862 check_header X11/extensions/XShm.h      &&
2863 check_header X11/extensions/Xfixes.h    &&
2864 check_func XOpenDisplay -lX11           &&
2865 check_func XShmCreateImage -lX11 -lXext &&
2866 check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2867
2868 if ! disabled vdpau && enabled vdpau_vdpau_h; then
2869 check_cpp_condition \
2870     vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2871     { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2872       disable vdpau; }
2873 fi
2874
2875 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2876
2877 # add some useful compiler flags if supported
2878 check_cflags -Wdeclaration-after-statement
2879 check_cflags -Wall
2880 check_cflags -Wno-parentheses
2881 check_cflags -Wno-switch
2882 check_cflags -Wdisabled-optimization
2883 check_cflags -Wpointer-arith
2884 check_cflags -Wredundant-decls
2885 check_cflags -Wno-pointer-sign
2886 check_cflags -Wcast-qual
2887 check_cflags -Wwrite-strings
2888 check_cflags -Wtype-limits
2889 check_cflags -Wundef
2890 check_cflags -Wmissing-prototypes
2891 enabled extra_warnings && check_cflags -Winline
2892
2893 # add some linker flags
2894 check_ldflags -Wl,--warn-common
2895 check_ldflags -Wl,--as-needed
2896 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'
2897 check_ldflags -Wl,-Bsymbolic
2898
2899 echo "X{};" > $TMPV
2900 if test_ldflags -Wl,--version-script,$TMPV; then
2901     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2902     check_cc <<EOF && enable symver_asm_label
2903 void ff_foo(void) __asm__ ("av_foo@VERSION");
2904 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2905 EOF
2906     check_cc <<EOF && enable symver_gnu_asm
2907 __asm__(".symver ff_foo,av_foo@VERSION");
2908 void ff_foo(void) {}
2909 EOF
2910 fi
2911
2912 if enabled small; then
2913     add_cflags $size_cflags
2914     optimizations="small"
2915 elif enabled optimizations; then
2916     add_cflags $speed_cflags
2917 else
2918     add_cflags $noopt_cflags
2919 fi
2920 check_cflags -fno-math-errno
2921 check_cflags -fno-signed-zeros
2922
2923 if enabled icc; then
2924     # Just warnings, no remarks
2925     check_cflags -w1
2926     # -wd: Disable following warnings
2927     # 144, 167, 556: -Wno-pointer-sign
2928     # 10006: ignoring unknown option -fno-signed-zeros
2929     # 10148: ignoring unknown option -Wno-parentheses
2930     # 10156: ignoring option '-W'; no argument required
2931     check_cflags -wd144,167,556,10006,10148,10156
2932     # 11030: Warning unknown option --as-needed
2933     # 10156: ignoring option '-export'; no argument required
2934     check_ldflags -wd10156,11030
2935     # Allow to compile with optimizations
2936     check_ldflags -march=$cpu
2937     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2938     enable ebp_available
2939     if enabled x86_32; then
2940         test ${icc_version%%.*} -ge 11 && \
2941             check_cflags -falign-stack=maintain-16-byte || \
2942             disable aligned_stack
2943     fi
2944 elif enabled ccc; then
2945     # disable some annoying warnings
2946     add_cflags -msg_disable cvtu32to64
2947     add_cflags -msg_disable embedcomment
2948     add_cflags -msg_disable needconstext
2949     add_cflags -msg_disable nomainieee
2950     add_cflags -msg_disable ptrmismatch1
2951     add_cflags -msg_disable unreachcode
2952 elif enabled gcc; then
2953     check_cflags -fno-tree-vectorize
2954     check_cflags -Werror=implicit-function-declaration
2955     check_cflags -Werror=missing-prototypes
2956 elif enabled llvm_gcc; then
2957     check_cflags -mllvm -stack-alignment=16
2958 elif enabled clang; then
2959     check_cflags -mllvm -stack-alignment=16
2960     check_cflags -Qunused-arguments
2961 elif enabled armcc; then
2962     # 2523: use of inline assembler is deprecated
2963     add_cflags -W${armcc_opt},--diag_suppress=2523
2964     add_cflags -W${armcc_opt},--diag_suppress=1207
2965 elif enabled tms470; then
2966     add_cflags -pds=824 -pds=837
2967 fi
2968
2969 enabled_any $THREADS_LIST      && enable threads
2970
2971 check_deps $CONFIG_LIST       \
2972            $CONFIG_EXTRA      \
2973            $HAVE_LIST         \
2974            $DECODER_LIST      \
2975            $ENCODER_LIST      \
2976            $HWACCEL_LIST      \
2977            $PARSER_LIST       \
2978            $BSF_LIST          \
2979            $DEMUXER_LIST      \
2980            $MUXER_LIST        \
2981            $FILTER_LIST       \
2982            $INDEV_LIST        \
2983            $OUTDEV_LIST       \
2984            $PROTOCOL_LIST     \
2985            $ACODEC_TESTS      \
2986            $VCODEC_TESTS      \
2987            $LAVF_TESTS        \
2988            $LAVFI_TESTS       \
2989            $SEEK_TESTS        \
2990
2991 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
2992
2993 echo "install prefix            $prefix"
2994 echo "source path               $source_path"
2995 echo "C compiler                $cc"
2996 echo "ARCH                      $arch ($cpu)"
2997 if test "$build_suffix" != ""; then
2998     echo "build suffix              $build_suffix"
2999 fi
3000 if test "$extra_version" != ""; then
3001     echo "version string suffix     $extra_version"
3002 fi
3003 echo "big-endian                ${bigendian-no}"
3004 echo "runtime cpu detection     ${runtime_cpudetect-no}"
3005 if enabled x86; then
3006     echo "yasm                      ${yasm-no}"
3007     echo "MMX enabled               ${mmx-no}"
3008     echo "MMX2 enabled              ${mmx2-no}"
3009     echo "3DNow! enabled            ${amd3dnow-no}"
3010     echo "3DNow! extended enabled   ${amd3dnowext-no}"
3011     echo "SSE enabled               ${sse-no}"
3012     echo "SSSE3 enabled             ${ssse3-no}"
3013     echo "CMOV enabled              ${cmov-no}"
3014     echo "CMOV is fast              ${fast_cmov-no}"
3015     echo "EBX available             ${ebx_available-no}"
3016     echo "EBP available             ${ebp_available-no}"
3017     echo "10 operands supported     ${ten_operands-no}"
3018 fi
3019 if enabled arm; then
3020     echo "ARMv5TE enabled           ${armv5te-no}"
3021     echo "ARMv6 enabled             ${armv6-no}"
3022     echo "ARMv6T2 enabled           ${armv6t2-no}"
3023     echo "ARM VFP enabled           ${armvfp-no}"
3024     echo "IWMMXT enabled            ${iwmmxt-no}"
3025     echo "NEON enabled              ${neon-no}"
3026 fi
3027 if enabled mips; then
3028     echo "MMI enabled               ${mmi-no}"
3029 fi
3030 if enabled ppc; then
3031     echo "AltiVec enabled           ${altivec-no}"
3032     echo "PPC 4xx optimizations     ${ppc4xx-no}"
3033     echo "dcbzl available           ${dcbzl-no}"
3034 fi
3035 if enabled sparc; then
3036     echo "VIS enabled               ${vis-no}"
3037 fi
3038 echo "debug symbols             ${debug-no}"
3039 echo "strip symbols             ${stripping-no}"
3040 echo "optimizations             ${optimizations-no}"
3041 echo "static                    ${static-no}"
3042 echo "shared                    ${shared-no}"
3043 echo "postprocessing support    ${postproc-no}"
3044 echo "new filter support        ${avfilter-no}"
3045 echo "network support           ${network-no}"
3046 echo "threading support         ${thread_type-no}"
3047 echo "SDL support               ${sdl-no}"
3048 echo "Sun medialib support      ${mlib-no}"
3049 echo "AVISynth enabled          ${avisynth-no}"
3050 echo "frei0r enabled            ${frei0r-no}"
3051 echo "libdc1394 support         ${libdc1394-no}"
3052 echo "libdirac enabled          ${libdirac-no}"
3053 echo "libfaac enabled           ${libfaac-no}"
3054 echo "libgsm enabled            ${libgsm-no}"
3055 echo "libmp3lame enabled        ${libmp3lame-no}"
3056 echo "libnut enabled            ${libnut-no}"
3057 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3058 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3059 echo "libopencv support         ${libopencv-no}"
3060 echo "libopenjpeg enabled       ${libopenjpeg-no}"
3061 echo "librtmp enabled           ${librtmp-no}"
3062 echo "libschroedinger enabled   ${libschroedinger-no}"
3063 echo "libspeex enabled          ${libspeex-no}"
3064 echo "libtheora enabled         ${libtheora-no}"
3065 echo "libvorbis enabled         ${libvorbis-no}"
3066 echo "libvpx enabled            ${libvpx-no}"
3067 echo "libx264 enabled           ${libx264-no}"
3068 echo "libxavs enabled           ${libxavs-no}"
3069 echo "libxvid enabled           ${libxvid-no}"
3070 echo "zlib enabled              ${zlib-no}"
3071 echo "bzlib enabled             ${bzlib-no}"
3072 echo
3073
3074 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3075     echo "Enabled ${type}s:"
3076     eval list=\$$(toupper $type)_LIST
3077     print_enabled '_*' $list | sort | pr -3 -t
3078     echo
3079 done
3080
3081 license="LGPL version 2.1 or later"
3082 if enabled nonfree; then
3083     license="nonfree and unredistributable"
3084 elif enabled gplv3; then
3085     license="GPL version 3 or later"
3086 elif enabled lgplv3; then
3087     license="LGPL version 3 or later"
3088 elif enabled gpl; then
3089     license="GPL version 2 or later"
3090 fi
3091
3092 echo "License: $license"
3093
3094 echo "Creating config.mak and config.h..."
3095
3096 # build tree in object directory if source path is different from current one
3097 if enabled source_path_used; then
3098     DIRS="
3099         doc
3100         libavcodec
3101         libavcodec/$arch
3102         libavcore
3103         libavdevice
3104         libavfilter
3105         libavfilter/$arch
3106         libavformat
3107         libavutil
3108         libavutil/$arch
3109         libpostproc
3110         libswscale
3111         libswscale/$arch
3112         tests
3113         tools
3114     "
3115     FILES="
3116         Makefile
3117         common.mak
3118         subdir.mak
3119         doc/texi2pod.pl
3120         libavcodec/Makefile
3121         libavcodec/${arch}/Makefile
3122         libavcore/Makefile
3123         libavdevice/Makefile
3124         libavfilter/Makefile
3125         libavfilter/${arch}/Makefile
3126         libavformat/Makefile
3127         libavutil/Makefile
3128         libpostproc/Makefile
3129         libswscale/Makefile
3130     "
3131     map 'mkdir -p $v' $DIRS;
3132     map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
3133 fi
3134
3135 enabled stripping || strip="echo skipping strip"
3136
3137 config_files="$TMPH config.mak"
3138
3139 cat > config.mak <<EOF
3140 # Automatically generated by configure - do not modify!
3141 ifndef FFMPEG_CONFIG_MAK
3142 FFMPEG_CONFIG_MAK=1
3143 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3144 prefix=$prefix
3145 LIBDIR=\$(DESTDIR)$libdir
3146 SHLIBDIR=\$(DESTDIR)$shlibdir
3147 INCDIR=\$(DESTDIR)$incdir
3148 BINDIR=\$(DESTDIR)$bindir
3149 DATADIR=\$(DESTDIR)$datadir
3150 MANDIR=\$(DESTDIR)$mandir
3151 SRC_PATH="$source_path"
3152 SRC_PATH_BARE=$source_path
3153 BUILD_ROOT="$PWD"
3154 CC_IDENT=$cc_ident
3155 ARCH=$arch
3156 CC=$cc
3157 AS=$as
3158 LD=$ld
3159 DEPCC=$dep_cc
3160 YASM=$yasmexe
3161 YASMDEP=$yasmexe
3162 AR=$ar
3163 RANLIB=$ranlib
3164 CP=cp -p
3165 LN_S=$ln_s
3166 STRIP=$strip
3167 CPPFLAGS=$CPPFLAGS
3168 CFLAGS=$CFLAGS
3169 ASFLAGS=$ASFLAGS
3170 CC_O=$CC_O
3171 LDFLAGS=$LDFLAGS
3172 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3173 SHFLAGS=$SHFLAGS
3174 YASMFLAGS=$YASMFLAGS
3175 BUILDSUF=$build_suffix
3176 FULLNAME=$FULLNAME
3177 LIBPREF=$LIBPREF
3178 LIBSUF=$LIBSUF
3179 LIBNAME=$LIBNAME
3180 SLIBPREF=$SLIBPREF
3181 SLIBSUF=$SLIBSUF
3182 EXESUF=$EXESUF
3183 EXTRA_VERSION=$extra_version
3184 DEPFLAGS=$DEPFLAGS
3185 CCDEP=$CCDEP
3186 ASDEP=$ASDEP
3187 CC_DEPFLAGS=$CC_DEPFLAGS
3188 AS_DEPFLAGS=$AS_DEPFLAGS
3189 HOSTCC=$host_cc
3190 HOSTCFLAGS=$host_cflags
3191 HOSTEXESUF=$HOSTEXESUF
3192 HOSTLDFLAGS=$host_ldflags
3193 HOSTLIBS=$host_libs
3194 TARGET_EXEC=$target_exec
3195 TARGET_PATH=$target_path
3196 SDL_LIBS=$sdl_libs
3197 SDL_CFLAGS=$sdl_cflags
3198 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3199 EXTRALIBS=$extralibs
3200 INSTALL=install
3201 LIBTARGET=${LIBTARGET}
3202 SLIBNAME=${SLIBNAME}
3203 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3204 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3205 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3206 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3207 SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
3208 SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
3209 SAMPLES=$samples
3210 EOF
3211
3212 get_version(){
3213     name=$1
3214     file=$source_path/$2
3215     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3216     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3217     lcname=$(tolower $name)
3218     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3219     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3220 }
3221
3222 get_version LIBSWSCALE  libswscale/swscale.h
3223 get_version LIBPOSTPROC libpostproc/postprocess.h
3224 get_version LIBAVCODEC  libavcodec/avcodec.h
3225 get_version LIBAVCORE   libavcore/avcore.h
3226 get_version LIBAVDEVICE libavdevice/avdevice.h
3227 get_version LIBAVFORMAT libavformat/avformat.h
3228 get_version LIBAVUTIL   libavutil/avutil.h
3229 get_version LIBAVFILTER libavfilter/avfilter.h
3230
3231 cat > $TMPH <<EOF
3232 /* Automatically generated by configure - do not modify! */
3233 #ifndef FFMPEG_CONFIG_H
3234 #define FFMPEG_CONFIG_H
3235 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3236 #define FFMPEG_LICENSE "$(c_escape $license)"
3237 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3238 #define CC_TYPE "$cc_type"
3239 #define CC_VERSION $cc_version
3240 #define restrict $_restrict
3241 #define ASMALIGN(ZEROBITS) ".p2align " #ZEROBITS "\\n\\t"
3242 #define EXTERN_PREFIX "${extern_prefix}"
3243 #define EXTERN_ASM ${extern_prefix}
3244 #define SLIBSUF "$SLIBSUF"
3245 EOF
3246
3247 test -n "$malloc_prefix" &&
3248     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3249
3250 if enabled small || disabled optimizations; then
3251     echo "#undef  av_always_inline"  >> $TMPH
3252     if enabled small; then
3253         echo "#define av_always_inline inline"  >> $TMPH
3254     else
3255         echo "#define av_always_inline av_unused"  >> $TMPH
3256     fi
3257 fi
3258
3259 if enabled yasm; then
3260     append config_files $TMPASM
3261     printf '' >$TMPASM
3262 fi
3263
3264 print_config ARCH_   "$config_files" $ARCH_LIST
3265 print_config HAVE_   "$config_files" $HAVE_LIST
3266 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
3267                                      $CONFIG_EXTRA      \
3268                                      $DECODER_LIST      \
3269                                      $ENCODER_LIST      \
3270                                      $HWACCEL_LIST      \
3271                                      $PARSER_LIST       \
3272                                      $BSF_LIST          \
3273                                      $DEMUXER_LIST      \
3274                                      $MUXER_LIST        \
3275                                      $FILTER_LIST       \
3276                                      $PROTOCOL_LIST     \
3277                                      $INDEV_LIST        \
3278                                      $OUTDEV_LIST       \
3279
3280 cat >>config.mak <<EOF
3281 ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3282 VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3283 LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3284 LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3285 SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3286 EOF
3287
3288 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3289 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3290
3291 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3292 cp_if_changed $TMPH config.h
3293 touch .config
3294
3295 enabled yasm && cp_if_changed $TMPASM config.asm
3296
3297 cat > $TMPH <<EOF
3298 /* Generated by ffconf */
3299 #ifndef AVUTIL_AVCONFIG_H
3300 #define AVUTIL_AVCONFIG_H
3301 EOF
3302
3303 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3304
3305 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3306
3307 cp_if_changed $TMPH libavutil/avconfig.h
3308
3309 test -n "$WARNINGS" && printf "\n$WARNINGS"
3310
3311 # build pkg-config files
3312
3313 pkgconfig_generate(){
3314 name=$1
3315 shortname=${name#lib}${build_suffix}
3316 comment=$2
3317 version=$3
3318 libs=$4
3319 requires=$5
3320 enabled ${name#lib} || return 0
3321 cat <<EOF > $name/$name.pc
3322 prefix=$prefix
3323 exec_prefix=\${prefix}
3324 libdir=$libdir
3325 includedir=$incdir
3326
3327 Name: $name
3328 Description: $comment
3329 Version: $version
3330 Requires: $(enabled shared || echo $requires)
3331 Requires.private: $(enabled shared && echo $requires)
3332 Conflicts:
3333 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3334 Libs.private: $(enabled shared && echo $libs)
3335 Cflags: -I\${includedir}
3336 EOF
3337 cat <<EOF > $name/$name-uninstalled.pc
3338 prefix=
3339 exec_prefix=
3340 libdir=\${pcfiledir}
3341 includedir=${source_path}
3342
3343 Name: $name
3344 Description: $comment
3345 Version: $version
3346 Requires: $requires
3347 Conflicts:
3348 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3349 Cflags: -I\${includedir}
3350 EOF
3351 }
3352
3353 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3354 pkgconfig_generate libavcore "FFmpeg multimedia shared core utilities library" "$LIBAVCORE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
3355 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavcore = $LIBAVCORE_VERSION"
3356 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3357 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3358 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavcore = $LIBAVCORE_VERSION"
3359 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3360 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"