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