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