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