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