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