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