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