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