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