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