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