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