bitstream: Avoid undefined behavior in bitstream_skip()
[libav.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   --quiet                  Suppress showing informative output
67   --list-decoders          show all available decoders
68   --list-encoders          show all available encoders
69   --list-hwaccels          show all available hardware accelerators
70   --list-demuxers          show all available demuxers
71   --list-muxers            show all available muxers
72   --list-parsers           show all available parsers
73   --list-protocols         show all available protocols
74   --list-bsfs              show all available bitstream filters
75   --list-indevs            show all available input devices
76   --list-outdevs           show all available output devices
77   --list-filters           show all available filters
78
79 Standard options:
80   --logfile=FILE           log tests and output to FILE [avbuild/config.log]
81   --disable-logging        do not log configure debug information
82   --prefix=PREFIX          install in PREFIX [$prefix_default]
83   --bindir=DIR             install binaries in DIR [PREFIX/bin]
84   --datadir=DIR            install data files in DIR [PREFIX/share/avconv]
85   --docdir=DIR             install documentation in DIR [PREFIX/share/doc/libav]
86   --libdir=DIR             install libs in DIR [PREFIX/lib]
87   --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
88   --incdir=DIR             install includes in DIR [PREFIX/include]
89   --mandir=DIR             install man page in DIR [PREFIX/share/man]
90   --enable-rpath           use rpath when linking programs (USE WITH CARE)
91
92 Licensing options:
93   --enable-gpl             allow use of GPL code, the resulting libs
94                            and binaries will be under GPL [no]
95   --enable-version3        upgrade (L)GPL to version 3 [no]
96   --enable-nonfree         allow use of nonfree code, the resulting libs
97                            and binaries will be unredistributable [no]
98
99 Configuration options:
100   --disable-static         do not build static libraries [no]
101   --enable-shared          build shared libraries [no]
102   --enable-small           optimize for size instead of speed
103   --enable-runtime-cpudetect detect CPU capabilities at runtime (bigger binary)
104   --enable-gray            enable full grayscale support (slower color)
105   --disable-swscale-alpha  disable alpha channel support in swscale
106   --disable-all            disable building components, libraries and programs
107
108 Program options:
109   --disable-programs       do not build command line programs
110   --disable-avconv         disable avconv build
111   --disable-avplay         disable avplay build
112   --disable-avprobe        disable avprobe build
113   --disable-avserver       deprecated, does nothing
114
115 Component options:
116   --disable-doc            do not build documentation
117   --disable-pod2man        do not build manual pages
118   --disable-texi2html      do not build HTML documentation
119   --disable-avdevice       disable libavdevice build
120   --disable-avcodec        disable libavcodec build
121   --disable-avformat       disable libavformat build
122   --disable-avutil         disable libavutil build
123   --disable-swscale        disable libswscale build
124   --disable-avfilter       disable video filter support [no]
125   --disable-avresample     disable libavresample build [no]
126   --disable-pthreads       disable pthreads [auto]
127   --disable-w32threads     disable Win32 threads [auto]
128   --disable-network        disable network support [no]
129   --disable-dct            disable DCT code
130   --disable-error-resilience disable error resilience code
131   --disable-lsp            disable LSP code
132   --disable-lzo            disable LZO decoder code
133   --disable-mdct           disable MDCT code
134   --disable-rdft           disable RDFT code
135   --disable-fft            disable FFT code
136   --disable-faan           disable floating point AAN (I)DCT code
137
138 Individual component options:
139   --disable-everything     disable all components listed below
140   --disable-encoder=NAME   disable encoder NAME
141   --enable-encoder=NAME    enable encoder NAME
142   --disable-encoders       disable all encoders
143   --disable-decoder=NAME   disable decoder NAME
144   --enable-decoder=NAME    enable decoder NAME
145   --disable-decoders       disable all decoders
146   --disable-hwaccel=NAME   disable hwaccel NAME
147   --enable-hwaccel=NAME    enable hwaccel NAME
148   --disable-hwaccels       disable all hwaccels
149   --disable-muxer=NAME     disable muxer NAME
150   --enable-muxer=NAME      enable muxer NAME
151   --disable-muxers         disable all muxers
152   --disable-demuxer=NAME   disable demuxer NAME
153   --enable-demuxer=NAME    enable demuxer NAME
154   --disable-demuxers       disable all demuxers
155   --enable-parser=NAME     enable parser NAME
156   --disable-parser=NAME    disable parser NAME
157   --disable-parsers        disable all parsers
158   --enable-bsf=NAME        enable bitstream filter NAME
159   --disable-bsf=NAME       disable bitstream filter NAME
160   --disable-bsfs           disable all bitstream filters
161   --enable-protocol=NAME   enable protocol NAME
162   --disable-protocol=NAME  disable protocol NAME
163   --disable-protocols      disable all protocols
164   --enable-indev=NAME      enable input device NAME
165   --disable-indev=NAME     disable input device NAME
166   --disable-indevs         disable input devices
167   --enable-outdev=NAME     enable output device NAME
168   --disable-outdev=NAME    disable output device NAME
169   --disable-outdevs        disable output devices
170   --disable-devices        disable all devices
171   --enable-filter=NAME     enable filter NAME
172   --disable-filter=NAME    disable filter NAME
173   --disable-filters        disable all filters
174
175 External library support:
176
177   Using any of the following switches will allow Libav to link to the
178   corresponding external library. All the components depending on that library
179   will become enabled, if all their other dependencies are met and they are not
180   explicitly disabled. E.g. --enable-libwavpack will enable linking to
181   libwavpack and allow the libwavpack encoder to be built, unless it is
182   specifically disabled with --disable-encoder=libwavpack.
183
184   Note that only the system libraries are auto-detected. All the other external
185   libraries must be explicitly enabled.
186
187   Also note that the following help text describes the purpose of the libraries
188   themselves, not all their features will necessarily be usable by Libav.
189
190   --enable-avisynth          video frameserver
191   --enable-avxsynth          Linux version of AviSynth
192   --enable-bzlib             bzip2 compression [autodetect]
193   --enable-frei0r            video filtering plugins
194   --enable-gnutls            crypto
195   --enable-libbs2b           Bauer stereophonic-to-binaural DSP
196   --enable-libcdio           audio CD input
197   --enable-libdc1394         IEEE 1394/Firewire camera input
198   --enable-libdcadec         DCA audio decoding
199   --enable-libfaac           AAC audio encoding
200   --enable-libfdk-aac        AAC audio encoding/decoding
201   --enable-libfontconfig     font configuration and management
202   --enable-libfreetype       font rendering
203   --enable-libgsm            GSM audio encoding/decoding
204   --enable-libhdcd           HDCD decoding filter
205   --enable-libilbc           ILBC audio encoding/decoding
206   --enable-libjack           JACK audio sound server
207   --enable-libkvazaar        HEVC video encoding
208   --enable-libmp3lame        MP3 audio encoding
209   --enable-libopencore-amrnb AMR-NB audio encoding/decoding
210   --enable-libopencore-amrwb AMR-WB audio decoding
211   --enable-libopencv         computer vision
212   --enable-libopenh264       H.264 video encoding/decoding
213   --enable-libopenjpeg       JPEG 2000 image encoding/decoding
214   --enable-libopus           Opus audio encoding/decoding
215   --enable-libpulse          Pulseaudio sound server
216   --enable-librtmp           RTMP streaming
217   --enable-libschroedinger   Dirac video encoding/decoding
218   --enable-libsnappy         snappy compression
219   --enable-libspeex          Speex audio encoding/decoding
220   --enable-libtheora         Theora video encoding/decoding
221   --enable-libtwolame        MP2 audio encoding
222   --enable-libvo-aacenc      AAC audio encoding
223   --enable-libvo-amrwbenc    AMR-WB audio encoding
224   --enable-libvorbis         Vorbis audio encoding/decoding
225   --enable-libvpx            VP* video encoding/decoding
226   --enable-libwavpack        Wavpack audio encoding/decoding
227   --enable-libwebp           WebP image encoding/decoding
228   --enable-libx264           H.264 video encoding
229   --enable-libx265           HEVC video encoding
230   --enable-libxavs           Chinese AVS video encoding
231   --enable-libxcb            X window system protocol communication
232   --enable-libxcb-shm        X11 shm communication [auto]
233   --enable-libxcb-xfixes     X11 mouse rendering [auto]
234   --enable-libxvid           MPEG-4 ASP video encoding
235   --enable-openssl           crypto
236   --enable-zlib              compression [autodetect]
237
238   The following libraries provide various hardware acceleration features:
239   --enable-cuda    Nvidia CUDA (dynamically linked)
240   --enable-d3d11va Microsoft Direct3D 11 video acceleration [auto]
241   --enable-dxva2   Microsoft DirectX 9 video acceleration [auto]
242   --enable-libmfx  Intel MediaSDK (AKA Quick Sync Video)
243   --enable-libnpp  Nvidia CUDA processing
244   --enable-mmal    Broadcom Multi-Media Abstraction Layer (Raspberry Pi)
245   --enable-nvenc   Nvidia video encoding
246   --enable-omx     OpenMAX IL
247   --enable-omx-rpi OpenMAX IL for Raspberry Pi
248   --enable-vaapi   Video Acceleration API (mainly Unix/Intel)
249   --enable-vda     Apple Video Decode Acceleration [auto]
250   --enable-vdpau   Nvidia Video Decode and Presentation API for Unix [auto]
251
252 Toolchain options:
253   --arch=ARCH              select architecture [$arch]
254   --cpu=CPU                select the minimum required CPU (affects
255                            instruction selection, may crash on older CPUs)
256   --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
257   --enable-cross-compile   assume a cross-compiler is used
258   --sysroot=PATH           root of cross-build tree
259   --sysinclude=PATH        location of cross-build system headers
260   --target-os=OS           compiler targets OS [$target_os]
261   --target-exec=CMD        command to run executables on target
262   --target-path=DIR        path to view of build directory on target
263   --target-samples=DIR     path to samples directory on target
264   --toolchain=NAME         set tool defaults according to NAME
265   --nm=NM                  use nm tool
266   --ar=AR                  use archive tool AR [$ar_default]
267   --as=AS                  use assembler AS [$as_default]
268   --cc=CC                  use C compiler CC [$cc_default]
269   --objcc=OCC              use ObjC compiler OCC [$cc_default]
270   --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
271   --ld=LD                  use linker LD
272   --x86asmexe=X86ASM       use x86 assembler X86ASM
273   --pkg-config=PKGCONFIG   use pkg-config tool PKGCONFIG [$pkg_config_default]
274   --pkg-config-flags=FLAGS pass additional flags to pkgconf []
275   --host-cc=HOSTCC         use host C compiler HOSTCC
276   --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
277   --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
278   --host-ld=HOSTLD         use host linker HOSTLD
279   --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
280   --host-libs=HLIBS        use libs HLIBS when linking for host
281   --host-os=OS             compiler host OS [$target_os]
282   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
283   --extra-objcflags=FLAGS  add FLAGS to OBJCFLAGS [$CFLAGS]
284   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
285   --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
286   --extra-ldsoflags=ELDFLAGS add ELDFLAGS to LDSOFLAGS [$LDSOFLAGS]
287   --extra-libs=ELIBS       add ELIBS [$ELIBS]
288   --extra-version=STRING   version string suffix []
289   --optflags=OPTFLAGS      override optimization-related compiler flags
290   --enable-pic             build position-independent code
291   --enable-thumb           compile for Thumb instruction set
292   --enable-lto             use link-time optimization
293   --env="ENV=override"     override the environment variables
294
295 Advanced options (experts only):
296   --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
297   --custom-allocator=NAME  use a supported custom allocator
298   --disable-symver         disable symbol versioning
299   --enable-hardcoded-tables use hardcoded tables instead of runtime generation
300   --disable-safe-bitstream-reader
301                            disable buffer boundary checking in bitreaders
302                            (faster, but may crash)
303   --enable-sram            allow use of on-chip SRAM
304
305 Optimization options (experts only):
306   --disable-asm            disable all assembly optimizations
307   --disable-altivec        disable AltiVec optimizations
308   --disable-vsx            disable VSX optimizations
309   --disable-power8         disable POWER8 optimizations
310   --disable-amd3dnow       disable 3DNow! optimizations
311   --disable-amd3dnowext    disable 3DNow! extended optimizations
312   --disable-mmx            disable MMX optimizations
313   --disable-mmxext         disable MMXEXT optimizations
314   --disable-sse            disable SSE optimizations
315   --disable-sse2           disable SSE2 optimizations
316   --disable-sse3           disable SSE3 optimizations
317   --disable-ssse3          disable SSSE3 optimizations
318   --disable-sse4           disable SSE4 optimizations
319   --disable-sse42          disable SSE4.2 optimizations
320   --disable-avx            disable AVX optimizations
321   --disable-xop            disable XOP optimizations
322   --disable-fma3           disable FMA3 optimizations
323   --disable-fma4           disable FMA4 optimizations
324   --disable-avx2           disable AVX2 optimizations
325   --disable-armv5te        disable armv5te optimizations
326   --disable-armv6          disable armv6 optimizations
327   --disable-armv6t2        disable armv6t2 optimizations
328   --disable-vfp            disable VFP optimizations
329   --disable-neon           disable NEON optimizations
330   --disable-inline-asm     disable use of inline assembly
331   --disable-x86asm         disable use of standalone x86 assembly
332
333 Developer options (useful when working on Libav itself):
334   --disable-debug          disable debugging symbols
335   --enable-debug=LEVEL     set the debug level [$debuglevel]
336   --disable-optimizations  disable compiler optimizations
337   --enable-extra-warnings  enable more compiler warnings
338   --samples=PATH           location of test samples for FATE, if not set use
339                            \$LIBAV_SAMPLES at make invocation time.
340   --enable-neon-clobber-test check NEON registers for clobbering (should be
341                            used only for debugging purposes)
342   --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
343                            should be used only for debugging purposes)
344   --enable-random          randomly enable/disable components
345   --disable-random
346   --enable-random=LIST     randomly enable/disable specific components or
347   --disable-random=LIST    component groups. LIST is a comma-separated list
348                            of NAME[:PROB] entries where NAME is a component
349                            (group) and PROB the probability associated with
350                            NAME (default 0.5).
351   --random-seed=VALUE      seed value for --enable/disable-random
352   --disable-valgrind-backtrace do not print a backtrace under Valgrind
353                            (only applies to --disable-optimizations builds)
354   --ignore-tests=TESTS     comma-separated list (without "fate-" prefix
355                            in the name) of tests whose result is ignored
356
357 NOTE: Object files are built at the place where configure is launched.
358 EOF
359   exit 0
360 }
361
362 quotes='""'
363
364 log(){
365     echo "$@" >> $logfile
366 }
367
368 log_file(){
369     log BEGIN $1
370     i=1
371     while read line; do
372         printf '%5s   %s\n' "${i}" "${line}"
373         i=$(($i+1))
374     done < $1 >> $logfile
375     log END $1
376 }
377
378 echolog(){
379     log "$@"
380     echo "$@"
381 }
382
383 warn(){
384     log "WARNING: $*"
385     WARNINGS="${WARNINGS}WARNING: $*\n"
386 }
387
388 die(){
389     echolog "$@"
390     cat <<EOF
391
392 If you think configure made a mistake, make sure you are using the latest
393 version from Git.  If the latest version fails, report the problem to the
394 libav-tools@libav.org mailing list or IRC #libav on irc.freenode.net.
395 EOF
396     if disabled logging; then
397         cat <<EOF
398 Rerun configure with logging enabled (do not use --disable-logging), and
399 include the log this produces with your report.
400 EOF
401     else
402         cat <<EOF
403 Include the log file "$logfile" produced by configure as this will help
404 solving the problem.
405 EOF
406     fi
407     exit 1
408 }
409
410 # Avoid locale weirdness, besides we really just want to translate ASCII.
411 toupper(){
412     echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
413 }
414
415 tolower(){
416     echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
417 }
418
419 c_escape(){
420     echo "$*" | sed 's/["\\]/\\\0/g'
421 }
422
423 sh_quote(){
424     v=$(echo "$1" | sed "s/'/'\\\\''/g")
425     test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
426     echo "$v"
427 }
428
429 cleanws(){
430     echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
431 }
432
433 filter(){
434     pat=$1
435     shift
436     for v; do
437         eval "case '$v' in $pat) printf '%s ' '$v' ;; esac"
438     done
439 }
440
441 filter_out(){
442     pat=$1
443     shift
444     for v; do
445         eval "case '$v' in $pat) ;; *) printf '%s ' '$v' ;; esac"
446     done
447 }
448
449 map(){
450     m=$1
451     shift
452     for v; do eval $m; done
453 }
454
455 add_suffix(){
456     suffix=$1
457     shift
458     for v; do echo ${v}${suffix}; done
459 }
460
461 set_all(){
462     value=$1
463     shift
464     for var in $*; do
465         eval $var=$value
466     done
467 }
468
469 set_weak(){
470     value=$1
471     shift
472     for var; do
473         eval : \${$var:=$value}
474     done
475 }
476
477 sanitize_var_name(){
478     echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
479 }
480
481 set_sanitized(){
482     var=$1
483     shift
484     eval $(sanitize_var_name "$var")='$*'
485 }
486
487 get_sanitized(){
488     eval echo \$$(sanitize_var_name "$1")
489 }
490
491 pushvar(){
492     for pvar in $*; do
493         eval level=\${${pvar}_level:=0}
494         eval ${pvar}_${level}="\$$pvar"
495         eval ${pvar}_level=$(($level+1))
496     done
497 }
498
499 popvar(){
500     for pvar in $*; do
501         eval level=\${${pvar}_level:-0}
502         test $level = 0 && continue
503         eval level=$(($level-1))
504         eval $pvar="\${${pvar}_${level}}"
505         eval ${pvar}_level=$level
506         eval unset ${pvar}_${level}
507     done
508 }
509
510 enable(){
511     set_all yes $*
512 }
513
514 disable(){
515     set_all no $*
516 }
517
518 enable_weak(){
519     set_weak yes $*
520 }
521
522 disable_weak(){
523     set_weak no $*
524 }
525
526 enable_sanitized(){
527     for var; do
528         enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
529     done
530 }
531
532 disable_sanitized(){
533     for var; do
534         disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
535     done
536 }
537
538 do_enable_deep(){
539     for var; do
540         enabled $var && continue
541         eval sel="\$${var}_select"
542         eval sgs="\$${var}_suggest"
543         pushvar var sgs
544         enable_deep $sel
545         popvar sgs
546         enable_deep_weak $sgs
547         popvar var
548     done
549 }
550
551 enable_deep(){
552     do_enable_deep $*
553     enable $*
554 }
555
556 enable_deep_weak(){
557     for var; do
558         disabled $var && continue
559         pushvar var
560         do_enable_deep $var
561         popvar var
562         enable_weak $var
563     done
564 }
565
566 enabled(){
567     test "${1#!}" = "$1" && op== || op=!=
568     eval test "x\$${1#!}" $op "xyes"
569 }
570
571 disabled(){
572     test "${1#!}" = "$1" && op== || op=!=
573     eval test "x\$${1#!}" $op "xno"
574 }
575
576 enabled_all(){
577     for opt; do
578         enabled $opt || return 1
579     done
580 }
581
582 disabled_all(){
583     for opt; do
584         disabled $opt || return 1
585     done
586 }
587
588 enabled_any(){
589     for opt; do
590         enabled $opt && return 0
591     done
592 }
593
594 disabled_any(){
595     for opt; do
596         disabled $opt && return 0
597     done
598     return 1
599 }
600
601 set_default(){
602     for opt; do
603         eval : \${$opt:=\$${opt}_default}
604     done
605 }
606
607 is_in(){
608     value=$1
609     shift
610     for var in $*; do
611         [ $var = $value ] && return 0
612     done
613     return 1
614 }
615
616 check_deps(){
617     for cfg; do
618         enabled ${cfg}_checking && die "Circular dependency for $cfg."
619         disabled ${cfg}_checking && continue
620         enable ${cfg}_checking
621
622         eval dep_all="\$${cfg}_deps"
623         eval dep_any="\$${cfg}_deps_any"
624         eval dep_con="\$${cfg}_conflict"
625         eval dep_sel="\$${cfg}_select"
626         eval dep_sgs="\$${cfg}_suggest"
627         eval dep_ifa="\$${cfg}_if"
628         eval dep_ifn="\$${cfg}_if_any"
629
630         pushvar cfg dep_all dep_any dep_con dep_sel dep_sgs dep_ifa dep_ifn
631         check_deps $dep_all $dep_any $dep_con $dep_sel $dep_sgs $dep_ifa $dep_ifn
632         popvar cfg dep_all dep_any dep_con dep_sel dep_sgs dep_ifa dep_ifn
633
634         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
635         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
636         enabled_all  $dep_all || disable $cfg
637         enabled_any  $dep_any || disable $cfg
638         disabled_all $dep_con || disable $cfg
639         disabled_any $dep_sel && disable $cfg
640
641         enabled $cfg && enable_deep_weak $dep_sel $dep_sgs
642
643         for dep in $dep_all $dep_any $dep_sel $dep_sgs; do
644             # filter out library deps, these do not belong in extralibs
645             is_in $dep $LIBRARY_LIST && continue
646             enabled $dep && eval append ${cfg}_extralibs ${dep}_extralibs
647         done
648
649         disable ${cfg}_checking
650     done
651 }
652
653 print_config(){
654     pfx=$1
655     files=$2
656     shift 2
657     map 'eval echo "$v \${$v:-no}"' "$@" |
658     awk "BEGIN { split(\"$files\", files) }
659         {
660             c = \"$pfx\" toupper(\$1);
661             v = \$2;
662             sub(/yes/, 1, v);
663             sub(/no/,  0, v);
664             for (f in files) {
665                 file = files[f];
666                 if (file ~ /\\.h\$/) {
667                     printf(\"#define %s %d\\n\", c, v) >>file;
668                 } else if (file ~ /\\.asm\$/) {
669                     printf(\"%%define %s %d\\n\", c, v) >>file;
670                 } else if (file ~ /\\.mak\$/) {
671                     n = -v ? \"\" : \"!\";
672                     printf(\"%s%s=yes\\n\", n, c) >>file;
673                 }
674             }
675         }"
676 }
677
678 print_enabled(){
679     suf=$1
680     shift
681     for v; do
682         enabled $v && printf "%s\n" ${v%$suf}
683     done
684 }
685
686 append(){
687     var=$1
688     shift
689     eval "$var=\"\$$var $*\""
690 }
691
692 prepend(){
693     var=$1
694     shift
695     eval "$var=\"$* \$$var\""
696 }
697
698 unique(){
699     var=$1
700     uniq_list=""
701     for tok in $(eval echo \$$var); do
702         uniq_list="$(filter_out $tok $uniq_list) $tok"
703     done
704     eval "$var=\"${uniq_list}\""
705 }
706
707 resolve(){
708     var=$1
709     tmpvar=
710     for entry in $(eval echo \$$var); do
711         tmpvar="$tmpvar $(eval echo \$${entry})"
712     done
713     eval "$var=\"${tmpvar}\""
714 }
715
716 add_cppflags(){
717     append CPPFLAGS "$@"
718 }
719
720 add_cflags(){
721     append CFLAGS $($cflags_filter "$@")
722 }
723
724 add_cflags_headers(){
725     append CFLAGS_HEADERS $($cflags_filter "$@")
726 }
727
728 add_asflags(){
729     append ASFLAGS $($asflags_filter "$@")
730 }
731
732 add_objcflags(){
733     append OBJCFLAGS $($objcflags_filter "$@")
734 }
735
736 add_ldflags(){
737     append LDFLAGS $($ldflags_filter "$@")
738 }
739
740 add_ldexeflags(){
741     append LDEXEFLAGS $($ldflags_filter "$@")
742 }
743
744 add_ldsoflags(){
745     append LDSOFLAGS $($ldflags_filter "$@")
746 }
747
748 add_stripflags(){
749     append STRIPFLAGS "$@"
750 }
751
752 add_extralibs(){
753     prepend extralibs $($ldflags_filter "$@")
754 }
755
756 add_host_cppflags(){
757     append host_cppflags "$@"
758 }
759
760 add_host_cflags(){
761     append host_cflags $($host_cflags_filter "$@")
762 }
763
764 add_host_ldflags(){
765     append host_ldflags $($host_ldflags_filter "$@")
766 }
767
768 add_compat(){
769     append compat_objs $1
770     shift
771     map 'add_cppflags -D$v' "$@"
772 }
773
774 check_cmd(){
775     log "$@"
776     "$@" >> $logfile 2>&1
777 }
778
779 cc_o(){
780     eval printf '%s\\n' $CC_O
781 }
782
783 cc_e(){
784     eval printf '%s\\n' $CC_E
785 }
786
787 check_cc(){
788     log check_cc "$@"
789     cat > $TMPC
790     log_file $TMPC
791     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
792 }
793
794 check_objcc(){
795     log check_objcc "$@"
796     cat > $TMPC
797     log_file $TMPC
798     check_cmd $objcc $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPC
799 }
800
801 check_cpp(){
802     log check_cpp "$@"
803     cat > $TMPC
804     log_file $TMPC
805     check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
806 }
807
808 as_o(){
809     eval printf '%s\\n' $AS_O
810 }
811
812 check_as(){
813     log check_as "$@"
814     cat > $TMPS
815     log_file $TMPS
816     check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
817 }
818
819 check_inline_asm(){
820     log check_inline_asm "$@"
821     name="$1"
822     code="$2"
823     shift 2
824     disable $name
825     check_cc "$@" <<EOF && enable $name
826 void foo(void){ __asm__ volatile($code); }
827 EOF
828 }
829
830 check_insn(){
831     log check_insn "$@"
832     check_inline_asm ${1}_inline "\"$2\""
833     echo "$2" | check_as && enable ${1}_external || disable ${1}_external
834 }
835
836 check_x86asm(){
837     log check_x86asm "$@"
838     echo "$1" > $TMPS
839     log_file $TMPS
840     shift 1
841     check_cmd $x86asmexe $X86ASMFLAGS "$@" -o $TMPO $TMPS
842 }
843
844 ld_o(){
845     eval printf '%s\\n' $LD_O
846 }
847
848 check_ld(){
849     log check_ld "$@"
850     flags=$(filter_out '-l*' "$@")
851     libs=$(filter '-l*' "$@")
852     check_cc $($cflags_filter $flags) || return
853     flags=$($ldflags_filter $flags)
854     libs=$($ldflags_filter $libs)
855     check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
856 }
857
858 print_include(){
859     hdr=$1
860     test "${hdr%.h}" = "${hdr}" &&
861         echo "#include $hdr"    ||
862         echo "#include <$hdr>"
863 }
864
865 check_code(){
866     log check_code "$@"
867     check=$1
868     headers=$2
869     code=$3
870     shift 3
871     {
872         for hdr in $headers; do
873             print_include $hdr
874         done
875         echo "int main(void) { $code; return 0; }"
876     } | check_$check "$@"
877 }
878
879 check_cppflags(){
880     log check_cppflags "$@"
881     check_cpp "$@" <<EOF && append CPPFLAGS "$@"
882 #include <stdlib.h>;
883 EOF
884 }
885
886 test_cflags(){
887     log test_cflags "$@"
888     set -- $($cflags_filter "$@")
889     check_cc "$@" <<EOF
890 int x;
891 EOF
892 }
893
894 check_cflags(){
895     log check_cflags "$@"
896     test_cflags "$@" && add_cflags "$@"
897 }
898
899 test_objcflags(){
900     log test_objcflags "$@"
901     set -- $($objcflags_filter "$@")
902     check_objcc "$@" <<EOF
903 int x;
904 EOF
905 }
906
907 check_objcflags(){
908     log check_objcflags "$@"
909     test_objcflags "$@" && add_objcflags "$@"
910 }
911
912 test_ldflags(){
913     log test_ldflags "$@"
914     check_ld "$@" <<EOF
915 int main(void){ return 0; }
916 EOF
917 }
918
919 check_ldflags(){
920     log check_ldflags "$@"
921     test_ldflags "$@" && add_ldflags "$@"
922 }
923
924 test_stripflags(){
925     log test_stripflags "$@"
926     # call check_cc to get a fresh TMPO
927     check_cc <<EOF
928 int main(void) { return 0; }
929 EOF
930     check_cmd $strip $STRIPFLAGS "$@" $TMPO
931 }
932
933 check_stripflags(){
934     log check_stripflags "$@"
935     test_stripflags "$@" && add_stripflags "$@"
936 }
937
938 check_header(){
939     log check_header "$@"
940     header=$1
941     shift
942     disable_sanitized $header
943     check_cpp "$@" <<EOF && enable_sanitized $header
944 #include <$header>
945 int x;
946 EOF
947 }
948
949 check_func(){
950     log check_func "$@"
951     func=$1
952     shift
953     disable $func
954     check_ld "$@" <<EOF && enable $func
955 extern int $func();
956 int main(void){ $func(); }
957 EOF
958 }
959
960 check_mathfunc(){
961     log check_mathfunc "$@"
962     func=$1
963     narg=$2
964     shift 2
965     test $narg = 2 && args="f, g" || args="f"
966     disable $func
967     check_ld "$@" <<EOF && enable $func
968 #include <math.h>
969 float foo(float f, float g) { return $func($args); }
970 int main(void){ return 0; }
971 EOF
972 }
973
974 check_func_headers(){
975     log check_func_headers "$@"
976     headers=$1
977     funcs=$2
978     shift 2
979     {
980         for hdr in $headers; do
981             print_include $hdr
982         done
983         for func in $funcs; do
984             echo "long check_$func(void) { return (long) $func; }"
985         done
986         echo "int main(void) { return 0; }"
987     } | check_ld "$@" && enable $funcs && enable_sanitized $headers
988 }
989
990 check_cpp_condition(){
991     log check_cpp_condition "$@"
992     header=$1
993     condition=$2
994     shift 2
995     check_cpp "$@" <<EOF
996 #include <$header>
997 #if !($condition)
998 #error "unsatisfied condition: $condition"
999 #endif
1000 EOF
1001 }
1002
1003 test_cflags_cpp(){
1004     log test_cflags_cpp "$@"
1005     flags=$1
1006     condition=$2
1007     shift 2
1008     set -- $($cflags_filter "$flags")
1009     check_cpp "$@" <<EOF
1010 #if !($condition)
1011 #error "unsatisfied condition: $condition"
1012 #endif
1013 EOF
1014 }
1015
1016 check_lib(){
1017     log check_lib "$@"
1018     name="$1"
1019     headers="$2"
1020     funcs="$3"
1021     shift 3
1022     disable $name
1023     check_func_headers "$headers" "$funcs" "$@" &&
1024         enable $name && eval ${name}_extralibs="\$@"
1025 }
1026
1027 check_pkg_config(){
1028     log check_pkg_config "$@"
1029     name="$1"
1030     pkg_version="$2"
1031     pkg="${2%% *}"
1032     headers="$3"
1033     funcs="$4"
1034     shift 4
1035     disable $name
1036     check_cmd $pkg_config --exists --print-errors $pkg_version || return
1037     pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
1038     pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
1039     check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
1040         enable $name &&
1041         add_cflags    "$pkg_cflags" &&
1042         eval $(sanitize_var_name ${name}_extralibs)="\$pkg_libs"
1043 }
1044
1045 check_exec(){
1046     check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1047 }
1048
1049 check_exec_crash(){
1050     log check_exec_crash "$@"
1051     code=$(cat)
1052
1053     # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
1054     # are safe but may not be available everywhere.  Thus we use
1055     # raise(SIGTERM) instead.  The check is run in a subshell so we
1056     # can redirect the "Terminated" message from the shell.  SIGBUS
1057     # is not defined by standard C so it is used conditionally.
1058
1059     (check_exec "$@") >> $logfile 2>&1 <<EOF
1060 #include <signal.h>
1061 static void sighandler(int sig){
1062     raise(SIGTERM);
1063 }
1064 int foo(void){
1065     $code
1066 }
1067 int (*func_ptr)(void) = foo;
1068 int main(void){
1069     signal(SIGILL, sighandler);
1070     signal(SIGFPE, sighandler);
1071     signal(SIGSEGV, sighandler);
1072 #ifdef SIGBUS
1073     signal(SIGBUS, sighandler);
1074 #endif
1075     return func_ptr();
1076 }
1077 EOF
1078 }
1079
1080 check_type(){
1081     log check_type "$@"
1082     headers=$1
1083     type=$2
1084     shift 2
1085     disable_sanitized "$type"
1086     check_code cc "$headers" "$type v" "$@" && enable_sanitized "$type"
1087 }
1088
1089 check_struct(){
1090     log check_struct "$@"
1091     headers=$1
1092     struct=$2
1093     member=$3
1094     shift 3
1095     disable_sanitized "${struct}_${member}"
1096     check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
1097         enable_sanitized "${struct}_${member}"
1098 }
1099
1100 check_builtin(){
1101     log check_builtin "$@"
1102     name=$1
1103     headers=$2
1104     builtin=$3
1105     shift 3
1106     disable "$name"
1107     check_code ld "$headers" "$builtin" "$@" && enable "$name"
1108 }
1109
1110 check_compile_assert(){
1111     log check_compile_assert "$@"
1112     name=$1
1113     headers=$2
1114     condition=$3
1115     shift 3
1116     disable "$name"
1117     check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
1118 }
1119
1120 require(){
1121     log require "$@"
1122     name_version="$1"
1123     name="${1%% *}"
1124     headers="$2"
1125     func="$3"
1126     shift 3
1127     check_lib $name "$headers" $func "$@" || die "ERROR: $name_version not found"
1128 }
1129
1130 require_header(){
1131     log require "$@"
1132     header="$1"
1133     shift
1134     check_header "$header" "$@" || die "ERROR: $header not found"
1135 }
1136
1137 require_cpp_condition(){
1138     log require "$@"
1139     header="$1"
1140     condition="$2"
1141     shift 2
1142     check_cpp_condition "$header" "$condition" "$@" || die "ERROR: $condition not satisfied"
1143 }
1144
1145 require_pkg_config(){
1146     log require_pkg_config "$@"
1147     pkg_version="$2"
1148     check_pkg_config "$@" || die "ERROR: $pkg_version not found"
1149 }
1150
1151 hostcc_e(){
1152     eval printf '%s\\n' $HOSTCC_E
1153 }
1154
1155 hostcc_o(){
1156     eval printf '%s\\n' $HOSTCC_O
1157 }
1158
1159 check_host_cc(){
1160     log check_host_cc "$@"
1161     cat > $TMPC
1162     log_file $TMPC
1163     check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1164 }
1165
1166 check_host_cpp(){
1167     log check_host_cpp "$@"
1168     cat > $TMPC
1169     log_file $TMPC
1170     check_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
1171 }
1172
1173 check_host_cppflags(){
1174     log check_host_cppflags "$@"
1175     check_host_cpp "$@" <<EOF && append host_cppflags "$@"
1176 #include <stdlib.h>;
1177 EOF
1178 }
1179
1180 check_host_cflags(){
1181     log check_host_cflags "$@"
1182     set -- $($host_cflags_filter "$@")
1183     check_host_cc "$@" <<EOF && append host_cflags "$@"
1184 int x;
1185 EOF
1186 }
1187
1188 check_host_cpp_condition(){
1189     log check_host_cpp_condition "$@"
1190     header=$1
1191     condition=$2
1192     shift 2
1193     check_host_cpp "$@" <<EOF
1194 #include <$header>
1195 #if !($condition)
1196 #error "unsatisfied condition: $condition"
1197 #endif
1198 EOF
1199 }
1200
1201 apply(){
1202     file=$1
1203     shift
1204     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
1205 }
1206
1207 cp_if_changed(){
1208     cmp -s "$1" "$2" && { test "$quiet" != "yes" && echo "$2 is unchanged"; } && return
1209     mkdir -p "$(dirname $2)"
1210     cp -f "$1" "$2"
1211 }
1212
1213 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
1214 # system-dependent things.
1215
1216 AVCODEC_COMPONENTS="
1217     bsfs
1218     decoders
1219     encoders
1220     hwaccels
1221     parsers
1222 "
1223
1224 AVDEVICE_COMPONENTS="
1225     indevs
1226     outdevs
1227 "
1228 AVFILTER_COMPONENTS="
1229     filters
1230 "
1231 AVFORMAT_COMPONENTS="
1232     demuxers
1233     muxers
1234     protocols
1235 "
1236
1237 AVRESAMPLE_COMPONENTS=""
1238 AVUTIL_COMPONENTS=""
1239
1240 COMPONENT_LIST="
1241     $AVCODEC_COMPONENTS
1242     $AVDEVICE_COMPONENTS
1243     $AVFILTER_COMPONENTS
1244     $AVFORMAT_COMPONENTS
1245     $AVRESAMPLE_COMPONENTS
1246     $AVUTIL_COMPONENTS
1247 "
1248
1249 EXAMPLE_LIST="
1250     decode_audio_example
1251     decode_video_example
1252     encode_audio_example
1253     encode_video_example
1254     filter_audio_example
1255     metadata_example
1256     output_example
1257     qsvdec_example
1258     transcode_aac_example
1259 "
1260
1261 # catchall list of things that require external libs to link
1262 EXTRALIBS_LIST="
1263     cpu_init
1264     cws2fws
1265 "
1266
1267 HWACCEL_LIBRARY_NONFREE_LIST="
1268     cuda
1269     libnpp
1270 "
1271 HWACCEL_LIBRARY_LIST="
1272     $HWACCEL_LIBRARY_NONFREE_LIST
1273     d3d11va
1274     dxva2
1275     libmfx
1276     mmal
1277     nvenc
1278     omx
1279     vaapi
1280     vda
1281     vdpau
1282 "
1283
1284 EXTERNAL_LIBRARY_GPL_LIST="
1285     libcdio
1286     libx264
1287     libx265
1288     libxavs
1289     libxvid
1290 "
1291
1292 EXTERNAL_LIBRARY_NONFREE_LIST="
1293     libfaac
1294     libfdk_aac
1295     openssl
1296 "
1297
1298 EXTERNAL_LIBRARY_VERSION3_LIST="
1299     libopencore_amrnb
1300     libopencore_amrwb
1301     libvo_aacenc
1302     libvo_amrwbenc
1303 "
1304
1305 EXTERNAL_LIBRARY_LIST="
1306     $EXTERNAL_LIBRARY_GPL_LIST
1307     $EXTERNAL_LIBRARY_NONFREE_LIST
1308     $EXTERNAL_LIBRARY_VERSION3_LIST
1309     avisynth
1310     avxsynth
1311     frei0r
1312     gnutls
1313     libbs2b
1314     libdc1394
1315     libdcadec
1316     libfontconfig
1317     libfreetype
1318     libgsm
1319     libhdcd
1320     libilbc
1321     libjack
1322     libkvazaar
1323     libmp3lame
1324     libopencv
1325     libopenh264
1326     libopenjpeg
1327     libopus
1328     libpulse
1329     librtmp
1330     libschroedinger
1331     libsnappy
1332     libspeex
1333     libtheora
1334     libtwolame
1335     libvorbis
1336     libvpx
1337     libwavpack
1338     libwebp
1339     libxcb
1340     libxcb_shm
1341     libxcb_xfixes
1342 "
1343
1344 SYSTEM_LIBRARY_LIST="
1345     bzlib
1346     zlib
1347 "
1348
1349 FEATURE_LIST="
1350     gray
1351     hardcoded_tables
1352     omx_rpi
1353     runtime_cpudetect
1354     safe_bitstream_reader
1355     shared
1356     small
1357     sram
1358     static
1359     swscale_alpha
1360 "
1361
1362 LIBRARY_LIST="
1363     avcodec
1364     avdevice
1365     avfilter
1366     avformat
1367     avresample
1368     avutil
1369     swscale
1370 "
1371
1372 LICENSE_LIST="
1373     gpl
1374     nonfree
1375     version3
1376 "
1377
1378 PROGRAM_LIST="
1379     avconv
1380     avplay
1381     avprobe
1382 "
1383
1384 SUBSYSTEM_LIST="
1385     dct
1386     doc
1387     error_resilience
1388     faan
1389     fft
1390     lsp
1391     lzo
1392     mdct
1393     network
1394     rdft
1395 "
1396
1397 # COMPONENT_LIST needs to come last to ensure correct dependency checking
1398 CONFIG_LIST="
1399     $EXAMPLE_LIST
1400     $EXTERNAL_LIBRARY_LIST
1401     $HWACCEL_LIBRARY_LIST
1402     $FEATURE_LIST
1403     $LICENSE_LIST
1404     $LIBRARY_LIST
1405     $PROGRAM_LIST
1406     $SUBSYSTEM_LIST
1407     $SYSTEM_LIBRARY_LIST
1408     neon_clobber_test
1409     pic
1410     pod2man
1411     texi2html
1412     thumb
1413     valgrind_backtrace
1414     xmm_clobber_test
1415     $COMPONENT_LIST
1416 "
1417
1418 THREADS_LIST="
1419     pthreads
1420     w32threads
1421 "
1422
1423 ATOMICS_LIST="
1424     atomics_gcc
1425     atomics_suncc
1426     atomics_win32
1427 "
1428
1429 ARCH_LIST="
1430     aarch64
1431     alpha
1432     arm
1433     avr32
1434     avr32_ap
1435     avr32_uc
1436     bfin
1437     ia64
1438     m68k
1439     mips
1440     mips64
1441     parisc
1442     ppc
1443     ppc64
1444     s390
1445     sh4
1446     sparc
1447     sparc64
1448     tilegx
1449     tilepro
1450     tomi
1451     x86
1452     x86_32
1453     x86_64
1454 "
1455
1456 ARCH_EXT_LIST_ARM="
1457     armv5te
1458     armv6
1459     armv6t2
1460     armv8
1461     neon
1462     vfp
1463     vfpv3
1464 "
1465
1466 ARCH_EXT_LIST_X86_SIMD="
1467     amd3dnow
1468     amd3dnowext
1469     avx
1470     avx2
1471     fma3
1472     fma4
1473     mmx
1474     mmxext
1475     sse
1476     sse2
1477     sse3
1478     sse4
1479     sse42
1480     ssse3
1481     xop
1482 "
1483
1484 ARCH_EXT_LIST_PPC="
1485     altivec
1486     dcbzl
1487     ldbrx
1488     power8
1489     ppc4xx
1490     vsx
1491 "
1492
1493 ARCH_EXT_LIST_X86="
1494     $ARCH_EXT_LIST_X86_SIMD
1495     cpunop
1496     i686
1497 "
1498
1499 ARCH_EXT_LIST_MIPS="
1500     loongson
1501     mips32r1
1502     mips64r1
1503     mips32r2
1504     mips64r2
1505     mips32r6
1506     mips64r6
1507 "
1508
1509 ARCH_EXT_LIST="
1510     $ARCH_EXT_LIST_ARM
1511     $ARCH_EXT_LIST_MIPS
1512     $ARCH_EXT_LIST_PPC
1513     $ARCH_EXT_LIST_X86
1514     vis
1515 "
1516
1517 ARCH_FEATURES="
1518     aligned_stack
1519     fast_64bit
1520     fast_clz
1521     fast_cmov
1522     local_aligned_8
1523     local_aligned_16
1524     local_aligned_32
1525     simd_align_16
1526     simd_align_32
1527 "
1528
1529 BUILTIN_LIST="
1530     atomic_cas_ptr
1531     machine_rw_barrier
1532     MemoryBarrier
1533     mm_empty
1534     rdtsc
1535     sem_timedwait
1536     sync_val_compare_and_swap
1537 "
1538 HAVE_LIST_CMDLINE="
1539     inline_asm
1540     symver
1541     x86asm
1542 "
1543
1544 HAVE_LIST_PUB="
1545     bigendian
1546     fast_unaligned
1547 "
1548
1549 HEADERS_LIST="
1550     AVFoundation_AVFoundation_h
1551     alsa_asoundlib_h
1552     arpa_inet_h
1553     cdio_paranoia_h
1554     cdio_paranoia_paranoia_h
1555     d3d11_h
1556     dispatch_dispatch_h
1557     dev_bktr_ioctl_bt848_h
1558     dev_bktr_ioctl_meteor_h
1559     dev_ic_bt8xx_h
1560     dev_video_bktr_ioctl_bt848_h
1561     dev_video_meteor_ioctl_meteor_h
1562     direct_h
1563     dlfcn_h
1564     dxgidebug_h
1565     dxva_h
1566     gsm_h
1567     io_h
1568     mach_mach_time_h
1569     machine_ioctl_bt848_h
1570     machine_ioctl_meteor_h
1571     malloc_h
1572     poll_h
1573     sndio_h
1574     soundcard_h
1575     stdatomic_h
1576     sys_mman_h
1577     sys_param_h
1578     sys_resource_h
1579     sys_select_h
1580     sys_soundcard_h
1581     sys_time_h
1582     sys_un_h
1583     sys_videoio_h
1584     unistd_h
1585     valgrind_valgrind_h
1586     windows_h
1587     winsock2_h
1588 "
1589
1590 INTRINSICS_LIST="
1591     intrinsics_neon
1592 "
1593
1594 MATH_FUNCS="
1595     atanf
1596     atan2f
1597     cbrtf
1598     cosf
1599     exp2
1600     exp2f
1601     expf
1602     isinf
1603     isnan
1604     ldexpf
1605     llrint
1606     llrintf
1607     log2
1608     log2f
1609     log10f
1610     lrint
1611     lrintf
1612     powf
1613     rint
1614     round
1615     roundf
1616     sinf
1617     trunc
1618     truncf
1619 "
1620
1621 SYSTEM_FUNCS="
1622     aligned_malloc
1623     clock_gettime
1624     closesocket
1625     CommandLineToArgvW
1626     CoTaskMemFree
1627     CryptGenRandom
1628     fcntl
1629     flt_lim
1630     fork
1631     getaddrinfo
1632     gethrtime
1633     getopt
1634     GetProcessAffinityMask
1635     GetProcessMemoryInfo
1636     GetProcessTimes
1637     getrusage
1638     GetSystemTimeAsFileTime
1639     gettimeofday
1640     gmtime_r
1641     inet_aton
1642     isatty
1643     LoadLibrary
1644     localtime_r
1645     mach_absolute_time
1646     MapViewOfFile
1647     memalign
1648     mkstemp
1649     mmap
1650     mprotect
1651     nanosleep
1652     posix_memalign
1653     sched_getaffinity
1654     SetConsoleTextAttribute
1655     setmode
1656     setrlimit
1657     Sleep
1658     strerror_r
1659     sysconf
1660     sysctl
1661     usleep
1662     VirtualAlloc
1663 "
1664
1665 TOOLCHAIN_FEATURES="
1666     as_arch_directive
1667     as_fpu_directive
1668     as_func
1669     as_object_arch
1670     asm_mod_q
1671     attribute_may_alias
1672     attribute_packed
1673     blocks_extension
1674     ebp_available
1675     ebx_available
1676     gnu_as
1677     ibm_asm
1678     inline_asm_labels
1679     pragma_deprecated
1680     symver_asm_label
1681     symver_gnu_asm
1682     vfp_args
1683     xform_asm
1684     xmm_clobbers
1685 "
1686
1687 TYPES_LIST="
1688     CONDITION_VARIABLE_Ptr
1689     socklen_t
1690     struct_addrinfo
1691     struct_group_source_req
1692     struct_ip_mreq_source
1693     struct_ipv6_mreq
1694     struct_pollfd
1695     struct_rusage_ru_maxrss
1696     struct_sockaddr_in6
1697     struct_sockaddr_sa_len
1698     struct_sockaddr_storage
1699     struct_v4l2_frmivalenum_discrete
1700 "
1701
1702 HAVE_LIST="
1703     $ARCH_EXT_LIST
1704     $(add_suffix _external $ARCH_EXT_LIST)
1705     $(add_suffix _inline   $ARCH_EXT_LIST)
1706     $ARCH_FEATURES
1707     $BUILTIN_LIST
1708     $HAVE_LIST_CMDLINE
1709     $HAVE_LIST_PUB
1710     $HEADERS_LIST
1711     $INTRINSICS_LIST
1712     $MATH_FUNCS
1713     $SYSTEM_FUNCS
1714     $THREADS_LIST
1715     $TOOLCHAIN_FEATURES
1716     $TYPES_LIST
1717     dos_paths
1718     libc_msvcrt
1719     MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS
1720     sdl
1721     section_data_rel_ro
1722     threads
1723     uwp
1724     vaapi_drm
1725     vaapi_x11
1726     vdpau_x11
1727 "
1728
1729 # options emitted with CONFIG_ prefix but not available on the command line
1730 CONFIG_EXTRA="
1731     aandcttables
1732     ac3dsp
1733     adts_header
1734     audio_frame_queue
1735     audiodsp
1736     blockdsp
1737     bswapdsp
1738     cabac
1739     dirac_parse
1740     dvprofile
1741     faandct
1742     faanidct
1743     fdctdsp
1744     flacdsp
1745     fmtconvert
1746     g722dsp
1747     gmp
1748     golomb
1749     gplv3
1750     h263dsp
1751     h264chroma
1752     h264dsp
1753     h264parse
1754     h264pred
1755     h264qpel
1756     hevc_ps
1757     hpeldsp
1758     huffman
1759     huffyuvdsp
1760     huffyuvencdsp
1761     idctdsp
1762     iirfilter
1763     imdct15
1764     intrax8
1765     iso_media
1766     ividsp
1767     jpegtables
1768     lgplv3
1769     libx262
1770     libxcb_shape
1771     lpc
1772     lzf
1773     me_cmp
1774     mpeg_er
1775     mpegaudio
1776     mpegaudiodsp
1777     mpegaudioheader
1778     mpegvideo
1779     mpegvideoenc
1780     mss34dsp
1781     pixblockdsp
1782     qpeldsp
1783     qsv
1784     qsvdec
1785     qsvenc
1786     rangecoder
1787     riffdec
1788     riffenc
1789     rtpdec
1790     rtpenc_chain
1791     rv34dsp
1792     sinewin
1793     snappy
1794     srtp
1795     startcode
1796     texturedsp
1797     texturedspenc
1798     tpeldsp
1799     vaapi_encode
1800     vc1dsp
1801     videodsp
1802     vp3dsp
1803     vp56dsp
1804     vp8dsp
1805     wma_freqs
1806     wmv2dsp
1807 "
1808
1809 CMDLINE_SELECT="
1810     $ARCH_EXT_LIST
1811     $CONFIG_LIST
1812     $HAVE_LIST_CMDLINE
1813     $THREADS_LIST
1814     asm
1815     cross_compile
1816     debug
1817     extra_warnings
1818     logging
1819     lto
1820     optimizations
1821     rpath
1822 "
1823
1824 PATHS_LIST="
1825     bindir
1826     datadir
1827     docdir
1828     incdir
1829     libdir
1830     mandir
1831     prefix
1832     shlibdir
1833 "
1834
1835 CMDLINE_SET="
1836     $PATHS_LIST
1837     ar
1838     arch
1839     as
1840     cc
1841     objcc
1842     cpu
1843     cross_prefix
1844     custom_allocator
1845     dep_cc
1846     env
1847     extra_version
1848     host_cc
1849     host_cflags
1850     host_extralibs
1851     host_ld
1852     host_ldflags
1853     host_os
1854     ignore_tests
1855     ld
1856     logfile
1857     malloc_prefix
1858     nm
1859     optflags
1860     pkg_config
1861     pkg_config_flags
1862     random_seed
1863     samples
1864     sysinclude
1865     sysroot
1866     target_exec
1867     target_os
1868     target_path
1869     target_samples
1870     toolchain
1871     x86asmexe
1872 "
1873
1874 CMDLINE_APPEND="
1875     extra_cflags
1876     extra_objcflags
1877     host_cppflags
1878 "
1879
1880 # code dependency declarations
1881
1882 # architecture extensions
1883
1884 armv5te_deps="arm"
1885 armv6_deps="arm"
1886 armv6t2_deps="arm"
1887 armv8_deps="aarch64"
1888 neon_deps_any="aarch64 arm"
1889 intrinsics_neon_deps="neon"
1890 vfp_deps_any="aarch64 arm"
1891 vfpv3_deps="vfp"
1892
1893 map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM
1894
1895 altivec_deps="ppc"
1896 dcbzl_deps="ppc"
1897 ldbrx_deps="ppc"
1898 ppc4xx_deps="ppc"
1899 vsx_deps="altivec"
1900 power8_deps="vsx"
1901
1902 loongson_deps="mips"
1903 mips32r1_deps="mips32"
1904 mips32r2_deps="mips32"
1905 mips32r6_deps="mips32"
1906 mips64r1_deps="mips64"
1907 mips64r2_deps="mips64"
1908 mips64r6_deps="mips64"
1909
1910 vis_deps="sparc"
1911
1912 cpunop_deps="i686"
1913 x86_64_select="i686"
1914 x86_64_suggest="fast_cmov"
1915
1916 amd3dnow_deps="mmx"
1917 amd3dnowext_deps="amd3dnow"
1918 i686_deps="x86"
1919 mmx_deps="x86"
1920 mmxext_deps="mmx"
1921 sse_deps="mmxext"
1922 sse2_deps="sse"
1923 sse3_deps="sse2"
1924 ssse3_deps="sse3"
1925 sse4_deps="ssse3"
1926 sse42_deps="sse4"
1927 avx_deps="sse42"
1928 xop_deps="avx"
1929 fma3_deps="avx"
1930 fma4_deps="avx"
1931 avx2_deps="avx"
1932
1933 mmx_external_deps="x86asm"
1934 mmx_inline_deps="inline_asm x86"
1935 mmx_suggest="mmx_external mmx_inline"
1936
1937 for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
1938     eval dep=\$${ext}_deps
1939     eval ${ext}_external_deps='"${dep}_external"'
1940     eval ${ext}_inline_deps='"${dep}_inline"'
1941     eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
1942 done
1943
1944 aligned_stack_if_any="aarch64 ppc x86"
1945 fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1946 fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
1947 fast_unaligned_if_any="aarch64 ppc x86"
1948 simd_align_16_if_any="altivec neon sse"
1949 simd_align_32_if_any="avx"
1950
1951 # system capabilities
1952 symver_if_any="symver_asm_label symver_gnu_asm"
1953 valgrind_backtrace_conflict="optimizations"
1954 valgrind_backtrace_deps="valgrind_valgrind_h"
1955
1956 # threading support
1957 atomics_gcc_if="sync_val_compare_and_swap"
1958 atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
1959 atomics_win32_if="MemoryBarrier"
1960 atomics_native_if_any="$ATOMICS_LIST"
1961 w32threads_deps="atomics_native"
1962 threads_if_any="$THREADS_LIST"
1963
1964 # subsystems
1965 dct_select="rdft"
1966 dirac_parse_select="golomb"
1967 error_resilience_select="me_cmp"
1968 faandct_deps="faan"
1969 faandct_select="fdctdsp"
1970 faanidct_deps="faan"
1971 faanidct_select="idctdsp"
1972 h264dsp_select="startcode"
1973 hevc_ps_select="golomb"
1974 intrax8_select="blockdsp idctdsp"
1975 mdct_select="fft"
1976 rdft_select="fft"
1977 me_cmp_select="fdctdsp idctdsp pixblockdsp"
1978 mpeg_er_select="error_resilience"
1979 mpegaudio_select="mpegaudiodsp mpegaudioheader"
1980 mpegaudiodsp_select="dct"
1981 mpegvideo_select="blockdsp hpeldsp idctdsp me_cmp mpeg_er videodsp"
1982 mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
1983 vc1dsp_select="h264chroma qpeldsp startcode"
1984
1985 # decoders / encoders
1986 aac_decoder_select="adts_header imdct15 mdct sinewin"
1987 aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
1988 aac_latm_decoder_select="aac_decoder aac_latm_parser"
1989 ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
1990 ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
1991 ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
1992 adpcm_g722_decoder_select="g722dsp"
1993 adpcm_g722_encoder_select="g722dsp"
1994 aic_decoder_select="golomb idctdsp"
1995 alac_encoder_select="lpc"
1996 als_decoder_select="bswapdsp"
1997 amrnb_decoder_select="lsp"
1998 amrwb_decoder_select="lsp"
1999 amv_decoder_select="sp5x_decoder"
2000 ape_decoder_select="bswapdsp"
2001 asv1_decoder_select="blockdsp bswapdsp idctdsp"
2002 asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
2003 asv2_decoder_select="blockdsp bswapdsp idctdsp"
2004 asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
2005 atrac1_decoder_select="mdct sinewin"
2006 atrac3_decoder_select="mdct"
2007 atrac3p_decoder_select="mdct sinewin"
2008 bink_decoder_select="blockdsp hpeldsp"
2009 binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
2010 binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
2011 cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
2012 clearvideo_decoder_select="idctdsp"
2013 cllc_decoder_select="bswapdsp"
2014 comfortnoise_encoder_select="lpc"
2015 cook_decoder_select="audiodsp mdct sinewin"
2016 cscd_decoder_select="lzo"
2017 cscd_decoder_suggest="zlib"
2018 dca_decoder_select="fmtconvert mdct"
2019 dds_decoder_select="texturedsp"
2020 dnxhd_decoder_select="blockdsp idctdsp"
2021 dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
2022 dvvideo_decoder_select="dvprofile idctdsp"
2023 dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
2024 dxa_decoder_deps="zlib"
2025 dxv_decoder_select="lzf texturedsp"
2026 eac3_decoder_select="ac3_decoder"
2027 eac3_encoder_select="ac3_encoder"
2028 eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
2029 eatgq_decoder_select="aandcttables idctdsp"
2030 eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
2031 exr_decoder_deps="zlib"
2032 ffv1_decoder_select="rangecoder"
2033 ffv1_encoder_select="rangecoder"
2034 ffvhuff_decoder_select="huffyuv_decoder"
2035 ffvhuff_encoder_select="huffyuv_encoder"
2036 fic_decoder_select="golomb"
2037 flac_decoder_select="flacdsp"
2038 flac_encoder_select="bswapdsp flacdsp lpc"
2039 flashsv_decoder_deps="zlib"
2040 flashsv_encoder_deps="zlib"
2041 flashsv2_decoder_deps="zlib"
2042 flv_decoder_select="h263_decoder"
2043 flv_encoder_select="h263_encoder"
2044 fourxm_decoder_select="blockdsp bswapdsp"
2045 fraps_decoder_select="bswapdsp huffman"
2046 g2m_decoder_deps="zlib"
2047 g2m_decoder_select="blockdsp idctdsp jpegtables"
2048 h261_decoder_select="mpeg_er mpegvideo"
2049 h261_encoder_select="aandcttables mpegvideoenc"
2050 h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
2051 h263_encoder_select="aandcttables h263dsp mpegvideoenc"
2052 h263i_decoder_select="h263_decoder"
2053 h263p_encoder_select="h263_encoder"
2054 h264_decoder_select="cabac golomb h264chroma h264dsp h264parse h264pred h264qpel videodsp"
2055 h264_decoder_suggest="error_resilience"
2056 hap_decoder_select="snappy texturedsp"
2057 hap_encoder_deps="libsnappy"
2058 hap_encoder_select="texturedspenc"
2059 hevc_decoder_select="bswapdsp cabac hevc_ps videodsp"
2060 huffyuv_decoder_select="bswapdsp huffyuvdsp"
2061 huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp"
2062 iac_decoder_select="imc_decoder"
2063 imc_decoder_select="bswapdsp fft mdct sinewin"
2064 indeo3_decoder_select="hpeldsp"
2065 indeo4_decoder_select="ividsp"
2066 indeo5_decoder_select="ividsp"
2067 interplay_video_decoder_select="hpeldsp"
2068 jpegls_decoder_select="mjpeg_decoder"
2069 jv_decoder_select="blockdsp"
2070 lagarith_decoder_select="huffyuvdsp"
2071 ljpeg_encoder_select="aandcttables idctdsp jpegtables"
2072 magicyuv_decoder_select="huffyuvdsp"
2073 mdec_decoder_select="blockdsp idctdsp mpegvideo"
2074 metasound_decoder_select="lsp mdct sinewin"
2075 mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
2076 mjpeg_decoder_select="blockdsp hpeldsp idctdsp jpegtables"
2077 mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
2078 mjpegb_decoder_select="mjpeg_decoder"
2079 mlp_decoder_select="mlp_parser"
2080 motionpixels_decoder_select="bswapdsp"
2081 mp1_decoder_select="mpegaudio"
2082 mp1float_decoder_select="mpegaudio"
2083 mp2_decoder_select="mpegaudio"
2084 mp2float_decoder_select="mpegaudio"
2085 mp3_decoder_select="mpegaudio"
2086 mp3adu_decoder_select="mpegaudio"
2087 mp3adufloat_decoder_select="mpegaudio"
2088 mp3float_decoder_select="mpegaudio"
2089 mp3on4_decoder_select="mpegaudio"
2090 mp3on4float_decoder_select="mpegaudio"
2091 mpc7_decoder_select="bswapdsp mpegaudiodsp"
2092 mpc8_decoder_select="mpegaudiodsp"
2093 mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
2094 mpeg1video_encoder_select="aandcttables mpegvideoenc"
2095 mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
2096 mpeg2video_encoder_select="aandcttables mpegvideoenc"
2097 mpeg4_decoder_select="h263_decoder mpeg4video_parser"
2098 mpeg4_encoder_select="h263_encoder"
2099 msa1_decoder_select="mss34dsp"
2100 msmpeg4v1_decoder_select="h263_decoder"
2101 msmpeg4v2_decoder_select="h263_decoder"
2102 msmpeg4v2_encoder_select="h263_encoder"
2103 msmpeg4v3_decoder_select="h263_decoder"
2104 msmpeg4v3_encoder_select="h263_encoder"
2105 mss2_decoder_select="error_resilience mpeg_er mpegvideo qpeldsp vc1_decoder"
2106 mts2_decoder_select="mss34dsp"
2107 mxpeg_decoder_select="mjpeg_decoder"
2108 nellymoser_decoder_select="mdct sinewin"
2109 nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2110 nuv_decoder_select="idctdsp lzo"
2111 on2avc_decoder_select="mdct"
2112 opus_decoder_deps="avresample"
2113 opus_decoder_select="imdct15"
2114 png_decoder_deps="zlib"
2115 png_encoder_deps="zlib"
2116 png_encoder_select="huffyuvencdsp"
2117 prores_decoder_select="idctdsp"
2118 prores_encoder_select="fdctdsp"
2119 qcelp_decoder_select="lsp"
2120 qdm2_decoder_select="mdct rdft mpegaudiodsp"
2121 ra_144_encoder_select="audio_frame_queue lpc"
2122 ralf_decoder_select="golomb"
2123 rscc_decoder_deps="zlib"
2124 rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2125 rv10_encoder_select="h263_encoder"
2126 rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2127 rv20_encoder_select="h263_encoder"
2128 rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
2129 rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
2130 screenpresso_decoder_deps="zlib"
2131 sipr_decoder_select="lsp"
2132 sp5x_decoder_select="mjpeg_decoder"
2133 svq1_decoder_select="hpeldsp"
2134 svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2135 svq3_decoder_select="golomb h264dsp h264parse h264pred hpeldsp tpeldsp videodsp"
2136 svq3_decoder_suggest="zlib"
2137 tak_decoder_select="audiodsp"
2138 tdsc_decoder_deps="zlib"
2139 tdsc_decoder_select="mjpeg_decoder"
2140 theora_decoder_select="vp3_decoder"
2141 thp_decoder_select="mjpeg_decoder"
2142 tiff_decoder_suggest="zlib"
2143 tiff_encoder_suggest="zlib"
2144 truehd_decoder_select="mlp_decoder"
2145 truemotion2_decoder_select="bswapdsp"
2146 truespeech_decoder_select="bswapdsp"
2147 tscc_decoder_deps="zlib"
2148 txd_decoder_select="texturedsp"
2149 twinvq_decoder_select="mdct lsp sinewin"
2150 utvideo_decoder_select="bswapdsp huffyuvdsp"
2151 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
2152 vble_decoder_select="huffyuvdsp"
2153 vc1_decoder_select="blockdsp error_resilience h263_decoder h264qpel intrax8 mpeg_er mpegvideo vc1dsp"
2154 vc1image_decoder_select="vc1_decoder"
2155 vorbis_decoder_select="mdct"
2156 vorbis_encoder_select="mdct"
2157 vp3_decoder_select="hpeldsp vp3dsp videodsp"
2158 vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
2159 vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
2160 vp6a_decoder_select="vp6_decoder"
2161 vp6f_decoder_select="vp6_decoder"
2162 vp7_decoder_select="h264pred videodsp vp8dsp"
2163 vp8_decoder_select="h264pred videodsp vp8dsp"
2164 vp9_decoder_select="videodsp vp9_superframe_split_bsf"
2165 webp_decoder_select="vp8_decoder"
2166 wmapro_decoder_select="mdct sinewin wma_freqs"
2167 wmav1_decoder_select="mdct sinewin wma_freqs"
2168 wmav1_encoder_select="mdct sinewin wma_freqs"
2169 wmav2_decoder_select="mdct sinewin wma_freqs"
2170 wmav2_encoder_select="mdct sinewin wma_freqs"
2171 wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2172 wmv1_decoder_select="h263_decoder"
2173 wmv1_encoder_select="h263_encoder"
2174 wmv2_decoder_select="blockdsp error_resilience h263_decoder idctdsp intrax8 videodsp wmv2dsp"
2175 wmv2_encoder_select="h263_encoder wmv2dsp"
2176 wmv3_decoder_select="vc1_decoder"
2177 wmv3image_decoder_select="wmv3_decoder"
2178 zerocodec_decoder_deps="zlib"
2179 zlib_decoder_deps="zlib"
2180 zlib_encoder_deps="zlib"
2181 zmbv_decoder_deps="zlib"
2182 zmbv_encoder_deps="zlib"
2183
2184 # hardware accelerators
2185 d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder"
2186 dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode ole32"
2187 vda_deps="VideoDecodeAcceleration_VDADecoder_h blocks_extension pthreads"
2188 vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2189
2190 h263_vaapi_hwaccel_deps="vaapi"
2191 h263_vaapi_hwaccel_select="h263_decoder"
2192 h264_d3d11va_hwaccel_deps="d3d11va"
2193 h264_d3d11va_hwaccel_select="h264_decoder"
2194 h264_d3d11va2_hwaccel_deps="d3d11va"
2195 h264_d3d11va2_hwaccel_select="h264_decoder"
2196 h264_dxva2_hwaccel_deps="dxva2"
2197 h264_dxva2_hwaccel_select="h264_decoder"
2198 h264_mmal_hwaccel_deps="mmal"
2199 h264_qsv_hwaccel_deps="libmfx"
2200 h264_vaapi_hwaccel_deps="vaapi"
2201 h264_vaapi_hwaccel_select="h264_decoder"
2202 h264_vda_hwaccel_deps="vda"
2203 h264_vda_hwaccel_select="h264_decoder"
2204 h264_vda_old_hwaccel_deps="vda"
2205 h264_vda_old_hwaccel_select="h264_decoder"
2206 h264_vdpau_hwaccel_deps="vdpau"
2207 h264_vdpau_hwaccel_select="h264_decoder"
2208 hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2209 hevc_d3d11va_hwaccel_select="hevc_decoder"
2210 hevc_d3d11va2_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
2211 hevc_d3d11va2_hwaccel_select="hevc_decoder"
2212 hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
2213 hevc_dxva2_hwaccel_select="hevc_decoder"
2214 hevc_qsv_hwaccel_deps="libmfx"
2215 hevc_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferHEVC"
2216 hevc_vaapi_hwaccel_select="hevc_decoder"
2217 hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
2218 hevc_vdpau_hwaccel_select="hevc_decoder"
2219 mpeg1_vdpau_hwaccel_deps="vdpau"
2220 mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2221 mpeg2_d3d11va_hwaccel_deps="d3d11va"
2222 mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2223 mpeg2_d3d11va2_hwaccel_deps="d3d11va"
2224 mpeg2_d3d11va2_hwaccel_select="mpeg2video_decoder"
2225 mpeg2_dxva2_hwaccel_deps="dxva2"
2226 mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2227 mpeg2_mmal_hwaccel_deps="mmal"
2228 mpeg2_qsv_hwaccel_deps="libmfx"
2229 mpeg2_vaapi_hwaccel_deps="vaapi"
2230 mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
2231 mpeg2_vdpau_hwaccel_deps="vdpau"
2232 mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
2233 mpeg4_vaapi_hwaccel_deps="vaapi"
2234 mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
2235 mpeg4_vdpau_hwaccel_deps="vdpau"
2236 mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2237 vc1_d3d11va_hwaccel_deps="d3d11va"
2238 vc1_d3d11va_hwaccel_select="vc1_decoder"
2239 vc1_d3d11va2_hwaccel_deps="d3d11va"
2240 vc1_d3d11va2_hwaccel_select="vc1_decoder"
2241 vc1_dxva2_hwaccel_deps="dxva2"
2242 vc1_dxva2_hwaccel_select="vc1_decoder"
2243 vc1_mmal_hwaccel_deps="mmal"
2244 vc1_qsv_hwaccel_deps="libmfx"
2245 vc1_vaapi_hwaccel_deps="vaapi"
2246 vc1_vaapi_hwaccel_select="vc1_decoder"
2247 vc1_vdpau_hwaccel_deps="vdpau"
2248 vc1_vdpau_hwaccel_select="vc1_decoder"
2249 vp8_qsv_hwaccel_deps="libmfx"
2250 vp8_vaapi_hwaccel_deps="vaapi VAPictureParameterBufferVP8"
2251 vp8_vaapi_hwaccel_select="vp8_decoder"
2252 wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2253 wmv3_d3d11va2_hwaccel_select="vc1_d3d11va2_hwaccel"
2254 wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
2255 wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2256 wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2257
2258 # hardware-accelerated codecs
2259 nvenc_deps_any="libdl LoadLibrary"
2260 omx_deps="libdl pthreads"
2261 omx_rpi_select="omx"
2262 qsv_deps="libmfx"
2263 qsvdec_select="qsv"
2264 qsvenc_select="qsv"
2265 vaapi_encode_deps="vaapi"
2266
2267 hwupload_cuda_filter_deps="cuda"
2268 scale_npp_filter_deps="cuda libnpp"
2269
2270 h264_mmal_decoder_deps="mmal"
2271 h264_nvenc_encoder_deps="nvenc"
2272 h264_omx_encoder_deps="omx"
2273 h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
2274 h264_qsv_encoder_select="qsvenc"
2275 h264_vaapi_encoder_deps="VAEncPictureParameterBufferH264"
2276 h264_vaapi_encoder_select="vaapi_encode golomb"
2277 hevc_nvenc_encoder_deps="nvenc"
2278 hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser hevc_qsv_hwaccel qsvdec"
2279 hevc_qsv_encoder_select="hevc_ps qsvenc"
2280 hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
2281 hevc_vaapi_encoder_select="vaapi_encode golomb"
2282 mjpeg_vaapi_encoder_deps="VAEncPictureParameterBufferJPEG"
2283 mjpeg_vaapi_encoder_select="vaapi_encode jpegtables"
2284 mpeg2_mmal_decoder_deps="mmal"
2285 mpeg2_qsv_decoder_select="qsvdec mpeg2_qsv_hwaccel mpegvideo_parser"
2286 mpeg2_qsv_encoder_select="qsvenc"
2287 mpeg2_vaapi_encoder_deps="VAEncPictureParameterBufferMPEG2"
2288 mpeg2_vaapi_encoder_select="vaapi_encode"
2289 mpeg4_omx_encoder_deps="omx"
2290 vc1_mmal_decoder_deps="mmal"
2291 vc1_qsv_decoder_select="qsvdec vc1_qsv_hwaccel vc1_parser"
2292 vp8_qsv_decoder_select="qsvdec vp8_qsv_hwaccel vp8_parser"
2293 vp8_vaapi_encoder_deps="VAEncPictureParameterBufferVP8"
2294 vp8_vaapi_encoder_select="vaapi_encode"
2295 vp9_vaapi_encoder_deps="VAEncPictureParameterBufferVP9"
2296 vp9_vaapi_encoder_select="vaapi_encode"
2297
2298 nvenc_h264_encoder_select="h264_nvenc_encoder"
2299 nvenc_hevc_encoder_select="hevc_nvenc_encoder"
2300
2301 # parsers
2302 aac_parser_select="adts_header"
2303 h264_parser_select="golomb h264dsp h264parse"
2304 hevc_parser_select="hevc_ps"
2305 mpegaudio_parser_select="mpegaudioheader"
2306 mpegvideo_parser_select="mpegvideo"
2307 mpeg4video_parser_select="error_resilience h263dsp mpegvideo qpeldsp"
2308 vc1_parser_select="vc1dsp"
2309
2310 # bitstream_filters
2311 aac_adtstoasc_bsf_select="adts_header"
2312 mjpeg2jpeg_bsf_select="jpegtables"
2313
2314 # external libraries
2315 avisynth_deps="LoadLibrary"
2316 avxsynth_deps="libdl"
2317 avisynth_demuxer_deps_any="avisynth avxsynth"
2318 avisynth_demuxer_select="riffdec"
2319 libdcadec_decoder_deps="libdcadec"
2320 libfaac_encoder_deps="libfaac"
2321 libfaac_encoder_select="audio_frame_queue"
2322 libfdk_aac_decoder_deps="libfdk_aac"
2323 libfdk_aac_encoder_deps="libfdk_aac"
2324 libfdk_aac_encoder_select="audio_frame_queue"
2325 libgsm_decoder_deps="libgsm"
2326 libgsm_encoder_deps="libgsm"
2327 libgsm_ms_decoder_deps="libgsm"
2328 libgsm_ms_encoder_deps="libgsm"
2329 libilbc_decoder_deps="libilbc"
2330 libilbc_encoder_deps="libilbc"
2331 libkvazaar_encoder_deps="libkvazaar"
2332 libmp3lame_encoder_deps="libmp3lame"
2333 libmp3lame_encoder_select="audio_frame_queue mpegaudioheader"
2334 libopencore_amrnb_decoder_deps="libopencore_amrnb"
2335 libopencore_amrnb_encoder_deps="libopencore_amrnb"
2336 libopencore_amrnb_encoder_select="audio_frame_queue"
2337 libopencore_amrwb_decoder_deps="libopencore_amrwb"
2338 libopenh264_decoder_deps="libopenh264"
2339 libopenh264_decoder_select="h264_mp4toannexb_bsf"
2340 libopenh264_encoder_deps="libopenh264"
2341 libopenjpeg_decoder_deps="libopenjpeg"
2342 libopenjpeg_encoder_deps="libopenjpeg"
2343 libopus_decoder_deps="libopus"
2344 libopus_encoder_deps="libopus"
2345 libopus_encoder_select="audio_frame_queue"
2346 libschroedinger_decoder_deps="libschroedinger"
2347 libschroedinger_encoder_deps="libschroedinger"
2348 libspeex_decoder_deps="libspeex"
2349 libspeex_encoder_deps="libspeex"
2350 libspeex_encoder_select="audio_frame_queue"
2351 libtheora_encoder_deps="libtheora"
2352 libtwolame_encoder_deps="libtwolame"
2353 libvo_aacenc_encoder_deps="libvo_aacenc"
2354 libvo_aacenc_encoder_select="audio_frame_queue"
2355 libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2356 libvorbis_encoder_deps="libvorbis"
2357 libvorbis_encoder_select="audio_frame_queue"
2358 libvpx_vp8_decoder_deps="libvpx"
2359 libvpx_vp8_encoder_deps="libvpx"
2360 libvpx_vp9_decoder_deps="libvpx"
2361 libvpx_vp9_encoder_deps="libvpx"
2362 libwavpack_encoder_deps="libwavpack"
2363 libwavpack_encoder_select="audio_frame_queue"
2364 libwebp_encoder_deps="libwebp"
2365 libx262_encoder_deps="libx262"
2366 libx264_encoder_deps="libx264"
2367 libx265_encoder_deps="libx265"
2368 libxavs_encoder_deps="libxavs"
2369 libxvid_encoder_deps="libxvid mkstemp"
2370
2371 # demuxers / muxers
2372 ac3_demuxer_select="ac3_parser"
2373 asf_demuxer_select="riffdec"
2374 asf_muxer_select="riffenc"
2375 asf_stream_muxer_select="asf_muxer"
2376 avi_demuxer_select="iso_media riffdec"
2377 avi_muxer_select="riffenc"
2378 caf_demuxer_select="iso_media riffdec"
2379 dash_muxer_select="mp4_muxer"
2380 dirac_demuxer_select="dirac_parser"
2381 dv_demuxer_select="dvprofile"
2382 dv_muxer_select="dvprofile"
2383 dxa_demuxer_select="riffdec"
2384 eac3_demuxer_select="ac3_parser"
2385 f4v_muxer_select="mov_muxer"
2386 flac_demuxer_select="flac_parser"
2387 hds_muxer_select="flv_muxer"
2388 hls_muxer_select="mpegts_muxer"
2389 ipod_muxer_select="mov_muxer"
2390 ismv_muxer_select="mov_muxer"
2391 matroska_audio_muxer_select="matroska_muxer"
2392 matroska_demuxer_select="iso_media riffdec"
2393 matroska_demuxer_suggest="bzlib lzo zlib"
2394 matroska_muxer_select="iso_media riffenc"
2395 mmf_muxer_select="riffenc"
2396 mov_demuxer_select="iso_media riffdec"
2397 mov_demuxer_suggest="zlib"
2398 mov_muxer_select="iso_media riffenc rtpenc_chain"
2399 mp3_demuxer_select="mpegaudio_parser"
2400 mp3_muxer_select="mpegaudioheader"
2401 mp4_muxer_select="mov_muxer"
2402 mpegts_demuxer_select="iso_media"
2403 mpegts_muxer_select="adts_muxer latm_muxer"
2404 mpegtsraw_demuxer_select="mpegts_demuxer"
2405 mxf_d10_muxer_select="mxf_muxer"
2406 nut_muxer_select="riffenc"
2407 nuv_demuxer_select="riffdec"
2408 oga_muxer_select="ogg_muxer"
2409 ogg_demuxer_select="dirac_parse"
2410 opus_muxer_select="ogg_muxer"
2411 psp_muxer_select="mov_muxer"
2412 rtp_demuxer_select="sdp_demuxer"
2413 rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp"
2414 rtsp_demuxer_select="http_protocol rtpdec"
2415 rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
2416 sap_demuxer_select="sdp_demuxer"
2417 sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2418 sdp_demuxer_select="rtpdec"
2419 smoothstreaming_muxer_select="ismv_muxer"
2420 spdif_demuxer_select="adts_header"
2421 spdif_muxer_select="adts_header"
2422 spx_muxer_select="ogg_muxer"
2423 swf_demuxer_suggest="zlib"
2424 tak_demuxer_select="tak_parser"
2425 tg2_muxer_select="mov_muxer"
2426 tgp_muxer_select="mov_muxer"
2427 w64_demuxer_select="wav_demuxer"
2428 wav_demuxer_select="riffdec"
2429 wav_muxer_select="riffenc"
2430 webm_muxer_select="iso_media riffenc"
2431 wtv_demuxer_select="mpegts_demuxer riffdec"
2432 xmv_demuxer_select="riffdec"
2433 xwma_demuxer_select="riffdec"
2434
2435 # indevs / outdevs
2436 alsa_indev_deps="alsa"
2437 alsa_outdev_deps="alsa"
2438 avfoundation_indev_deps="AVFoundation_AVFoundation_h objc_arc pthreads"
2439 avfoundation_indev_extralibs="-framework Foundation -framework AVFoundation -framework CoreVideo -framework CoreMedia"
2440 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2441 dv1394_indev_deps="dv1394"
2442 dv1394_indev_select="dv_demuxer"
2443 fbdev_indev_deps="linux_fb_h"
2444 jack_indev_deps="libjack"
2445 jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
2446 libcdio_indev_deps="libcdio"
2447 libdc1394_indev_deps="libdc1394"
2448 oss_indev_deps_any="soundcard_h sys_soundcard_h"
2449 oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2450 pulse_indev_deps="libpulse"
2451 sndio_indev_deps="sndio"
2452 sndio_outdev_deps="sndio"
2453 v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2454 vfwcap_indev_deps="vfw32 vfwcap_defines"
2455 xcbgrab_indev_deps="libxcb libxcb_shape"
2456 xcbgrab_indev_suggest="libxcb_shm libxcb_xfixes"
2457
2458 # protocols
2459 ffrtmpcrypt_protocol_conflict="librtmp_protocol"
2460 ffrtmpcrypt_protocol_deps_any="gmp openssl"
2461 ffrtmpcrypt_protocol_select="tcp_protocol"
2462 ffrtmphttp_protocol_conflict="librtmp_protocol"
2463 ffrtmphttp_protocol_select="http_protocol"
2464 gopher_protocol_select="network"
2465 http_protocol_select="tcp_protocol"
2466 http_protocol_suggest="zlib"
2467 httpproxy_protocol_select="tcp_protocol"
2468 httpproxy_protocol_suggest="zlib"
2469 https_protocol_select="tls_protocol"
2470 https_protocol_suggest="zlib"
2471 icecast_protocol_select="http_protocol"
2472 librtmp_protocol_deps="librtmp"
2473 librtmpe_protocol_deps="librtmp"
2474 librtmps_protocol_deps="librtmp"
2475 librtmpt_protocol_deps="librtmp"
2476 librtmpte_protocol_deps="librtmp"
2477 mmsh_protocol_select="http_protocol"
2478 mmst_protocol_select="network"
2479 rtmp_protocol_conflict="librtmp_protocol"
2480 rtmp_protocol_select="tcp_protocol"
2481 rtmp_protocol_suggest="zlib"
2482 rtmpe_protocol_select="ffrtmpcrypt_protocol"
2483 rtmpe_protocol_suggest="zlib"
2484 rtmps_protocol_conflict="librtmp_protocol"
2485 rtmps_protocol_select="tls_protocol"
2486 rtmps_protocol_suggest="zlib"
2487 rtmpt_protocol_select="ffrtmphttp_protocol"
2488 rtmpt_protocol_suggest="zlib"
2489 rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2490 rtmpte_protocol_suggest="zlib"
2491 rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2492 rtmpts_protocol_suggest="zlib"
2493 rtp_protocol_select="udp_protocol"
2494 sctp_protocol_deps="struct_sctp_event_subscribe"
2495 sctp_protocol_select="network"
2496 srtp_protocol_select="rtp_protocol srtp"
2497 tcp_protocol_select="network"
2498 tls_protocol_deps_any="gnutls openssl"
2499 tls_protocol_select="tcp_protocol"
2500 udp_protocol_select="network"
2501 unix_protocol_deps="sys_un_h"
2502 unix_protocol_select="network"
2503
2504 # filters
2505 asyncts_filter_deps="avresample"
2506 blackframe_filter_deps="gpl"
2507 boxblur_filter_deps="gpl"
2508 bs2b_filter_deps="libbs2b"
2509 cropdetect_filter_deps="gpl"
2510 deinterlace_qsv_filter_deps="libmfx"
2511 deinterlace_vaapi_filter_deps="vaapi"
2512 delogo_filter_deps="gpl"
2513 drawtext_filter_deps="libfreetype"
2514 drawtext_filter_suggest="libfontconfig"
2515 frei0r_filter_deps="frei0r libdl"
2516 frei0r_src_filter_deps="frei0r libdl"
2517 hdcd_filter_deps="libhdcd"
2518 hqdn3d_filter_deps="gpl"
2519 interlace_filter_deps="gpl"
2520 movie_filter_deps="avcodec avformat"
2521 ocv_filter_deps="libopencv"
2522 resample_filter_deps="avresample"
2523 scale_filter_deps="swscale"
2524 scale_qsv_filter_deps="libmfx"
2525 scale_vaapi_filter_deps="vaapi VAProcPipelineParameterBuffer"
2526
2527 # examples
2528 decode_audio_example_deps="avcodec avutil"
2529 decode_video_example_deps="avcodec avutil"
2530 encode_audio_example_deps="avcodec avutil"
2531 encode_video_example_deps="avcodec avutil"
2532 filter_audio_example_deps="avfilter avutil"
2533 metadata_example_deps="avformat avutil"
2534 output_example_deps="avcodec avformat avresample avutil swscale"
2535 qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder"
2536 transcode_aac_example_deps="avcodec avformat avresample"
2537
2538 # EXTRALIBS_LIST
2539 cpu_init_extralibs="pthreads_extralibs"
2540 cws2fws_extralibs="zlib_extralibs"
2541
2542 # libraries, in linking order
2543 avcodec_deps="avutil"
2544 avcodec_select="null_bsf"
2545 avdevice_deps="avformat avcodec avutil"
2546 avfilter_deps="avutil"
2547 avformat_deps="avcodec avutil"
2548 avformat_suggest="network"
2549 avresample_deps="avutil"
2550 swscale_deps="avutil"
2551
2552 avcodec_extralibs="pthreads_extralibs libm_extralibs"
2553 avdevice_extralibs="libm_extralibs"
2554 avformat_extralibs="libm_extralibs"
2555 avfilter_extralibs="pthreads_extralibs libm_extralibs"
2556 avresample_extralibs="libm_extralibs"
2557 avutil_extralibs="clock_gettime_extralibs cuda_extralibs libm_extralibs libmfx_extralibs nanosleep_extralibs pthreads_extralibs user32_extralibs vaapi_extralibs vaapi_drm_extralibs vaapi_x11_extralibs vdpau_x11_extralibs wincrypt_extralibs"
2558 swscale_extralibs="libm_extralibs"
2559
2560 # programs
2561 avconv_deps="avcodec avfilter avformat avresample swscale"
2562 avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
2563                fps_filter null_filter resample_filter scale_filter
2564                trim_filter"
2565 avconv_suggest="psapi shell32"
2566 avplay_deps="avcodec avfilter avformat avresample sdl"
2567 avplay_select="rdft format_filter transpose_filter hflip_filter vflip_filter"
2568 avplay_suggest="shell32"
2569 avprobe_deps="avcodec avformat"
2570 avprobe_suggest="shell32"
2571
2572 # documentation
2573 pod2man_deps="doc"
2574 texi2html_deps="doc"
2575
2576 # default parameters
2577
2578 logfile="avbuild/config.log"
2579
2580 # installation paths
2581 prefix_default="/usr/local"
2582 bindir_default='${prefix}/bin'
2583 datadir_default='${prefix}/share/avconv'
2584 docdir_default='${prefix}/share/doc/libav'
2585 incdir_default='${prefix}/include'
2586 libdir_default='${prefix}/lib'
2587 mandir_default='${prefix}/share/man'
2588 shlibdir_default="$libdir_default"
2589
2590 # toolchain
2591 ar_default="ar"
2592 cc_default="gcc"
2593 host_cc_default="gcc"
2594 x86asmexe_default="nasm"
2595 ln_s="ln -s -f"
2596 nm_default="nm -g"
2597 pkg_config_default=pkg-config
2598 ranlib="ranlib"
2599 strip="strip"
2600 version_script='--version-script'
2601
2602 # machine
2603 arch_default=$(uname -m)
2604 cpu="generic"
2605 intrinsics="none"
2606
2607 # OS
2608 target_os_default=$(tolower $(uname -s))
2609 host_os=$target_os_default
2610
2611 # configurable options
2612 enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST
2613
2614 enable asm
2615 enable debug
2616 enable doc
2617 enable faan faandct faanidct
2618 enable optimizations
2619 enable safe_bitstream_reader
2620 enable static
2621 enable swscale_alpha
2622 enable valgrind_backtrace
2623
2624 # By default, enable only those hwaccels that have no external dependencies.
2625 enable d3d11va dxva2 vda vdpau
2626
2627 # internal components are enabled by default
2628 enable $EXTRALIBS_LIST
2629
2630 # Avoid external, non-system, libraries getting enabled by dependency resolution
2631 disable $EXTERNAL_LIBRARY_LIST
2632
2633 # build settings
2634 SHFLAGS='-shared -Wl,-soname,$$(@F)'
2635 LIBPREF="lib"
2636 LIBSUF=".a"
2637 LIBNAME='$(LIBPREF)$(NAME)$(LIBSUF)'
2638 SLIBPREF="lib"
2639 SLIBSUF=".so"
2640 SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
2641 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
2642 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
2643 LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2644 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
2645 SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2646 VERSION_SCRIPT_POSTPROCESS_CMD="cat"
2647
2648 asflags_filter=echo
2649 cflags_filter=echo
2650 ldflags_filter=echo
2651
2652 AS_C='-c'
2653 AS_O='-o $@'
2654 CC_C='-c'
2655 CC_E='-E -o $@'
2656 CC_O='-o $@'
2657 OBJCC_C='-c'
2658 OBJCC_E='-E -o $@'
2659 OBJCC_O='-o $@'
2660 X86ASM_O='-o $@'
2661 LD_O='-o $@'
2662 LD_LIB='-l%'
2663 LD_PATH='-L'
2664 HOSTCC_C='-c'
2665 HOSTCC_E='-E -o $@'
2666 HOSTCC_O='-o $@'
2667 HOSTLD_O='-o $@'
2668
2669 host_extralibs='-lm'
2670 host_cflags_filter=echo
2671 host_ldflags_filter=echo
2672
2673 target_path='$(CURDIR)'
2674
2675 # since the object filename is not given with the -MM flag, the compiler
2676 # is only able to print the basename, and we must add the path ourselves
2677 DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
2678 DEPFLAGS='-MM'
2679
2680 mkdir -p avbuild
2681
2682 # find source path
2683 if test -f configure; then
2684     source_path=.
2685 else
2686     source_path=$(cd $(dirname "$0"); pwd)
2687     echo "$source_path" | grep -q '[[:blank:]]' &&
2688         die "Out of tree builds are impossible with whitespace in source path."
2689     test -e "$source_path/config.h" &&
2690         die "Out of tree builds are impossible with config.h in source dir."
2691 fi
2692
2693 for v in "$@"; do
2694     r=${v#*=}
2695     l=${v%"$r"}
2696     r=$(sh_quote "$r")
2697     LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
2698 done
2699
2700 find_things(){
2701     thing=$1
2702     pattern=$2
2703     file=$source_path/$3
2704     sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2705 }
2706
2707 ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
2708 DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2709 HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2710 PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
2711 MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
2712 DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2713 OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
2714 INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2715 FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2716
2717 find_things_extern(){
2718     thing=$1
2719     pattern=$2
2720     file=$source_path/$3
2721     sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file"
2722 }
2723
2724 BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
2725 PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
2726
2727 AVCODEC_COMPONENTS_LIST="
2728     $BSF_LIST
2729     $DECODER_LIST
2730     $ENCODER_LIST
2731     $HWACCEL_LIST
2732     $PARSER_LIST
2733 "
2734
2735 AVDEVICE_COMPONENTS_LIST="
2736     $INDEV_LIST
2737     $OUTDEV_LIST
2738 "
2739
2740 AVFILTER_COMPONENTS_LIST="
2741     $FILTER_LIST
2742 "
2743
2744 AVFORMAT_COMPONENTS_LIST="
2745     $DEMUXER_LIST
2746     $MUXER_LIST
2747     $PROTOCOL_LIST
2748 "
2749
2750 ALL_COMPONENTS="
2751     $AVCODEC_COMPONENTS_LIST
2752     $AVDEVICE_COMPONENTS_LIST
2753     $AVFILTER_COMPONENTS_LIST
2754     $AVFORMAT_COMPONENTS_LIST
2755 "
2756
2757 for n in $COMPONENT_LIST; do
2758     v=$(toupper ${n%s})_LIST
2759     eval enable \$$v
2760     eval ${n}_if_any="\$$v"
2761 done
2762
2763 enable $ARCH_EXT_LIST
2764
2765 die_unknown(){
2766     echo "Unknown option \"$1\"."
2767     echo "See $0 --help for available options."
2768     exit 1
2769 }
2770
2771 print_3_columns() {
2772     printf "%-25s %-25s %-25s\n" $(cat | tr ' ' '\n' | sort)
2773 }
2774
2775 show_list() {
2776     suffix=_$1
2777     shift
2778     echo $* | sed s/$suffix//g | print_3_columns
2779     exit 0
2780 }
2781
2782 rand_list(){
2783     IFS=', '
2784     set -- $*
2785     unset IFS
2786     for thing; do
2787         comp=${thing%:*}
2788         prob=${thing#$comp}
2789         prob=${prob#:}
2790         is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
2791         echo "prob ${prob:-0.5}"
2792         printf '%s\n' $comp
2793     done
2794 }
2795
2796 do_random(){
2797     action=$1
2798     shift
2799     random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
2800     $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
2801 }
2802
2803 for opt do
2804     optval="${opt#*=}"
2805     case "$opt" in
2806         --extra-ldflags=*)
2807             add_ldflags $optval
2808         ;;
2809         --extra-ldexeflags=*)
2810             add_ldexeflags $optval
2811         ;;
2812         --extra-ldsoflags=*)
2813             add_ldsoflags $optval
2814         ;;
2815         --extra-libs=*)
2816             add_extralibs $optval
2817         ;;
2818         --disable-devices)
2819             disable $INDEV_LIST $OUTDEV_LIST
2820         ;;
2821         --enable-debug=*)
2822             debuglevel="$optval"
2823         ;;
2824         --disable-programs)
2825             disable $PROGRAM_LIST
2826         ;;
2827         --disable-everything)
2828             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2829         ;;
2830         --disable-all)
2831             map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2832             disable $LIBRARY_LIST $PROGRAM_LIST doc
2833         ;;
2834         --enable-random|--disable-random)
2835             action=${opt%%-random}
2836             do_random ${action#--} $COMPONENT_LIST
2837         ;;
2838         --enable-random=*|--disable-random=*)
2839             action=${opt%%-random=*}
2840             do_random ${action#--} $optval
2841         ;;
2842         --enable-*=*|--disable-*=*)
2843             eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
2844             is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
2845             eval list=\$$(toupper $thing)_LIST
2846             name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
2847             $action $(filter "$name" $list)
2848         ;;
2849         --enable-avserver|--disable-avserver*)
2850             warn "avserver has been removed, the ${opt} option is only"\
2851                  "provided for compatibility and will be removed in the future"
2852         ;;
2853         --enable-yasm|--disable-yasm)
2854             warn "The ${opt} option is only provided for compatibility and will be\n"\
2855                  "removed in the future. Use --enable-x86asm / --disable-x86asm instead."
2856             test $opt = --enable-yasm && x86asm=yes || x86asm=no
2857         ;;
2858         --enable-?*|--disable-?*)
2859             eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
2860             if is_in $option $COMPONENT_LIST; then
2861                 test $action = disable && action=unset
2862                 eval $action \$$(toupper ${option%s})_LIST
2863             elif is_in $option $CMDLINE_SELECT; then
2864                 $action $option
2865             else
2866                 die_unknown $opt
2867             fi
2868         ;;
2869         --list-*)
2870             NAME="${opt#--list-}"
2871             is_in $NAME $COMPONENT_LIST || die_unknown $opt
2872             NAME=${NAME%s}
2873             eval show_list $NAME \$$(toupper $NAME)_LIST
2874         ;;
2875         --help|-h) show_help
2876         ;;
2877         --quiet|-q) quiet=yes
2878         ;;
2879         *)
2880             optname="${opt%%=*}"
2881             optname="${optname#--}"
2882             optname=$(echo "$optname" | sed 's/-/_/g')
2883             if is_in $optname $CMDLINE_SET; then
2884                 eval $optname='$optval'
2885             elif is_in $optname $CMDLINE_APPEND; then
2886                 append $optname "$optval"
2887             else
2888                 die_unknown $opt
2889             fi
2890         ;;
2891     esac
2892 done
2893
2894 for e in $env; do
2895     eval "export $e"
2896 done
2897
2898 disabled logging && logfile=/dev/null
2899
2900 # Die early if licensing-related configure options are incompatible.
2901 die_license_disabled() {
2902     enabled $1 || { enabled $v && die "$v is $1 and --enable-$1 is not specified."; }
2903 }
2904
2905 map "die_license_disabled gpl"      $EXTERNAL_LIBRARY_GPL_LIST
2906 map "die_license_disabled nonfree"  $EXTERNAL_LIBRARY_NONFREE_LIST $HWACCEL_LIBRARY_NONFREE_LIST
2907 map "die_license_disabled version3" $EXTERNAL_LIBRARY_VERSION3_LIST
2908
2909 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2910
2911 enabled_all gnutls openssl &&
2912     die "GnuTLS and OpenSSL must not be enabled at the same time."
2913
2914 # Disable all the library-specific components if the library itself
2915 # is disabled, see AVCODEC_LIST and following _LIST variables.
2916
2917 disable_components(){
2918     disabled ${1} && disable $(
2919         eval components="\$$(toupper ${1})_COMPONENTS"
2920         map 'eval echo \${$(toupper ${v%s})_LIST}' $components
2921     )
2922 }
2923
2924 map 'disable_components $v' $LIBRARY_LIST
2925
2926 echo "# $0 $LIBAV_CONFIGURATION" > $logfile
2927 set >> $logfile
2928
2929 case "$toolchain" in
2930     *-asan)
2931         cc_default="${toolchain%-asan}"
2932         add_cflags  -fsanitize=address
2933         add_ldflags -fsanitize=address
2934     ;;
2935     *-msan)
2936         cc_default="${toolchain%-msan}"
2937         add_cflags  -fsanitize=memory -fsanitize-memory-track-origins
2938         add_ldflags -fsanitize=memory
2939     ;;
2940     *-tsan)
2941         cc_default="${toolchain%-tsan}"
2942         add_cflags  -fsanitize=thread -fPIE
2943         add_ldflags -fsanitize=thread -pie
2944         case "$toolchain" in
2945             gcc-tsan)
2946                 add_cflags  -fPIC
2947                 add_ldflags -fPIC
2948                 ;;
2949         esac
2950     ;;
2951     *-usan)
2952         cc_default="${toolchain%-usan}"
2953         add_cflags  -fsanitize=undefined
2954         add_ldflags -fsanitize=undefined
2955         case "$toolchain" in
2956             clang-usan)
2957                 add_cflags -O1
2958                 ;;
2959         esac
2960     ;;
2961     valgrind-*)
2962         target_exec_default="valgrind"
2963         case "$toolchain" in
2964             valgrind-massif)
2965                 target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
2966                 ;;
2967             valgrind-memcheck)
2968                 target_exec_args="--track-origins=yes --leak-check=full"
2969                 ;;
2970         esac
2971     ;;
2972     msvc)
2973         # Check whether the current MSVC version needs the C99 converter.
2974         # From MSVC 2013 (compiler major version 18) onwards, it does actually
2975         # support enough of C99 to build libav. Default to the new
2976         # behaviour if the regexp was unable to match anything, since this
2977         # successfully parses the version number of existing supported
2978         # versions that require the converter (MSVC 2010 and 2012).
2979         cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
2980         if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
2981             cc_default="cl"
2982         else
2983             cc_default="c99wrap cl"
2984         fi
2985         ld_default="$source_path/compat/windows/mslink"
2986         nm_default="dumpbin -symbols"
2987         ar_default="lib"
2988         case "$arch" in
2989         arm*)
2990             as_default="armasm"
2991             ;;
2992         esac
2993         target_os_default="win32"
2994         # Use a relative path for TMPDIR. This makes sure all the
2995         # ffconf temp files are written with a relative path, avoiding
2996         # issues with msys/win32 path conversion for MSVC parameters
2997         # such as -Fo<file> or -out:<file>.
2998         TMPDIR=.
2999     ;;
3000     icl)
3001         cc_default="icl"
3002         ld_default="xilink"
3003         nm_default="dumpbin -symbols"
3004         ar_default="xilib"
3005         target_os_default="win32"
3006         TMPDIR=.
3007     ;;
3008     gcov)
3009         add_cflags  -fprofile-arcs -ftest-coverage
3010         add_ldflags -fprofile-arcs -ftest-coverage
3011     ;;
3012     llvm-cov)
3013         add_cflags -fprofile-arcs -ftest-coverage
3014         add_ldflags --coverage
3015     ;;
3016     hardened)
3017         add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
3018         add_cflags   -fno-strict-overflow -fstack-protector-all
3019         add_ldflags  -Wl,-z,relro -Wl,-z,now
3020     ;;
3021     ?*)
3022         die "Unknown toolchain $toolchain"
3023     ;;
3024 esac
3025
3026 test -n "$cross_prefix" && enable cross_compile
3027
3028 if enabled cross_compile; then
3029     test -n "$arch" && test -n "$target_os" ||
3030         die "Must specify target arch (--arch) and OS (--target-os) when cross-compiling"
3031 fi
3032
3033 ar_default="${cross_prefix}${ar_default}"
3034 cc_default="${cross_prefix}${cc_default}"
3035 objcc_default="${cross_prefix}${objcc_default}"
3036 x86asmexe_default="${cross_prefix}${x86asmexe_default}"
3037 nm_default="${cross_prefix}${nm_default}"
3038 pkg_config_default="${cross_prefix}${pkg_config_default}"
3039 ranlib="${cross_prefix}${ranlib}"
3040 strip="${cross_prefix}${strip}"
3041
3042 sysinclude_default="${sysroot}/usr/include"
3043
3044 set_default arch cc pkg_config sysinclude target_exec target_os x86asmexe
3045 enabled cross_compile || host_cc_default=$cc
3046 set_default host_cc
3047
3048 if ! $pkg_config --version >/dev/null 2>&1; then
3049     warn "$pkg_config not found, library detection may fail."
3050     pkg_config=false
3051 fi
3052
3053 exesuf() {
3054     case $1 in
3055         mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
3056     esac
3057 }
3058
3059 EXESUF=$(exesuf $target_os)
3060 HOSTEXESUF=$(exesuf $host_os)
3061
3062 # set temporary file name
3063 : ${TMPDIR:=$TEMPDIR}
3064 : ${TMPDIR:=$TMP}
3065 : ${TMPDIR:=/tmp}
3066
3067 if ! check_cmd mktemp -u XXXXXX; then
3068     # simple replacement for missing mktemp
3069     # NOT SAFE FOR GENERAL USE
3070     mktemp(){
3071         tmpname="${2%%XXX*}.${HOSTNAME}.${UID}.$$"
3072         echo "$tmpname"
3073         mkdir "$tmpname"
3074     }
3075 fi
3076
3077 AVTMPDIR=$(mktemp -d "${TMPDIR}/avconf.XXXXXXXX" 2> /dev/null) ||
3078     die "Unable to create temporary directory in $TMPDIR."
3079
3080 tmpfile(){
3081     tmp="${AVTMPDIR}/test"$2
3082     (set -C; exec > $tmp) 2> /dev/null ||
3083         die "Unable to create temporary file in $AVTMPDIR."
3084     eval $1=$tmp
3085 }
3086
3087 trap 'rm -rf -- "$AVTMPDIR"' EXIT
3088 trap 'exit 2' INT
3089
3090 tmpfile TMPASM .asm
3091 tmpfile TMPC   .c
3092 tmpfile TMPE   $EXESUF
3093 tmpfile TMPH   .h
3094 tmpfile TMPO   .o
3095 tmpfile TMPS   .S
3096 tmpfile TMPSH  .sh
3097 tmpfile TMPV   .ver
3098
3099 unset -f mktemp
3100
3101 chmod +x $TMPE
3102
3103 # make sure we can execute files in $TMPDIR
3104 cat > $TMPSH 2>> $logfile <<EOF
3105 #! /bin/sh
3106 EOF
3107 chmod +x $TMPSH >> $logfile 2>&1
3108 if ! $TMPSH >> $logfile 2>&1; then
3109     cat <<EOF
3110 Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
3111 variable to another directory and make sure that it is not mounted noexec.
3112 EOF
3113     die "Sanity test failed."
3114 fi
3115
3116 armasm_flags(){
3117     for flag; do
3118         case $flag in
3119             # Filter out MSVC cl.exe options from cflags that shouldn't
3120             # be passed to gas-preprocessor
3121             -M[TD]*)                                            ;;
3122             *)                  echo $flag                      ;;
3123         esac
3124    done
3125 }
3126
3127 ccc_flags(){
3128     for flag; do
3129         case $flag in
3130             -std=c99)           echo -c99                       ;;
3131             -mcpu=*)            echo -arch ${flag#*=}           ;;
3132             -mieee)             echo -ieee                      ;;
3133             -O*|-fast)          echo $flag                      ;;
3134             -fno-math-errno)    echo -assume nomath_errno       ;;
3135             -g)                 echo -g3                        ;;
3136             -Wall)              echo -msg_enable level2         ;;
3137             -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
3138             -Wl,*)              echo $flag                      ;;
3139             -f*|-W*)                                            ;;
3140             *)                  echo $flag                      ;;
3141         esac
3142    done
3143 }
3144
3145 cparser_flags(){
3146     for flag; do
3147         case $flag in
3148             -Wno-switch)             echo -Wno-switch-enum ;;
3149             -Wno-format-zero-length) ;;
3150             -Wdisabled-optimization) ;;
3151             -Wno-pointer-sign)       echo -Wno-other ;;
3152             *)                       echo $flag ;;
3153         esac
3154     done
3155 }
3156
3157 msvc_common_flags(){
3158     for flag; do
3159         case $flag in
3160             # In addition to specifying certain flags under the compiler
3161             # specific filters, they must be specified here as well or else the
3162             # generic catch all at the bottom will print the original flag.
3163             -Wall)                ;;
3164             -Wextra)              ;;
3165             -std=c99)             ;;
3166             # Common flags
3167             -fomit-frame-pointer) ;;
3168             -g)                   echo -Z7 ;;
3169             -fno-math-errno)      ;;
3170             -fno-common)          ;;
3171             -fno-signed-zeros)    ;;
3172             -fPIC)                ;;
3173             -mthumb)              ;;
3174             -march=*)             ;;
3175             -lz)                  echo zlib.lib ;;
3176             -lx264)               echo libx264.lib ;;
3177             -l*)                  echo ${flag#-l}.lib ;;
3178             -L*)                  echo -libpath:${flag#-L} ;;
3179             *)                    echo $flag ;;
3180         esac
3181     done
3182 }
3183
3184 msvc_flags(){
3185     msvc_common_flags "$@"
3186     for flag; do
3187         case $flag in
3188             -Wall)                echo -W3 -wd4018 -wd4146 -wd4244 -wd4305     \
3189                                        -wd4554 ;;
3190             -Wextra)              echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
3191                                        -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
3192                                        -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
3193                                        -wd4273 -wd4554 -wd4701 -wd4703 ;;
3194         esac
3195     done
3196 }
3197
3198 icl_flags(){
3199     msvc_common_flags "$@"
3200     for flag; do
3201         case $flag in
3202             # Despite what Intel's documentation says -Wall, which is supported
3203             # on Windows, does enable remarks so disable them here.
3204             -Wall)                echo $flag -Qdiag-disable:remark ;;
3205             -std=c99)             echo -Qstd=c99 ;;
3206         esac
3207     done
3208 }
3209
3210 pgi_flags(){
3211     for flag; do
3212         case $flag in
3213             -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
3214             -fomit-frame-pointer) echo -Mnoframe ;;
3215             -g)                   echo -gopt ;;
3216             *)                    echo $flag ;;
3217         esac
3218     done
3219 }
3220
3221 suncc_flags(){
3222     for flag; do
3223         case $flag in
3224             -march=*|-mcpu=*)
3225                 case "${flag#*=}" in
3226                     native)                   echo -xtarget=native       ;;
3227                     v9|niagara)               echo -xarch=sparc          ;;
3228                     ultrasparc)               echo -xarch=sparcvis       ;;
3229                     ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
3230                     i586|pentium)             echo -xchip=pentium        ;;
3231                     i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
3232                     pentium3*|c3-2)           echo -xtarget=pentium3     ;;
3233                     pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
3234                     pentium4*)          echo -xtarget=pentium4           ;;
3235                     prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
3236                     *-sse3)             echo -xarch=sse3                 ;;
3237                     core2)              echo -xarch=ssse3 -xchip=core2   ;;
3238                     corei7)           echo -xarch=sse4_2 -xchip=nehalem  ;;
3239                     corei7-avx)       echo -xarch=avx -xchip=sandybridge ;;
3240                     amdfam10|barcelona|bdver*) echo -xarch=sse4_1        ;;
3241                     athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
3242                     k8|opteron|athlon64|athlon-fx)
3243                                                echo -xarch=sse2a         ;;
3244                     athlon*)                   echo -xarch=pentium_proa  ;;
3245                 esac
3246                 ;;
3247             -std=c99)             echo -xc99              ;;
3248             -fomit-frame-pointer) echo -xregs=frameptr    ;;
3249             -fPIC)                echo -KPIC -xcode=pic32 ;;
3250             -W*,*)                echo $flag              ;;
3251             -f*-*|-W*|-mimpure-text)                      ;;
3252             -shared)              echo -G                 ;;
3253             *)                    echo $flag              ;;
3254         esac
3255     done
3256 }
3257
3258 tms470_flags(){
3259     for flag; do
3260         case $flag in
3261             -march=*|-mcpu=*)
3262                 case "${flag#*=}" in
3263                     armv7-a|cortex-a*)      echo -mv=7a8 ;;
3264                     armv7-r|cortex-r*)      echo -mv=7r4 ;;
3265                     armv7-m|cortex-m*)      echo -mv=7m3 ;;
3266                     armv6*|arm11*)          echo -mv=6   ;;
3267                     armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
3268                                             echo -mv=5e  ;;
3269                     armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
3270                 esac
3271                 ;;
3272             -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
3273             -mfpu=vfp)      echo --float_support=vfpv2        ;;
3274             -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
3275             -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
3276             -msoft-float)   echo --float_support=vfplib       ;;
3277             -O[0-3]|-mf=*)  echo $flag                        ;;
3278             -g)             echo -g -mn                       ;;
3279             -pds=*)         echo $flag                        ;;
3280             -D*|-I*)        echo $flag                        ;;
3281             --gcc|--abi=*)  echo $flag                        ;;
3282             -me)            echo $flag                        ;;
3283         esac
3284     done
3285 }
3286
3287 probe_cc(){
3288     pfx=$1
3289     _cc=$2
3290
3291     unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
3292     unset _ld_o _ldflags _ld_lib _ld_path
3293     unset _depflags _DEPCMD _DEPFLAGS
3294     _flags_filter=echo
3295
3296     if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
3297         _type=llvm_gcc
3298         gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
3299         _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
3300         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3301         _cflags_speed='-O3'
3302         _cflags_size='-Os'
3303     elif $_cc -v 2>&1 | grep -qi ^gcc; then
3304         _type=gcc
3305         gcc_version=$($_cc --version | head -n1)
3306         gcc_basever=$($_cc -dumpversion)
3307         gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
3308         gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
3309         _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
3310         if ! $_cc -dumpversion | grep -q '^2\.'; then
3311             _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3312         fi
3313         _cflags_speed='-O3'
3314         _cflags_size='-Os'
3315     elif $_cc --version 2>/dev/null | grep -q ^icc; then
3316         _type=icc
3317         _ident=$($_cc --version | head -n1)
3318         _depflags='-MMD'
3319         _cflags_speed='-O3'
3320         _cflags_size='-Os'
3321         _cflags_noopt='-O1'
3322     elif $_cc -v 2>&1 | grep -q xlc; then
3323         _type=xlc
3324         _ident=$($_cc -qversion 2>/dev/null | head -n1)
3325         _cflags_speed='-O5'
3326         _cflags_size='-O5 -qcompact'
3327     elif $_cc -V 2>/dev/null | grep -q Compaq; then
3328         _type=ccc
3329         _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
3330         _DEPFLAGS='-M'
3331         _cflags_speed='-fast'
3332         _cflags_size='-O1'
3333         _flags_filter=ccc_flags
3334     elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3335         test -d "$sysroot" || die "No valid sysroot specified."
3336         _type=armcc
3337         _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3338         armcc_conf="$PWD/armcc.conf"
3339         $_cc --arm_linux_configure                 \
3340              --arm_linux_config_file="$armcc_conf" \
3341              --configure_sysroot="$sysroot"        \
3342              --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
3343              die "Error creating armcc configuration file."
3344         $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
3345         _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
3346         as_default="${cross_prefix}gcc"
3347         _depflags='-MMD'
3348         _cflags_speed='-O3'
3349         _cflags_size='-Os'
3350     elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3351         _type=tms470
3352         _ident=$($_cc -version | head -n1 | tr -s ' ')
3353         _flags='--gcc --abi=eabi -me'
3354         _cc_e='-ppl -fe=$@'
3355         _cc_o='-fe=$@'
3356         _depflags='-ppa -ppd=$(@:.o=.d)'
3357         _cflags_speed='-O3 -mf=5'
3358         _cflags_size='-O3 -mf=2'
3359         _flags_filter=tms470_flags
3360     elif $_cc -v 2>&1 | grep -q clang; then
3361         _type=clang
3362         _ident=$($_cc --version 2>/dev/null | head -n1)
3363         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3364         _cflags_speed='-O3'
3365         _cflags_size='-Os'
3366     elif $_cc -V 2>&1 | grep -q Sun; then
3367         _type=suncc
3368         _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
3369         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3370         _DEPFLAGS='-xM1 -xc99'
3371         _ldflags='-std=c99'
3372         _cflags_speed='-O5'
3373         _cflags_size='-O5 -xspace'
3374         _flags_filter=suncc_flags
3375     elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
3376         _type=pathscale
3377         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3378         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3379         _cflags_speed='-O2'
3380         _cflags_size='-Os'
3381         _flags_filter='filter_out -Wdisabled-optimization'
3382     elif $_cc -v 2>&1 | grep -q Open64; then
3383         _type=open64
3384         _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
3385         _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3386         _cflags_speed='-O2'
3387         _cflags_size='-Os'
3388         _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
3389     elif $_cc -V 2>&1 | grep -q Portland; then
3390         _type=pgi
3391         _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3392         opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3393         _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
3394         _cflags_size="-O2 -Munroll=c:1 $opt_common"
3395         _cflags_noopt="-O1"
3396         _flags_filter=pgi_flags
3397     elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
3398         _type=armasm
3399         _ident=$($_cc | head -n1)
3400         # 4509: "This form of conditional instruction is deprecated"
3401         _flags="-nologo -ignore 4509"
3402         _flags_filter=armasm_flags
3403     elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
3404         _type=msvc
3405         _ident=$($_cc 2>&1 | head -n1)
3406         _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
3407         _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
3408         _cflags_speed="-O2"
3409         _cflags_size="-O1"
3410         _cflags_noopt="-O1"
3411         if $_cc -nologo- 2>&1 | grep -q Linker; then
3412             _ld_o='-out:$@'
3413         else
3414             _ld_o='-Fe$@'
3415         fi
3416         _cc_o='-Fo$@'
3417         _cc_e='-P -Fi$@'
3418         _flags_filter=msvc_flags
3419         _ld_lib='lib%.a'
3420         _ld_path='-libpath:'
3421         _flags='-nologo'
3422     elif $_cc 2>&1 | grep -q Intel; then
3423         _type=icl
3424         _ident=$($_cc 2>&1 | head -n1)
3425         _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3426         # Not only is O3 broken on 13.x+ but it is slower on all previous
3427         # versions (tested) as well.
3428         _cflags_speed="-O2"
3429         _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3430         if $_cc 2>&1 | grep -q Linker; then
3431             _ld_o='-out:$@'
3432         else
3433             _ld_o='-Fe$@'
3434         fi
3435         _cc_o='-Fo$@'
3436         _cc_e='-P'
3437         _flags_filter=icl_flags
3438         _ld_lib='lib%.a'
3439         _ld_path='-libpath:'
3440         # -Qdiag-error to make icl error when seeing certain unknown arguments
3441         _flags='-nologo -Qdiag-error:4044,10157'
3442         # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
3443         # with MSVC which enables it by default.
3444         _cflags='-Qms0 -Qvec- -Qsimd- -GS'
3445     elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then
3446         # lld can emulate multiple different linkers; in ms link.exe mode,
3447         # the -? parameter gives the help output which contains an identifyable
3448         # string, while it gives an error in other modes.
3449         _type=lld-link
3450         # The link.exe mode doesn't have a switch for getting the version,
3451         # but we can force it back to gnu mode and get the version from there.
3452         _ident=$($_cc -flavor gnu --version 2>/dev/null)
3453         _ld_o='-out:$@'
3454         _flags_filter=msvc_flags
3455         _ld_lib='lib%.a'
3456         _ld_path='-libpath:'
3457     elif $_cc --version 2>/dev/null | grep -q ^cparser; then
3458         _type=cparser
3459         _ident=$($_cc --version | head -n1)
3460         _depflags='-MMD'
3461         _cflags_speed='-O4'
3462         _cflags_size='-O2'
3463         _flags_filter=cparser_flags
3464     fi
3465
3466     eval ${pfx}_type=\$_type
3467     eval ${pfx}_ident=\$_ident
3468 }
3469
3470 set_ccvars(){
3471     eval ${1}_C=\${_cc_c-\${${1}_C}}
3472     eval ${1}_E=\${_cc_e-\${${1}_E}}
3473     eval ${1}_O=\${_cc_o-\${${1}_O}}
3474
3475     if [ -n "$_depflags" ]; then
3476         eval ${1}_DEPFLAGS=\$_depflags
3477     else
3478         eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
3479         eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
3480         eval DEP${1}FLAGS=\$_flags
3481     fi
3482 }
3483
3484 probe_cc cc "$cc"
3485 cflags_filter=$_flags_filter
3486 cflags_speed=$_cflags_speed
3487 cflags_size=$_cflags_size
3488 cflags_noopt=$_cflags_noopt
3489 add_cflags $_flags $_cflags
3490 cc_ldflags=$_ldflags
3491 set_ccvars CC
3492
3493 probe_cc hostcc "$host_cc"
3494 host_cflags_filter=$_flags_filter
3495 host_cflags_speed=$_cflags_speed
3496 add_host_cflags  $_flags $_cflags
3497 set_ccvars HOSTCC
3498
3499 test -n "$cc_type" && enable $cc_type ||
3500     warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3501
3502 : ${as_default:=$cc}
3503 : ${objcc_default:=$cc}
3504 : ${dep_cc_default:=$cc}
3505 : ${ld_default:=$cc}
3506 : ${host_ld_default:=$host_cc}
3507 set_default ar as objcc dep_cc ld host_ld
3508
3509 probe_cc as "$as"
3510 asflags_filter=$_flags_filter
3511 add_asflags $_flags $_cflags
3512 set_ccvars AS
3513
3514 probe_cc objcc "$objcc"
3515 objcflags_filter=$_flags_filter
3516 add_objcflags $_flags $_cflags
3517 set_ccvars OBJC
3518
3519 probe_cc ld "$ld"
3520 ldflags_filter=$_flags_filter
3521 add_ldflags $_flags $_ldflags
3522 test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3523 LD_O=${_ld_o-$LD_O}
3524 LD_LIB=${_ld_lib-$LD_LIB}
3525 LD_PATH=${_ld_path-$LD_PATH}
3526
3527 probe_cc hostld "$host_ld"
3528 host_ldflags_filter=$_flags_filter
3529 add_host_ldflags $_flags $_ldflags
3530 HOSTLD_O=${_ld_o-$HOSTLD_O}
3531
3532 if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
3533     probe_cc depcc "$dep_cc"
3534     CCDEP=${_DEPCMD:-$DEPCMD}
3535     CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
3536     DEPCCFLAGS=$_flags
3537 fi
3538
3539 if $ar 2>&1 | grep -q Microsoft; then
3540     arflags="-nologo"
3541     ar_o='-out:$@'
3542 elif $ar 2>&1 | grep -q 'Texas Instruments'; then
3543     arflags="rq"
3544     ar_o='$@'
3545 elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
3546     arflags='-Xany -r -c'
3547     ar_o='$@'
3548 else
3549     arflags="rc"
3550     ar_o='$@'
3551 fi
3552
3553 add_cflags $extra_cflags
3554 add_objcflags $extra_objcflags
3555 add_asflags $extra_cflags
3556
3557 if test -n "$sysroot"; then
3558     case "$cc_type" in
3559         gcc|llvm_gcc|clang)
3560             add_cppflags --sysroot="$sysroot"
3561             add_ldflags --sysroot="$sysroot"
3562         ;;
3563         tms470)
3564             add_cppflags -I"$sysinclude"
3565             add_ldflags  --sysroot="$sysroot"
3566         ;;
3567     esac
3568 fi
3569
3570 if test "$cpu" = host; then
3571     enabled cross_compile &&
3572         die "--cpu=host makes no sense when cross-compiling."
3573
3574     case "$cc_type" in
3575         gcc|llvm_gcc)
3576             check_native(){
3577                 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3578                 sed -n "/cc1.*$1=/{
3579                             s/.*$1=\\([^ ]*\\).*/\\1/
3580                             p
3581                             q
3582                         }" $TMPE
3583             }
3584             cpu=$(check_native -march || check_native -mcpu)
3585         ;;
3586     esac
3587
3588     test "${cpu:-host}" = host &&
3589         die "--cpu=host not supported with compiler $cc"
3590 fi
3591
3592 # Deal with common $arch aliases
3593 case "$arch" in
3594     aarch64|arm64)
3595         arch="aarch64"
3596     ;;
3597     arm*)
3598         arch="arm"
3599     ;;
3600     mips*|IP*)
3601         case "$arch" in
3602         *el)
3603             add_cppflags -EL
3604             add_ldflags -EL
3605         ;;
3606         *eb)
3607             add_cppflags -EB
3608             add_ldflags -EB
3609         ;;
3610         esac
3611         arch="mips"
3612     ;;
3613     parisc*|hppa*)
3614         arch="parisc"
3615     ;;
3616     "Power Macintosh"|ppc*|powerpc*)
3617         arch="ppc"
3618     ;;
3619     s390|s390x)
3620         arch="s390"
3621     ;;
3622     sh4|sh)
3623         arch="sh4"
3624     ;;
3625     sun4u|sparc*)
3626         arch="sparc"
3627     ;;
3628     tilegx|tile-gx)
3629         arch="tilegx"
3630     ;;
3631     i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
3632         arch="x86"
3633     ;;
3634 esac
3635
3636 is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3637 enable $arch
3638
3639 # Add processor-specific flags
3640 if enabled aarch64; then
3641
3642     case $cpu in
3643         armv*)
3644             cpuflags="-march=$cpu"
3645         ;;
3646         *)
3647             cpuflags="-mcpu=$cpu"
3648         ;;
3649     esac
3650
3651 elif enabled alpha; then
3652
3653     cpuflags="-mcpu=$cpu"
3654
3655 elif enabled arm; then
3656
3657     check_arm_arch() {
3658         check_cpp_condition stddef.h \
3659             "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
3660             $cpuflags
3661     }
3662
3663     probe_arm_arch() {
3664         if   check_arm_arch 4;        then echo armv4
3665         elif check_arm_arch 4T;       then echo armv4t
3666         elif check_arm_arch 5;        then echo armv5
3667         elif check_arm_arch 5E;       then echo armv5e
3668         elif check_arm_arch 5T;       then echo armv5t
3669         elif check_arm_arch 5TE;      then echo armv5te
3670         elif check_arm_arch 5TEJ;     then echo armv5te
3671         elif check_arm_arch 6;        then echo armv6
3672         elif check_arm_arch 6J;       then echo armv6j
3673         elif check_arm_arch 6K;       then echo armv6k
3674         elif check_arm_arch 6Z;       then echo armv6z
3675         elif check_arm_arch 6ZK;      then echo armv6zk
3676         elif check_arm_arch 6T2;      then echo armv6t2
3677         elif check_arm_arch 7;        then echo armv7
3678         elif check_arm_arch 7A  7_A;  then echo armv7-a
3679         elif check_arm_arch 7S;       then echo armv7-a
3680         elif check_arm_arch 7R  7_R;  then echo armv7-r
3681         elif check_arm_arch 7M  7_M;  then echo armv7-m
3682         elif check_arm_arch 7EM 7E_M; then echo armv7-m
3683         elif check_arm_arch 8A  8_A;  then echo armv8-a
3684         fi
3685     }
3686
3687     [ "$cpu" = generic ] && cpu=$(probe_arm_arch)
3688
3689     case $cpu in
3690         armv*)
3691             cpuflags="-march=$cpu"
3692             subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3693         ;;
3694         *)
3695             cpuflags="-mcpu=$cpu"
3696             case $cpu in
3697                 cortex-a*)                               subarch=armv7a  ;;
3698                 cortex-r*)                               subarch=armv7r  ;;
3699                 cortex-m*)                 enable thumb; subarch=armv7m  ;;
3700                 arm11*)                                  subarch=armv6   ;;
3701                 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
3702                 armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3703                 *)                             subarch=$(probe_arm_arch) ;;
3704             esac
3705         ;;
3706     esac
3707
3708     case "$subarch" in
3709         armv5t*)    enable fast_clz                ;;
3710         armv[6-8]*) enable fast_clz fast_unaligned ;;
3711     esac
3712
3713 elif enabled avr32; then
3714
3715     case $cpu in
3716         ap7[02]0[0-2])
3717             subarch="avr32_ap"
3718             cpuflags="-mpart=$cpu"
3719         ;;
3720         ap)
3721             subarch="avr32_ap"
3722             cpuflags="-march=$cpu"
3723         ;;
3724         uc3[ab]*)
3725             subarch="avr32_uc"
3726             cpuflags="-mcpu=$cpu"
3727         ;;
3728         uc)
3729             subarch="avr32_uc"
3730             cpuflags="-march=$cpu"
3731         ;;
3732     esac
3733
3734 elif enabled bfin; then
3735
3736     cpuflags="-mcpu=$cpu"
3737
3738 elif enabled mips; then
3739
3740     cpuflags="-march=$cpu"
3741
3742 elif enabled ppc; then
3743
3744     disable ldbrx
3745
3746     case $(tolower $cpu) in
3747         601|ppc601|powerpc601)
3748             cpuflags="-mcpu=601"
3749             disable altivec
3750         ;;
3751         603*|ppc603*|powerpc603*)
3752             cpuflags="-mcpu=603"
3753             disable altivec
3754         ;;
3755         604*|ppc604*|powerpc604*)
3756             cpuflags="-mcpu=604"
3757             disable altivec
3758         ;;
3759         g3|75*|ppc75*|powerpc75*)
3760             cpuflags="-mcpu=750"
3761             disable altivec
3762         ;;
3763         g4|745*|ppc745*|powerpc745*)
3764             cpuflags="-mcpu=7450"
3765             disable vsx
3766         ;;
3767         74*|ppc74*|powerpc74*)
3768             cpuflags="-mcpu=7400"
3769             disable vsx
3770         ;;
3771         g5|970|ppc970|powerpc970)
3772             cpuflags="-mcpu=970"
3773             disable vsx
3774         ;;
3775         power[3-6]*)
3776             cpuflags="-mcpu=$cpu"
3777             disable vsx
3778         ;;
3779         power[7-8]*)
3780             cpuflags="-mcpu=$cpu"
3781             enable ldbrx
3782         ;;
3783         cell)
3784             cpuflags="-mcpu=cell"
3785             enable ldbrx
3786             disable vsx
3787         ;;
3788         e500mc)
3789             cpuflags="-mcpu=e500mc"
3790             disable altivec
3791         ;;
3792         e500v2)
3793             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
3794             disable altivec
3795             disable dcbzl
3796         ;;
3797         e500)
3798             cpuflags="-mcpu=8540 -mhard-float"
3799             disable altivec
3800             disable dcbzl
3801         ;;
3802     esac
3803
3804 elif enabled sparc; then
3805
3806     case $cpu in
3807         cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
3808             cpuflags="-mcpu=$cpu"
3809         ;;
3810         ultrasparc*|niagara[234])
3811             cpuflags="-mcpu=$cpu"
3812         ;;
3813     esac
3814
3815 elif enabled x86; then
3816
3817     case $cpu in
3818         i[345]86|pentium)
3819             cpuflags="-march=$cpu"
3820             disable i686
3821             disable mmx
3822         ;;
3823         # targets that do NOT support nopl and conditional mov (cmov)
3824         pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
3825             cpuflags="-march=$cpu"
3826             disable i686
3827         ;;
3828         # targets that do support nopl and conditional mov (cmov)
3829         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*)
3830             cpuflags="-march=$cpu"
3831             enable i686
3832             enable fast_cmov
3833         ;;
3834         # targets that do support conditional mov but on which it's slow
3835         pentium4|pentium4m|prescott|nocona)
3836             cpuflags="-march=$cpu"
3837             enable i686
3838             disable fast_cmov
3839         ;;
3840     esac
3841
3842 fi
3843
3844 if [ "$cpu" != generic ]; then
3845     add_cflags  $cpuflags
3846     add_asflags $cpuflags
3847     test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
3848 fi
3849
3850 # compiler sanity check
3851 check_exec <<EOF
3852 int main(void){ return 0; }
3853 EOF
3854 if test "$?" != 0; then
3855     echo "$cc is unable to create an executable file."
3856     if test -z "$cross_prefix" && ! enabled cross_compile ; then
3857         echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
3858         echo "Only do this if you know what cross compiling means."
3859     fi
3860     die "C compiler test failed."
3861 fi
3862
3863 add_cppflags -D_ISOC99_SOURCE
3864
3865 # some compilers silently accept -std=c11, so we also need to check that the
3866 # version macro is defined properly
3867 check_cpp_condition stdlib.h  "__STDC_VERSION__ >= 201112L" -std=c11 &&
3868     add_cflags -std=c11 ||
3869     check_cflags -std=c99
3870
3871 check_cppflags -D_FILE_OFFSET_BITS=64
3872 check_cppflags -D_LARGEFILE_SOURCE
3873
3874 add_host_cppflags -D_ISOC99_SOURCE
3875 check_host_cflags -std=c99
3876 check_host_cflags -Wall
3877 check_host_cflags $host_cflags_speed
3878
3879 check_64bit(){
3880     arch32=$1
3881     arch64=$2
3882     expr=$3
3883     check_code cc "" "int test[2*($expr) - 1]" &&
3884         subarch=$arch64 || subarch=$arch32
3885 }
3886
3887 case "$arch" in
3888     aarch64|alpha|ia64)
3889         spic=$shared
3890     ;;
3891     mips)
3892         check_64bit mips mips64 '_MIPS_SIM > 1'
3893         spic=$shared
3894     ;;
3895     parisc)
3896         check_64bit parisc parisc64 'sizeof(void *) > 4'
3897         spic=$shared
3898     ;;
3899     ppc)
3900         check_64bit ppc ppc64 'sizeof(void *) > 4'
3901         spic=$shared
3902     ;;
3903     s390)
3904         check_64bit s390 s390x 'sizeof(void *) > 4'
3905         spic=$shared
3906     ;;
3907     sparc)
3908         check_64bit sparc sparc64 'sizeof(void *) > 4'
3909         spic=$shared
3910     ;;
3911     x86)
3912         check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3913         if test "$subarch" = "x86_64"; then
3914             spic=$shared
3915         fi
3916     ;;
3917 esac
3918
3919 enable $subarch
3920 enabled spic && enable_weak pic
3921
3922 enabled x86_64 && objformat=elf64 || objformat="elf32"
3923
3924 # OS specific
3925 case $target_os in
3926     aix)
3927         SHFLAGS=-shared
3928         add_cppflags '-I\$(SRC_PATH)/compat/aix'
3929         enabled shared && add_ldflags -Wl,-brtl
3930         ;;
3931     android)
3932         disable symver
3933         enable section_data_rel_ro
3934         SLIB_INSTALL_NAME='$(SLIBNAME)'
3935         SLIB_INSTALL_LINKS=
3936         SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
3937         ;;
3938     haiku)
3939         prefix_default="/boot/common"
3940         network_extralibs="-lnetwork"
3941         host_extralibs=
3942         ;;
3943     sunos)
3944         SHFLAGS='-shared -Wl,-h,$$(@F)'
3945         enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3946         network_extralibs="-lsocket -lnsl"
3947         # When using suncc to build, the Solaris linker will mark
3948         # an executable with each instruction set encountered by
3949         # the Solaris assembler.  As our libraries contain their own
3950         # guards for processor-specific code, instead suppress
3951         # generation of the HWCAPS ELF section on Solaris x86 only.
3952         enabled_all suncc x86 &&
3953             echo "hwcap_1 = OVERRIDE;" > mapfile &&
3954             add_ldflags -Wl,-M,mapfile
3955         nm_default='nm -P -g'
3956         version_script='-M'
3957         VERSION_SCRIPT_POSTPROCESS_CMD='perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)'
3958         ;;
3959     netbsd)
3960         disable symver
3961         oss_indev_extralibs="-lossaudio"
3962         oss_outdev_extralibs="-lossaudio"
3963         ;;
3964     openbsd|bitrig)
3965         disable symver
3966         SHFLAGS='-shared'
3967         SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3968         SLIB_INSTALL_LINKS=
3969         oss_indev_extralibs="-lossaudio"
3970         oss_outdev_extralibs="-lossaudio"
3971         ;;
3972     dragonfly)
3973         disable symver
3974         ;;
3975     freebsd)
3976         ;;
3977     bsd/os)
3978         add_extralibs -lpoll -lgnugetopt
3979         ;;
3980     darwin)
3981         enabled ppc && add_asflags -force_cpusubtype_ALL
3982         SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3983         enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3984         add_ldflags -Wl,-dynamic,-search_paths_first
3985         check_cflags -Werror=partial-availability
3986         SLIBSUF=".dylib"
3987         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
3988         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
3989         enabled x86_64 && objformat="macho64" || objformat="macho32"
3990         enabled_any pic shared ||
3991             { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3992         check_header dispatch/dispatch.h &&
3993             add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore'
3994         if test -n "$sysroot"; then
3995             is_in -isysroot $cc $CPPFLAGS $CFLAGS || check_cppflags -isysroot $sysroot
3996             is_in -isysroot $ld $LDFLAGS          || check_ldflags  -isysroot $sysroot
3997         fi
3998         ;;
3999     msys*)
4000         die "Native MSYS builds are discouraged, please use the MINGW environment."
4001         ;;
4002     mingw32*|mingw64*)
4003         if test $target_os = "mingw32ce"; then
4004             disable network
4005         else
4006             target_os=mingw32
4007         fi
4008         LIBTARGET=i386
4009         if enabled x86_64; then
4010             LIBTARGET="i386:x86-64"
4011         elif enabled arm; then
4012             LIBTARGET=arm-wince
4013         fi
4014         check_ldflags -Wl,--nxcompat
4015         check_ldflags -Wl,--dynamicbase
4016         shlibdir_default="$bindir_default"
4017         SLIBPREF=""
4018         SLIBSUF=".dll"
4019         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4020         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
4021         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)'
4022         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4023         SLIB_INSTALL_LINKS=
4024         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4025         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4026         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'
4027         enabled x86_64 && objformat="win64" || objformat="win32"
4028         dlltool="${cross_prefix}dlltool"
4029         ranlib=:
4030         enable dos_paths
4031         ;;
4032     win32|win64)
4033         disable symver
4034         if enabled shared; then
4035             # Link to the import library instead of the normal static library
4036             # for shared libs.
4037             LD_LIB='%.lib'
4038             # Cannot build both shared and static libs with MSVC or icl.
4039             disable static
4040         fi
4041         shlibdir_default="$bindir_default"
4042         SLIBPREF=""
4043         SLIBSUF=".dll"
4044         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4045         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
4046         SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
4047         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4048         SLIB_INSTALL_LINKS=
4049         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
4050         SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
4051         SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
4052         enabled x86_64 && objformat="win64" || objformat="win32"
4053         ranlib=:
4054         enable dos_paths
4055         ;;
4056     cygwin*)
4057         target_os=cygwin
4058         shlibdir_default="$bindir_default"
4059         SLIBPREF="cyg"
4060         SLIBSUF=".dll"
4061         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4062         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
4063         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
4064         SLIB_INSTALL_LINKS=
4065         SLIB_INSTALL_EXTRA_LIB='lib$(NAME).dll.a'
4066         SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(NAME).dll.a'
4067         enabled x86_64 && objformat="win64" || objformat="win32"
4068         enable dos_paths
4069         ;;
4070     *-dos|freedos|opendos)
4071         network_extralibs="-lsocket"
4072         objformat="coff"
4073         enable dos_paths
4074         add_cppflags -U__STRICT_ANSI__
4075         ;;
4076     linux)
4077         enable dv1394
4078         enable section_data_rel_ro
4079         ;;
4080     irix*)
4081         target_os=irix
4082         ranlib="echo ignoring ranlib"
4083         ;;
4084     os/2*)
4085         ln_s="cp -f"
4086         objformat="aout"
4087         add_cppflags -D_GNU_SOURCE
4088         add_ldflags -Zomf -Zbin-files -Zargs-wild -Zhigh-mem -Zmap
4089         SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
4090         LIBSUF="_s.a"
4091         SLIBPREF=""
4092         SLIBSUF=".dll"
4093         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
4094         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
4095         SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
4096             echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
4097             echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
4098             echo EXPORTS >> $(SUBDIR)$(NAME).def; \
4099             emxexp $(OBJS) >> $(SUBDIR)$(NAME).def'
4100         SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
4101             emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'