libcelt: configure: distinguish not found and too old.
[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 pan_filter_deps="swresample"
1663 scale_filter_deps="swscale"
1664 tinterlace_filter_deps="gpl"
1665 yadif_filter_deps="gpl"
1666
1667 # libraries
1668 avdevice_deps="avcodec avformat"
1669 avformat_deps="avcodec"
1670 postproc_deps="gpl"
1671
1672 # programs
1673 avconv_deps="avcodec avformat swscale"
1674 ffplay_deps="avcodec avformat swscale sdl"
1675 ffplay_select="buffersink_filter rdft"
1676 ffprobe_deps="avcodec avformat"
1677 ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer !shared"
1678 ffserver_extralibs='$ldl'
1679 ffmpeg_deps="avcodec avformat swscale swresample"
1680 ffmpeg_select="buffersink_filter"
1681
1682 doc_deps="texi2html"
1683
1684 # tests
1685
1686 test_deps(){
1687     suf1=$1
1688     suf2=$2
1689     shift 2
1690     for v; do
1691         dep=${v%=*}
1692         tests=${v#*=}
1693         for name in ${tests}; do
1694             append ${name}_test_deps ${dep}$suf1 ${dep}$suf2
1695         done
1696     done
1697 }
1698
1699 mxf_d10_test_deps="avfilter"
1700 seek_lavf_mxf_d10_test_deps="mxf_d10_test"
1701
1702 test_deps _encoder _decoder                                             \
1703     adpcm_ima_qt                                                        \
1704     adpcm_ima_wav                                                       \
1705     adpcm_ms                                                            \
1706     adpcm_swf                                                           \
1707     adpcm_yamaha=adpcm_yam                                              \
1708     alac                                                                \
1709     asv1                                                                \
1710     asv2                                                                \
1711     bmp                                                                 \
1712     dnxhd="dnxhd_1080i dnxhd_720p dnxhd_720p_rd"                        \
1713     dvvideo="dv dv_411 dv50"                                            \
1714     ffv1                                                                \
1715     flac                                                                \
1716     flashsv                                                             \
1717     flv                                                                 \
1718     adpcm_g726=g726                                                     \
1719     gif                                                                 \
1720     h261                                                                \
1721     h263="h263 h263p"                                                   \
1722     huffyuv                                                             \
1723     jpegls                                                              \
1724     mjpeg="jpg mjpeg ljpeg"                                             \
1725     mp2                                                                 \
1726     mpeg1video="mpeg mpeg1b"                                            \
1727     mpeg2video="mpeg2 mpeg2_422 mpeg2_idct_int mpeg2_ilace mpeg2_ivlc_qprd" \
1728     mpeg2video="mpeg2thread mpeg2thread_ilace"                          \
1729     mpeg4="mpeg4 mpeg4_adap mpeg4_qpel mpeg4_qprd mpeg4adv mpeg4nr"     \
1730     mpeg4="mpeg4thread error rc"                                        \
1731     msmpeg4v3=msmpeg4                                                   \
1732     msmpeg4v2                                                           \
1733     pbm=pbmpipe                                                         \
1734     pcx                                                                 \
1735     pgm="pgm pgmpipe"                                                   \
1736     png                                                                 \
1737     ppm="ppm ppmpipe"                                                   \
1738     rawvideo="rgb yuv"                                                  \
1739     roq                                                                 \
1740     rv10                                                                \
1741     rv20                                                                \
1742     sgi                                                                 \
1743     snow="snow snowll"                                                  \
1744     svq1                                                                \
1745     targa=tga                                                           \
1746     tiff                                                                \
1747     wmav1                                                               \
1748     wmav2                                                               \
1749     wmv1                                                                \
1750     wmv2                                                                \
1751
1752 test_deps _muxer _demuxer                                               \
1753     aiff                                                                \
1754     pcm_alaw=alaw                                                       \
1755     asf                                                                 \
1756     au                                                                  \
1757     avi                                                                 \
1758     dv=dv_fmt                                                           \
1759     ffm                                                                 \
1760     flv=flv_fmt                                                         \
1761     gxf                                                                 \
1762     matroska=mkv                                                        \
1763     mmf                                                                 \
1764     mov                                                                 \
1765     pcm_mulaw=mulaw                                                     \
1766     mxf="mxf mxf_d10"                                                   \
1767     nut                                                                 \
1768     ogg                                                                 \
1769     rawvideo=pixfmt                                                     \
1770     rm                                                                  \
1771     swf                                                                 \
1772     mpegts=ts                                                           \
1773     voc                                                                 \
1774     wav                                                                 \
1775     yuv4mpegpipe=yuv4mpeg                                               \
1776
1777 ac3_fixed_test_deps="ac3_fixed_encoder ac3_decoder rm_muxer rm_demuxer"
1778 mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1779
1780 # default parameters
1781
1782 logfile="config.log"
1783
1784 # installation paths
1785 prefix_default="/usr/local"
1786 bindir_default='${prefix}/bin'
1787 datadir_default='${prefix}/share/ffmpeg'
1788 incdir_default='${prefix}/include'
1789 libdir_default='${prefix}/lib'
1790 mandir_default='${prefix}/share/man'
1791 shlibdir_default="$libdir_default"
1792
1793 # toolchain
1794 ar_default="ar"
1795 cc_default="gcc"
1796 cxx_default="g++"
1797 cc_version=\"unknown\"
1798 host_cc_default="gcc"
1799 install="install"
1800 ln_s="ln -sf"
1801 nm_default="nm"
1802 objformat="elf"
1803 pkg_config_default=pkg-config
1804 ranlib="ranlib"
1805 strip_default="strip"
1806 yasmexe_default="yasm"
1807
1808 nm_opts='-g'
1809 nogas=":"
1810
1811 # machine
1812 arch_default=$(uname -m)
1813 cpu="generic"
1814
1815 # OS
1816 target_os_default=$(tolower $(uname -s))
1817 host_os=$target_os_default
1818
1819 # configurable options
1820 enable $PROGRAM_LIST
1821
1822 enable avcodec
1823 enable avdevice
1824 enable avfilter
1825 enable avformat
1826 enable avutil
1827 enable postproc
1828 enable stripping
1829 enable swresample
1830 enable swscale
1831
1832 enable asm
1833 enable debug
1834 enable doc
1835 enable fastdiv
1836 enable network
1837 enable optimizations
1838 enable safe_bitstream_reader
1839 enable static
1840 enable swscale_alpha
1841
1842 # build settings
1843 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1844 FFSERVERLDFLAGS=-Wl,-E
1845 LIBPREF="lib"
1846 LIBSUF=".a"
1847 FULLNAME='$(NAME)$(BUILDSUF)'
1848 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1849 SLIBPREF="lib"
1850 SLIBSUF=".so"
1851 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1852 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1853 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1854 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1855 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
1856 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
1857
1858 AS_O='-o $@'
1859 CC_O='-o $@'
1860 CXX_O='-o $@'
1861
1862 host_cflags='-D_ISOC99_SOURCE -O3 -g'
1863 host_libs='-lm'
1864
1865 target_path='$(CURDIR)'
1866
1867 # since the object filename is not given with the -MM flag, the compiler
1868 # is only able to print the basename, and we must add the path ourselves
1869 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1870 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1871
1872 # find source path
1873 if test -f configure; then
1874     source_path=.
1875 else
1876     source_path=$(cd $(dirname "$0"); pwd)
1877     echo "$source_path" | grep -q '[[:blank:]]' &&
1878         die "Out of tree builds are impossible with whitespace in source path."
1879     test -e "$source_path/config.h" &&
1880         die "Out of tree builds are impossible with config.h in source dir."
1881 fi
1882
1883 for v in "$@"; do
1884     r=${v#*=}
1885     l=${v%"$r"}
1886     r=$(sh_quote "$r")
1887     FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1888 done
1889
1890 find_things(){
1891     thing=$1
1892     pattern=$2
1893     file=$source_path/$3
1894     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1895 }
1896
1897 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
1898 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1899 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1900 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
1901 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
1902 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
1903 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
1904 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
1905 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1906 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1907 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1908
1909 ALL_COMPONENTS="
1910     $BSF_LIST
1911     $DECODER_LIST
1912     $DEMUXER_LIST
1913     $ENCODER_LIST
1914     $FILTER_LIST
1915     $HWACCEL_LIST
1916     $INDEV_LIST
1917     $MUXER_LIST
1918     $OUTDEV_LIST
1919     $PARSER_LIST
1920     $PROTOCOL_LIST
1921 "
1922
1923 find_tests(){
1924     map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1925 }
1926
1927 ACODEC_TESTS=$(find_tests acodec)
1928 VCODEC_TESTS=$(find_tests vsynth1)
1929 LAVF_TESTS=$(find_tests lavf)
1930 LAVFI_TESTS=$(find_tests lavfi)
1931 SEEK_TESTS=$(find_tests seek seek_)
1932
1933 ALL_TESTS="$ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS"
1934
1935 pcm_test_deps=$(map 'echo ${v%_*}_decoder $v' $(filter pcm_* $ENCODER_LIST))
1936
1937 for n in $COMPONENT_LIST; do
1938     v=$(toupper ${n%s})_LIST
1939     eval enable \$$v
1940     eval ${n}_if_any="\$$v"
1941 done
1942
1943 enable $ARCH_EXT_LIST $ALL_TESTS
1944
1945 die_unknown(){
1946     echo "Unknown option \"$1\"."
1947     echo "See $0 --help for available options."
1948     exit 1
1949 }
1950
1951 show_list() {
1952     suffix=_$1
1953     shift
1954     echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1955     exit 0
1956 }
1957
1958 for opt do
1959     optval="${opt#*=}"
1960     case "$opt" in
1961     --extra-ldflags=*) add_ldflags $optval
1962     ;;
1963     --extra-libs=*) add_extralibs $optval
1964     ;;
1965     --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1966     ;;
1967     --enable-debug=*) debuglevel="$optval"
1968     ;;
1969     --disable-everything)
1970     map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1971     ;;
1972     --enable-*=*|--disable-*=*)
1973     eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1974     is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1975     eval list=\$$(toupper $thing)_LIST
1976     name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1977     $action $(filter "$name" $list)
1978     ;;
1979     --enable-?*|--disable-?*)
1980     eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1981     if is_in $option $COMPONENT_LIST; then
1982         test $action = disable && action=unset
1983         eval $action \$$(toupper ${option%s})_LIST
1984     elif is_in $option $CMDLINE_SELECT; then
1985         $action $option
1986     else
1987         die_unknown $opt
1988     fi
1989     ;;
1990     --list-*)
1991         NAME="${opt#--list-}"
1992         is_in $NAME $COMPONENT_LIST || die_unknown $opt
1993         NAME=${NAME%s}
1994         eval show_list $NAME \$$(toupper $NAME)_LIST
1995     ;;
1996     --help|-h) show_help
1997     ;;
1998     *)
1999     optname="${opt%%=*}"
2000     optname="${optname#--}"
2001     optname=$(echo "$optname" | sed 's/-/_/g')
2002     if is_in $optname $CMDLINE_SET; then
2003         eval $optname='$optval'
2004     elif is_in $optname $CMDLINE_APPEND; then
2005         append $optname "$optval"
2006     else
2007          die_unknown $opt
2008     fi
2009     ;;
2010     esac
2011 done
2012
2013 disabled logging && logfile=/dev/null
2014
2015 echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2016 set >> $logfile
2017
2018 test -n "$cross_prefix" && enable cross_compile
2019
2020 if enabled cross_compile; then
2021     test -n "$arch" && test -n "$target_os" ||
2022         die "Must specify target arch and OS when cross-compiling"
2023 fi
2024
2025 set_default arch target_os
2026
2027 ar_default="${cross_prefix}${ar_default}"
2028 cc_default="${cross_prefix}${cc_default}"
2029 cxx_default="${cross_prefix}${cxx_default}"
2030 nm_default="${cross_prefix}${nm_default}"
2031 pkg_config_default="${cross_prefix}${pkg_config_default}"
2032 ranlib="${cross_prefix}${ranlib}"
2033 strip_default="${cross_prefix}${strip_default}"
2034
2035 sysinclude_default="${sysroot}/usr/include"
2036
2037 set_default cc cxx nm pkg_config strip sysinclude yasmexe
2038 enabled cross_compile || host_cc_default=$cc
2039 set_default host_cc
2040
2041 if ! $pkg_config --version >/dev/null 2>&1; then
2042     warn "$pkg_config not found, library detection may fail."
2043     pkg_config=false
2044 fi
2045
2046 exesuf() {
2047     case $1 in
2048         mingw32*|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2049     esac
2050 }
2051
2052 EXESUF=$(exesuf $target_os)
2053 HOSTEXESUF=$(exesuf $host_os)
2054
2055 # set temporary file name
2056 : ${TMPDIR:=$TEMPDIR}
2057 : ${TMPDIR:=$TMP}
2058 : ${TMPDIR:=/tmp}
2059
2060 if ! check_cmd mktemp -u XXXXXX; then
2061     # simple replacement for missing mktemp
2062     # NOT SAFE FOR GENERAL USE
2063     mktemp(){
2064         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2065     }
2066 fi
2067
2068 tmpfile(){
2069     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2070         (set -C; exec > $tmp) 2>/dev/null ||
2071         die "Unable to create temporary file in $TMPDIR."
2072     append TMPFILES $tmp
2073     eval $1=$tmp
2074 }
2075
2076 trap 'rm -f -- $TMPFILES' EXIT
2077
2078 tmpfile TMPASM .asm
2079 tmpfile TMPC   .c
2080 tmpfile TMPCPP .cpp
2081 tmpfile TMPE   $EXESUF
2082 tmpfile TMPH   .h
2083 tmpfile TMPO   .o
2084 tmpfile TMPS   .S
2085 tmpfile TMPSH  .sh
2086 tmpfile TMPV   .ver
2087
2088 unset -f mktemp
2089
2090 chmod +x $TMPE
2091
2092 # make sure we can execute files in $TMPDIR
2093 cat > $TMPSH 2>> $logfile <<EOF
2094 #! /bin/sh
2095 EOF
2096 chmod +x $TMPSH >> $logfile 2>&1
2097 if ! $TMPSH >> $logfile 2>&1; then
2098     cat <<EOF
2099 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2100 variable to another directory and make sure that it is not mounted noexec.
2101 EOF
2102     die "Sanity test failed."
2103 fi
2104
2105 filter_asflags=echo
2106 filter_cflags=echo
2107 filter_cppflags=echo
2108
2109 if   $cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2110     cc_type=llvm_gcc
2111     cc_version=__VERSION__
2112     gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
2113     cc_ident="llvm-gcc $($cc -dumpversion) $gcc_extra_ver"
2114     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2115     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2116     speed_cflags='-O3'
2117     size_cflags='-Os'
2118 elif $cc -v 2>&1 | grep -qi ^gcc; then
2119     cc_type=gcc
2120     cc_version=__VERSION__
2121     gcc_version=$($cc --version | head -n1)
2122     gcc_basever=$($cc -dumpversion)
2123     gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2124     gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2125     cc_ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2126     if ! $cc -dumpversion | grep -q '^2\.'; then
2127         CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2128         AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2129     fi
2130     speed_cflags='-O3'
2131     size_cflags='-Os'
2132 elif $cc --version 2>/dev/null | grep -q Intel; then
2133     cc_type=icc
2134     cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
2135     cc_ident=$($cc --version | head -n1)
2136     icc_version=$($cc -dumpversion)
2137     CC_DEPFLAGS='-MMD'
2138     AS_DEPFLAGS='-MMD'
2139     speed_cflags='-O3'
2140     size_cflags='-Os'
2141     noopt_cflags='-O1'
2142 elif $cc -v 2>&1 | grep -q xlc; then
2143     cc_type=xlc
2144     cc_version="AV_STRINGIFY(__IBMC__)"
2145     cc_ident=$($cc -qversion 2>/dev/null | head -n1)
2146     speed_cflags='-O5'
2147     size_cflags='-O5 -qcompact'
2148 elif $cc -V 2>/dev/null | grep -q Compaq; then
2149     cc_type=ccc
2150     cc_version="AV_STRINGIFY(__DECC_VER)"
2151     cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3)
2152     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
2153     debuglevel=3
2154     add_ldflags -Wl,-z,now # calls to libots crash without this
2155     speed_cflags='-fast'
2156     size_cflags='-O1'
2157 elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
2158     test -d "$sysroot" || die "No valid sysroot specified."
2159     cc_type=armcc
2160     cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
2161     cc_ident=$($cc --vsn | head -n1)
2162     armcc_conf="$PWD/armcc.conf"
2163     $cc --arm_linux_configure                 \
2164         --arm_linux_config_file="$armcc_conf" \
2165         --configure_sysroot="$sysroot"        \
2166         --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2167         die "Error creating armcc configuration file."
2168     $cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2169     cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
2170     as_default="${cross_prefix}gcc"
2171     CC_DEPFLAGS='-MMD'
2172     AS_DEPFLAGS='-MMD'
2173     speed_cflags='-O3'
2174     size_cflags='-Os'
2175     filter_asflags="filter_out -W${armcc_opt}*"
2176 elif $cc -version 2>/dev/null | grep -q TMS470; then
2177     cc_type=tms470
2178     cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
2179     cc_ident=$($cc -version | head -n1 | tr -s ' ')
2180     cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
2181     CC_O='-fr=$(@D)'
2182     as_default="${cross_prefix}gcc"
2183     ld_default="${cross_prefix}gcc"
2184     TMPO=$(basename $TMPC .c).o
2185     append TMPFILES $TMPO
2186     add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
2187     CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
2188     AS_DEPFLAGS='-MMD'
2189     speed_cflags='-O3 -mf=5'
2190     size_cflags='-O3 -mf=2'
2191     filter_cflags=tms470_flags
2192     tms470_flags(){
2193         for flag; do
2194             case $flag in
2195                 -march=*|-mcpu=*)
2196                     case "${flag#*=}" in
2197                         armv7-a|cortex-a*)      echo -mv=7a8 ;;
2198                         armv7-r|cortex-r*)      echo -mv=7r4 ;;
2199                         armv7-m|cortex-m*)      echo -mv=7m3 ;;
2200                         armv6*|arm11*)          echo -mv=6   ;;
2201                         armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2202                                                 echo -mv=5e  ;;
2203                         armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2204                     esac
2205                     ;;
2206                 -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2207                 -mfpu=vfp)      echo --float_support=vfpv2        ;;
2208                 -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2209                 -msoft-float)   echo --float_support=vfplib       ;;
2210                 -O[0-3]|-mf=*)  echo $flag                        ;;
2211                 -g)             echo -g -mn                       ;;
2212                 -pds=*)         echo $flag                        ;;
2213             esac
2214         done
2215     }
2216 elif $cc -v 2>&1 | grep -q clang; then
2217     cc_type=clang
2218     $cc -dM -E $TMPC | grep -q __clang_version__ &&
2219         cc_version=__clang_version__ || cc_version=__VERSION__
2220     cc_ident=$($cc --version | head -n1)
2221     CC_DEPFLAGS='-MMD'
2222     AS_DEPFLAGS='-MMD'
2223     speed_cflags='-O3'
2224     size_cflags='-Os'
2225 elif $cc -V 2>&1 | grep -q Sun; then
2226     cc_type=suncc
2227     cc_version="AV_STRINGIFY(__SUNPRO_C)"
2228     cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2229     DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2230     DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
2231     add_ldflags -xc99
2232     speed_cflags='-O5'
2233     size_cflags='-O5 -xspace'
2234     filter_cflags=suncc_flags
2235     suncc_flags(){
2236         for flag; do
2237             case $flag in
2238                 -march=*|-mcpu=*)
2239                     case "${flag#*=}" in
2240                         native)                   echo -xtarget=native       ;;
2241                         v9|niagara)               echo -xarch=sparc          ;;
2242                         ultrasparc)               echo -xarch=sparcvis       ;;
2243                         ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2244                         i586|pentium)             echo -xchip=pentium        ;;
2245                         i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2246                         pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2247                         pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2248                         pentium4*)          echo -xtarget=pentium4           ;;
2249                         prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2250                         *-sse3)             echo -xarch=sse3                 ;;
2251                         core2)              echo -xarch=ssse3 -xchip=core2   ;;
2252                         amdfam10|barcelona)       echo -xarch=sse4_1         ;;
2253                         athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
2254                         k8|opteron|athlon64|athlon-fx)
2255                                                   echo -xarch=sse2a          ;;
2256                         athlon*)                  echo -xarch=pentium_proa   ;;
2257                     esac
2258                     ;;
2259                 -std=c99)             echo -xc99              ;;
2260                 -fomit-frame-pointer) echo -xregs=frameptr    ;;
2261                 -fPIC)                echo -KPIC -xcode=pic32 ;;
2262                 -W*,*)                echo $flag              ;;
2263                 -f*-*|-W*)                                    ;;
2264                 *)                    echo $flag              ;;
2265             esac
2266         done
2267     }
2268 elif $cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2269     cc_type=pathscale
2270     cc_version=__PATHSCALE__
2271     cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2272     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2273     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2274     speed_cflags='-O2'
2275     size_cflags='-Os'
2276     filter_cflags='filter_out -Wdisabled-optimization'
2277 elif $cc -v 2>&1 | grep -q Open64; then
2278     cc_type=open64
2279     cc_version=__OPEN64__
2280     cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2281     CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2282     AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2283     speed_cflags='-O2'
2284     size_cflags='-Os'
2285     filter_cflags='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2286 fi
2287
2288 test -n "$cc_type" && enable $cc_type ||
2289     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2290
2291 : ${as_default:=$cc}
2292 : ${dep_cc_default:=$cc}
2293 : ${ld_default:=$cc}
2294 set_default ar as dep_cc ld
2295
2296 test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
2297 test -n "$CXX_DEPFLAGS" || CXXDEP=$DEPEND_CMD
2298 test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
2299
2300 add_cflags $extra_cflags
2301 add_cxxflags $extra_cxxflags
2302 add_asflags $extra_cflags
2303
2304 if test -n "$sysroot"; then
2305     case "$cc_type" in
2306         gcc|llvm_gcc|clang)
2307             add_cppflags --sysroot="$sysroot"
2308             add_ldflags --sysroot="$sysroot"
2309         ;;
2310         tms470)
2311             add_cppflags -I"$sysinclude"
2312             add_ldflags  --sysroot="$sysroot"
2313         ;;
2314     esac
2315 fi
2316
2317 if test "$cpu" = host; then
2318     enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2319
2320     case "$cc_type" in
2321         gcc|llvm_gcc)
2322             check_native(){
2323                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2324                 sed -n "/cc1.*$1=/{
2325                             s/.*$1=\\([^ ]*\\).*/\\1/
2326                             p
2327                             q
2328                         }" $TMPE
2329             }
2330             cpu=$(check_native -march || check_native -mcpu)
2331         ;;
2332     esac
2333
2334     test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2335 fi
2336
2337 # Deal with common $arch aliases
2338 case "$arch" in
2339     arm*|iPad*)
2340         arch="arm"
2341     ;;
2342     mips|mipsel|IP*)
2343         arch="mips"
2344     ;;
2345     mips64*)
2346         arch="mips"
2347         subarch="mips64"
2348     ;;
2349     parisc|hppa)
2350         arch="parisc"
2351     ;;
2352     parisc64|hppa64)
2353         arch="parisc"
2354         subarch="parisc64"
2355     ;;
2356     "Power Macintosh"|ppc|powerpc|ppc64|powerpc64)
2357         arch="ppc"
2358     ;;
2359     s390|s390x)
2360         arch="s390"
2361     ;;
2362     sh4|sh)
2363         arch="sh4"
2364     ;;
2365     sun4u|sparc64)
2366         arch="sparc"
2367         subarch="sparc64"
2368     ;;
2369     i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
2370         arch="x86"
2371     ;;
2372 esac
2373
2374 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2375 enable $arch
2376
2377 # Add processor-specific flags
2378 if test "$cpu" = generic; then
2379     : do nothing
2380 elif enabled ppc; then
2381
2382     case $(tolower $cpu) in
2383         601|ppc601|powerpc601)
2384             cpuflags="-mcpu=601"
2385             disable altivec
2386         ;;
2387         603*|ppc603*|powerpc603*)
2388             cpuflags="-mcpu=603"
2389             disable altivec
2390         ;;
2391         604*|ppc604*|powerpc604*)
2392             cpuflags="-mcpu=604"
2393             disable altivec
2394         ;;
2395         g3|75*|ppc75*|powerpc75*)
2396             cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2397             disable altivec
2398         ;;
2399         g4|745*|ppc745*|powerpc745*)
2400             cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2401         ;;
2402         74*|ppc74*|powerpc74*)
2403             cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2404         ;;
2405         g5|970|ppc970|powerpc970|power4*)
2406             cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2407         ;;
2408         cell)
2409             cpuflags="-mcpu=cell"
2410             enable ldbrx
2411         ;;
2412         e500v2)
2413             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2414             disable altivec
2415         ;;
2416         e500)
2417             cpuflags="-mcpu=8540 -mhard-float"
2418             disable altivec
2419         ;;
2420     esac
2421
2422 elif enabled x86; then
2423
2424     case $cpu in
2425         i[345]86|pentium)
2426             cpuflags="-march=$cpu"
2427             disable mmx
2428         ;;
2429         # targets that do NOT support conditional mov (cmov)
2430         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2431             cpuflags="-march=$cpu"
2432             disable cmov
2433         ;;
2434         # targets that do support conditional mov (cmov)
2435         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom)
2436             cpuflags="-march=$cpu"
2437             enable cmov
2438             enable fast_cmov
2439         ;;
2440         # targets that do support conditional mov but on which it's slow
2441         pentium4|pentium4m|prescott|nocona)
2442             cpuflags="-march=$cpu"
2443             enable cmov
2444             disable fast_cmov
2445         ;;
2446     esac
2447
2448 elif enabled sparc; then
2449
2450     case $cpu in
2451         niagara)
2452             cpuflags="-mcpu=$cpu"
2453             disable vis
2454         ;;
2455         sparc64)
2456             cpuflags="-mcpu=v9"
2457         ;;
2458     esac
2459
2460 elif enabled arm; then
2461
2462     case $cpu in
2463         armv*)
2464             cpuflags="-march=$cpu"
2465             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2466         ;;
2467         *)
2468             cpuflags="-mcpu=$cpu"
2469             case $cpu in
2470                 cortex-a*)                               subarch=armv7a  ;;
2471                 cortex-r*)                               subarch=armv7r  ;;
2472                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
2473                 arm11*)                                  subarch=armv6   ;;
2474                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2475                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
2476             esac
2477         ;;
2478     esac
2479
2480 elif enabled alpha; then
2481
2482     enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2483
2484 elif enabled bfin; then
2485
2486     cpuflags="-mcpu=$cpu"
2487
2488 elif enabled mips; then
2489
2490     cpuflags="-march=$cpu"
2491
2492 elif enabled avr32; then
2493
2494     case $cpu in
2495         ap7[02]0[0-2])
2496             subarch="avr32_ap"
2497             cpuflags="-mpart=$cpu"
2498         ;;
2499         ap)
2500             subarch="avr32_ap"
2501             cpuflags="-march=$cpu"
2502         ;;
2503         uc3[ab]*)
2504             subarch="avr32_uc"
2505             cpuflags="-mcpu=$cpu"
2506         ;;
2507         uc)
2508             subarch="avr32_uc"
2509             cpuflags="-march=$cpu"
2510         ;;
2511     esac
2512
2513 fi
2514
2515 add_cflags $cpuflags
2516 add_asflags $cpuflags
2517
2518 # compiler sanity check
2519 check_exec <<EOF
2520 int main(void){ return 0; }
2521 EOF
2522 if test "$?" != 0; then
2523     echo "$cc is unable to create an executable file."
2524     if test -z "$cross_prefix" && ! enabled cross_compile ; then
2525         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2526         echo "Only do this if you know what cross compiling means."
2527     fi
2528     die "C compiler test failed."
2529 fi
2530
2531 add_cppflags -D_ISOC99_SOURCE
2532 add_cxxflags -D__STDC_CONSTANT_MACROS
2533 check_cflags -std=c99
2534 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2535 #include <stdlib.h>
2536 EOF
2537 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2538 #include <stdlib.h>
2539 EOF
2540
2541 check_host_cflags -std=c99
2542 check_host_cflags -Wall
2543
2544 case "$arch" in
2545     alpha|ia64|mips|parisc|sparc)
2546         spic=$shared
2547     ;;
2548     x86)
2549         subarch="x86_32"
2550         check_cc <<EOF && subarch="x86_64"
2551         int test[(int)sizeof(char*) - 7];
2552 EOF
2553         if test "$subarch" = "x86_64"; then
2554             spic=$shared
2555         fi
2556     ;;
2557     ppc)
2558         check_cc <<EOF && subarch="ppc64"
2559         int test[(int)sizeof(char*) - 7];
2560 EOF
2561     ;;
2562 esac
2563
2564 enable $subarch
2565 enabled spic && enable pic
2566
2567 # OS specific
2568 case $target_os in
2569     haiku)
2570         prefix_default="/boot/common"
2571         network_extralibs="-lnetwork"
2572         host_libs=
2573         ;;
2574     sunos)
2575         FFSERVERLDFLAGS=""
2576         SHFLAGS='-shared -Wl,-h,$$(@F)'
2577         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2578         network_extralibs="-lsocket -lnsl"
2579         add_cppflags -D__EXTENSIONS__
2580         # When using suncc to build, the Solaris linker will mark
2581         # an executable with each instruction set encountered by
2582         # the Solaris assembler.  As our libraries contain their own
2583         # guards for processor-specific code, instead suppress
2584         # generation of the HWCAPS ELF section on Solaris x86 only.
2585         enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
2586         nm_opts='-P -g'
2587         ;;
2588     netbsd)
2589         disable symver
2590         oss_indev_extralibs="-lossaudio"
2591         oss_outdev_extralibs="-lossaudio"
2592         ;;
2593     openbsd)
2594         enable malloc_aligned
2595         # On OpenBSD 4.5. the compiler does not use PIC unless
2596         # explicitly using -fPIC. FFmpeg builds fine without PIC,
2597         # however the generated executable will not do anything
2598         # (simply quits with exit-code 1, no crash, no output).
2599         # Thus explicitly enable PIC here.
2600         enable pic
2601         disable symver
2602         SHFLAGS='-shared'
2603         oss_indev_extralibs="-lossaudio"
2604         oss_outdev_extralibs="-lossaudio"
2605         ;;
2606     dragonfly)
2607         enable malloc_aligned
2608         disable symver
2609         ;;
2610     freebsd)
2611         enable malloc_aligned
2612         ;;
2613     bsd/os)
2614         add_extralibs -lpoll -lgnugetopt
2615         strip="strip -d"
2616         ;;
2617     darwin)
2618         enable malloc_aligned
2619         gas="gas-preprocessor.pl $cc"
2620         enabled ppc && add_asflags -force_cpusubtype_ALL
2621         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
2622         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
2623         strip="${strip} -x"
2624         add_ldflags -Wl,-dynamic,-search_paths_first
2625         SLIBSUF=".dylib"
2626         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2627         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2628         FFSERVERLDFLAGS=-Wl,-bind_at_load
2629         objformat="macho"
2630         enabled x86_64 && objformat="macho64"
2631         enabled_any pic shared ||
2632             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2633         ;;
2634     mingw32*)
2635         if test $target_os = "mingw32ce"; then
2636             disable network
2637         else
2638             target_os=mingw32
2639         fi
2640         LIBTARGET=i386
2641         if enabled x86_64; then
2642             enable malloc_aligned
2643             LIBTARGET=x64
2644         elif enabled arm; then
2645             LIBTARGET=arm-wince
2646         fi
2647         shlibdir_default="$bindir_default"
2648         SLIBPREF=""
2649         SLIBSUF=".dll"
2650         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2651         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2652         SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
2653         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
2654         SLIB_INSTALL_LINKS=
2655         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
2656         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
2657         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'
2658         objformat="win32"
2659         enable dos_paths
2660         check_cflags -fno-common
2661         check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2662                                       || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2663                 die "ERROR: MinGW runtime version must be >= 3.15."
2664         add_cppflags -U__STRICT_ANSI__
2665         ;;
2666     cygwin*)
2667         target_os=cygwin
2668         shlibdir_default="$bindir_default"
2669         SLIBPREF="cyg"
2670         SLIBSUF=".dll"
2671         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2672         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2673         SHFLAGS='-shared -Wl,--enable-auto-image-base'
2674         objformat="win32"
2675         enable dos_paths
2676         check_cflags -fno-common
2677         add_cppflags -U__STRICT_ANSI__
2678         ;;
2679     *-dos|freedos|opendos)
2680         network_extralibs="-lsocket"
2681         objformat="coff"
2682         enable dos_paths
2683         add_cppflags -U__STRICT_ANSI__
2684         ;;
2685     linux)
2686         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2687         enable dv1394
2688         ;;
2689     irix*)
2690         target_os=irix
2691         ranlib="echo ignoring ranlib"
2692         ;;
2693     os/2*)
2694         strip="lxlite -CS"
2695         ln_s="cp -f"
2696         objformat="aout"
2697         add_cppflags -D_GNU_SOURCE
2698         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2699         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2700         FFSERVERLDFLAGS=""
2701         LIBSUF="_s.a"
2702         SLIBPREF=""
2703         SLIBSUF=".dll"
2704         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2705         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2706         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2707           echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2708           echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2709           echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2710           echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2711           emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2712         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2713           emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2714         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
2715         enable dos_paths
2716         enable_weak os2threads
2717         ;;
2718     gnu/kfreebsd)
2719         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
2720         ;;
2721     gnu)
2722         add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2723         ;;
2724     qnx)
2725         add_cppflags -D_QNX_SOURCE
2726         network_extralibs="-lsocket"
2727         ;;
2728     symbian)
2729         SLIBSUF=".dll"
2730         enable dos_paths
2731         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
2732         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
2733         add_ldflags -Wl,--target1-abs,--no-undefined \
2734                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
2735                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
2736         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
2737                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
2738                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
2739         ;;
2740     none)
2741         ;;
2742     *)
2743         die "Unknown OS '$target_os'."
2744         ;;
2745 esac
2746
2747 echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate
2748
2749 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2750
2751 set_default $PATHS_LIST
2752
2753 # we need to build at least one lib type
2754 if ! enabled_any static shared; then
2755     cat <<EOF
2756 At least one library type must be built.
2757 Specify --enable-static to build the static libraries or --enable-shared to
2758 build the shared libraries as well. To only build the shared libraries specify
2759 --disable-static in addition to --enable-shared.
2760 EOF
2761     exit 1;
2762 fi
2763
2764 die_license_disabled() {
2765     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2766 }
2767
2768 die_license_disabled gpl libcdio
2769 die_license_disabled gpl libx264
2770 die_license_disabled gpl libxavs
2771 die_license_disabled gpl libxvid
2772 die_license_disabled gpl x11grab
2773
2774 die_license_disabled nonfree libaacplus
2775 die_license_disabled nonfree libfaac
2776 die_license_disabled nonfree openssl
2777
2778 die_license_disabled version3 libopencore_amrnb
2779 die_license_disabled version3 libopencore_amrwb
2780 die_license_disabled version3 libvo_aacenc
2781 die_license_disabled version3 libvo_amrwbenc
2782
2783 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2784
2785 disabled optimizations || check_cflags -fomit-frame-pointer
2786
2787 enable_pic() {
2788     enable pic
2789     add_cppflags -DPIC
2790     add_cflags   -fPIC
2791     add_asflags  -fPIC
2792 }
2793
2794 enabled pic && enable_pic
2795
2796 check_cc <<EOF || die "Symbol mangling check failed."
2797 int ff_extern;
2798 EOF
2799 sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2800 extern_prefix=${sym%%ff_extern*}
2801
2802 check_cc <<EOF && enable inline_asm
2803 void foo(void) { __asm__ volatile ("" ::); }
2804 EOF
2805
2806 _restrict=
2807 for restrict_keyword in restrict __restrict__ __restrict; do
2808     check_cc <<EOF && _restrict=$restrict_keyword && break
2809 void foo(char * $restrict_keyword p);
2810 EOF
2811 done
2812
2813 check_cc <<EOF && enable attribute_packed
2814 struct { int x; } __attribute__((packed)) x;
2815 EOF
2816
2817 check_cc <<EOF && enable attribute_may_alias
2818 union { int x; } __attribute__((may_alias)) x;
2819 EOF
2820
2821 check_cc <<EOF || die "endian test failed"
2822 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2823 EOF
2824 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2825
2826 if enabled alpha; then
2827
2828     check_cflags -mieee
2829
2830 elif enabled arm; then
2831
2832     enabled thumb && check_cflags -mthumb || check_cflags -marm
2833     nogas=die
2834
2835     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
2836         enable vfp_args
2837     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
2838         case "${cross_prefix:-$cc}" in
2839             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
2840             *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
2841 __asm__ (".eabi_attribute 28, 1");
2842 int main(void) { return 0; }
2843 EOF
2844         esac
2845         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
2846     fi
2847
2848     enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2849     enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
2850     enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2851     enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
2852     enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
2853     enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2854     enabled vfpv3   && check_asm vfpv3   '"vmov.f32 s0, #1.0"'
2855
2856     check_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
2857
2858     enabled_all armv6t2 shared !pic && enable_pic
2859
2860 elif enabled mips; then
2861
2862     check_asm loongson '"dmult.g $1, $2, $3"'
2863     enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2864
2865 elif enabled ppc; then
2866
2867     enable local_aligned_8 local_aligned_16
2868
2869     check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2870     check_asm ibm_asm   '"add 0, 0, 0"'
2871     check_asm ppc4xx    '"maclhw r10, r11, r12"'
2872     check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2873
2874     # AltiVec flags: The FSF version of GCC differs from the Apple version
2875     if enabled altivec; then
2876         nogas=warn
2877         check_cflags -maltivec -mabi=altivec &&
2878         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2879         check_cflags -faltivec
2880
2881         # check if our compiler supports Motorola AltiVec C API
2882         check_cc <<EOF || disable altivec
2883 $inc_altivec_h
2884 int main(void) {
2885     vector signed int v1, v2, v3;
2886     v1 = vec_add(v2,v3);
2887     return 0;
2888 }
2889 EOF
2890
2891         # check if our compiler supports braces for vector declarations
2892         check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2893 $inc_altivec_h
2894 int main (void) { (vector int) {1}; return 0; }
2895 EOF
2896     fi
2897
2898 elif enabled sparc; then
2899
2900     enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2901         add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2902
2903 elif enabled x86; then
2904
2905     enable local_aligned_8 local_aligned_16
2906
2907     # check whether EBP is available on x86
2908     # As 'i' is stored on the stack, this program will crash
2909     # if the base pointer is used to access it because the
2910     # base pointer is cleared in the inline assembly code.
2911     check_exec_crash <<EOF && enable ebp_available
2912     volatile int i=0;
2913     __asm__ volatile (
2914         "xorl %%ebp, %%ebp"
2915     ::: "%ebp");
2916     return i;
2917 EOF
2918
2919     # check whether EBX is available on x86
2920     check_asm ebx_available '""::"b"(0)' &&
2921         check_asm ebx_available '"":::"%ebx"'
2922
2923     # check whether xmm clobbers are supported
2924     check_asm xmm_clobbers '"":::"%xmm0"'
2925
2926     # check whether binutils is new enough to compile SSSE3/MMX2
2927     enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2928     enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2929
2930     if ! disabled_any asm mmx yasm; then
2931         if check_cmd $yasmexe --version; then
2932             enabled x86_64 && yasm_extra="-m amd64"
2933             yasm_debug="-g dwarf2"
2934         elif check_cmd nasm -v; then
2935             yasmexe=nasm
2936             yasm_debug="-g -F dwarf"
2937             enabled x86_64 && test "$objformat" = elf && objformat=elf64
2938         fi
2939
2940         YASMFLAGS="-f $objformat $yasm_extra"
2941         enabled pic               && append YASMFLAGS "-DPIC"
2942         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
2943         case "$objformat" in
2944             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
2945         esac
2946
2947         check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
2948             die "yasm not found, use --disable-yasm for a crippled build"
2949         check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx
2950     fi
2951
2952     case "$cpu" in
2953         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2954             disable fast_clz
2955         ;;
2956     esac
2957
2958 fi
2959
2960 if enabled asm; then
2961     as=${gas:=$as}
2962     check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2963         $nogas "GNU assembler not found, install gas-preprocessor"
2964 fi
2965
2966 check_ldflags -Wl,--as-needed
2967
2968 if check_func dlopen; then
2969     ldl=
2970 elif check_func dlopen -ldl; then
2971     ldl=-ldl
2972 fi
2973
2974 if enabled network; then
2975     check_type "sys/types.h sys/socket.h" socklen_t
2976     check_type netdb.h "struct addrinfo"
2977     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
2978     check_type netinet/in.h "struct sockaddr_in6"
2979     check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2980     check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2981     # Prefer arpa/inet.h over winsock2
2982     if check_header arpa/inet.h ; then
2983         check_func closesocket
2984     elif check_header winsock2.h ; then
2985         check_func_headers winsock2.h closesocket -lws2 && \
2986             network_extralibs="-lws2" || \
2987         { check_func_headers winsock2.h closesocket -lws2_32 && \
2988             network_extralibs="-lws2_32"; }
2989         check_type ws2tcpip.h socklen_t
2990         check_type ws2tcpip.h "struct addrinfo"
2991         check_type ws2tcpip.h "struct ipv6_mreq"
2992         check_type ws2tcpip.h "struct sockaddr_in6"
2993         check_type ws2tcpip.h "struct sockaddr_storage"
2994         check_struct winsock2.h "struct sockaddr" sa_len
2995     else
2996         disable network
2997     fi
2998 fi
2999
3000 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
3001 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
3002
3003 check_func  fcntl
3004 check_func  fork
3005 check_func  getaddrinfo $network_extralibs
3006 check_func  gethrtime
3007 check_func  getrusage
3008 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3009 check_func  inet_aton $network_extralibs
3010 check_func  isatty
3011 check_func  localtime_r
3012 check_func  ${malloc_prefix}memalign            && enable memalign
3013 check_func  mkstemp
3014 check_func  mmap
3015 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
3016 check_func  setrlimit
3017 check_func  strerror_r
3018 check_func  strptime
3019 check_func  sched_getaffinity
3020 check_func  sysconf
3021 check_func  sysctl
3022 check_func_headers conio.h kbhit
3023 check_func_headers windows.h PeekNamedPipe
3024 check_func_headers io.h setmode
3025 check_func_headers lzo/lzo1x.h lzo1x_999_compress
3026 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3027 check_func_headers windows.h GetProcessAffinityMask
3028 check_func_headers windows.h GetProcessTimes
3029 check_func_headers windows.h MapViewOfFile
3030 check_func_headers windows.h VirtualAlloc
3031
3032 check_header dlfcn.h
3033 check_header dxva2api.h -D_WIN32_WINNT=0x0600
3034 check_header libcrystalhd/libcrystalhd_if.h
3035 check_header malloc.h
3036 check_header poll.h
3037 check_header sys/mman.h
3038 check_header sys/param.h
3039 check_header sys/resource.h
3040 check_header sys/select.h
3041 check_header termios.h
3042 check_header vdpau/vdpau.h
3043 check_header vdpau/vdpau_x11.h
3044 check_header X11/extensions/XvMClib.h
3045 check_header asm/types.h
3046
3047 disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
3048 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
3049
3050 # check for VDA header
3051 if ! disabled vda; then
3052     if check_header VideoDecodeAcceleration/VDADecoder.h; then
3053         enable vda
3054         add_extralibs -framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore
3055     fi
3056 fi
3057
3058 if ! disabled w32threads && ! enabled pthreads; then
3059     check_func _beginthreadex && enable w32threads
3060 fi
3061
3062 # check for some common methods of building with pthread support
3063 # do this before the optional library checks as some of them require pthreads
3064 if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
3065     enable pthreads
3066     if check_func pthread_create; then
3067         :
3068     elif check_func pthread_create -pthread; then
3069         add_cflags -pthread
3070         add_extralibs -pthread
3071     elif check_func pthread_create -pthreads; then
3072         add_cflags -pthreads
3073         add_extralibs -pthreads
3074     elif check_func pthread_create -lpthreadGC2; then
3075         add_extralibs -lpthreadGC2
3076     elif ! check_lib pthread.h pthread_create -lpthread; then
3077         disable pthreads
3078     fi
3079 fi
3080
3081 for thread in $THREADS_LIST; do
3082     if enabled $thread; then
3083         test -n "$thread_type" &&
3084             die "ERROR: Only one thread type must be selected." ||
3085             thread_type="$thread"
3086     fi
3087 done
3088
3089 check_lib math.h sin -lm && LIBM="-lm"
3090 disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
3091 enabled vaapi && require vaapi va/va.h vaInitialize -lva
3092
3093 check_mathfunc cbrtf
3094 check_mathfunc exp2
3095 check_mathfunc exp2f
3096 check_mathfunc llrint
3097 check_mathfunc llrintf
3098 check_mathfunc log2
3099 check_mathfunc log2f
3100 check_mathfunc lrint
3101 check_mathfunc lrintf
3102 check_mathfunc round
3103 check_mathfunc roundf
3104 check_mathfunc trunc
3105 check_mathfunc truncf
3106
3107 # these are off by default, so fail if requested and not available
3108 enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
3109 enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
3110 enabled gnutls     && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
3111 enabled libaacplus && require  "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
3112 enabled libass     && require_pkg_config libass ass/ass.h ass_library_init
3113 enabled libcelt    && require libcelt celt/celt.h celt_decode -lcelt0 &&
3114                       { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
3115                         die "ERROR: libcelt version must be >= 0.11.0."; }
3116 enabled libdc1394  && require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new
3117 enabled libdirac   && require_pkg_config dirac                          \
3118     "libdirac_decoder/dirac_parser.h libdirac_encoder/dirac_encoder.h"  \
3119     "dirac_decoder_init dirac_encoder_init"
3120 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
3121 enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
3122 enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
3123 enabled libmodplug && require  libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
3124 enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
3125 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
3126 enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
3127 enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
3128 enabled libopencv  && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
3129 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
3130 enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
3131 enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
3132 enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
3133 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
3134 enabled libstagefright_h264  && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
3135     media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
3136     media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder
3137 enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
3138 enabled libutvideo    && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
3139 enabled libv4l2    && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
3140 enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
3141 enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
3142 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
3143 enabled libvpx     && {
3144     enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
3145                                 die "ERROR: libvpx decoder version must be >=0.9.1"; }
3146     enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VPX_CQ" -lvpx ||
3147                                 die "ERROR: libvpx encoder version must be >=0.9.6"; } }
3148 enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
3149                       { check_cpp_condition x264.h "X264_BUILD >= 118" ||
3150                         die "ERROR: libx264 version must be >= 0.118."; }
3151 enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
3152 enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
3153 enabled openal     && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
3154                         check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
3155                         die "ERROR: openal not found"; } &&
3156                       { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
3157                         die "ERROR: openal version must be 1.1 or compatible"; }
3158 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
3159 enabled openssl    && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
3160                         check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
3161                         check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
3162                         die "ERROR: openssl not found"; }
3163
3164 SDL_CONFIG="${cross_prefix}sdl-config"
3165 if check_pkg_config sdl SDL_version.h SDL_Linked_Version; then
3166     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3167     enable sdl &&
3168     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3169 else
3170   if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
3171     sdl_cflags=$("${SDL_CONFIG}" --cflags)
3172     sdl_libs=$("${SDL_CONFIG}" --libs)
3173     check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
3174     check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
3175     enable sdl &&
3176     check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
3177   fi
3178 fi
3179 enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
3180
3181 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
3182 makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
3183
3184 check_header linux/fb.h
3185 check_header linux/videodev.h
3186 check_header linux/videodev2.h
3187 check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
3188
3189 check_header sys/videoio.h
3190
3191 check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
3192 # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
3193 # w32api 3.12 had it defined wrong
3194 check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
3195
3196 check_type "dshow.h" IBaseFilter
3197
3198 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
3199 { check_header dev/bktr/ioctl_meteor.h &&
3200   check_header dev/bktr/ioctl_bt848.h; } ||
3201 { check_header machine/ioctl_meteor.h &&
3202   check_header machine/ioctl_bt848.h; } ||
3203 { check_header dev/video/meteor/ioctl_meteor.h &&
3204   check_header dev/video/bktr/ioctl_bt848.h; } ||
3205 check_header dev/ic/bt8xx.h
3206
3207 check_header sndio.h
3208 if check_struct sys/soundcard.h audio_buf_info bytes; then
3209     enable_safe sys/soundcard.h
3210 else
3211     check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
3212     #include <sys/soundcard.h>
3213     audio_buf_info abc;
3214 EOF
3215 fi
3216 check_header soundcard.h
3217
3218 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
3219
3220 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait
3221
3222 enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
3223
3224 enabled libcdio &&
3225     check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open "-lcdio_paranoia -lcdio_cdda -lcdio"
3226
3227 enabled x11grab                         &&
3228 check_header X11/Xlib.h                 &&
3229 check_header X11/extensions/XShm.h      &&
3230 check_header X11/extensions/Xfixes.h    &&
3231 check_func XOpenDisplay -lX11           &&
3232 check_func XShmCreateImage -lX11 -lXext &&
3233 check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
3234
3235 if ! disabled vaapi; then
3236     check_lib va/va.h vaInitialize -lva && {
3237         check_cpp_condition va/va_version.h "VA_CHECK_VERSION(0,32,0)" ||
3238         warn "Please upgrade to VA-API >= 0.32 if you would like full VA-API support.";
3239     } || disable vaapi
3240 fi
3241
3242 if ! disabled vdpau && enabled vdpau_vdpau_h; then
3243 check_cpp_condition \
3244     vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3245     { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
3246       disable vdpau; }
3247 fi
3248
3249 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3250 enabled coverage && add_cflags "-fprofile-arcs -ftest-coverage" && add_ldflags "-fprofile-arcs -ftest-coverage"
3251 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"
3252
3253 # add some useful compiler flags if supported
3254 check_cflags -Wdeclaration-after-statement
3255 check_cflags -Wall
3256 check_cflags -Wno-parentheses
3257 check_cflags -Wno-switch
3258 check_cflags -Wno-format-zero-length
3259 check_cflags -Wdisabled-optimization
3260 check_cflags -Wpointer-arith
3261 check_cflags -Wredundant-decls
3262 check_cflags -Wno-pointer-sign
3263 check_cflags -Wcast-qual
3264 check_cflags -Wwrite-strings
3265 check_cflags -Wtype-limits
3266 check_cflags -Wundef
3267 check_cflags -Wmissing-prototypes
3268 check_cflags -Wno-pointer-to-int-cast
3269 check_cflags -Wstrict-prototypes
3270 enabled extra_warnings && check_cflags -Winline
3271
3272 # add some linker flags
3273 check_ldflags -Wl,--warn-common
3274 check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil
3275 test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3276
3277 echo "X{};" > $TMPV
3278 if test_ldflags -Wl,--version-script,$TMPV; then
3279     append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3280     check_cc <<EOF && enable symver_asm_label
3281 void ff_foo(void) __asm__ ("av_foo@VERSION");
3282 void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3283 EOF
3284     check_cc <<EOF && enable symver_gnu_asm
3285 __asm__(".symver ff_foo,av_foo@VERSION");
3286 void ff_foo(void) {}
3287 EOF
3288 fi
3289
3290 if [ -n "$optflags" ]; then
3291     add_cflags $optflags
3292 elif enabled small; then
3293     add_cflags $size_cflags
3294 elif enabled optimizations; then
3295     add_cflags $speed_cflags
3296 else
3297     add_cflags $noopt_cflags
3298 fi
3299 check_cflags -fno-math-errno
3300 check_cflags -fno-signed-zeros
3301 check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
3302 int x;
3303 EOF
3304
3305
3306 if enabled icc; then
3307     # Just warnings, no remarks
3308     check_cflags -w1
3309     # -wd: Disable following warnings
3310     # 144, 167, 556: -Wno-pointer-sign
3311     # 1292: attribute "foo" ignored
3312     # 10006: ignoring unknown option -fno-signed-zeros
3313     # 10148: ignoring unknown option -Wno-parentheses
3314     # 10156: ignoring option '-W'; no argument required
3315     check_cflags -wd144,167,556,1292,10006,10148,10156
3316     # 11030: Warning unknown option --as-needed
3317     # 10156: ignoring option '-export'; no argument required
3318     check_ldflags -wd10156,11030
3319     # Allow to compile with optimizations
3320     check_ldflags -march=$cpu
3321     # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
3322     enable ebp_available
3323     if enabled x86_32; then
3324         test ${icc_version%%.*} -ge 11 && \
3325             check_cflags -falign-stack=maintain-16-byte || \
3326             disable aligned_stack
3327     fi
3328 elif enabled ccc; then
3329     # disable some annoying warnings
3330     add_cflags -msg_disable cvtu32to64
3331     add_cflags -msg_disable embedcomment
3332     add_cflags -msg_disable needconstext
3333     add_cflags -msg_disable nomainieee
3334     add_cflags -msg_disable ptrmismatch1
3335     add_cflags -msg_disable unreachcode
3336 elif enabled gcc; then
3337     check_cflags -fno-tree-vectorize
3338     check_cflags -Werror=implicit-function-declaration
3339     check_cflags -Werror=missing-prototypes
3340 elif enabled llvm_gcc; then
3341     check_cflags -mllvm -stack-alignment=16
3342 elif enabled clang; then
3343     check_cflags -mllvm -stack-alignment=16
3344     check_cflags -Qunused-arguments
3345 elif enabled armcc; then
3346     # 2523: use of inline assembler is deprecated
3347     add_cflags -W${armcc_opt},--diag_suppress=2523
3348     add_cflags -W${armcc_opt},--diag_suppress=1207
3349     add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3350     add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3351     add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
3352     add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
3353 elif enabled tms470; then
3354     add_cflags -pds=824 -pds=837
3355 elif enabled pathscale; then
3356     add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3357 fi
3358
3359 enabled_any $THREADS_LIST      && enable threads
3360
3361 check_deps $CONFIG_LIST       \
3362            $CONFIG_EXTRA      \
3363            $HAVE_LIST         \
3364            $ALL_COMPONENTS    \
3365            $ALL_TESTS         \
3366
3367 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3368
3369 if test $target_os = "haiku"; then
3370     disable memalign
3371     disable posix_memalign
3372 fi
3373
3374 ! enabled_any memalign posix_memalign malloc_aligned &&
3375     enabled_any $need_memalign && enable memalign_hack
3376
3377 echo "install prefix            $prefix"
3378 echo "source path               $source_path"
3379 echo "C compiler                $cc"
3380 echo "ARCH                      $arch ($cpu)"
3381 if test "$build_suffix" != ""; then
3382     echo "build suffix              $build_suffix"
3383 fi
3384 if test "$progs_suffix" != ""; then
3385     echo "progs suffix              $progs_suffix"
3386 fi
3387 if test "$extra_version" != ""; then
3388     echo "version string suffix     $extra_version"
3389 fi
3390 echo "big-endian                ${bigendian-no}"
3391 echo "runtime cpu detection     ${runtime_cpudetect-no}"
3392 if enabled x86; then
3393     echo "${yasmexe}                      ${yasm-no}"
3394     echo "MMX enabled               ${mmx-no}"
3395     echo "MMX2 enabled              ${mmx2-no}"
3396     echo "3DNow! enabled            ${amd3dnow-no}"
3397     echo "3DNow! extended enabled   ${amd3dnowext-no}"
3398     echo "SSE enabled               ${sse-no}"
3399     echo "SSSE3 enabled             ${ssse3-no}"
3400     echo "AVX enabled               ${avx-no}"
3401     echo "CMOV enabled              ${cmov-no}"
3402     echo "CMOV is fast              ${fast_cmov-no}"
3403     echo "EBX available             ${ebx_available-no}"
3404     echo "EBP available             ${ebp_available-no}"
3405 fi
3406 if enabled arm; then
3407     echo "ARMv5TE enabled           ${armv5te-no}"
3408     echo "ARMv6 enabled             ${armv6-no}"
3409     echo "ARMv6T2 enabled           ${armv6t2-no}"
3410     echo "ARM VFP enabled           ${armvfp-no}"
3411     echo "IWMMXT enabled            ${iwmmxt-no}"
3412     echo "NEON enabled              ${neon-no}"
3413 fi
3414 if enabled mips; then
3415     echo "MMI enabled               ${mmi-no}"
3416 fi
3417 if enabled ppc; then
3418     echo "AltiVec enabled           ${altivec-no}"
3419     echo "PPC 4xx optimizations     ${ppc4xx-no}"
3420     echo "dcbzl available           ${dcbzl-no}"
3421 fi
3422 if enabled sparc; then
3423     echo "VIS enabled               ${vis-no}"
3424 fi
3425 echo "debug symbols             ${debug-no}"
3426 echo "strip symbols             ${stripping-no}"
3427 echo "optimize for size         ${small-no}"
3428 echo "optimizations             ${optimizations-no}"
3429 echo "static                    ${static-no}"
3430 echo "shared                    ${shared-no}"
3431 echo "postprocessing support    ${postproc-no}"
3432 echo "new filter support        ${avfilter-no}"
3433 echo "network support           ${network-no}"
3434 echo "threading support         ${thread_type-no}"
3435 echo "safe bitstream reader     ${safe_bitstream_reader-no}"
3436 echo "SDL support               ${sdl-no}"
3437 echo "Sun medialib support      ${mlib-no}"
3438 echo "libdxva2 enabled          ${dxva2-no}"
3439 echo "libva enabled             ${vaapi-no}"
3440 echo "libvdpau enabled          ${vdpau-no}"
3441 echo "AVISynth enabled          ${avisynth-no}"
3442 echo "frei0r enabled            ${frei0r-no}"
3443 echo "gnutls enabled            ${gnutls-no}"
3444 echo "libaacplus enabled        ${libaacplus-no}"
3445 echo "libass enabled            ${libass-no}"
3446 echo "libcdio support           ${libcdio-no}"
3447 echo "libcelt enabled           ${libcelt-no}"
3448 echo "libdc1394 support         ${libdc1394-no}"
3449 echo "libdirac enabled          ${libdirac-no}"
3450 echo "libfaac enabled           ${libfaac-no}"
3451 echo "libgsm enabled            ${libgsm-no}"
3452 echo "libmodplug enabled        ${libmodplug-no}"
3453 echo "libmp3lame enabled        ${libmp3lame-no}"
3454 echo "libnut enabled            ${libnut-no}"
3455 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3456 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3457 echo "libopencv support         ${libopencv-no}"
3458 echo "libopenjpeg enabled       ${libopenjpeg-no}"
3459 echo "libpulse enabled          ${libpulse-no}"
3460 echo "librtmp enabled           ${librtmp-no}"
3461 echo "libschroedinger enabled   ${libschroedinger-no}"
3462 echo "libspeex enabled          ${libspeex-no}"
3463 echo "libstagefright-h264 enabled    ${libstagefright_h264-no}"
3464 echo "libtheora enabled         ${libtheora-no}"
3465 echo "libutvideo enabled        ${libutvideo-no}"
3466 echo "libv4l2 enabled           ${libv4l2-no}"
3467 echo "libvo-aacenc support      ${libvo_aacenc-no}"
3468 echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
3469 echo "libvorbis enabled         ${libvorbis-no}"
3470 echo "libvpx enabled            ${libvpx-no}"
3471 echo "libx264 enabled           ${libx264-no}"
3472 echo "libxavs enabled           ${libxavs-no}"
3473 echo "libxvid enabled           ${libxvid-no}"
3474 echo "openal enabled            ${openal-no}"
3475 echo "openssl enabled           ${openssl-no}"
3476 echo "zlib enabled              ${zlib-no}"
3477 echo "bzlib enabled             ${bzlib-no}"
3478 echo
3479
3480 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3481     echo "Enabled ${type}s:"
3482     eval list=\$$(toupper $type)_LIST
3483     print_enabled '_*' $list | sort | pr -r -3 -t
3484     echo
3485 done
3486
3487 license="LGPL version 2.1 or later"
3488 if enabled nonfree; then
3489     license="nonfree and unredistributable"
3490 elif enabled gplv3; then
3491     license="GPL version 3 or later"
3492 elif enabled lgplv3; then
3493     license="LGPL version 3 or later"
3494 elif enabled gpl; then
3495     license="GPL version 2 or later"
3496 fi
3497
3498 echo "License: $license"
3499
3500 echo "Creating config.mak and config.h..."
3501
3502 test -e Makefile || $ln_s "$source_path/Makefile" .
3503
3504 enabled stripping || strip="echo skipping strip"
3505
3506 config_files="$TMPH config.mak"
3507
3508 cat > config.mak <<EOF
3509 # Automatically generated by configure - do not modify!
3510 ifndef FFMPEG_CONFIG_MAK
3511 FFMPEG_CONFIG_MAK=1
3512 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3513 prefix=$prefix
3514 LIBDIR=\$(DESTDIR)$libdir
3515 SHLIBDIR=\$(DESTDIR)$shlibdir
3516 INCDIR=\$(DESTDIR)$incdir
3517 BINDIR=\$(DESTDIR)$bindir
3518 DATADIR=\$(DESTDIR)$datadir
3519 MANDIR=\$(DESTDIR)$mandir
3520 SRC_PATH=$source_path
3521 ifndef MAIN_MAKEFILE
3522 SRC_PATH:=\$(SRC_PATH:.%=..%)
3523 endif
3524 CC_IDENT=$cc_ident
3525 ARCH=$arch
3526 CC=$cc
3527 CXX=$cxx
3528 AS=$as
3529 LD=$ld
3530 DEPCC=$dep_cc
3531 YASM=$yasmexe
3532 YASMDEP=$yasmexe
3533 AR=$ar
3534 RANLIB=$ranlib
3535 CP=cp -p
3536 LN_S=$ln_s
3537 STRIP=$strip
3538 CPPFLAGS=$CPPFLAGS
3539 CFLAGS=$CFLAGS
3540 CXXFLAGS=$CXXFLAGS
3541 ASFLAGS=$ASFLAGS
3542 AS_O=$CC_O
3543 CC_O=$CC_O
3544 CXX_O=$CXX_O
3545 LDFLAGS=$LDFLAGS
3546 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3547 SHFLAGS=$SHFLAGS
3548 YASMFLAGS=$YASMFLAGS
3549 BUILDSUF=$build_suffix
3550 PROGSSUF=$progs_suffix
3551 FULLNAME=$FULLNAME
3552 LIBPREF=$LIBPREF
3553 LIBSUF=$LIBSUF
3554 LIBNAME=$LIBNAME
3555 SLIBPREF=$SLIBPREF
3556 SLIBSUF=$SLIBSUF
3557 EXESUF=$EXESUF
3558 EXTRA_VERSION=$extra_version
3559 DEPFLAGS=$DEPFLAGS
3560 CCDEP=$CCDEP
3561 CXXDEP=$CXXDEP
3562 ASDEP=$ASDEP
3563 CC_DEPFLAGS=$CC_DEPFLAGS
3564 AS_DEPFLAGS=$AS_DEPFLAGS
3565 HOSTCC=$host_cc
3566 HOSTCFLAGS=$host_cflags
3567 HOSTEXESUF=$HOSTEXESUF
3568 HOSTLDFLAGS=$host_ldflags
3569 HOSTLIBS=$host_libs
3570 TARGET_EXEC=$target_exec
3571 TARGET_PATH=$target_path
3572 SDL_LIBS=$sdl_libs
3573 SDL_CFLAGS=$sdl_cflags
3574 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3575 EXTRALIBS=$extralibs
3576 INSTALL=$install
3577 LIBTARGET=${LIBTARGET}
3578 SLIBNAME=${SLIBNAME}
3579 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3580 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3581 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3582 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3583 SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
3584 SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
3585 SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
3586 SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
3587 SAMPLES:=${samples:-\$(FATE_SAMPLES)}
3588 NOREDZONE_FLAGS=$noredzone_flags
3589 EOF
3590
3591 get_version(){
3592     name=$1
3593     file=$source_path/$2
3594     eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3595     eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3596     lcname=$(tolower $name)
3597     eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3598     eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3599 }
3600
3601 get_version LIBAVCODEC  libavcodec/version.h
3602 get_version LIBAVDEVICE libavdevice/avdevice.h
3603 get_version LIBAVFILTER libavfilter/version.h
3604 get_version LIBAVFORMAT libavformat/version.h
3605 get_version LIBAVUTIL   libavutil/avutil.h
3606 get_version LIBPOSTPROC libpostproc/postprocess.h
3607 get_version LIBSWRESAMPLE libswresample/swresample.h
3608 get_version LIBSWSCALE  libswscale/swscale.h
3609
3610 cat > $TMPH <<EOF
3611 /* Automatically generated by configure - do not modify! */
3612 #ifndef FFMPEG_CONFIG_H
3613 #define FFMPEG_CONFIG_H
3614 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3615 #define FFMPEG_LICENSE "$(c_escape $license)"
3616 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3617 #define AVCONV_DATADIR "$(eval c_escape $datadir)"
3618 #define CC_TYPE "$cc_type"
3619 #define CC_VERSION $cc_version
3620 #define restrict $_restrict
3621 #define EXTERN_PREFIX "${extern_prefix}"
3622 #define EXTERN_ASM ${extern_prefix}
3623 #define SLIBSUF "$SLIBSUF"
3624 EOF
3625
3626 test -n "$malloc_prefix" &&
3627     echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3628
3629 if enabled small || disabled optimizations; then
3630     echo "#undef  av_always_inline"  >> $TMPH
3631     if enabled small; then
3632         echo "#define av_always_inline inline"  >> $TMPH
3633     else
3634         echo "#define av_always_inline av_unused"  >> $TMPH
3635     fi
3636 fi
3637
3638 if enabled yasm; then
3639     append config_files $TMPASM
3640     printf '' >$TMPASM
3641 fi
3642
3643 print_config ARCH_   "$config_files" $ARCH_LIST
3644 print_config HAVE_   "$config_files" $HAVE_LIST
3645 print_config CONFIG_ "$config_files" $CONFIG_LIST       \
3646                                      $CONFIG_EXTRA      \
3647                                      $ALL_COMPONENTS    \
3648
3649 cat >>config.mak <<EOF
3650 ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3651 VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3652 LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3653 LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3654 SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3655 EOF
3656
3657 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3658 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3659
3660 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3661 cp_if_changed $TMPH config.h
3662 touch .config
3663
3664 enabled yasm && cp_if_changed $TMPASM config.asm
3665
3666 cat > $TMPH <<EOF
3667 /* Generated by ffconf */
3668 #ifndef AVUTIL_AVCONFIG_H
3669 #define AVUTIL_AVCONFIG_H
3670 EOF
3671
3672 print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3673
3674 echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3675
3676 cp_if_changed $TMPH libavutil/avconfig.h
3677
3678 test -n "$WARNINGS" && printf "\n$WARNINGS"
3679
3680 # build pkg-config files
3681
3682 pkgconfig_generate(){
3683 name=$1
3684 shortname=${name#lib}${build_suffix}
3685 comment=$2
3686 version=$3
3687 libs=$4
3688 requires=$5
3689 enabled ${name#lib} || return 0
3690 mkdir -p $name
3691 cat <<EOF > $name/$name.pc
3692 prefix=$prefix
3693 exec_prefix=\${prefix}
3694 libdir=$libdir
3695 includedir=$incdir
3696
3697 Name: $name
3698 Description: $comment
3699 Version: $version
3700 Requires: $(enabled shared || echo $requires)
3701 Requires.private: $(enabled shared && echo $requires)
3702 Conflicts:
3703 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3704 Libs.private: $(enabled shared && echo $libs)
3705 Cflags: -I\${includedir}
3706 EOF
3707 cat <<EOF > $name/$name-uninstalled.pc
3708 prefix=
3709 exec_prefix=
3710 libdir=\${pcfiledir}
3711 includedir=${source_path}
3712
3713 Name: $name
3714 Description: $comment
3715 Version: $version
3716 Requires: $requires
3717 Conflicts:
3718 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3719 Cflags: -I\${includedir}
3720 EOF
3721 }
3722
3723 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
3724 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3725 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3726 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3727 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
3728 pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
3729 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"
3730 pkgconfig_generate libswresample "FFmpeg audio rescaling library" "$LIBSWRESAMPLE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"