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