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