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