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