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