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