rtpenc_mpegts: Free the right ->pb in the error path in the init function
[ffmpeg.git] / 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     qsv
1242     rdft
1243 "
1244
1245 CONFIG_LIST="
1246     $COMPONENT_LIST
1247     $EXAMPLE_LIST
1248     $EXTERNAL_LIBRARY_LIST
1249     $FEATURE_LIST
1250     $HWACCEL_LIST
1251     $LICENSE_LIST
1252     $LIBRARY_LIST
1253     $PROGRAM_LIST
1254     $SUBSYSTEM_LIST
1255     memalign_hack
1256     neon_clobber_test
1257     pic
1258     pod2man
1259     texi2html
1260     thumb
1261     xmm_clobber_test
1262 "
1263
1264 THREADS_LIST="
1265     pthreads
1266     w32threads
1267 "
1268
1269 ATOMICS_LIST="
1270     atomics_gcc
1271     atomics_suncc
1272     atomics_win32
1273 "
1274
1275 ARCH_LIST="
1276     aarch64
1277     alpha
1278     arm
1279     avr32
1280     avr32_ap
1281     avr32_uc
1282     bfin
1283     ia64
1284     m68k
1285     mips
1286     mips64
1287     parisc
1288     ppc
1289     ppc64
1290     s390
1291     sh4
1292     sparc
1293     sparc64
1294     tilegx
1295     tilepro
1296     tomi
1297     x86
1298     x86_32
1299     x86_64
1300 "
1301
1302 ARCH_EXT_LIST_ARM="
1303     armv5te
1304     armv6
1305     armv6t2
1306     armv8
1307     neon
1308     vfp
1309     vfpv3
1310 "
1311
1312 ARCH_EXT_LIST_X86_SIMD="
1313     amd3dnow
1314     amd3dnowext
1315     avx
1316     avx2
1317     fma3
1318     fma4
1319     mmx
1320     mmxext
1321     sse
1322     sse2
1323     sse3
1324     sse4
1325     sse42
1326     ssse3
1327     xop
1328 "
1329
1330 ARCH_EXT_LIST_PPC="
1331     altivec
1332     dcbzl
1333     ldbrx
1334     ppc4xx
1335 "
1336
1337 ARCH_EXT_LIST_X86="
1338     $ARCH_EXT_LIST_X86_SIMD
1339     cpunop
1340     i686
1341 "
1342
1343 ARCH_EXT_LIST="
1344     $ARCH_EXT_LIST_ARM
1345     $ARCH_EXT_LIST_PPC
1346     $ARCH_EXT_LIST_X86
1347     loongson
1348     vis
1349 "
1350
1351 ARCH_FEATURES="
1352     aligned_stack
1353     fast_64bit
1354     fast_clz
1355     fast_cmov
1356     local_aligned_8
1357     local_aligned_16
1358     simd_align_16
1359 "
1360
1361 BUILTIN_LIST="
1362     atomic_cas_ptr
1363     machine_rw_barrier
1364     MemoryBarrier
1365     mm_empty
1366     rdtsc
1367     sync_val_compare_and_swap
1368 "
1369 HAVE_LIST_CMDLINE="
1370     inline_asm
1371     symver
1372     yasm
1373 "
1374
1375 HAVE_LIST_PUB="
1376     bigendian
1377     fast_unaligned
1378 "
1379
1380 HEADERS_LIST="
1381     alsa_asoundlib_h
1382     altivec_h
1383     arpa_inet_h
1384     cdio_paranoia_h
1385     cdio_paranoia_paranoia_h
1386     dev_bktr_ioctl_bt848_h
1387     dev_bktr_ioctl_meteor_h
1388     dev_ic_bt8xx_h
1389     dev_video_bktr_ioctl_bt848_h
1390     dev_video_meteor_ioctl_meteor_h
1391     direct_h
1392     dlfcn_h
1393     dxva_h
1394     gsm_h
1395     io_h
1396     mach_mach_time_h
1397     machine_ioctl_bt848_h
1398     machine_ioctl_meteor_h
1399     malloc_h
1400     poll_h
1401     sndio_h
1402     soundcard_h
1403     sys_mman_h
1404     sys_param_h
1405     sys_resource_h
1406     sys_select_h
1407     sys_soundcard_h
1408     sys_time_h
1409     sys_un_h
1410     sys_videoio_h
1411     unistd_h
1412     windows_h
1413     winsock2_h
1414 "
1415
1416 INTRINSICS_LIST="
1417     intrinsics_neon
1418 "
1419
1420 MATH_FUNCS="
1421     atanf
1422     atan2f
1423     cbrtf
1424     cosf
1425     exp2
1426     exp2f
1427     expf
1428     isinf
1429     isnan
1430     ldexpf
1431     llrint
1432     llrintf
1433     log2
1434     log2f
1435     log10f
1436     lrint
1437     lrintf
1438     powf
1439     rint
1440     round
1441     roundf
1442     sinf
1443     trunc
1444     truncf
1445 "
1446
1447 SYSTEM_FUNCS="
1448     aligned_malloc
1449     clock_gettime
1450     closesocket
1451     CommandLineToArgvW
1452     CoTaskMemFree
1453     CryptGenRandom
1454     dlopen
1455     fcntl
1456     flt_lim
1457     fork
1458     getaddrinfo
1459     gethrtime
1460     getopt
1461     GetProcessAffinityMask
1462     GetProcessMemoryInfo
1463     GetProcessTimes
1464     getrusage
1465     getservbyport
1466     GetSystemTimeAsFileTime
1467     gettimeofday
1468     gmtime_r
1469     inet_aton
1470     isatty
1471     jack_port_get_latency_range
1472     localtime_r
1473     mach_absolute_time
1474     MapViewOfFile
1475     memalign
1476     mkstemp
1477     mmap
1478     mprotect
1479     nanosleep
1480     posix_memalign
1481     sched_getaffinity
1482     SetConsoleTextAttribute
1483     setmode
1484     setrlimit
1485     Sleep
1486     strerror_r
1487     strptime
1488     sysconf
1489     sysctl
1490     usleep
1491     VirtualAlloc
1492 "
1493
1494 TOOLCHAIN_FEATURES="
1495     as_dn_directive
1496     as_func
1497     as_object_arch
1498     asm_mod_q
1499     attribute_may_alias
1500     attribute_packed
1501     ebp_available
1502     ebx_available
1503     gnu_as
1504     ibm_asm
1505     inline_asm_labels
1506     pragma_deprecated
1507     symver_asm_label
1508     symver_gnu_asm
1509     vfp_args
1510     xform_asm
1511     xmm_clobbers
1512 "
1513
1514 TYPES_LIST="
1515     CONDITION_VARIABLE_Ptr
1516     DXVA_PicParams_HEVC
1517     socklen_t
1518     struct_addrinfo
1519     struct_group_source_req
1520     struct_ip_mreq_source
1521     struct_ipv6_mreq
1522     struct_pollfd
1523     struct_rusage_ru_maxrss
1524     struct_sockaddr_in6
1525     struct_sockaddr_sa_len
1526     struct_sockaddr_storage
1527     struct_v4l2_frmivalenum_discrete
1528 "
1529
1530 HAVE_LIST="
1531     $ARCH_EXT_LIST
1532     $(add_suffix _external $ARCH_EXT_LIST)
1533     $(add_suffix _inline   $ARCH_EXT_LIST)
1534     $ARCH_FEATURES
1535     $ATOMICS_LIST
1536     $BUILTIN_LIST
1537     $HAVE_LIST_CMDLINE
1538     $HAVE_LIST_PUB
1539     $HEADERS_LIST
1540     $INTRINSICS_LIST
1541     $MATH_FUNCS
1542     $SYSTEM_FUNCS
1543     $THREADS_LIST
1544     $TOOLCHAIN_FEATURES
1545     $TYPES_LIST
1546     atomics_native
1547     dos_paths
1548     dxva2_lib
1549     libc_msvcrt
1550     libdc1394_1
1551     libdc1394_2
1552     sdl
1553     section_data_rel_ro
1554     threads
1555     vaapi_x11
1556     vdpau_x11
1557     xlib
1558 "
1559
1560 # options emitted with CONFIG_ prefix but not available on the command line
1561 CONFIG_EXTRA="
1562     aandcttables
1563     ac3dsp
1564     audio_frame_queue
1565     audiodsp
1566     blockdsp
1567     bswapdsp
1568     cabac
1569     dvprofile
1570     faandct
1571     faanidct
1572     fdctdsp
1573     fmtconvert
1574     gcrypt
1575     golomb
1576     gplv3
1577     h263dsp
1578     h264chroma
1579     h264dsp
1580     h264pred
1581     h264qpel
1582     hpeldsp
1583     huffman
1584     huffyuvdsp
1585     huffyuvencdsp
1586     idctdsp
1587     iirfilter
1588     imdct15
1589     intrax8
1590     lgplv3
1591     lpc
1592     me_cmp
1593     mpeg_er
1594     mpegaudio
1595     mpegaudiodsp
1596     mpegvideo
1597     mpegvideoenc
1598     nettle
1599     pixblockdsp
1600     qpeldsp
1601     rangecoder
1602     riffdec
1603     riffenc
1604     rtpdec
1605     rtpenc_chain
1606     sinewin
1607     startcode
1608     tpeldsp
1609     videodsp
1610     vp3dsp
1611     wma_freqs
1612 "
1613
1614 CMDLINE_SELECT="
1615     $ARCH_EXT_LIST
1616     $CONFIG_LIST
1617     $HAVE_LIST_CMDLINE
1618     $THREADS_LIST
1619     asm
1620     cross_compile
1621     debug
1622     extra_warnings
1623     logging
1624     lto
1625     optimizations
1626     rpath
1627 "
1628
1629 PATHS_LIST="
1630     bindir
1631     datadir
1632     docdir
1633     incdir
1634     libdir
1635     mandir
1636     prefix
1637     shlibdir
1638 "
1639
1640 CMDLINE_SET="
1641     $PATHS_LIST
1642     ar
1643     arch
1644     as
1645     build_suffix
1646     cc
1647     cpu
1648     cross_prefix
1649     dep_cc
1650     extra_version
1651     host_cc
1652     host_cflags
1653     host_ld
1654     host_ldflags
1655     host_libs
1656     host_os
1657     ld
1658     logfile
1659     malloc_prefix
1660     nm
1661     optflags
1662     pkg_config
1663     pkg_config_flags
1664     random_seed
1665     samples
1666     sysinclude
1667     sysroot
1668     target_exec
1669     target_os
1670     target_path
1671     target_samples
1672     toolchain
1673 "
1674
1675 CMDLINE_APPEND="
1676     extra_cflags
1677     host_cppflags
1678 "
1679
1680 # code dependency declarations
1681
1682 # architecture extensions
1683
1684 armv5te_deps="arm"
1685 armv6_deps="arm"
1686 armv6t2_deps="arm"
1687 armv8_deps="aarch64"
1688 neon_deps_any="aarch64 arm"
1689 intrinsics_neon_deps="neon"
1690 vfp_deps_any="aarch64 arm"
1691 vfpv3_deps="vfp"
1692
1693 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1694
1695 altivec_deps="ppc"
1696 ppc4xx_deps="ppc"
1697
1698 cpunop_deps="i686"
1699 x86_64_select="i686"
1700 x86_64_suggest="fast_cmov"
1701
1702 amd3dnow_deps="mmx"
1703 amd3dnowext_deps="amd3dnow"
1704 i686_deps="x86"
1705 mmx_deps="x86"
1706 mmxext_deps="mmx"
1707 sse_deps="mmxext"
1708 sse2_deps="sse"
1709 sse3_deps="sse2"
1710 ssse3_deps="sse3"
1711 sse4_deps="ssse3"
1712 sse42_deps="sse4"
1713 avx_deps="sse42"
1714 xop_deps="avx"
1715 fma3_deps="avx"
1716 fma4_deps="avx"
1717 avx2_deps="avx"
1718
1719 mmx_external_deps="yasm"
1720 mmx_inline_deps="inline_asm"
1721 mmx_suggest="mmx_external mmx_inline"
1722
1723 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
1724     eval dep=\$${ext}_deps
1725     eval ${ext}_external_deps='"${dep}_external"'
1726     eval ${ext}_inline_deps='"${dep}_inline"'
1727     eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1728 done
1729
1730 aligned_stack_if_any="aarch64 ppc x86"
1731 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1732 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
1733 fast_unaligned_if_any="aarch64 ppc x86"
1734 simd_align_16_if_any="altivec neon sse"
1735
1736 # system capabilities
1737 log2_deps="!libc_msvcrt"
1738
1739 symver_if_any="symver_asm_label symver_gnu_asm"
1740
1741 # threading support
1742 atomics_gcc_if="sync_val_compare_and_swap"
1743 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
1744 atomics_win32_if="MemoryBarrier"
1745 atomics_native_if_any="$ATOMICS_LIST"
1746 w32threads_deps="atomics_native"
1747 threads_if_any="$THREADS_LIST"
1748
1749 # subsystems
1750 dct_select="rdft"
1751 error_resilience_select="me_cmp"
1752 faandct_deps="faan fdctdsp"
1753 faanidct_deps="faan idctdsp"
1754 intrax8_select="error_resilience"
1755 mdct_select="fft"
1756 rdft_select="fft"
1757 me_cmp_select="fdctdsp idctdsp pixblockdsp"
1758 mpeg_er_select="error_resilience"
1759 mpegaudio_select="mpegaudiodsp"
1760 mpegaudiodsp_select="dct"
1761 mpegvideo_select="blockdsp hpeldsp idctdsp me_cmp videodsp"
1762 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
1763
1764 # decoders / encoders
1765 aac_decoder_select="imdct15 mdct sinewin"
1766 aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
1767 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1768 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
1769 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
1770 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
1771 aic_decoder_select="golomb idctdsp"
1772 alac_encoder_select="lpc"
1773 als_decoder_select="bswapdsp"
1774 amrnb_decoder_select="lsp"
1775 amrwb_decoder_select="lsp"
1776 amv_decoder_select="sp5x_decoder"
1777 ape_decoder_select="bswapdsp"
1778 asv1_decoder_select="blockdsp bswapdsp idctdsp"
1779 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
1780 asv2_decoder_select="blockdsp bswapdsp idctdsp"
1781 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
1782 atrac1_decoder_select="mdct sinewin"
1783 atrac3_decoder_select="mdct"
1784 atrac3p_decoder_select="mdct sinewin"
1785 bink_decoder_select="blockdsp hpeldsp"
1786 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
1787 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
1788 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
1789 cllc_decoder_select="bswapdsp"
1790 comfortnoise_encoder_select="lpc"
1791 cook_decoder_select="audiodsp mdct sinewin"
1792 cscd_decoder_select="lzo"
1793 cscd_decoder_suggest="zlib"
1794 dca_decoder_select="fmtconvert mdct"
1795 dnxhd_decoder_select="blockdsp idctdsp"
1796 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
1797 dvvideo_decoder_select="dvprofile idctdsp"
1798 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
1799 dxa_decoder_deps="zlib"
1800 eac3_decoder_select="ac3_decoder"
1801 eac3_encoder_select="ac3_encoder"
1802 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
1803 eatgq_decoder_select="aandcttables idctdsp"
1804 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpeg1video_decoder"
1805 exr_decoder_deps="zlib"
1806 ffv1_decoder_select="golomb rangecoder"
1807 ffv1_encoder_select="rangecoder"
1808 ffvhuff_decoder_select="huffyuv_decoder"
1809 ffvhuff_encoder_select="huffyuv_encoder"
1810 fic_decoder_select="golomb"
1811 flac_decoder_select="golomb"
1812 flac_encoder_select="bswapdsp golomb lpc"
1813 flashsv_decoder_deps="zlib"
1814 flashsv_encoder_deps="zlib"
1815 flashsv2_decoder_deps="zlib"
1816 flv_decoder_select="h263_decoder"
1817 flv_encoder_select="h263_encoder"
1818 fourxm_decoder_select="blockdsp bswapdsp"
1819 fraps_decoder_select="bswapdsp huffman"
1820 g2m_decoder_deps="zlib"
1821 g2m_decoder_select="blockdsp idctdsp"
1822 h261_decoder_select="mpeg_er mpegvideo"
1823 h261_encoder_select="aandcttables mpegvideoenc"
1824 h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
1825 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
1826 h263i_decoder_select="h263_decoder"
1827 h263p_encoder_select="h263_encoder"
1828 h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel startcode videodsp"
1829 h264_decoder_suggest="error_resilience"
1830 h264_qsv_decoder_deps="libmfx"
1831 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsv h264_qsv_hwaccel"
1832 hevc_decoder_select="bswapdsp cabac golomb videodsp"
1833 huffyuv_decoder_select="bswapdsp huffyuvdsp"
1834 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp"
1835 iac_decoder_select="imc_decoder"
1836 imc_decoder_select="bswapdsp fft mdct sinewin"
1837 indeo3_decoder_select="hpeldsp"
1838 interplay_video_decoder_select="hpeldsp"
1839 jpegls_decoder_select="golomb mjpeg_decoder"
1840 jpegls_encoder_select="golomb"
1841 jv_decoder_select="blockdsp"
1842 lagarith_decoder_select="huffyuvdsp"
1843 ljpeg_encoder_select="aandcttables idctdsp"
1844 loco_decoder_select="golomb"
1845 mdec_decoder_select="blockdsp idctdsp mpegvideo"
1846 metasound_decoder_select="lsp mdct sinewin"
1847 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
1848 mjpeg_decoder_select="blockdsp hpeldsp idctdsp"
1849 mjpeg_encoder_select="aandcttables mpegvideoenc"
1850 mjpegb_decoder_select="mjpeg_decoder"
1851 mlp_decoder_select="mlp_parser"
1852 motionpixels_decoder_select="bswapdsp"
1853 mp1_decoder_select="mpegaudio"
1854 mp1float_decoder_select="mpegaudio"
1855 mp2_decoder_select="mpegaudio"
1856 mp2float_decoder_select="mpegaudio"
1857 mp3_decoder_select="mpegaudio"
1858 mp3adu_decoder_select="mpegaudio"
1859 mp3adufloat_decoder_select="mpegaudio"
1860 mp3float_decoder_select="mpegaudio"
1861 mp3on4_decoder_select="mpegaudio"
1862 mp3on4float_decoder_select="mpegaudio"
1863 mpc7_decoder_select="bswapdsp mpegaudiodsp"
1864 mpc8_decoder_select="mpegaudiodsp"
1865 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1866 mpeg_xvmc_decoder_select="mpeg2video_decoder"
1867 mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
1868 mpeg1video_encoder_select="aandcttables mpegvideoenc"
1869 mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
1870 mpeg2video_encoder_select="aandcttables mpegvideoenc"
1871 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1872 mpeg4_encoder_select="h263_encoder"
1873 msmpeg4v1_decoder_select="h263_decoder"
1874 msmpeg4v2_decoder_select="h263_decoder"
1875 msmpeg4v2_encoder_select="h263_encoder"
1876 msmpeg4v3_decoder_select="h263_decoder"
1877 msmpeg4v3_encoder_select="h263_encoder"
1878 mss2_decoder_select="error_resilience mpeg_er qpeldsp vc1_decoder"
1879 mxpeg_decoder_select="mjpeg_decoder"
1880 nellymoser_decoder_select="mdct sinewin"
1881 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
1882 nuv_decoder_select="idctdsp lzo"
1883 on2avc_decoder_select="mdct"
1884 opus_decoder_deps="avresample"
1885 opus_decoder_select="imdct15"
1886 png_decoder_deps="zlib"
1887 png_encoder_deps="zlib"
1888 png_encoder_select="huffyuvencdsp"
1889 prores_decoder_select="idctdsp"
1890 prores_encoder_select="fdctdsp"
1891 qcelp_decoder_select="lsp"
1892 qdm2_decoder_select="mdct rdft mpegaudiodsp"
1893 ra_144_encoder_select="audio_frame_queue lpc"
1894 ralf_decoder_select="golomb"
1895 rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
1896 rv10_encoder_select="h263_encoder"
1897 rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
1898 rv20_encoder_select="h263_encoder"
1899 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
1900 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo videodsp"
1901 shorten_decoder_select="golomb"
1902 sipr_decoder_select="lsp"
1903 sp5x_decoder_select="mjpeg_decoder"
1904 svq1_decoder_select="hpeldsp"
1905 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
1906 svq3_decoder_select="h264_decoder hpeldsp tpeldsp"
1907 svq3_decoder_suggest="zlib"
1908 tak_decoder_select="audiodsp"
1909 theora_decoder_select="vp3_decoder"
1910 thp_decoder_select="mjpeg_decoder"
1911 tiff_decoder_suggest="zlib"
1912 tiff_encoder_suggest="zlib"
1913 truehd_decoder_select="mlp_decoder"
1914 truemotion2_decoder_select="bswapdsp"
1915 truespeech_decoder_select="bswapdsp"
1916 tscc_decoder_deps="zlib"
1917 twinvq_decoder_select="mdct lsp sinewin"
1918 utvideo_decoder_select="bswapdsp"
1919 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
1920 vble_decoder_select="huffyuvdsp"
1921 vc1_decoder_select="blockdsp error_resilience h263_decoder h264chroma h264qpel intrax8 mpeg_er qpeldsp startcode"
1922 vc1image_decoder_select="vc1_decoder"
1923 vorbis_decoder_select="mdct"
1924 vorbis_encoder_select="mdct"
1925 vp3_decoder_select="hpeldsp vp3dsp videodsp"
1926 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
1927 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
1928 vp6a_decoder_select="vp6_decoder"
1929 vp6f_decoder_select="vp6_decoder"
1930 vp7_decoder_select="h264pred videodsp"
1931 vp8_decoder_select="h264pred videodsp"
1932 vp9_decoder_select="videodsp"
1933 webp_decoder_select="vp8_decoder"
1934 wmapro_decoder_select="mdct sinewin wma_freqs"
1935 wmav1_decoder_select="mdct sinewin wma_freqs"
1936 wmav1_encoder_select="mdct sinewin wma_freqs"
1937 wmav2_decoder_select="mdct sinewin wma_freqs"
1938 wmav2_encoder_select="mdct sinewin wma_freqs"
1939 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1940 wmv1_decoder_select="h263_decoder"
1941 wmv1_encoder_select="h263_encoder"
1942 wmv2_decoder_select="blockdsp h263_decoder idctdsp intrax8 videodsp"
1943 wmv2_encoder_select="h263_encoder"
1944 wmv3_decoder_select="vc1_decoder"
1945 wmv3image_decoder_select="wmv3_decoder"
1946 zerocodec_decoder_deps="zlib"
1947 zlib_decoder_deps="zlib"
1948 zlib_encoder_deps="zlib"
1949 zmbv_decoder_deps="zlib"
1950 zmbv_encoder_deps="zlib"
1951
1952 # hardware accelerators
1953 dxva2_deps="dxva2api_h"
1954 vaapi_deps="va_va_h"
1955 vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1956 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
1957 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1958
1959 h263_vaapi_hwaccel_deps="vaapi"
1960 h263_vaapi_hwaccel_select="h263_decoder"
1961 h263_vdpau_hwaccel_deps="vdpau"
1962 h263_vdpau_hwaccel_select="h263_decoder"
1963 h264_dxva2_hwaccel_deps="dxva2"
1964 h264_dxva2_hwaccel_select="h264_decoder"
1965 h264_qsv_hwaccel_deps="libmfx"
1966 h264_vaapi_hwaccel_deps="vaapi"
1967 h264_vaapi_hwaccel_select="h264_decoder"
1968 h264_vda_hwaccel_deps="vda"
1969 h264_vda_hwaccel_select="h264_decoder"
1970 h264_vda_old_hwaccel_deps="vda"
1971 h264_vda_old_hwaccel_select="h264_decoder"
1972 h264_vdpau_hwaccel_deps="vdpau"
1973 h264_vdpau_hwaccel_select="h264_decoder"
1974 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
1975 hevc_dxva2_hwaccel_select="hevc_decoder"
1976 mpeg1_vdpau_hwaccel_deps="vdpau"
1977 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
1978 mpeg2_dxva2_hwaccel_deps="dxva2"
1979 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
1980 mpeg2_vaapi_hwaccel_deps="vaapi"
1981 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
1982 mpeg2_vdpau_hwaccel_deps="vdpau"
1983 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
1984 mpeg4_vaapi_hwaccel_deps="vaapi"
1985 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
1986 mpeg4_vdpau_hwaccel_deps="vdpau"
1987 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
1988 vc1_dxva2_hwaccel_deps="dxva2"
1989 vc1_dxva2_hwaccel_select="vc1_decoder"
1990 vc1_vaapi_hwaccel_deps="vaapi"
1991 vc1_vaapi_hwaccel_select="vc1_decoder"
1992 vc1_vdpau_hwaccel_deps="vdpau"
1993 vc1_vdpau_hwaccel_select="vc1_decoder"
1994 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1995 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1996 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
1997
1998 # parsers
1999 h264_parser_select="h264_decoder"
2000 mpegvideo_parser_select="mpegvideo"
2001 mpeg4video_parser_select="error_resilience h263dsp mpeg_er mpegvideo qpeldsp"
2002 vc1_parser_select="mpegvideo startcode vc1_decoder"
2003
2004 # external libraries
2005 libfaac_encoder_deps="libfaac"
2006 libfaac_encoder_select="audio_frame_queue"
2007 libfdk_aac_decoder_deps="libfdk_aac"
2008 libfdk_aac_encoder_deps="libfdk_aac"
2009 libfdk_aac_encoder_select="audio_frame_queue"
2010 libgsm_decoder_deps="libgsm"
2011 libgsm_encoder_deps="libgsm"
2012 libgsm_ms_decoder_deps="libgsm"
2013 libgsm_ms_encoder_deps="libgsm"
2014 libilbc_decoder_deps="libilbc"
2015 libilbc_encoder_deps="libilbc"
2016 libmp3lame_encoder_deps="libmp3lame"
2017 libmp3lame_encoder_select="audio_frame_queue"
2018 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2019 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2020 libopencore_amrnb_encoder_select="audio_frame_queue"
2021 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2022 libopenh264_encoder_deps="libopenh264"
2023 libopenjpeg_decoder_deps="libopenjpeg"
2024 libopenjpeg_encoder_deps="libopenjpeg"
2025 libopus_decoder_deps="libopus"
2026 libopus_encoder_deps="libopus"
2027 libopus_encoder_select="audio_frame_queue"
2028 libschroedinger_decoder_deps="libschroedinger"
2029 libschroedinger_encoder_deps="libschroedinger"
2030 libspeex_decoder_deps="libspeex"
2031 libspeex_encoder_deps="libspeex"
2032 libspeex_encoder_select="audio_frame_queue"
2033 libtheora_encoder_deps="libtheora"
2034 libtwolame_encoder_deps="libtwolame"
2035 libvo_aacenc_encoder_deps="libvo_aacenc"
2036 libvo_aacenc_encoder_select="audio_frame_queue"
2037 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2038 libvorbis_encoder_deps="libvorbis"
2039 libvorbis_encoder_select="audio_frame_queue"
2040 libvpx_vp8_decoder_deps="libvpx"
2041 libvpx_vp8_encoder_deps="libvpx"
2042 libvpx_vp9_decoder_deps="libvpx"
2043 libvpx_vp9_encoder_deps="libvpx"
2044 libwavpack_encoder_deps="libwavpack"
2045 libwebp_encoder_deps="libwebp"
2046 libx264_encoder_deps="libx264"
2047 libx265_encoder_deps="libx265"
2048 libxavs_encoder_deps="libxavs"
2049 libxvid_encoder_deps="libxvid"
2050
2051 # demuxers / muxers
2052 ac3_demuxer_select="ac3_parser"
2053 asf_demuxer_select="riffdec"
2054 asf_muxer_select="riffenc"
2055 asf_stream_muxer_select="asf_muxer"
2056 avi_demuxer_select="riffdec"
2057 avi_muxer_select="riffenc"
2058 avisynth_demuxer_deps="avisynth"
2059 avisynth_demuxer_select="riffdec"
2060 caf_demuxer_select="riffdec"
2061 dash_muxer_select="mp4_muxer"
2062 dirac_demuxer_select="dirac_parser"
2063 dv_demuxer_select="dvprofile"
2064 dv_muxer_select="dvprofile"
2065 dxa_demuxer_select="riffdec"
2066 eac3_demuxer_select="ac3_parser"
2067 f4v_muxer_select="mov_muxer"
2068 flac_demuxer_select="flac_parser"
2069 hds_muxer_select="flv_muxer"
2070 hls_muxer_select="mpegts_muxer"
2071 ipod_muxer_select="mov_muxer"
2072 ismv_muxer_select="mov_muxer"
2073 matroska_audio_muxer_select="matroska_muxer"
2074 matroska_demuxer_select="riffdec"
2075 matroska_demuxer_suggest="bzlib lzo zlib"
2076 matroska_muxer_select="riffenc"
2077 mmf_muxer_select="riffenc"
2078 mov_demuxer_select="riffdec"
2079 mov_demuxer_suggest="zlib"
2080 mov_muxer_select="riffenc rtpenc_chain"
2081 mp3_demuxer_select="mpegaudio_parser"
2082 mp4_muxer_select="mov_muxer"
2083 mpegts_muxer_select="adts_muxer latm_muxer"
2084 mpegtsraw_demuxer_select="mpegts_demuxer"
2085 mxf_d10_muxer_select="mxf_muxer"
2086 nut_muxer_select="riffenc"
2087 nuv_demuxer_select="riffdec"
2088 oga_muxer_select="ogg_muxer"
2089 ogg_demuxer_select="golomb"
2090 opus_muxer_select="ogg_muxer"
2091 psp_muxer_select="mov_muxer"
2092 rtp_demuxer_select="sdp_demuxer"
2093 rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
2094 rtsp_demuxer_select="http_protocol rtpdec"
2095 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2096 sap_demuxer_select="sdp_demuxer"
2097 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2098 sdp_demuxer_select="rtpdec"
2099 smoothstreaming_muxer_select="ismv_muxer"
2100 spdif_muxer_select="aac_parser"
2101 spx_muxer_select="ogg_muxer"
2102 tak_demuxer_select="tak_parser"
2103 tg2_muxer_select="mov_muxer"
2104 tgp_muxer_select="mov_muxer"
2105 w64_demuxer_select="wav_demuxer"
2106 wav_demuxer_select="riffdec"
2107 wav_muxer_select="riffenc"
2108 webm_muxer_select="riffenc"
2109 wtv_demuxer_select="riffdec"
2110 xmv_demuxer_select="riffdec"
2111 xwma_demuxer_select="riffdec"
2112
2113 # indevs / outdevs
2114 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
2115 alsa_outdev_deps="alsa_asoundlib_h"
2116 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2117 dv1394_indev_deps="dv1394"
2118 dv1394_indev_select="dv_demuxer"
2119 fbdev_indev_deps="linux_fb_h"
2120 jack_indev_deps="jack_jack_h pthreads"
2121 libcdio_indev_deps="libcdio"
2122 libdc1394_indev_deps="libdc1394"
2123 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2124 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2125 pulse_indev_deps="libpulse"
2126 sndio_indev_deps="sndio_h"
2127 sndio_outdev_deps="sndio_h"
2128 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2129 vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2130 vfwcap_indev_extralibs="-lavicap32"
2131 x11grab_indev_deps="x11grab"
2132 x11grab_xcb_indev_deps="libxcb"
2133
2134 # protocols
2135 ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2136 ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
2137 ffrtmpcrypt_protocol_select="tcp_protocol"
2138 ffrtmphttp_protocol_deps="!librtmp_protocol"
2139 ffrtmphttp_protocol_select="http_protocol"
2140 gopher_protocol_select="network"
2141 http_protocol_select="tcp_protocol"
2142 httpproxy_protocol_select="tcp_protocol"
2143 https_protocol_select="tls_protocol"
2144 icecast_protocol_select="http_protocol"
2145 librtmp_protocol_deps="librtmp"
2146 librtmpe_protocol_deps="librtmp"
2147 librtmps_protocol_deps="librtmp"
2148 librtmpt_protocol_deps="librtmp"
2149 librtmpte_protocol_deps="librtmp"
2150 mmsh_protocol_select="http_protocol"
2151 mmst_protocol_select="network"
2152 rtmp_protocol_deps="!librtmp_protocol"
2153 rtmp_protocol_select="tcp_protocol"
2154 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2155 rtmps_protocol_deps="!librtmp_protocol"
2156 rtmps_protocol_select="tls_protocol"
2157 rtmpt_protocol_select="ffrtmphttp_protocol"
2158 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2159 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2160 rtp_protocol_select="udp_protocol"
2161 sctp_protocol_deps="struct_sctp_event_subscribe"
2162 sctp_protocol_select="network"
2163 srtp_protocol_select="rtp_protocol"
2164 tcp_protocol_select="network"
2165 tls_protocol_deps_any="openssl gnutls"
2166 tls_protocol_select="tcp_protocol"
2167 udp_protocol_select="network"
2168 unix_protocol_deps="sys_un_h"
2169 unix_protocol_select="network"
2170
2171 # filters
2172 blackframe_filter_deps="gpl"
2173 boxblur_filter_deps="gpl"
2174 bs2b_filter_deps="libbs2b"
2175 cropdetect_filter_deps="gpl"
2176 delogo_filter_deps="gpl"
2177 drawtext_filter_deps="libfreetype"
2178 frei0r_filter_deps="frei0r dlopen"
2179 frei0r_filter_extralibs='$ldl'
2180 frei0r_src_filter_deps="frei0r dlopen"
2181 frei0r_src_filter_extralibs='$ldl'
2182 hqdn3d_filter_deps="gpl"
2183 interlace_filter_deps="gpl"
2184 ocv_filter_deps="libopencv"
2185 resample_filter_deps="avresample"
2186 scale_filter_deps="swscale"
2187
2188 # examples
2189 avcodec_example_deps="avcodec avutil"
2190 filter_audio_example_deps="avfilter avutil"
2191 metadata_example_deps="avformat avutil"
2192 output_example_deps="avcodec avformat avutil swscale"
2193 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11"
2194 transcode_aac_example_deps="avcodec avformat avresample"
2195
2196 # libraries, in linking order
2197 avcodec_deps="avutil"
2198 avdevice_deps="avformat avcodec avutil"
2199 avfilter_deps="avutil"
2200 avformat_deps="avcodec avutil"
2201 avresample_deps="avutil"
2202 swscale_deps="avutil"
2203
2204 # programs
2205 avconv_deps="avcodec avfilter avformat avresample swscale"
2206 avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
2207                fps_filter null_filter resample_filter scale_filter
2208                setpts_filter trim_filter"
2209 avplay_deps="avcodec avformat avresample swscale sdl"
2210 avplay_libs='$sdl_libs'
2211 avplay_select="rdft"
2212 avprobe_deps="avcodec avformat"
2213
2214 # documentation
2215 pod2man_deps="doc"
2216 texi2html_deps="doc"
2217
2218 # default parameters
2219
2220 logfile="config.log"
2221
2222 # installation paths
2223 prefix_default="/usr/local"
2224 bindir_default='${prefix}/bin'
2225 datadir_default='${prefix}/share/avconv'
2226 docdir_default='${prefix}/share/doc/libav'
2227 incdir_default='${prefix}/include'
2228 libdir_default='${prefix}/lib'
2229 mandir_default='${prefix}/share/man'
2230 shlibdir_default="$libdir_default"
2231
2232 # toolchain
2233 ar_default="ar"
2234 cc_default="gcc"
2235 host_cc_default="gcc"
2236 cp_f="cp -f"
2237 ln_s="ln -s -f"
2238 nm_default="nm -g"
2239 objformat="elf"
2240 pkg_config_default=pkg-config
2241 ranlib="ranlib"
2242 strip="strip"
2243 yasmexe="yasm"
2244
2245 # machine
2246 arch_default=$(uname -m)
2247 cpu="generic"
2248 intrinsics="none"
2249
2250 # OS
2251 target_os_default=$(tolower $(uname -s))
2252 host_os=$target_os_default
2253
2254 # configurable options
2255 enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
2256
2257 enable asm
2258 enable debug
2259 enable doc
2260 enable faan faandct faanidct
2261 enable optimizations
2262 enable safe_bitstream_reader
2263 enable static
2264 enable swscale_alpha
2265
2266 # By default, enable only those hwaccels that have no external dependencies.
2267 enable dxva2 vda vdpau
2268
2269 # build settings
2270 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2271 LIBPREF="lib"
2272 LIBSUF=".a"
2273 FULLNAME='$(NAME)$(BUILDSUF)'
2274 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2275 SLIBPREF="lib"
2276 SLIBSUF=".so"
2277 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2278 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2279 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2280 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2281 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2282 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2283
2284 asflags_filter=echo
2285 cflags_filter=echo
2286 ldflags_filter=echo
2287
2288 AS_C='-c'
2289 AS_O='-o $@'
2290 CC_C='-c'
2291 CC_E='-E -o $@'
2292 CC_O='-o $@'
2293 LD_O='-o $@'
2294 LD_LIB='-l%'
2295 LD_PATH='-L'
2296 HOSTCC_C='-c'
2297 HOSTCC_E='-E -o $@'
2298 HOSTCC_O='-o $@'
2299 HOSTLD_O='-o $@'
2300
2301 host_libs='-lm'
2302 host_cflags_filter=echo
2303 host_ldflags_filter=echo
2304
2305 target_path='$(CURDIR)'
2306
2307 # since the object filename is not given with the -MM flag, the compiler
2308 # is only able to print the basename, and we must add the path ourselves
2309 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2310 DEPFLAGS='-MM'
2311
2312 # find source path
2313 if test -f configure; then
2314     source_path=.
2315 else
2316     source_path=$(cd $(dirname "$0"); pwd)
2317     echo "$source_path" | grep -q '[[:blank:]]' &&
2318         die "Out of tree builds are impossible with whitespace in source path."
2319     test -e "$source_path/config.h" &&
2320         die "Out of tree builds are impossible with config.h in source dir."
2321 fi
2322
2323 for v in "$@"; do
2324     r=${v#*=}
2325     l=${v%"$r"}
2326     r=$(sh_quote "$r")
2327     LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
2328 done
2329
2330 find_things(){
2331     thing=$1
2332     pattern=$2
2333     file=$source_path/$3
2334     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2335 }
2336
2337 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2338 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2339 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2340 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2341 BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
2342 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2343 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2344 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2345 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2346 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2347 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2348
2349 ALL_COMPONENTS="
2350     $BSF_LIST
2351     $DECODER_LIST
2352     $DEMUXER_LIST
2353     $ENCODER_LIST
2354     $FILTER_LIST
2355     $HWACCEL_LIST
2356     $INDEV_LIST
2357     $MUXER_LIST
2358     $OUTDEV_LIST
2359     $PARSER_LIST
2360     $PROTOCOL_LIST
2361 "
2362
2363 for n in $COMPONENT_LIST; do
2364     v=$(toupper ${n%s})_LIST
2365     eval enable \$$v
2366     eval ${n}_if_any="\$$v"
2367 done
2368
2369 enable $ARCH_EXT_LIST
2370
2371 die_unknown(){
2372     echo "Unknown option \"$1\"."
2373     echo "See $0 --help for available options."
2374     exit 1
2375 }
2376
2377 print_3_columns() {
2378     cat | tr ' ' '\n' | sort | pr -r -3 -t
2379 }
2380
2381 show_list() {
2382     suffix=_$1
2383     shift
2384     echo $* | sed s/$suffix//g | print_3_columns
2385     exit 0
2386 }
2387
2388 rand_list(){
2389     IFS=', '
2390     set -- $*
2391     unset IFS
2392     for thing; do
2393         comp=${thing%:*}
2394         prob=${thing#$comp}
2395         prob=${prob#:}
2396         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2397         echo "prob ${prob:-0.5}"
2398         printf '%s\n' $comp
2399     done
2400 }
2401
2402 do_random(){
2403     action=$1
2404     shift
2405     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2406     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2407 }
2408
2409 for opt do
2410     optval="${opt#*=}"
2411     case "$opt" in
2412         --extra-ldflags=*)
2413             add_ldflags $optval
2414         ;;
2415         --extra-ldexeflags=*)
2416             add_ldexeflags $optval
2417         ;;
2418         --extra-libs=*)
2419             add_extralibs $optval
2420         ;;
2421         --disable-devices)
2422             disable $INDEV_LIST $OUTDEV_LIST
2423         ;;
2424         --enable-debug=*)
2425             debuglevel="$optval"
2426         ;;
2427         --disable-programs)
2428             disable $PROGRAM_LIST
2429         ;;
2430         --disable-everything)
2431             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2432         ;;
2433         --disable-all)
2434             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2435             disable $LIBRARY_LIST $PROGRAM_LIST doc
2436         ;;
2437         --enable-random|--disable-random)
2438             action=${opt%%-random}
2439             do_random ${action#--} $COMPONENT_LIST
2440         ;;
2441         --enable-random=*|--disable-random=*)
2442             action=${opt%%-random=*}
2443             do_random ${action#--} $optval
2444         ;;
2445         --enable-*=*|--disable-*=*)
2446             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2447             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2448             eval list=\$$(toupper $thing)_LIST
2449             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2450             $action $(filter "$name" $list)
2451         ;;
2452         --enable-avserver|--disable-avserver*)
2453             warn "avserver has been removed, the ${opt} option is only"\
2454                  "provided for compatibility and will be removed in the future"
2455         ;;
2456         --enable-?*|--disable-?*)
2457             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2458             if is_in $option $COMPONENT_LIST; then
2459                 test $action = disable && action=unset
2460                 eval $action \$$(toupper ${option%s})_LIST
2461             elif is_in $option $CMDLINE_SELECT; then
2462                 $action $option
2463             else
2464                 die_unknown $opt
2465             fi
2466         ;;
2467         --list-*)
2468             NAME="${opt#--list-}"
2469             is_in $NAME $COMPONENT_LIST || die_unknown $opt
2470             NAME=${NAME%s}
2471             eval show_list $NAME \$$(toupper $NAME)_LIST
2472         ;;
2473         --help|-h) show_help
2474         ;;
2475         *)
2476             optname="${opt%%=*}"
2477             optname="${optname#--}"
2478             optname=$(echo "$optname" | sed 's/-/_/g')
2479             if is_in $optname $CMDLINE_SET; then
2480                 eval $optname='$optval'
2481             elif is_in $optname $CMDLINE_APPEND; then
2482                 append $optname "$optval"
2483             else
2484                 die_unknown $opt
2485             fi
2486         ;;
2487     esac
2488 done
2489
2490 disabled logging && logfile=/dev/null
2491
2492 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2493 set >> $logfile
2494
2495 test -n "$cross_prefix" && enable cross_compile
2496
2497 if enabled cross_compile; then
2498     test -n "$arch" && test -n "$target_os" ||
2499         die "Must specify target arch and OS when cross-compiling"
2500 fi
2501
2502 case "$toolchain" in
2503     clang-asan)
2504         cc_default="clang"
2505         add_cflags  -fsanitize=address
2506         add_ldflags -fsanitize=address
2507     ;;
2508     clang-tsan)
2509         cc_default="clang"
2510         add_cflags  -fsanitize=thread -pie
2511         add_ldflags -fsanitize=thread -pie
2512     ;;
2513     clang-usan)
2514         cc_default="clang"
2515         add_cflags  -fsanitize=undefined -O1
2516         add_ldflags -fsanitize=undefined
2517     ;;
2518     gcc-asan)
2519         cc_default="gcc"
2520         add_cflags  -fsanitize=address
2521         add_ldflags -fsanitize=address
2522     ;;
2523     gcc-tsan)
2524         cc_default="gcc"
2525         add_cflags  -fsanitize=thread -pie -fPIC
2526         add_ldflags -fsanitize=thread -pie -fPIC
2527     ;;
2528     gcc-usan)
2529         cc_default="gcc"
2530         add_cflags  -fsanitize=undefined
2531         add_ldflags -fsanitize=undefined
2532     ;;
2533     valgrind-massif)
2534         target_exec_default="valgrind"
2535         target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
2536     ;;
2537     valgrind-memcheck)
2538         target_exec_default="valgrind"
2539         target_exec_args="--track-origins=yes --leak-check=full"
2540     ;;
2541     msvc)
2542         # Check whether the current MSVC version needs the C99 converter.
2543         # From MSVC 2013 (compiler major version 18) onwards, it does actually
2544         # support enough of C99 to build libav. Default to the new
2545         # behaviour if the regexp was unable to match anything, since this
2546         # successfully parses the version number of existing supported
2547         # versions that require the converter (MSVC 2010 and 2012).
2548         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2549         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
2550             cc_default="cl"
2551         else
2552             cc_default="c99wrap cl"
2553         fi
2554         ld_default="link"
2555         nm_default="dumpbin -symbols"
2556         ar_default="lib"
2557         target_os_default="win32"
2558         # Use a relative path for TMPDIR. This makes sure all the
2559         # ffconf temp files are written with a relative path, avoiding
2560         # issues with msys/win32 path conversion for MSVC parameters
2561         # such as -Fo<file> or -out:<file>.
2562         TMPDIR=.
2563     ;;
2564     icl)
2565         cc_default="icl"
2566         ld_default="xilink"
2567         nm_default="dumpbin -symbols"
2568         ar_default="xilib"
2569         target_os_default="win32"
2570         TMPDIR=.
2571     ;;
2572     gcov)
2573         add_cflags  -fprofile-arcs -ftest-coverage
2574         add_ldflags -fprofile-arcs -ftest-coverage
2575     ;;
2576     hardened)
2577         add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
2578         add_cflags   -fno-strict-overflow -fstack-protector-all
2579         add_ldflags  -Wl,-z,relro -Wl,-z,now
2580     ;;
2581     ?*)
2582         die "Unknown toolchain $toolchain"
2583     ;;
2584 esac
2585
2586 ar_default="${cross_prefix}${ar_default}"
2587 cc_default="${cross_prefix}${cc_default}"
2588 nm_default="${cross_prefix}${nm_default}"
2589 pkg_config_default="${cross_prefix}${pkg_config_default}"
2590 ranlib="${cross_prefix}${ranlib}"
2591 strip="${cross_prefix}${strip}"
2592
2593 sysinclude_default="${sysroot}/usr/include"
2594
2595 set_default arch cc pkg_config sysinclude target_exec target_os
2596 enabled cross_compile || host_cc_default=$cc
2597 set_default host_cc
2598
2599 if ! $pkg_config --version >/dev/null 2>&1; then
2600     warn "$pkg_config not found, library detection may fail."
2601     pkg_config=false
2602 fi
2603
2604 exesuf() {
2605     case $1 in
2606         mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2607     esac
2608 }
2609
2610 EXESUF=$(exesuf $target_os)
2611 HOSTEXESUF=$(exesuf $host_os)
2612
2613 # set temporary file name
2614 : ${TMPDIR:=$TEMPDIR}
2615 : ${TMPDIR:=$TMP}
2616 : ${TMPDIR:=/tmp}
2617
2618 if ! check_cmd mktemp -u XXXXXX; then
2619     # simple replacement for missing mktemp
2620     # NOT SAFE FOR GENERAL USE
2621     mktemp(){
2622         echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2623     }
2624 fi
2625
2626 tmpfile(){
2627     tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
2628         (set -C; exec > $tmp) 2>/dev/null ||
2629         die "Unable to create temporary file in $TMPDIR."
2630     append TMPFILES $tmp
2631     eval $1=$tmp
2632 }
2633
2634 trap 'rm -f -- $TMPFILES' EXIT
2635
2636 tmpfile TMPASM .asm
2637 tmpfile TMPC   .c
2638 tmpfile TMPE   $EXESUF
2639 tmpfile TMPH   .h
2640 tmpfile TMPO   .o
2641 tmpfile TMPS   .S
2642 tmpfile TMPSH  .sh
2643 tmpfile TMPV   .ver
2644
2645 unset -f mktemp
2646
2647 chmod +x $TMPE
2648
2649 # make sure we can execute files in $TMPDIR
2650 cat > $TMPSH 2>> $logfile <<EOF
2651 #! /bin/sh
2652 EOF
2653 chmod +x $TMPSH >> $logfile 2>&1
2654 if ! $TMPSH >> $logfile 2>&1; then
2655     cat <<EOF
2656 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
2657 variable to another directory and make sure that it is not mounted noexec.
2658 EOF
2659     die "Sanity test failed."
2660 fi
2661
2662 armasm_flags(){
2663     for flag; do
2664         case $flag in
2665             # Filter out MSVC cl.exe options from cflags that shouldn't
2666             # be passed to gas-preprocessor
2667             -M[TD]*)                                            ;;
2668             *)                  echo $flag                      ;;
2669         esac
2670    done
2671 }
2672
2673 ccc_flags(){
2674     for flag; do
2675         case $flag in
2676             -std=c99)           echo -c99                       ;;
2677             -mcpu=*)            echo -arch ${flag#*=}           ;;
2678             -mieee)             echo -ieee                      ;;
2679             -O*|-fast)          echo $flag                      ;;
2680             -fno-math-errno)    echo -assume nomath_errno       ;;
2681             -g)                 echo -g3                        ;;
2682             -Wall)              echo -msg_enable level2         ;;
2683             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
2684             -Wl,*)              echo $flag                      ;;
2685             -f*|-W*)                                            ;;
2686             *)                  echo $flag                      ;;
2687         esac
2688    done
2689 }
2690
2691 cparser_flags(){
2692     for flag; do
2693         case $flag in
2694             -Wno-switch)             echo -Wno-switch-enum ;;
2695             -Wno-format-zero-length) ;;
2696             -Wdisabled-optimization) ;;
2697             -Wno-pointer-sign)       echo -Wno-other ;;
2698             *)                       echo $flag ;;
2699         esac
2700     done
2701 }
2702
2703 msvc_common_flags(){
2704     for flag; do
2705         case $flag in
2706             # In addition to specifying certain flags under the compiler
2707             # specific filters, they must be specified here as well or else the
2708             # generic catch all at the bottom will print the original flag.
2709             -Wall)                ;;
2710             -std=c99)             ;;
2711             # Common flags
2712             -fomit-frame-pointer) ;;
2713             -g)                   echo -Z7 ;;
2714             -fno-math-errno)      ;;
2715             -fno-common)          ;;
2716             -fno-signed-zeros)    ;;
2717             -fPIC)                ;;
2718             -mthumb)              ;;
2719             -march=*)             ;;
2720             -lz)                  echo zlib.lib ;;
2721             -lavifil32)           echo vfw32.lib ;;
2722             -lavicap32)           echo vfw32.lib user32.lib ;;
2723             -l*)                  echo ${flag#-l}.lib ;;
2724             -L*)                  echo -libpath:${flag#-L} ;;
2725             *)                    echo $flag ;;
2726         esac
2727     done
2728 }
2729
2730 msvc_flags(){
2731     msvc_common_flags "$@"
2732     for flag; do
2733         case $flag in
2734             -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
2735                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2736                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2737                                        -wd4273 -wd4701 ;;
2738         esac
2739     done
2740 }
2741
2742 icl_flags(){
2743     msvc_common_flags "$@"
2744     for flag; do
2745         case $flag in
2746             # Despite what Intel's documentation says -Wall, which is supported
2747             # on Windows, does enable remarks so disable them here.
2748             -Wall)                echo $flag -Qdiag-disable:remark ;;
2749             -std=c99)             echo -Qstd=c99 ;;
2750         esac
2751     done
2752 }
2753
2754 pgi_flags(){
2755     for flag; do
2756         case $flag in
2757             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
2758             -fomit-frame-pointer) echo -Mnoframe ;;
2759             -g)                   echo -gopt ;;
2760             *)                    echo $flag ;;
2761         esac
2762     done
2763 }
2764
2765 suncc_flags(){
2766     for flag; do
2767         case $flag in
2768             -march=*|-mcpu=*)
2769                 case "${flag#*=}" in
2770                     native)                   echo -xtarget=native       ;;
2771                     v9|niagara)               echo -xarch=sparc          ;;
2772                     ultrasparc)               echo -xarch=sparcvis       ;;
2773                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2774                     i586|pentium)             echo -xchip=pentium        ;;
2775                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
2776                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
2777                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
2778                     pentium4*)          echo -xtarget=pentium4           ;;
2779                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
2780                     *-sse3)             echo -xarch=sse3                 ;;
2781                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
2782                     corei7)           echo -xarch=sse4_2 -xchip=nehalem  ;;
2783                     corei7-avx)       echo -xarch=avx -xchip=sandybridge ;;
2784                     amdfam10|barcelona|bdver*) echo -xarch=sse4_1        ;;
2785                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
2786                     k8|opteron|athlon64|athlon-fx)
2787                                                echo -xarch=sse2a         ;;
2788                     athlon*)                   echo -xarch=pentium_proa  ;;
2789                 esac
2790                 ;;
2791             -std=c99)             echo -xc99              ;;
2792             -fomit-frame-pointer) echo -xregs=frameptr    ;;
2793             -fPIC)                echo -KPIC -xcode=pic32 ;;
2794             -W*,*)                echo $flag              ;;
2795             -f*-*|-W*|-mimpure-text)                      ;;
2796             -shared)              echo -G                 ;;
2797             *)                    echo $flag              ;;
2798         esac
2799     done
2800 }
2801
2802 tms470_flags(){
2803     for flag; do
2804         case $flag in
2805             -march=*|-mcpu=*)
2806                 case "${flag#*=}" in
2807                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
2808                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
2809                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
2810                     armv6*|arm11*)          echo -mv=6   ;;
2811                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
2812                                             echo -mv=5e  ;;
2813                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
2814                 esac
2815                 ;;
2816             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
2817             -mfpu=vfp)      echo --float_support=vfpv2        ;;
2818             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2819             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
2820             -msoft-float)   echo --float_support=vfplib       ;;
2821             -O[0-3]|-mf=*)  echo $flag                        ;;
2822             -g)             echo -g -mn                       ;;
2823             -pds=*)         echo $flag                        ;;
2824             -D*|-I*)        echo $flag                        ;;
2825             --gcc|--abi=*)  echo $flag                        ;;
2826             -me)            echo $flag                        ;;
2827         esac
2828     done
2829 }
2830
2831 probe_cc(){
2832     pfx=$1
2833     _cc=$2
2834
2835     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
2836     unset _ld_o _ldflags _ld_lib _ld_path
2837     unset _depflags _DEPCMD _DEPFLAGS
2838     _flags_filter=echo
2839
2840     if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
2841         _type=llvm_gcc
2842         gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
2843         _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
2844         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2845         _cflags_speed='-O3'
2846         _cflags_size='-Os'
2847     elif $_cc -v 2>&1 | grep -qi ^gcc; then
2848         _type=gcc
2849         gcc_version=$($_cc --version | head -n1)
2850         gcc_basever=$($_cc -dumpversion)
2851         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
2852         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
2853         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
2854         if ! $_cc -dumpversion | grep -q '^2\.'; then
2855             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2856         fi
2857         _cflags_speed='-O3'
2858         _cflags_size='-Os'
2859     elif $_cc --version 2>/dev/null | grep -q ^icc; then
2860         _type=icc
2861         _ident=$($_cc --version | head -n1)
2862         _depflags='-MMD'
2863         _cflags_speed='-O3'
2864         _cflags_size='-Os'
2865         _cflags_noopt='-O1'
2866     elif $_cc -v 2>&1 | grep -q xlc; then
2867         _type=xlc
2868         _ident=$($_cc -qversion 2>/dev/null | head -n1)
2869         _cflags_speed='-O5'
2870         _cflags_size='-O5 -qcompact'
2871     elif $_cc -V 2>/dev/null | grep -q Compaq; then
2872         _type=ccc
2873         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
2874         _DEPFLAGS='-M'
2875         _cflags_speed='-fast'
2876         _cflags_size='-O1'
2877         _flags_filter=ccc_flags
2878     elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
2879         test -d "$sysroot" || die "No valid sysroot specified."
2880         _type=armcc
2881         _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
2882         armcc_conf="$PWD/armcc.conf"
2883         $_cc --arm_linux_configure                 \
2884              --arm_linux_config_file="$armcc_conf" \
2885              --configure_sysroot="$sysroot"        \
2886              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
2887              die "Error creating armcc configuration file."
2888         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
2889         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
2890         as_default="${cross_prefix}gcc"
2891         _depflags='-MMD'
2892         _cflags_speed='-O3'
2893         _cflags_size='-Os'
2894     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2895         _type=tms470
2896         _ident=$($_cc -version | head -n1 | tr -s ' ')
2897         _flags='--gcc --abi=eabi -me'
2898         _cc_e='-ppl -fe=$@'
2899         _cc_o='-fe=$@'
2900         _depflags='-ppa -ppd=$(@:.o=.d)'
2901         _cflags_speed='-O3 -mf=5'
2902         _cflags_size='-O3 -mf=2'
2903         _flags_filter=tms470_flags
2904     elif $_cc -v 2>&1 | grep -q clang; then
2905         _type=clang
2906         _ident=$($_cc --version | head -n1)
2907         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2908         _cflags_speed='-O3'
2909         _cflags_size='-Os'
2910     elif $_cc -V 2>&1 | grep -q Sun; then
2911         _type=suncc
2912         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2913         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2914         _DEPFLAGS='-xM1 -xc99'
2915         _ldflags='-std=c99'
2916         _cflags_speed='-O5'
2917         _cflags_size='-O5 -xspace'
2918         _flags_filter=suncc_flags
2919     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2920         _type=pathscale
2921         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2922         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2923         _cflags_speed='-O2'
2924         _cflags_size='-Os'
2925         _flags_filter='filter_out -Wdisabled-optimization'
2926     elif $_cc -v 2>&1 | grep -q Open64; then
2927         _type=open64
2928         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
2929         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
2930         _cflags_speed='-O2'
2931         _cflags_size='-Os'
2932         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2933     elif $_cc -V 2>&1 | grep -q Portland; then
2934         _type=pgi
2935         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
2936         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2937         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
2938         _cflags_size="-O2 -Munroll=c:1 $opt_common"
2939         _cflags_noopt="-O1"
2940         _flags_filter=pgi_flags
2941     elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
2942         _type=armasm
2943         _ident=$($_cc | head -n1)
2944         # 4509: "This form of conditional instruction is deprecated"
2945         _flags="-nologo -ignore 4509"
2946         _flags_filter=armasm_flags
2947     elif $_cc 2>&1 | grep -q Microsoft; then
2948         _type=msvc
2949         _ident=$($cc 2>&1 | head -n1)
2950         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
2951         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
2952         _cflags_speed="-O2"
2953         _cflags_size="-O1"
2954         if $_cc 2>&1 | grep -q Linker; then
2955             _ld_o='-out:$@'
2956         else
2957             _ld_o='-Fe$@'
2958         fi
2959         _cc_o='-Fo$@'
2960         _cc_e='-P -Fi$@'
2961         _flags_filter=msvc_flags
2962         _ld_lib='lib%.a'
2963         _ld_path='-libpath:'
2964         _flags='-nologo'
2965         _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
2966         if [ $pfx = hostcc ]; then
2967             append _cflags -Dsnprintf=_snprintf
2968         fi
2969     elif $_cc 2>&1 | grep -q Intel; then
2970         _type=icl
2971         _ident=$($cc 2>&1 | head -n1)
2972         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
2973         # Not only is O3 broken on 13.x+ but it is slower on all previous
2974         # versions (tested) as well.
2975         _cflags_speed="-O2"
2976         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
2977         if $_cc 2>&1 | grep -q Linker; then
2978             _ld_o='-out:$@'
2979         else
2980             _ld_o='-Fe$@'
2981         fi
2982         _cc_o='-Fo$@'
2983         _cc_e='-P'
2984         _flags_filter=icl_flags
2985         _ld_lib='lib%.a'
2986         _ld_path='-libpath:'
2987         # -Qdiag-error to make icl error when seeing certain unknown arguments
2988         _flags='-nologo -Qdiag-error:4044,10157'
2989         # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
2990         # with MSVC which enables it by default.
2991         _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
2992         if [ $pfx = hostcc ]; then
2993             append _cflags -Dsnprintf=_snprintf
2994         fi
2995     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
2996         _type=cparser
2997         _ident=$($_cc --version | head -n1)
2998         _depflags='-MMD'
2999         _cflags_speed='-O4'
3000         _cflags_size='-O2'
3001         _flags_filter=cparser_flags
3002     fi
3003
3004     eval ${pfx}_type=\$_type
3005     eval ${pfx}_ident=\$_ident
3006 }
3007
3008 set_ccvars(){
3009     eval ${1}_C=\${_cc_c-\${${1}_C}}
3010     eval ${1}_E=\${_cc_e-\${${1}_E}}
3011     eval ${1}_O=\${_cc_o-\${${1}_O}}
3012
3013     if [ -n "$_depflags" ]; then
3014         eval ${1}_DEPFLAGS=\$_depflags
3015     else
3016         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3017         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3018         eval DEP${1}FLAGS=\$_flags
3019     fi
3020 }
3021
3022 probe_cc cc "$cc"
3023 cflags_filter=$_flags_filter
3024 cflags_speed=$_cflags_speed
3025 cflags_size=$_cflags_size
3026 cflags_noopt=$_cflags_noopt
3027 add_cflags $_flags $_cflags
3028 cc_ldflags=$_ldflags
3029 set_ccvars CC
3030
3031 probe_cc hostcc "$host_cc"
3032 host_cflags_filter=$_flags_filter
3033 add_host_cflags  $_flags $_cflags
3034 set_ccvars HOSTCC
3035
3036 test -n "$cc_type" && enable $cc_type ||
3037     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3038
3039 : ${as_default:=$cc}
3040 : ${dep_cc_default:=$cc}
3041 : ${ld_default:=$cc}
3042 : ${host_ld_default:=$host_cc}
3043 set_default ar as dep_cc ld host_ld
3044
3045 probe_cc as "$as"
3046 asflags_filter=$_flags_filter
3047 add_asflags $_flags $_cflags
3048 set_ccvars AS
3049
3050 probe_cc ld "$ld"
3051 ldflags_filter=$_flags_filter
3052 add_ldflags $_flags $_ldflags
3053 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3054 LD_O=${_ld_o-$LD_O}
3055 LD_LIB=${_ld_lib-$LD_LIB}
3056 LD_PATH=${_ld_path-$LD_PATH}
3057
3058 probe_cc hostld "$host_ld"
3059 host_ldflags_filter=$_flags_filter
3060 add_host_ldflags $_flags $_ldflags
3061 HOSTLD_O=${_ld_o-$HOSTLD_O}
3062
3063 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3064     probe_cc depcc "$dep_cc"
3065     CCDEP=${_DEPCMD:-$DEPCMD}
3066     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3067     DEPCCFLAGS=$_flags
3068 fi
3069
3070 if $ar 2>&1 | grep -q Microsoft; then
3071     arflags="-nologo"
3072     ar_o='-out:$@'
3073 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3074     arflags="rq"
3075     ar_o='$@'
3076 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3077     arflags='-Xany -r -c'
3078     ar_o='$@'
3079 else
3080     arflags="rc"
3081     ar_o='$@'
3082 fi
3083
3084 add_cflags $extra_cflags
3085 add_asflags $extra_cflags
3086
3087 if test -n "$sysroot"; then
3088     case "$cc_type" in
3089         gcc|llvm_gcc|clang)
3090             add_cppflags --sysroot="$sysroot"
3091             add_ldflags --sysroot="$sysroot"
3092         ;;
3093         tms470)
3094             add_cppflags -I"$sysinclude"
3095             add_ldflags  --sysroot="$sysroot"
3096         ;;
3097     esac
3098 fi
3099
3100 if test "$cpu" = host; then
3101     enabled cross_compile &&
3102         die "--cpu=host makes no sense when cross-compiling."
3103
3104     case "$cc_type" in
3105         gcc|llvm_gcc)
3106             check_native(){
3107                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3108                 sed -n "/cc1.*$1=/{
3109                             s/.*$1=\\([^ ]*\\).*/\\1/
3110                             p
3111                             q
3112                         }" $TMPE
3113             }
3114             cpu=$(check_native -march || check_native -mcpu)
3115         ;;
3116     esac
3117
3118     test "${cpu:-host}" = host &&
3119         die "--cpu=host not supported with compiler $cc"
3120 fi
3121
3122 # Deal with common $arch aliases
3123 case "$arch" in
3124     aarch64|arm64)
3125         arch="aarch64"
3126     ;;
3127     arm*)
3128         arch="arm"
3129     ;;
3130     mips*|IP*)
3131         arch="mips"
3132     ;;
3133     parisc*|hppa*)
3134         arch="parisc"
3135     ;;
3136     "Power Macintosh"|ppc*|powerpc*)
3137         arch="ppc"
3138     ;;
3139     s390|s390x)
3140         arch="s390"
3141     ;;
3142     sh4|sh)
3143         arch="sh4"
3144     ;;
3145     sun4u|sparc*)
3146         arch="sparc"
3147     ;;
3148     tilegx|tile-gx)
3149         arch="tilegx"
3150     ;;
3151     i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
3152         arch="x86"
3153     ;;
3154 esac
3155
3156 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3157 enable $arch
3158
3159 # Add processor-specific flags
3160 if enabled aarch64; then
3161
3162     case $cpu in
3163         armv*)
3164             cpuflags="-march=$cpu"
3165         ;;
3166         *)
3167             cpuflags="-mcpu=$cpu"
3168         ;;
3169     esac
3170
3171 elif enabled alpha; then
3172
3173     cpuflags="-mcpu=$cpu"
3174
3175 elif enabled arm; then
3176
3177     check_arm_arch() {
3178         check_cpp_condition stddef.h \
3179             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3180             $cpuflags
3181     }
3182
3183     probe_arm_arch() {
3184         if   check_arm_arch 4;        then echo armv4;
3185         elif check_arm_arch 4T;       then echo armv4t;
3186         elif check_arm_arch 5;        then echo armv5;
3187         elif check_arm_arch 5E;       then echo armv5e;
3188         elif check_arm_arch 5T;       then echo armv5t;
3189         elif check_arm_arch 5TE;      then echo armv5te;
3190         elif check_arm_arch 5TEJ;     then echo armv5te;
3191         elif check_arm_arch 6;        then echo armv6;
3192         elif check_arm_arch 6J;       then echo armv6j;
3193         elif check_arm_arch 6K;       then echo armv6k;
3194         elif check_arm_arch 6Z;       then echo armv6z;
3195         elif check_arm_arch 6ZK;      then echo armv6zk;
3196         elif check_arm_arch 6T2;      then echo armv6t2;
3197         elif check_arm_arch 7;        then echo armv7;
3198         elif check_arm_arch 7A  7_A;  then echo armv7-a;
3199         elif check_arm_arch 7R  7_R;  then echo armv7-r;
3200         elif check_arm_arch 7M  7_M;  then echo armv7-m;
3201         elif check_arm_arch 7EM 7E_M; then echo armv7-m;
3202         elif check_arm_arch 8A  8_A;  then echo armv8-a;
3203         fi
3204     }
3205
3206     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3207
3208     case $cpu in
3209         armv*)
3210             cpuflags="-march=$cpu"
3211             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3212         ;;
3213         *)
3214             cpuflags="-mcpu=$cpu"
3215             case $cpu in
3216                 cortex-a*)                               subarch=armv7a  ;;
3217                 cortex-r*)                               subarch=armv7r  ;;
3218                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3219                 arm11*)                                  subarch=armv6   ;;
3220                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3221                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3222                 *)                             subarch=$(probe_arm_arch) ;;
3223             esac
3224         ;;
3225     esac
3226
3227     case "$subarch" in
3228         armv5t*)    enable fast_clz                ;;
3229         armv[6-8]*) enable fast_clz fast_unaligned ;;
3230     esac
3231
3232 elif enabled avr32; then
3233
3234     case $cpu in
3235         ap7[02]0[0-2])
3236             subarch="avr32_ap"
3237             cpuflags="-mpart=$cpu"
3238         ;;
3239         ap)
3240             subarch="avr32_ap"
3241             cpuflags="-march=$cpu"
3242         ;;
3243         uc3[ab]*)
3244             subarch="avr32_uc"
3245             cpuflags="-mcpu=$cpu"
3246         ;;
3247         uc)
3248             subarch="avr32_uc"
3249             cpuflags="-march=$cpu"
3250         ;;
3251     esac
3252
3253 elif enabled bfin; then
3254
3255     cpuflags="-mcpu=$cpu"
3256
3257 elif enabled mips; then
3258
3259     cpuflags="-march=$cpu"
3260
3261 elif enabled ppc; then
3262
3263     disable ldbrx
3264
3265     case $(tolower $cpu) in
3266         601|ppc601|powerpc601)
3267             cpuflags="-mcpu=601"
3268             disable altivec
3269         ;;
3270         603*|ppc603*|powerpc603*)
3271             cpuflags="-mcpu=603"
3272             disable altivec
3273         ;;
3274         604*|ppc604*|powerpc604*)
3275             cpuflags="-mcpu=604"
3276             disable altivec
3277         ;;
3278         g3|75*|ppc75*|powerpc75*)
3279             cpuflags="-mcpu=750"
3280             disable altivec
3281         ;;
3282         g4|745*|ppc745*|powerpc745*)
3283             cpuflags="-mcpu=7450"
3284         ;;
3285         74*|ppc74*|powerpc74*)
3286             cpuflags="-mcpu=7400"
3287         ;;
3288         g5|970|ppc970|powerpc970)
3289             cpuflags="-mcpu=970"
3290         ;;
3291         power[3-7]*)
3292             cpuflags="-mcpu=$cpu"
3293         ;;
3294         cell)
3295             cpuflags="-mcpu=cell"
3296             enable ldbrx
3297         ;;
3298         e500mc)
3299             cpuflags="-mcpu=e500mc"
3300             disable altivec
3301         ;;
3302         e500v2)
3303             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3304             disable altivec
3305             disable dcbzl
3306         ;;
3307         e500)
3308             cpuflags="-mcpu=8540 -mhard-float"
3309             disable altivec
3310             disable dcbzl
3311         ;;
3312     esac
3313
3314 elif enabled sparc; then
3315
3316     case $cpu in
3317         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3318             cpuflags="-mcpu=$cpu"
3319         ;;
3320         ultrasparc*|niagara[234])
3321             cpuflags="-mcpu=$cpu"
3322         ;;
3323     esac
3324
3325 elif enabled x86; then
3326
3327     case $cpu in
3328         i[345]86|pentium)
3329             cpuflags="-march=$cpu"
3330             disable i686
3331             disable mmx
3332         ;;
3333         # targets that do NOT support nopl and conditional mov (cmov)
3334         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3335             cpuflags="-march=$cpu"
3336             disable i686
3337         ;;
3338         # targets that do support nopl and conditional mov (cmov)
3339         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*)
3340             cpuflags="-march=$cpu"
3341             enable i686
3342             enable fast_cmov
3343         ;;
3344         # targets that do support conditional mov but on which it's slow
3345         pentium4|pentium4m|prescott|nocona)
3346             cpuflags="-march=$cpu"
3347             enable i686
3348             disable fast_cmov
3349         ;;
3350     esac
3351
3352 fi
3353
3354 if [ "$cpu" != generic ]; then
3355     add_cflags  $cpuflags
3356     add_asflags $cpuflags
3357 fi
3358
3359 # compiler sanity check
3360 check_exec <<EOF
3361 int main(void){ return 0; }
3362 EOF
3363 if test "$?" != 0; then
3364     echo "$cc is unable to create an executable file."
3365     if test -z "$cross_prefix" && ! enabled cross_compile ; then
3366         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3367         echo "Only do this if you know what cross compiling means."
3368     fi
3369     die "C compiler test failed."
3370 fi
3371
3372 add_cppflags -D_ISOC99_SOURCE
3373 check_cflags -std=c99
3374 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3375 #include <stdlib.h>
3376 EOF
3377 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3378 #include <stdlib.h>
3379 EOF
3380
3381 add_host_cppflags -D_ISOC99_SOURCE
3382 check_host_cflags -std=c99
3383 check_host_cflags -Wall
3384 check_host_cflags -O3
3385
3386 check_64bit(){
3387     arch32=$1
3388     arch64=$2
3389     expr=$3
3390     check_code cc "" "int test[2*($expr) - 1]" &&
3391         subarch=$arch64 || subarch=$arch32
3392 }
3393
3394 case "$arch" in
3395     aarch64|alpha|ia64)
3396         spic=$shared
3397     ;;
3398     mips)
3399         check_64bit mips mips64 '_MIPS_SIM > 1'
3400         spic=$shared
3401     ;;
3402     parisc)
3403         check_64bit parisc parisc64 'sizeof(void *) > 4'
3404         spic=$shared
3405     ;;
3406     ppc)
3407         check_64bit ppc ppc64 'sizeof(void *) > 4'
3408         spic=$shared
3409     ;;
3410     s390)
3411         check_64bit s390 s390x 'sizeof(void *) > 4'
3412         spic=$shared
3413     ;;
3414     sparc)
3415         check_64bit sparc sparc64 'sizeof(void *) > 4'
3416         spic=$shared
3417     ;;
3418     x86)
3419         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3420         if test "$subarch" = "x86_64"; then
3421             spic=$shared
3422         fi
3423     ;;
3424 esac
3425
3426 enable $subarch
3427 enabled spic && enable_weak pic
3428
3429 # OS specific
3430 case $target_os in
3431     aix)
3432         SHFLAGS=-shared
3433         add_cppflags '-I\$(SRC_PATH)/compat/aix'
3434         enabled shared && add_ldflags -Wl,-brtl
3435         ;;
3436     android)
3437         disable symver
3438         enable section_data_rel_ro
3439         SLIB_INSTALL_NAME='$(SLIBNAME)'
3440         SLIB_INSTALL_LINKS=
3441         # soname not set on purpose
3442         SHFLAGS=-shared
3443         ;;
3444     haiku)
3445         prefix_default="/boot/common"
3446         network_extralibs="-lnetwork"
3447         host_libs=
3448         ;;
3449     sunos)
3450         SHFLAGS='-shared -Wl,-h,$$(@F)'
3451         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3452         network_extralibs="-lsocket -lnsl"
3453         # When using suncc to build, the Solaris linker will mark
3454         # an executable with each instruction set encountered by
3455         # the Solaris assembler.  As our libraries contain their own
3456         # guards for processor-specific code, instead suppress
3457         # generation of the HWCAPS ELF section on Solaris x86 only.
3458         enabled_all suncc x86 &&
3459             echo "hwcap_1 = OVERRIDE;" > mapfile &&
3460             add_ldflags -Wl,-M,mapfile
3461         nm_default='nm -P -g'
3462         ;;
3463     netbsd)
3464         disable symver
3465         oss_indev_extralibs="-lossaudio"
3466         oss_outdev_extralibs="-lossaudio"
3467         ;;
3468     openbsd|bitrig)
3469         disable symver
3470         SHFLAGS='-shared'
3471         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3472         SLIB_INSTALL_LINKS=
3473         oss_indev_extralibs="-lossaudio"
3474         oss_outdev_extralibs="-lossaudio"
3475         ;;
3476     dragonfly)
3477         disable symver
3478         ;;
3479     freebsd)
3480         ;;
3481     bsd/os)
3482         add_extralibs -lpoll -lgnugetopt
3483         ;;
3484     darwin)
3485         enabled ppc && add_asflags -force_cpusubtype_ALL
3486         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3487         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3488         add_ldflags -Wl,-dynamic,-search_paths_first
3489         SLIBSUF=".dylib"
3490         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
3491         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
3492         objformat="macho"
3493         enabled x86_64 && objformat="macho64"
3494         enabled_any pic shared ||
3495             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3496         ;;
3497     mingw32*)
3498         if test $target_os = "mingw32ce"; then
3499             disable network
3500         else
3501             target_os=mingw32
3502         fi
3503         LIBTARGET=i386
3504         if enabled x86_64; then
3505             LIBTARGET="i386:x86-64"
3506         elif enabled arm; then
3507             LIBTARGET=arm-wince
3508         fi
3509         check_ldflags -Wl,--nxcompat
3510         check_ldflags -Wl,--dynamicbase
3511         shlibdir_default="$bindir_default"
3512         SLIBPREF=""
3513         SLIBSUF=".dll"
3514         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3515         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3516         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)'
3517         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3518         SLIB_INSTALL_LINKS=
3519         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3520         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3521         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'
3522         objformat="win32"
3523         dlltool="${cross_prefix}dlltool"
3524         ranlib=:
3525         enable dos_paths
3526         ;;
3527     win32|win64)
3528         disable symver
3529         if enabled shared; then
3530             # Link to the import library instead of the normal static library
3531             # for shared libs.
3532             LD_LIB='%.lib'
3533             # Cannot build both shared and static libs with MSVC or icl.
3534             disable static
3535         fi
3536         shlibdir_default="$bindir_default"
3537         SLIBPREF=""
3538         SLIBSUF=".dll"
3539         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3540         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3541         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3542         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3543         SLIB_INSTALL_LINKS=
3544         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
3545         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3546         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3547         objformat="win32"
3548         ranlib=:
3549         enable dos_paths
3550         ;;
3551     cygwin*)
3552         target_os=cygwin
3553         shlibdir_default="$bindir_default"
3554         SLIBPREF="cyg"
3555         SLIBSUF=".dll"
3556         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
3557         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3558         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
3559         SLIB_INSTALL_LINKS=
3560         SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
3561         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
3562         objformat="win32"
3563         enable dos_paths
3564         ;;
3565     *-dos|freedos|opendos)
3566         network_extralibs="-lsocket"
3567         objformat="coff"
3568         enable dos_paths
3569         add_cppflags -U__STRICT_ANSI__
3570         ;;
3571     linux)
3572         enable dv1394
3573         enable section_data_rel_ro
3574         ;;
3575     irix*)
3576         target_os=irix
3577         ranlib="echo ignoring ranlib"
3578         ;;
3579     os/2*)
3580         ln_s="cp -f"
3581         objformat="aout"
3582         add_cppflags -D_GNU_SOURCE
3583         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3584         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3585         LIBSUF="_s.a"
3586         SLIBPREF=""
3587         SLIBSUF=".dll"
3588         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
3589         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3590         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3591             echo PROTMODE >> $(SUBDIR)$(NAME).def; \
3592             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
3593             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
3594             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
3595             emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3596         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3597             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3598         SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3599         enable dos_paths
3600         ;;
3601     gnu/kfreebsd)
3602         add_cppflags -D_BSD_SOURCE
3603         ;;
3604     gnu)
3605         ;;
3606     qnx)
3607         add_cppflags -D_QNX_SOURCE
3608         network_extralibs="-lsocket"
3609         ;;
3610     symbian)
3611         SLIBSUF=".dll"
3612         enable dos_paths
3613         add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
3614         add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
3615         add_ldflags -Wl,--target1-abs,--no-undefined \
3616                     -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
3617                     -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
3618         add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
3619                       -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
3620                       -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3621         ;;
3622     osf1)
3623         add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3624         ;;
3625     minix)
3626         ;;
3627     plan9)
3628         add_cppflags -D_C99_SNPRINTF_EXTENSION  \
3629                      -D_REENTRANT_SOURCE        \
3630                      -D_RESEARCH_SOURCE         \
3631                      -DFD_SETSIZE=96            \
3632                      -DHAVE_SOCK_OPTS
3633         add_compat strtod.o strtod=avpriv_strtod
3634         network_extralibs='-lbsd'
3635         exeobjs=compat/plan9/main.o
3636         cp_f='cp'
3637         ;;
3638     none)
3639         ;;
3640     *)
3641         die "Unknown OS '$target_os'."
3642         ;;
3643 esac
3644
3645 # determine libc flavour
3646
3647 probe_libc(){
3648     pfx=$1
3649     pfx_no_=${pfx%_}
3650     # uclibc defines __GLIBC__, so it needs to be checked before glibc.
3651     if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
3652         eval ${pfx}libc_type=uclibc
3653         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3654     elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
3655         eval ${pfx}libc_type=glibc
3656         add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3657     # MinGW headers can be installed on Cygwin, so check for newlib first.
3658     elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
3659         eval ${pfx}libc_type=newlib
3660         add_${pfx}cppflags -U__STRICT_ANSI__
3661     # MinGW64 is backwards compatible with MinGW32, so check for it first.
3662     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
3663         eval ${pfx}libc_type=mingw64
3664         add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3665         eval test \$${pfx_no_}cc_type = "gcc" &&
3666             add_${pfx}cppflags -D__printf__=__gnu_printf__
3667     elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
3668          check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
3669         eval ${pfx}libc_type=mingw32
3670         check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
3671             (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
3672             die "ERROR: MinGW32 runtime version must be >= 3.15."
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 crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
3677         eval ${pfx}libc_type=msvcrt
3678         # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
3679         # 0x601 by default unless something else is set by the user.
3680         # This can easily lead to us detecting functions only present
3681         # in such new versions and producing binaries requiring windows 7.0.
3682         # Therefore explicitly set the default to XP unless the user has
3683         # set something else on the command line.
3684         check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
3685             add_${pfx}cppflags -D_WIN32_WINNT=0x0502
3686     elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
3687         eval ${pfx}libc_type=klibc
3688     elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
3689         eval ${pfx}libc_type=bionic
3690     elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
3691         eval ${pfx}libc_type=solaris
3692         add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3693     else
3694         eval ${pfx}libc_type=default
3695         add_${pfx}cppflags -D_DEFAULT_SOURCE
3696     fi
3697 }
3698
3699 probe_libc
3700 test -n "$libc_type" && enable libc_$libc_type
3701 probe_libc host_
3702 test -n "$host_libc_type" && enable host_libc_$host_libc_type
3703
3704 case $libc_type in
3705     bionic)
3706         add_compat strtod.o strtod=avpriv_strtod
3707         ;;
3708     msvcrt)
3709         add_compat strtod.o strtod=avpriv_strtod
3710         add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
3711                                      _snprintf=avpriv_snprintf  \
3712                                      vsnprintf=avpriv_vsnprintf
3713         ;;
3714 esac
3715
3716 # hacks for compiler/libc/os combinations
3717
3718 if enabled_all tms470 libc_glibc; then
3719     CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3720     add_cppflags -D__USER_LABEL_PREFIX__=
3721     add_cppflags -D__builtin_memset=memset
3722     add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
3723     add_cflags   -pds=48    # incompatible redefinition of macro
3724 fi
3725
3726 if enabled_all ccc libc_glibc; then
3727     add_ldflags -Wl,-z,now  # calls to libots crash without this
3728 fi
3729
3730 check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
3731     add_cppflags '-I\$(SRC_PATH)/compat/float'
3732
3733 esc(){
3734     echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
3735 }
3736
3737 echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
3738
3739 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3740
3741 set_default $PATHS_LIST
3742 set_default nm
3743
3744 # we need to build at least one lib type
3745 if ! enabled_any static shared; then
3746     cat <<EOF
3747 At least one library type must be built.
3748 Specify --enable-static to build the static libraries or --enable-shared to
3749 build the shared libraries as well. To only build the shared libraries specify
3750 --disable-static in addition to --enable-shared.
3751 EOF
3752     exit 1;
3753 fi
3754
3755 die_license_disabled() {
3756     enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3757 }
3758
3759 die_license_disabled gpl libcdio
3760 die_license_disabled gpl libx264
3761 die_license_disabled gpl libx265
3762 die_license_disabled gpl libxavs
3763 die_license_disabled gpl libxvid
3764 die_license_disabled gpl x11grab
3765
3766 die_license_disabled nonfree libfaac
3767 die_license_disabled nonfree libfdk_aac
3768 die_license_disabled nonfree openssl
3769
3770 die_license_disabled version3 libopencore_amrnb
3771 die_license_disabled version3 libopencore_amrwb
3772 die_license_disabled version3 libvo_aacenc
3773 die_license_disabled version3 libvo_amrwbenc
3774
3775 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3776
3777 disabled optimizations || check_cflags -fomit-frame-pointer
3778
3779 enable_weak_pic() {
3780     disabled pic && return
3781     enable pic
3782     add_cppflags -DPIC
3783     case "$target_os" in
3784     mingw*|cygwin*)
3785         ;;
3786     *)
3787         add_cflags -fPIC
3788         ;;
3789     esac
3790     add_asflags  -fPIC
3791 }
3792
3793 enabled pic && enable_weak_pic
3794
3795 check_cc <<EOF || die "Symbol mangling check failed."
3796 int ff_extern;
3797 EOF
3798 sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3799 extern_prefix=${sym%%ff_extern*}
3800
3801 check_cc <<EOF && enable_weak inline_asm
3802 void foo(void) { __asm__ volatile ("" ::); }
3803 EOF
3804
3805 _restrict=
3806 for restrict_keyword in restrict __restrict__ __restrict; do
3807     check_cc <<EOF && _restrict=$restrict_keyword && break
3808 void foo(char * $restrict_keyword p);
3809 EOF
3810 done
3811
3812 check_cc <<EOF && enable pragma_deprecated
3813 void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
3814 EOF
3815
3816 check_cc <<EOF && enable attribute_packed
3817 struct { int x; } __attribute__((packed)) x;
3818 EOF
3819
3820 check_cc <<EOF && enable attribute_may_alias
3821 union { int x; } __attribute__((may_alias)) x;
3822 EOF
3823
3824 check_cc <<EOF || die "endian test failed"
3825 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
3826 EOF
3827 od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3828
3829 check_gas() {
3830     log "check_gas using '$as' as AS"
3831     # :vararg is used on aarch64, arm and ppc altivec
3832     check_as <<EOF || return 1
3833 .macro m n, y:vararg=0
3834 \n: .int \y
3835 .endm
3836 m x
3837 EOF
3838     # .altmacro is only used in arm asm
3839     ! enabled arm || check_as <<EOF || return 1
3840 .altmacro
3841 EOF
3842     enable gnu_as
3843     return 0
3844 }
3845
3846 if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
3847     nogas=:
3848     enabled_any arm aarch64 && nogas=die
3849     enabled_all ppc altivec && nogas=warn
3850     as_noop=-v
3851
3852     case $as_type in
3853         arm*) gaspp_as_type=armasm; as_noop=-h ;;
3854         gcc)  gaspp_as_type=gas ;;
3855         *)    gaspp_as_type=$as_type ;;
3856     esac
3857
3858     [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"
3859
3860     check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as $as_noop &&
3861         gas="gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as"
3862
3863     if ! check_gas ; then
3864         as=${gas:=$as}
3865         check_gas || \
3866             $nogas "GNU assembler not found, install/update gas-preprocessor"
3867     fi
3868
3869     check_as <<EOF && enable as_func
3870 .func test
3871 .endfunc
3872 EOF
3873 fi
3874
3875 check_inline_asm inline_asm_labels '"1:\n"'
3876
3877 if enabled aarch64; then
3878     enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
3879     # internal assembler in clang 3.3 does not support this instruction
3880     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
3881     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
3882
3883     map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM
3884
3885 elif enabled alpha; then
3886
3887     check_cflags -mieee
3888
3889 elif enabled arm; then
3890
3891     check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
3892     enabled thumb && check_cflags -mthumb || check_cflags -marm
3893
3894     if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
3895         enable vfp_args
3896     elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
3897         case "${cross_prefix:-$cc}" in
3898             *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
3899             *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3900 __asm__ (".eabi_attribute 28, 1");
3901 int main(void) { return 0; }
3902 EOF
3903         esac
3904         warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
3905     fi
3906
3907     enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
3908     enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
3909     enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
3910     enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
3911     enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
3912     enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'
3913
3914     [ $target_os = linux ] || [ $target_os = android ] ||
3915         map 'enabled_any ${v}_external ${v}_inline || disable $v' \
3916             $ARCH_EXT_LIST_ARM
3917
3918     check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
3919
3920     check_as <<EOF && enable as_dn_directive
3921 ra .dn d0.i16
3922 .unreq ra
3923 EOF
3924
3925     # llvm's integrated assembler supports .object_arch from llvm 3.5
3926     [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
3927 .object_arch armv4
3928 EOF
3929
3930     [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
3931
3932 elif enabled mips; then
3933
3934     check_inline_asm loongson '"dmult.g $1, $2, $3"'
3935
3936 elif enabled parisc; then
3937
3938     if enabled gcc; then
3939         case $($cc -dumpversion) in
3940             4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
3941         esac
3942     fi
3943
3944 elif enabled ppc; then
3945
3946     enable local_aligned_8 local_aligned_16
3947
3948     check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
3949     check_inline_asm ibm_asm   '"add 0, 0, 0"'
3950     check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
3951     check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
3952
3953     # AltiVec flags: The FSF version of GCC differs from the Apple version
3954     if enabled altivec; then
3955         check_cflags -maltivec -mabi=altivec &&
3956         { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
3957         check_cflags -faltivec
3958
3959         # check if our compiler supports Motorola AltiVec C API
3960         check_cc <<EOF || disable altivec
3961 $inc_altivec_h
3962 int main(void) {
3963     vector signed int v1 = (vector signed int) { 0 };
3964     vector signed int v2 = (vector signed int) { 1 };
3965     v1 = vec_add(v1, v2);
3966     return 0;
3967 }
3968 EOF
3969
3970         enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3971     fi
3972
3973 elif enabled x86; then
3974
3975     check_builtin rdtsc    intrin.h   "__rdtsc()"
3976     check_builtin mm_empty mmintrin.h "_mm_empty()"
3977
3978     enable local_aligned_8 local_aligned_16
3979
3980     # check whether EBP is available on x86
3981     # As 'i' is stored on the stack, this program will crash
3982     # if the base pointer is used to access it because the
3983     # base pointer is cleared in the inline assembly code.
3984     check_exec_crash <<EOF && enable ebp_available
3985 volatile int i=0;
3986 __asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
3987 return i;
3988 EOF
3989
3990     # check whether EBX is available on x86
3991     check_inline_asm ebx_available '""::"b"(0)' &&
3992         check_inline_asm ebx_available '"":::"%ebx"'
3993
3994     # check whether xmm clobbers are supported
3995     check_inline_asm xmm_clobbers '"":::"%xmm0"'
3996
3997     # check whether binutils is new enough to compile SSSE3/MMXEXT
3998     enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
3999     enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4000
4001     if ! disabled_any asm mmx yasm; then
4002         if check_cmd $yasmexe --version; then
4003             enabled x86_64 && yasm_extra="-m amd64"
4004             yasm_debug="-g dwarf2"
4005         elif check_cmd nasm -v; then
4006             yasmexe=nasm
4007             yasm_debug="-g -F dwarf"
4008             enabled x86_64 && test "$objformat" = elf && objformat=elf64
4009         fi
4010
4011         YASMFLAGS="-f $objformat $yasm_extra"
4012         enabled pic               && append YASMFLAGS "-DPIC"
4013         test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
4014         case "$objformat" in
4015             elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
4016         esac
4017
4018         check_yasm "movbe ecx, [5]" && enable yasm ||
4019             die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4020         check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
4021         check_yasm "vfmadd132ps ymm0, ymm1, ymm2"    || disable fma3_external
4022         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4023         check_yasm "CPU amdnop" || disable cpunop
4024     fi
4025
4026     case "$cpu" in
4027         athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
4028             disable fast_clz
4029         ;;
4030     esac
4031
4032 fi
4033
4034 check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
4035
4036 check_ldflags -Wl,--as-needed
4037
4038 if check_func dlopen; then
4039     ldl=
4040 elif check_func dlopen -ldl; then
4041     ldl=-ldl
4042 fi
4043
4044 if ! disabled network; then
4045     check_func getaddrinfo $network_extralibs
4046     check_func getservbyport $network_extralibs
4047     check_func inet_aton $network_extralibs
4048
4049     check_type netdb.h "struct addrinfo"
4050     check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
4051     check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4052     check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4053     check_type poll.h "struct pollfd"