Our ljpeg encoder supports bgra, use the correct constant in the sanity check.
[libav.git] / configure
... / ...
CommitLineData
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.
11LC_ALL=C
12export LC_ALL
13
14# make sure we are running under a compatible shell
15# try to make this part work with most shells
16
17try_exec(){
18 echo "Trying shell $1"
19 type "$1" > /dev/null 2>&1 && exec "$@"
20}
21
22unset foo
23(: ${foo%%bar}) 2> /dev/null
24E1="$?"
25
26(: ${foo?}) 2> /dev/null
27E2="$?"
28
29if test "$E1" != 0 || test "$E2" = 0; then
30 echo "Broken shell detected. Trying alternatives."
31 export FF_CONF_EXEC
32 if test "0$FF_CONF_EXEC" -lt 1; then
33 FF_CONF_EXEC=1
34 try_exec bash "$0" "$@"
35 fi
36 if test "0$FF_CONF_EXEC" -lt 2; then
37 FF_CONF_EXEC=2
38 try_exec ksh "$0" "$@"
39 fi
40 if test "0$FF_CONF_EXEC" -lt 3; then
41 FF_CONF_EXEC=3
42 try_exec /usr/xpg4/bin/sh "$0" "$@"
43 fi
44 echo "No compatible shell script interpreter found."
45 echo "This configure script requires a POSIX-compatible shell"
46 echo "such as bash or ksh."
47 echo "THIS IS NOT A BUG IN 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
55fi
56
57show_help(){
58cat <<EOF
59Usage: configure [options]
60Options: [defaults in brackets after descriptions]
61
62Standard options:
63 --help print this message
64 --logfile=FILE log tests and output to FILE [config.log]
65 --disable-logging do not log configure debug information
66 --prefix=PREFIX install in PREFIX [$prefix]
67 --bindir=DIR install binaries in DIR [PREFIX/bin]
68 --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
69 --libdir=DIR install libs in DIR [PREFIX/lib]
70 --shlibdir=DIR install shared libs in DIR [PREFIX/lib]
71 --incdir=DIR install includes in DIR [PREFIX/include]
72 --mandir=DIR install man page in DIR [PREFIX/share/man]
73
74Configuration options:
75 --disable-static do not build static libraries [no]
76 --enable-shared build shared libraries [no]
77 --enable-gpl allow use of GPL code, the resulting libs
78 and binaries will be under GPL [no]
79 --enable-version3 upgrade (L)GPL to version 3 [no]
80 --enable-nonfree allow use of nonfree code, the resulting libs
81 and binaries will be unredistributable [no]
82 --disable-doc do not build documentation
83 --disable-ffmpeg disable ffmpeg build
84 --disable-ffplay disable ffplay build
85 --disable-ffprobe disable ffprobe build
86 --disable-ffserver disable ffserver build
87 --disable-avdevice disable libavdevice build
88 --disable-avcodec disable libavcodec build
89 --disable-avcore disable libavcore build
90 --disable-avformat disable libavformat build
91 --disable-swscale disable libswscale build
92 --enable-postproc enable GPLed postprocessing support [no]
93 --disable-avfilter disable video filter support [no]
94 --disable-pthreads disable pthreads [auto]
95 --enable-w32threads use Win32 threads [no]
96 --enable-x11grab enable X11 grabbing [no]
97 --disable-network disable network support [no]
98 --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]
99 --enable-gray enable full grayscale support (slower color)
100 --disable-swscale-alpha disable alpha channel support in swscale
101 --disable-fastdiv disable table-based division
102 --enable-small optimize for size instead of speed
103 --disable-aandct disable AAN DCT code
104 --disable-dct disable DCT code
105 --disable-fft disable FFT code
106 --disable-golomb disable Golomb code
107 --disable-huffman disable Huffman code
108 --disable-lpc disable LPC code
109 --disable-mdct disable MDCT code
110 --disable-rdft disable RDFT code
111 --disable-vaapi disable VAAPI code
112 --disable-vdpau disable VDPAU code
113 --disable-dxva2 disable DXVA2 code
114 --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
115 --enable-hardcoded-tables use hardcoded tables instead of runtime generation
116 --enable-memalign-hack emulate memalign, interferes with memory debuggers
117 --disable-everything disable all components listed below
118 --disable-encoder=NAME disable encoder NAME
119 --enable-encoder=NAME enable encoder NAME
120 --disable-encoders disable all encoders
121 --disable-decoder=NAME disable decoder NAME
122 --enable-decoder=NAME enable decoder NAME
123 --disable-decoders disable all decoders
124 --disable-hwaccel=NAME disable hwaccel NAME
125 --enable-hwaccel=NAME enable hwaccel NAME
126 --disable-hwaccels disable all hwaccels
127 --disable-muxer=NAME disable muxer NAME
128 --enable-muxer=NAME enable muxer NAME
129 --disable-muxers disable all muxers
130 --disable-demuxer=NAME disable demuxer NAME
131 --enable-demuxer=NAME enable demuxer NAME
132 --disable-demuxers disable all demuxers
133 --enable-parser=NAME enable parser NAME
134 --disable-parser=NAME disable parser NAME
135 --disable-parsers disable all parsers
136 --enable-bsf=NAME enable bitstream filter NAME
137 --disable-bsf=NAME disable bitstream filter NAME
138 --disable-bsfs disable all bitstream filters
139 --enable-protocol=NAME enable protocol NAME
140 --disable-protocol=NAME disable protocol NAME
141 --disable-protocols disable all protocols
142 --disable-indev=NAME disable input device NAME
143 --disable-outdev=NAME disable output device NAME
144 --disable-indevs disable input devices
145 --disable-outdevs disable output devices
146 --disable-devices disable all devices
147 --enable-filter=NAME enable filter NAME
148 --disable-filter=NAME disable filter NAME
149 --disable-filters disable all filters
150 --list-decoders show all available decoders
151 --list-encoders show all available encoders
152 --list-hwaccels show all available hardware accelerators
153 --list-muxers show all available muxers
154 --list-demuxers show all available demuxers
155 --list-parsers show all available parsers
156 --list-protocols show all available protocols
157 --list-bsfs show all available bitstream filters
158 --list-indevs show all available input devices
159 --list-outdevs show all available output devices
160 --list-filters show all available filters
161
162External library support:
163 --enable-avisynth enable reading of AVISynth script files [no]
164 --enable-bzlib enable bzlib [autodetect]
165 --enable-frei0r enable frei0r video filtering
166 --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
167 --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
168 --enable-libopencv enable video filtering via libopencv [no]
169 --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
170 and libraw1394 [no]
171 --enable-libdirac enable Dirac support via libdirac [no]
172 --enable-libfaac enable FAAC support via libfaac [no]
173 --enable-libgsm enable GSM support via libgsm [no]
174 --enable-libmp3lame enable MP3 encoding via libmp3lame [no]
175 --enable-libnut enable NUT (de)muxing via libnut,
176 native (de)muxer exists [no]
177 --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]
178 --enable-librtmp enable RTMP[E] support via librtmp [no]
179 --enable-libschroedinger enable Dirac support via libschroedinger [no]
180 --enable-libspeex enable Speex decoding via libspeex [no]
181 --enable-libtheora enable Theora encoding via libtheora [no]
182 --enable-libvorbis enable Vorbis encoding via libvorbis,
183 native implementation exists [no]
184 --enable-libvpx enable VP8 support via libvpx [no]
185 --enable-libx264 enable H.264 encoding via x264 [no]
186 --enable-libxavs enable AVS encoding via xavs [no]
187 --enable-libxvid enable Xvid encoding via xvidcore,
188 native MPEG-4/Xvid encoder exists [no]
189 --enable-mlib enable Sun medialib [no]
190 --enable-zlib enable zlib [autodetect]
191
192Advanced options (experts only):
193 --source-path=PATH path to source code [$source_path]
194 --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
195 --enable-cross-compile assume a cross-compiler is used
196 --sysroot=PATH root of cross-build tree
197 --sysinclude=PATH location of cross-build system headers
198 --target-os=OS compiler targets OS [$target_os]
199 --target-exec=CMD command to run executables on target
200 --target-path=DIR path to view of build directory on target
201 --nm=NM use nm tool
202 --ar=AR use archive tool AR [$ar_default]
203 --as=AS use assembler AS [$as_default]
204 --cc=CC use C compiler CC [$cc_default]
205 --ld=LD use linker LD
206 --host-cc=HOSTCC use host C compiler HOSTCC
207 --host-cflags=HCFLAGS use HCFLAGS when compiling for host
208 --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
209 --host-libs=HLIBS use libs HLIBS when linking for host
210 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
211 --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
212 --extra-libs=ELIBS add ELIBS [$ELIBS]
213 --extra-version=STRING version string suffix []
214 --build-suffix=SUFFIX library name suffix []
215 --arch=ARCH select architecture [$arch]
216 --cpu=CPU select the minimum required CPU (affects
217 instruction selection, may crash on older CPUs)
218 --disable-asm disable all assembler optimizations
219 --disable-altivec disable AltiVec optimizations
220 --disable-amd3dnow disable 3DNow! optimizations
221 --disable-amd3dnowext disable 3DNow! extended optimizations
222 --disable-mmx disable MMX optimizations
223 --disable-mmx2 disable MMX2 optimizations
224 --disable-sse disable SSE optimizations
225 --disable-ssse3 disable SSSE3 optimizations
226 --disable-armv5te disable armv5te optimizations
227 --disable-armv6 disable armv6 optimizations
228 --disable-armv6t2 disable armv6t2 optimizations
229 --disable-armvfp disable ARM VFP optimizations
230 --disable-iwmmxt disable iwmmxt optimizations
231 --disable-mmi disable MMI optimizations
232 --disable-neon disable neon optimizations
233 --disable-vis disable VIS optimizations
234 --disable-yasm disable use of yasm assembler
235 --enable-pic build position-independent code
236 --malloc-prefix=PFX prefix malloc and related names with PFX
237 --enable-sram allow use of on-chip SRAM
238 --disable-symver disable symbol versioning
239
240Developer options (useful when working on FFmpeg itself):
241 --disable-debug disable debugging symbols
242 --enable-debug=LEVEL set the debug level [$debuglevel]
243 --disable-optimizations disable compiler optimizations
244 --enable-extra-warnings enable more compiler warnings
245 --disable-stripping disable stripping of executables and shared libraries
246 --samples=PATH location of test samples for FATE
247
248NOTE: Object files are built at the place where configure is launched.
249EOF
250 exit 0
251}
252
253quotes='""'
254
255log(){
256 echo "$@" >> $logfile
257}
258
259log_file(){
260 log BEGIN $1
261 pr -n -t $1 >> $logfile
262 log END $1
263}
264
265echolog(){
266 log "$@"
267 echo "$@"
268}
269
270warn(){
271 log "WARNING: $*"
272 WARNINGS="${WARNINGS}WARNING: $*\n"
273}
274
275die(){
276 echolog "$@"
277 cat <<EOF
278
279If you think configure made a mistake, make sure you are using the latest
280version from SVN. If the latest version fails, report the problem to the
281ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
282EOF
283 if disabled logging; then
284 cat <<EOF
285Rerun configure with logging enabled (do not use --disable-logging), and
286include the log this produces with your report.
287EOF
288 else
289cat <<EOF
290Include the log file "$logfile" produced by configure as this will help
291solving the problem.
292EOF
293 fi
294 exit 1
295}
296
297# Avoid locale weirdness, besides we really just want to translate ASCII.
298toupper(){
299 echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
300}
301
302tolower(){
303 echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
304}
305
306c_escape(){
307 echo "$*" | sed 's/["\\]/\\\0/g'
308}
309
310sh_quote(){
311 v=$(echo "$1" | sed "s/'/'\\\\''/g")
312 test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
313 echo "$v"
314}
315
316filter(){
317 pat=$1
318 shift
319 for v; do
320 eval "case $v in $pat) echo $v ;; esac"
321 done
322}
323
324map(){
325 m=$1
326 shift
327 for v; do eval $m; done
328}
329
330set_all(){
331 value=$1
332 shift
333 for var in $*; do
334 eval $var=$value
335 done
336}
337
338set_weak(){
339 value=$1
340 shift
341 for var; do
342 eval : \${$var:=$value}
343 done
344}
345
346pushvar(){
347 for var in $*; do
348 eval level=\${${var}_level:=0}
349 eval ${var}_${level}="\$$var"
350 eval ${var}_level=$(($level+1))
351 done
352}
353
354popvar(){
355 for var in $*; do
356 eval level=\${${var}_level:-0}
357 test $level = 0 && continue
358 eval level=$(($level-1))
359 eval $var="\${${var}_${level}}"
360 eval ${var}_level=$level
361 eval unset ${var}_${level}
362 done
363}
364
365enable(){
366 set_all yes $*
367}
368
369disable(){
370 set_all no $*
371}
372
373enable_weak(){
374 set_weak yes $*
375}
376
377disable_weak(){
378 set_weak no $*
379}
380
381enable_safe(){
382 for var; do
383 enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
384 done
385}
386
387disable_safe(){
388 for var; do
389 disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
390 done
391}
392
393do_enable_deep(){
394 for var; do
395 enabled $var && continue
396 eval sel="\$${var}_select"
397 eval sgs="\$${var}_suggest"
398 pushvar var sgs
399 enable_deep $sel
400 popvar sgs
401 enable_deep_weak $sgs
402 popvar var
403 done
404}
405
406enable_deep(){
407 do_enable_deep $*
408 enable $*
409}
410
411enable_deep_weak(){
412 do_enable_deep $*
413 enable_weak $*
414}
415
416enabled(){
417 test "${1#!}" = "$1" && op== || op=!=
418 eval test "x\$${1#!}" $op "xyes"
419}
420
421disabled(){
422 test "${1#!}" = "$1" && op== || op=!=
423 eval test "x\$${1#!}" $op "xno"
424}
425
426enabled_all(){
427 for opt; do
428 enabled $opt || return 1
429 done
430}
431
432disabled_all(){
433 for opt; do
434 disabled $opt || return 1
435 done
436}
437
438enabled_any(){
439 for opt; do
440 enabled $opt && return 0
441 done
442}
443
444disabled_any(){
445 for opt; do
446 disabled $opt && return 0
447 done
448 return 1
449}
450
451set_default(){
452 for opt; do
453 eval : \${$opt:=\$${opt}_default}
454 done
455}
456
457is_in(){
458 value=$1
459 shift
460 for var in $*; do
461 [ $var = $value ] && return 0
462 done
463 return 1
464}
465
466check_deps(){
467 for cfg; do
468 cfg="${cfg#!}"
469 enabled ${cfg}_checking && die "Circular dependency for $cfg."
470 disabled ${cfg}_checking && continue
471 enable ${cfg}_checking
472
473 eval dep_all="\$${cfg}_deps"
474 eval dep_any="\$${cfg}_deps_any"
475 eval dep_sel="\$${cfg}_select"
476 eval dep_sgs="\$${cfg}_suggest"
477 eval dep_ifa="\$${cfg}_if"
478 eval dep_ifn="\$${cfg}_if_any"
479
480 pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
481 check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
482 popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
483
484 [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
485 [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
486 enabled_all $dep_all || disable $cfg
487 enabled_any $dep_any || disable $cfg
488 disabled_any $dep_sel && disable $cfg
489
490 if enabled $cfg; then
491 eval dep_extralibs="\$${cfg}_extralibs"
492 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
493 enable_deep $dep_sel
494 enable_deep_weak $dep_sgs
495 fi
496
497 disable ${cfg}_checking
498 done
499}
500
501print_config_h(){
502 enabled $1 && v=1 || v=0
503 echo "#define $2 $v"
504}
505
506print_config_mak(){
507 enabled $1 && v= || v=!
508 echo "$v$2=yes"
509}
510
511print_config_asm(){
512 enabled $1 && echo "%define $2"
513}
514
515print_config(){
516 pfx=$1
517 files=$2
518 shift 2
519 for cfg; do
520 ucname="$(toupper $cfg)"
521 for f in $files; do
522 "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
523 done
524 done
525}
526
527print_enabled(){
528 test "$1" = -n && end=" " && shift || end="\n"
529 suf=$1
530 shift
531 for v; do
532 enabled $v && printf "%s$end" ${v%$suf};
533 done
534}
535
536append(){
537 var=$1
538 shift
539 eval "$var=\"\$$var $*\""
540}
541
542prepend(){
543 var=$1
544 shift
545 eval "$var=\"$* \$$var\""
546}
547
548add_cppflags(){
549 append CPPFLAGS $($filter_cppflags "$@")
550}
551
552add_cflags(){
553 append CFLAGS $($filter_cflags "$@")
554}
555
556add_asflags(){
557 append ASFLAGS $($filter_asflags "$@")
558}
559
560add_ldflags(){
561 append LDFLAGS "$@"
562}
563
564add_extralibs(){
565 prepend extralibs "$@"
566}
567
568check_cmd(){
569 log "$@"
570 "$@" >> $logfile 2>&1
571}
572
573check_cc(){
574 log check_cc "$@"
575 cat > $TMPC
576 log_file $TMPC
577 check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
578}
579
580check_cpp(){
581 log check_cpp "$@"
582 cat > $TMPC
583 log_file $TMPC
584 check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
585}
586
587check_as(){
588 log check_as "$@"
589 cat > $TMPC
590 log_file $TMPC
591 check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
592}
593
594check_asm(){
595 log check_asm "$@"
596 name="$1"
597 code="$2"
598 shift 2
599 disable $name
600 check_as "$@" <<EOF && enable $name
601void foo(void){ __asm__ volatile($code); }
602EOF
603}
604
605check_yasm(){
606 log check_yasm "$@"
607 echo "$1" > $TMPS
608 log_file $TMPS
609 shift 1
610 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
611}
612
613check_ld(){
614 log check_ld "$@"
615 flags=''
616 libs=''
617 for f; do
618 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
619 done
620 check_cc $($filter_cflags $flags) || return
621 check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
622}
623
624check_cppflags(){
625 log check_cppflags "$@"
626 set -- $($filter_cppflags "$@")
627 check_cc "$@" <<EOF && append CPPFLAGS "$@"
628int x;
629EOF
630}
631
632check_cflags(){
633 log check_cflags "$@"
634 set -- $($filter_cflags "$@")
635 check_cc "$@" <<EOF && append CFLAGS "$@"
636int x;
637EOF
638}
639
640test_ldflags(){
641 log test_ldflags "$@"
642 check_ld "$@" <<EOF
643int main(void){ return 0; }
644EOF
645}
646
647check_ldflags(){
648 log check_ldflags "$@"
649 test_ldflags "$@" && add_ldflags "$@"
650}
651
652check_header(){
653 log check_header "$@"
654 header=$1
655 shift
656 disable_safe $header
657 check_cpp "$@" <<EOF && enable_safe $header
658#include <$header>
659int x;
660EOF
661}
662
663check_func(){
664 log check_func "$@"
665 func=$1
666 shift
667 disable $func
668 check_ld "$@" <<EOF && enable $func
669extern int $func();
670int main(void){ $func(); }
671EOF
672}
673
674check_mathfunc(){
675 log check_mathfunc "$@"
676 func=$1
677 shift
678 disable $func
679 check_ld "$@" <<EOF && enable $func
680#include <math.h>
681float foo(float f) { return $func(f); }
682int main(void){ return 0; }
683EOF
684}
685
686check_func_headers(){
687 log check_func_headers "$@"
688 headers=$1
689 func=$2
690 shift 2
691 disable $func
692 incs=""
693 for hdr in $headers; do
694 incs="$incs
695#include <$hdr>"
696 done
697 check_ld "$@" <<EOF && enable $func && enable_safe $headers
698$incs
699int main(int argc, char **argv){
700 return (long) $func;
701}
702EOF
703}
704
705check_cpp_condition(){
706 log check_cpp_condition "$@"
707 header=$1
708 condition=$2
709 shift 2
710 check_cpp $($filter_cppflags "$@") <<EOF
711#include <$header>
712#if !($condition)
713#error "unsatisfied condition: $condition"
714#endif
715EOF
716}
717
718check_lib(){
719 log check_lib "$@"
720 header="$1"
721 func="$2"
722 shift 2
723 check_header $header && check_func $func "$@" && add_extralibs "$@"
724}
725
726check_lib2(){
727 log check_lib2 "$@"
728 headers="$1"
729 func="$2"
730 shift 2
731 check_func_headers "$headers" $func "$@" && add_extralibs "$@"
732}
733
734check_exec(){
735 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
736}
737
738check_exec_crash(){
739 code=$(cat)
740
741 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
742 # are safe but may not be available everywhere. Thus we use
743 # raise(SIGTERM) instead. The check is run in a subshell so we
744 # can redirect the "Terminated" message from the shell. SIGBUS
745 # is not defined by standard C so it is used conditionally.
746
747 (check_exec "$@") >> $logfile 2>&1 <<EOF
748#include <signal.h>
749static void sighandler(int sig){
750 raise(SIGTERM);
751}
752int main(void){
753 signal(SIGILL, sighandler);
754 signal(SIGFPE, sighandler);
755 signal(SIGSEGV, sighandler);
756#ifdef SIGBUS
757 signal(SIGBUS, sighandler);
758#endif
759 { $code }
760}
761EOF
762}
763
764check_type(){
765 log check_type "$@"
766 headers=$1
767 type=$2
768 shift 2
769 disable_safe "$type"
770 incs=""
771 for hdr in $headers; do
772 incs="$incs
773#include <$hdr>"
774 done
775 check_cc "$@" <<EOF && enable_safe "$type"
776$incs
777$type v;
778EOF
779}
780
781check_struct(){
782 log check_type "$@"
783 headers=$1
784 struct=$2
785 member=$3
786 shift 3
787 disable_safe "${struct}_${member}"
788 incs=""
789 for hdr in $headers; do
790 incs="$incs
791#include <$hdr>"
792 done
793 check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
794$incs
795const void *p = &(($struct *)0)->$member;
796EOF
797}
798
799require(){
800 name="$1"
801 header="$2"
802 func="$3"
803 shift 3
804 check_lib $header $func "$@" || die "ERROR: $name not found"
805}
806
807require2(){
808 name="$1"
809 headers="$2"
810 func="$3"
811 shift 3
812 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
813}
814
815check_host_cc(){
816 log check_host_cc "$@"
817 cat > $TMPC
818 log_file $TMPC
819 check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
820}
821
822check_host_cflags(){
823 log check_host_cflags "$@"
824 check_host_cc "$@" <<EOF && append host_cflags "$@"
825int x;
826EOF
827}
828
829apply(){
830 file=$1
831 shift
832 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
833}
834
835cp_if_changed(){
836 cmp -s "$1" "$2" &&
837 echo "$2 is unchanged" ||
838 cp -f "$1" "$2"
839}
840
841# CONFIG_LIST contains configurable options, while HAVE_LIST is for
842# system-dependent things.
843
844COMPONENT_LIST="
845 bsfs
846 decoders
847 demuxers
848 encoders
849 filters
850 hwaccels
851 indevs
852 muxers
853 outdevs
854 parsers
855 protocols
856"
857
858CONFIG_LIST="
859 $COMPONENT_LIST
860 aandct
861 avcodec
862 avcore
863 avdevice
864 avfilter
865 avformat
866 avisynth
867 bzlib
868 dct
869 doc
870 dwt
871 dxva2
872 fastdiv
873 ffmpeg
874 ffplay
875 ffprobe
876 ffserver
877 fft
878 frei0r
879 golomb
880 gpl
881 gray
882 h264dsp
883 h264pred
884 hardcoded_tables
885 huffman
886 libdc1394
887 libdirac
888 libfaac
889 libgsm
890 libmp3lame
891 libnut
892 libopencore_amrnb
893 libopencore_amrwb
894 libopencv
895 libopenjpeg
896 librtmp
897 libschroedinger
898 libspeex
899 libtheora
900 libvorbis
901 libvpx
902 libx264
903 libxavs
904 libxvid
905 lpc
906 lsp
907 mdct
908 memalign_hack
909 mlib
910 mpegaudio_hp
911 network
912 nonfree
913 pic
914 postproc
915 rdft
916 rtpdec
917 runtime_cpudetect
918 shared
919 small
920 sram
921 static
922 swscale
923 swscale_alpha
924 vaapi
925 vdpau
926 version3
927 x11grab
928 zlib
929"
930
931THREADS_LIST='
932 pthreads
933 w32threads
934'
935
936ARCH_LIST='
937 alpha
938 arm
939 avr32
940 avr32_ap
941 avr32_uc
942 bfin
943 ia64
944 m68k
945 mips
946 mips64
947 parisc
948 ppc
949 ppc64
950 s390
951 sh4
952 sparc
953 sparc64
954 tomi
955 x86
956 x86_32
957 x86_64
958'
959
960ARCH_EXT_LIST='
961 altivec
962 amd3dnow
963 amd3dnowext
964 armv5te
965 armv6
966 armv6t2
967 armvfp
968 iwmmxt
969 mmi
970 mmx
971 mmx2
972 neon
973 ppc4xx
974 sse
975 ssse3
976 vis
977'
978
979HAVE_LIST_PUB='
980 bigendian
981 fast_unaligned
982'
983
984HAVE_LIST="
985 $ARCH_EXT_LIST
986 $HAVE_LIST_PUB
987 $THREADS_LIST
988 aligned_stack
989 alsa_asoundlib_h
990 altivec_h
991 arpa_inet_h
992 attribute_may_alias
993 attribute_packed
994 bswap
995 closesocket
996 cmov
997 conio_h
998 dcbzl
999 dev_bktr_ioctl_bt848_h
1000 dev_bktr_ioctl_meteor_h
1001 dev_ic_bt8xx_h
1002 dev_video_meteor_ioctl_meteor_h
1003 dev_video_bktr_ioctl_bt848_h
1004 dlfcn_h
1005 dlopen
1006 dos_paths
1007 ebp_available
1008 ebx_available
1009 exp2
1010 exp2f
1011 fast_64bit
1012 fast_clz
1013 fast_cmov
1014 fcntl
1015 fork
1016 getaddrinfo
1017 gethrtime
1018 GetProcessMemoryInfo
1019 GetProcessTimes
1020 getrusage
1021 gnu_as
1022 struct_rusage_ru_maxrss
1023 ibm_asm
1024 inet_aton
1025 inline_asm
1026 isatty
1027 ldbrx
1028 libdc1394_1
1029 libdc1394_2
1030 llrint
1031 llrintf
1032 local_aligned_16
1033 local_aligned_8
1034 log2
1035 log2f
1036 loongson
1037 lrint
1038 lrintf
1039 lzo1x_999_compress
1040 machine_ioctl_bt848_h
1041 machine_ioctl_meteor_h
1042 malloc_h
1043 memalign
1044 mkstemp
1045 mmap
1046 pld
1047 posix_memalign
1048 round
1049 roundf
1050 sdl
1051 sdl_video_size
1052 setmode
1053 socklen_t
1054 soundcard_h
1055 poll_h
1056 setrlimit
1057 strerror_r
1058 strtok_r
1059 struct_addrinfo
1060 struct_ipv6_mreq
1061 struct_sockaddr_in6
1062 struct_sockaddr_sa_len
1063 struct_sockaddr_storage
1064 symver
1065 symver_gnu_asm
1066 symver_asm_label
1067 sys_mman_h
1068 sys_resource_h
1069 sys_select_h
1070 sys_soundcard_h
1071 sys_videoio_h
1072 ten_operands
1073 termios_h
1074 threads
1075 truncf
1076 vfp_args
1077 VirtualAlloc
1078 winsock2_h
1079 xform_asm
1080 xmm_clobbers
1081 yasm
1082"
1083
1084# options emitted with CONFIG_ prefix but not available on command line
1085CONFIG_EXTRA="
1086 avutil
1087 gplv3
1088 lgplv3
1089"
1090
1091CMDLINE_SELECT="
1092 $ARCH_EXT_LIST
1093 $CONFIG_LIST
1094 $THREADS_LIST
1095 asm
1096 cross_compile
1097 debug
1098 extra_warnings
1099 logging
1100 optimizations
1101 stripping
1102 symver
1103 yasm
1104"
1105
1106PATHS_LIST='
1107 bindir
1108 datadir
1109 incdir
1110 libdir
1111 mandir
1112 prefix
1113 shlibdir
1114'
1115
1116CMDLINE_SET="
1117 $PATHS_LIST
1118 ar
1119 arch
1120 as
1121 build_suffix
1122 cc
1123 cpu
1124 cross_prefix
1125 dep_cc
1126 extra_version
1127 host_cc
1128 host_cflags
1129 host_ldflags
1130 host_libs
1131 host_os
1132 ld
1133 logfile
1134 malloc_prefix
1135 nm
1136 samples
1137 source_path
1138 strip
1139 sysinclude
1140 sysroot
1141 target_exec
1142 target_os
1143 target_path
1144"
1145
1146CMDLINE_APPEND="
1147 extra_cflags
1148"
1149
1150# code dependency declarations
1151
1152# architecture extensions
1153
1154armv5te_deps="arm"
1155armv6_deps="arm"
1156armv6t2_deps="arm"
1157armvfp_deps="arm"
1158iwmmxt_deps="arm"
1159neon_deps="arm"
1160
1161mmi_deps="mips"
1162
1163altivec_deps="ppc"
1164ppc4xx_deps="ppc"
1165
1166vis_deps="sparc"
1167
1168x86_64_suggest="cmov fast_cmov"
1169amd3dnow_deps="mmx"
1170amd3dnowext_deps="amd3dnow"
1171mmx_deps="x86"
1172mmx2_deps="mmx"
1173sse_deps="mmx"
1174ssse3_deps="sse"
1175
1176aligned_stack_if_any="ppc x86"
1177fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1178fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1179fast_unaligned_if_any="armv6 ppc x86"
1180
1181need_memalign="altivec neon sse"
1182inline_asm_deps="!tms470"
1183
1184symver_if_any="symver_asm_label symver_gnu_asm"
1185
1186# subsystems
1187dct_select="rdft"
1188mdct_select="fft"
1189rdft_select="fft"
1190
1191# decoders / encoders / hardware accelerators
1192aac_decoder_select="mdct rdft"
1193aac_encoder_select="mdct"
1194aac_latm_decoder_select="aac_decoder aac_latm_parser"
1195ac3_decoder_select="mdct ac3_parser"
1196ac3_encoder_select="mdct"
1197alac_encoder_select="lpc"
1198amrnb_decoder_select="lsp"
1199amrwb_decoder_select="lsp"
1200atrac1_decoder_select="mdct"
1201atrac3_decoder_select="mdct"
1202binkaudio_dct_decoder_select="mdct rdft dct"
1203binkaudio_rdft_decoder_select="mdct rdft"
1204cavs_decoder_select="golomb"
1205cook_decoder_select="mdct"
1206cscd_decoder_suggest="zlib"
1207dca_decoder_select="mdct"
1208dnxhd_encoder_select="aandct"
1209dxa_decoder_select="zlib"
1210eac3_decoder_select="ac3_decoder"
1211eamad_decoder_select="aandct"
1212eatgq_decoder_select="aandct"
1213eatqi_decoder_select="aandct"
1214ffv1_decoder_select="golomb"
1215flac_decoder_select="golomb"
1216flac_encoder_select="golomb lpc"
1217flashsv_decoder_select="zlib"
1218flashsv_encoder_select="zlib"
1219flv_decoder_select="h263_decoder"
1220flv_encoder_select="h263_encoder"
1221fraps_decoder_select="huffman"
1222h261_encoder_select="aandct"
1223h263_decoder_select="h263_parser"
1224h263_encoder_select="aandct"
1225h263_vaapi_hwaccel_select="vaapi h263_decoder"
1226h263i_decoder_select="h263_decoder"
1227h263p_encoder_select="h263_encoder"
1228h264_decoder_select="golomb h264dsp h264pred"
1229h264_dxva2_hwaccel_deps="dxva2api_h"
1230h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1231h264_vaapi_hwaccel_select="vaapi"
1232h264_vdpau_decoder_select="vdpau h264_decoder"
1233imc_decoder_select="fft mdct"
1234jpegls_decoder_select="golomb"
1235jpegls_encoder_select="golomb"
1236ljpeg_encoder_select="aandct"
1237loco_decoder_select="golomb"
1238mjpeg_encoder_select="aandct"
1239mlp_decoder_select="mlp_parser"
1240mp1float_decoder_select="dct"
1241mp2float_decoder_select="dct"
1242mp3adufloat_decoder_select="dct"
1243mp3float_decoder_select="dct"
1244mp3on4float_decoder_select="dct"
1245mpeg1video_encoder_select="aandct"
1246mpeg2video_encoder_select="aandct"
1247mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1248mpeg4_encoder_select="h263_encoder"
1249mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
1250mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1251mpeg2_dxva2_hwaccel_deps="dxva2api_h"
1252mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1253mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1254mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1255mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1256mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1257mpeg_xvmc_decoder_select="mpegvideo_decoder"
1258msmpeg4v1_decoder_select="h263_decoder"
1259msmpeg4v1_encoder_select="h263_encoder"
1260msmpeg4v2_decoder_select="h263_decoder"
1261msmpeg4v2_encoder_select="h263_encoder"
1262msmpeg4v3_decoder_select="h263_decoder"
1263msmpeg4v3_encoder_select="h263_encoder"
1264nellymoser_decoder_select="mdct"
1265nellymoser_encoder_select="mdct"
1266png_decoder_select="zlib"
1267png_encoder_select="zlib"
1268qcelp_decoder_select="lsp"
1269qdm2_decoder_select="mdct rdft"
1270ra_144_encoder_select="lpc"
1271rv10_decoder_select="h263_decoder"
1272rv10_encoder_select="h263_encoder"
1273rv20_decoder_select="h263_decoder"
1274rv20_encoder_select="h263_encoder"
1275rv30_decoder_select="golomb h264pred"
1276rv40_decoder_select="golomb h264pred"
1277shorten_decoder_select="golomb"
1278sipr_decoder_select="lsp"
1279snow_decoder_select="dwt"
1280snow_encoder_select="aandct dwt"
1281sonic_decoder_select="golomb"
1282sonic_encoder_select="golomb"
1283sonic_ls_encoder_select="golomb"
1284svq1_encoder_select="aandct"
1285svq3_decoder_select="golomb h264dsp h264pred"
1286svq3_decoder_suggest="zlib"
1287theora_decoder_select="vp3_decoder"
1288tiff_decoder_suggest="zlib"
1289tiff_encoder_suggest="zlib"
1290truehd_decoder_select="mlp_decoder"
1291tscc_decoder_select="zlib"
1292twinvq_decoder_select="mdct lsp"
1293vc1_decoder_select="h263_decoder"
1294vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
1295vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1296vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
1297vc1_vdpau_decoder_select="vdpau vc1_decoder"
1298vorbis_decoder_select="mdct"
1299vorbis_encoder_select="mdct"
1300vp6_decoder_select="huffman"
1301vp6a_decoder_select="vp6_decoder"
1302vp6f_decoder_select="vp6_decoder"
1303vp8_decoder_select="h264pred"
1304wmapro_decoder_select="mdct"
1305wmav1_decoder_select="mdct"
1306wmav1_encoder_select="mdct"
1307wmav2_decoder_select="mdct"
1308wmav2_encoder_select="mdct"
1309wmavoice_decoder_select="lsp rdft dct mdct"
1310wmv1_decoder_select="h263_decoder"
1311wmv1_encoder_select="h263_encoder"
1312wmv2_decoder_select="h263_decoder"
1313wmv2_encoder_select="h263_encoder"
1314wmv3_decoder_select="vc1_decoder"
1315wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1316wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1317wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1318zlib_decoder_select="zlib"
1319zlib_encoder_select="zlib"
1320zmbv_decoder_select="zlib"
1321zmbv_encoder_select="zlib"
1322
1323vaapi_deps="va_va_h"
1324vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1325
1326# parsers
1327h264_parser_select="golomb h264dsp h264pred"
1328
1329# external libraries
1330libdirac_decoder_deps="libdirac !libschroedinger"
1331libdirac_encoder_deps="libdirac"
1332libfaac_encoder_deps="libfaac"
1333libgsm_decoder_deps="libgsm"
1334libgsm_encoder_deps="libgsm"
1335libgsm_ms_decoder_deps="libgsm"
1336libgsm_ms_encoder_deps="libgsm"
1337libmp3lame_encoder_deps="libmp3lame"
1338libopencore_amrnb_decoder_deps="libopencore_amrnb"
1339libopencore_amrnb_encoder_deps="libopencore_amrnb"
1340libopencore_amrwb_decoder_deps="libopencore_amrwb"
1341libopenjpeg_decoder_deps="libopenjpeg"
1342libschroedinger_decoder_deps="libschroedinger"
1343libschroedinger_encoder_deps="libschroedinger"
1344libspeex_decoder_deps="libspeex"
1345libtheora_encoder_deps="libtheora"
1346libvorbis_encoder_deps="libvorbis"
1347libvpx_decoder_deps="libvpx"
1348libvpx_encoder_deps="libvpx"
1349libx264_encoder_deps="libx264"
1350libxavs_encoder_deps="libxavs"
1351libxvid_encoder_deps="libxvid"
1352
1353# demuxers / muxers
1354ac3_demuxer_deps="ac3_parser"
1355asf_stream_muxer_select="asf_muxer"
1356avisynth_demuxer_deps="avisynth"
1357dirac_demuxer_deps="dirac_parser"
1358eac3_demuxer_select="ac3_parser"
1359flac_demuxer_deps="flac_parser"
1360ipod_muxer_select="mov_muxer"
1361libnut_demuxer_deps="libnut"
1362libnut_muxer_deps="libnut"
1363matroska_audio_muxer_select="matroska_muxer"
1364matroska_demuxer_suggest="zlib bzlib"
1365mov_demuxer_suggest="zlib"
1366mp3_demuxer_deps="mpegaudio_parser"
1367mp4_muxer_select="mov_muxer"
1368mpegtsraw_demuxer_select="mpegts_demuxer"
1369mxf_d10_muxer_select="mxf_muxer"
1370ogg_demuxer_select="golomb"
1371psp_muxer_select="mov_muxer"
1372rtp_demuxer_select="sdp_demuxer"
1373rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
1374rtsp_demuxer_select="http_protocol rtpdec"
1375rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
1376sap_demuxer_select="sdp_demuxer"
1377sap_muxer_select="rtp_muxer rtp_protocol"
1378sdp_demuxer_select="rtpdec"
1379spdif_muxer_select="aac_parser"
1380tg2_muxer_select="mov_muxer"
1381tgp_muxer_select="mov_muxer"
1382w64_demuxer_deps="wav_demuxer"
1383
1384# indevs / outdevs
1385alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1386alsa_outdev_deps="alsa_asoundlib_h"
1387bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1388dv1394_indev_deps="dv1394 dv_demuxer"
1389jack_indev_deps="jack_jack_h"
1390libdc1394_indev_deps="libdc1394"
1391oss_indev_deps_any="soundcard_h sys_soundcard_h"
1392oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1393v4l_indev_deps="linux_videodev_h"
1394v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1395vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1396vfwcap_indev_extralibs="-lavicap32"
1397x11_grab_device_indev_deps="x11grab XShmCreateImage"
1398x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1399
1400# protocols
1401gopher_protocol_deps="network"
1402http_protocol_deps="network"
1403http_protocol_select="tcp_protocol"
1404mmsh_protocol_select="http_protocol"
1405mmst_protocol_deps="network"
1406rtmp_protocol_select="tcp_protocol"
1407rtp_protocol_select="udp_protocol"
1408tcp_protocol_deps="network"
1409udp_protocol_deps="network"
1410
1411# filters
1412blackframe_filter_deps="gpl"
1413cropdetect_filter_deps="gpl"
1414frei0r_filter_deps="frei0r dlopen strtok_r"
1415frei0r_src_filter_deps="frei0r dlopen strtok_r"
1416hqdn3d_filter_deps="gpl"
1417scale_filter_deps="swscale"
1418ocv_filter_deps="libopencv"
1419yadif_filter_deps="gpl"
1420
1421# libraries
1422avdevice_deps="avcodec avformat"
1423avformat_deps="avcodec"
1424
1425# programs
1426ffmpeg_deps="avcodec avformat swscale"
1427ffmpeg_select="buffer_filter"
1428ffplay_deps="avcodec avformat swscale sdl"
1429ffplay_select="rdft"
1430ffprobe_deps="avcodec avformat"
1431ffserver_deps="avformat ffm_muxer rtp_protocol rtsp_demuxer"
1432ffserver_extralibs='$ldl'
1433
1434doc_deps="texi2html"
1435
1436# tests
1437
1438test_deps(){
1439 suf1=$1
1440 suf2=$2
1441 shift 2
1442 for v; do
1443 dep=${v%=*}
1444 tests=${v#*=}
1445 for name in ${tests}; do
1446 eval ${name}_test_deps="'${dep}$suf1 ${dep}$suf2'"
1447 done
1448 done
1449}
1450
1451set_ne_test_deps(){
1452 eval ${1}_be_test_deps="bigendian"
1453 eval ${1}_le_test_deps="!bigendian"
1454}
1455
1456test_deps _encoder _decoder \
1457 adpcm_g726=g726 \
1458 adpcm_ima_qt \
1459 adpcm_ima_wav \
1460 adpcm_ms \
1461 adpcm_swf \
1462 adpcm_yamaha=adpcm_yam \
1463 alac \
1464 asv1 \
1465 asv2 \
1466 bmp \
1467 dnxhd="dnxhd_1080i dnxhd_720p dnxhd_720p_rd" \
1468 dvvideo="dv dv50" \
1469 ffv1 \
1470 flac \
1471 flashsv \
1472 flv \
1473 gif \
1474 h261 \
1475 h263="h263 h263p" \
1476 huffyuv \
1477 jpegls \
1478 mjpeg="jpg mjpeg ljpeg" \
1479 mp2 \
1480 mpeg1video="mpeg mpeg1b" \
1481 mpeg2video="mpeg2 mpeg2thread" \
1482 mpeg4="mpeg4 mpeg4adv mpeg4nr mpeg4thread error rc" \
1483 msmpeg4v3=msmpeg4 \
1484 msmpeg4v2 \
1485 pbm=pbmpipe \
1486 pcx \
1487 pgm="pgm pgmpipe" \
1488 ppm="ppm ppmpipe" \
1489 rawvideo="rgb yuv" \
1490 roq \
1491 rv10 \
1492 rv20 \
1493 sgi \
1494 snow="snow snowll" \
1495 svq1 \
1496 targa=tga \
1497 tiff \
1498 wmav1 \
1499 wmav2 \
1500 wmv1 \
1501 wmv2 \
1502
1503test_deps _muxer _demuxer \
1504 aiff \
1505 pcm_alaw=alaw \
1506 asf \
1507 au \
1508 avi \
1509 dv=dv_fmt \
1510 ffm \
1511 flv=flv_fmt \
1512 gxf \
1513 matroska=mkv \
1514 mmf \
1515 mov \
1516 pcm_mulaw=mulaw \
1517 mxf \
1518 nut \
1519 ogg \
1520 rawvideo=pixfmt \
1521 rm \
1522 swf \
1523 mpegts=ts \
1524 voc \
1525 wav \
1526 yuv4mpegpipe=yuv4mpeg \
1527
1528ac3_fixed_test_deps="ac3_fixed_encoder ac3_decoder rm_muxer rm_demuxer"
1529mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1530
1531set_ne_test_deps pixdesc
1532set_ne_test_deps pixfmts_copy
1533set_ne_test_deps pixfmts_crop
1534set_ne_test_deps pixfmts_hflip
1535set_ne_test_deps pixfmts_null
1536set_ne_test_deps pixfmts_pad
1537set_ne_test_deps pixfmts_scale
1538set_ne_test_deps pixfmts_vflip
1539
1540# default parameters
1541
1542logfile="config.log"
1543
1544# installation paths
1545prefix_default="/usr/local"
1546bindir_default='${prefix}/bin'
1547datadir_default='${prefix}/share/ffmpeg'
1548incdir_default='${prefix}/include'
1549libdir_default='${prefix}/lib'
1550mandir_default='${prefix}/share/man'
1551shlibdir_default="$libdir_default"
1552
1553# toolchain
1554ar_default="ar"
1555cc_default="gcc"
1556cc_version=\"unknown\"
1557host_cc_default="gcc"
1558ln_s="ln -sf"
1559nm_default="nm"
1560objformat="elf"
1561ranlib="ranlib"
1562strip_default="strip"
1563yasmexe="yasm"
1564nogas=":"
1565
1566nm_opts='-g'
1567
1568# machine
1569arch_default=$(uname -m)
1570cpu="generic"
1571
1572# OS
1573target_os_default=$(tolower $(uname -s))
1574host_os=$target_os_default
1575
1576# configurable options
1577enable avcodec
1578enable avcore
1579enable avdevice
1580enable avfilter
1581enable avformat
1582enable avutil
1583enable asm
1584enable debug
1585enable doc
1586enable fastdiv
1587enable ffmpeg
1588enable ffplay
1589enable ffprobe
1590enable ffserver
1591enable mpegaudio_hp
1592enable network
1593enable optimizations
1594enable protocols
1595enable static
1596enable stripping
1597enable swscale
1598enable swscale_alpha
1599
1600# build settings
1601SHFLAGS='-shared -Wl,-soname,$$(@F)'
1602FFSERVERLDFLAGS=-Wl,-E
1603LIBPREF="lib"
1604LIBSUF=".a"
1605FULLNAME='$(NAME)$(BUILDSUF)'
1606LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1607SLIBPREF="lib"
1608SLIBSUF=".so"
1609SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1610SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1611SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1612LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1613
1614CC_O='-o $@'
1615
1616host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1617host_libs='-lm'
1618
1619target_path='$(CURDIR)'
1620
1621# since the object filename is not given with the -MM flag, the compiler
1622# is only able to print the basename, and we must add the path ourselves
1623DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1624DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1625
1626# find source path
1627source_path="$(dirname "$0")"
1628enable source_path_used
1629if test -f configure; then
1630 source_path="$(pwd)"
1631 disable source_path_used
1632else
1633 source_path="$(cd "$source_path"; pwd)"
1634 echo "$source_path" | grep -q '[[:blank:]]' &&
1635 die "Out of tree builds are impossible with whitespace in source path."
1636 test -e "$source_path/config.h" &&
1637 die "Out of tree builds are impossible with config.h in source dir."
1638fi
1639
1640for v in "$@"; do
1641 r=${v#*=}
1642 l=${v%"$r"}
1643 r=$(sh_quote "$r")
1644 FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1645done
1646
1647find_things(){
1648 thing=$1
1649 pattern=$2
1650 file=$source_path/$3
1651 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1652}
1653
1654ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1655DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1656HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
1657PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1658BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1659MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1660DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1661OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
1662INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
1663PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1664FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1665
1666find_tests(){
1667 map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1668}
1669
1670ACODEC_TESTS=$(find_tests acodec)
1671VCODEC_TESTS=$(find_tests vsynth1)
1672LAVF_TESTS=$(find_tests lavf)
1673LAVFI_TESTS=$(find_tests lavfi)
1674SEEK_TESTS=$(find_tests seek seek_)
1675
1676pcm_test_deps=$(map 'echo ${v%_*}_decoder $v' $(filter pcm_* $ENCODER_LIST))
1677
1678for n in $COMPONENT_LIST; do
1679 v=$(toupper ${n%s})_LIST
1680 eval enable \$$v
1681 eval ${n}_if_any="\$$v"
1682done
1683
1684enable $ARCH_EXT_LIST $ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS
1685
1686die_unknown(){
1687 echo "Unknown option \"$1\"."
1688 echo "See $0 --help for available options."
1689 exit 1
1690}
1691
1692show_list() {
1693 suffix=_$1
1694 shift
1695 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1696 exit 0
1697}
1698
1699for opt do
1700 optval="${opt#*=}"
1701 case "$opt" in
1702 --extra-ldflags=*) add_ldflags $optval
1703 ;;
1704 --extra-libs=*) add_extralibs $optval
1705 ;;
1706 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1707 ;;
1708 --enable-debug=*) debuglevel="$optval"
1709 ;;
1710 --disable-everything)
1711 map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1712 ;;
1713 --enable-*=*|--disable-*=*)
1714 eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1715 is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
1716 eval list=\$$(toupper $thing)_LIST
1717 name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
1718 $action $(filter "$name" $list)
1719 ;;
1720 --enable-?*|--disable-?*)
1721 eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1722 if is_in $option $COMPONENT_LIST; then
1723 test $action = disable && action=unset
1724 eval $action \$$(toupper ${option%s})_LIST
1725 elif is_in $option $CMDLINE_SELECT; then
1726 $action $option
1727 else
1728 die_unknown $opt
1729 fi
1730 ;;
1731 --list-*)
1732 NAME="${opt#--list-}"
1733 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1734 NAME=${NAME%s}
1735 eval show_list $NAME \$$(toupper $NAME)_LIST
1736 ;;
1737 --help|-h) show_help
1738 ;;
1739 *)
1740 optname="${opt%%=*}"
1741 optname="${optname#--}"
1742 optname=$(echo "$optname" | sed 's/-/_/g')
1743 if is_in $optname $CMDLINE_SET; then
1744 eval $optname='$optval'
1745 elif is_in $optname $CMDLINE_APPEND; then
1746 append $optname "$optval"
1747 else
1748 die_unknown $opt
1749 fi
1750 ;;
1751 esac
1752done
1753
1754disabled logging && logfile=/dev/null
1755
1756echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1757set >> $logfile
1758
1759test -n "$cross_prefix" && enable cross_compile
1760
1761if enabled cross_compile; then
1762 test -n "$arch" && test -n "$target_os" ||
1763 die "Must specify target arch and OS when cross-compiling"
1764fi
1765
1766set_default arch target_os
1767
1768ar_default="${cross_prefix}${ar_default}"
1769cc_default="${cross_prefix}${cc_default}"
1770nm_default="${cross_prefix}${nm_default}"
1771ranlib="${cross_prefix}${ranlib}"
1772strip_default="${cross_prefix}${strip_default}"
1773
1774sysinclude_default="${sysroot}/usr/include"
1775
1776set_default cc nm strip sysinclude
1777enabled cross_compile || host_cc_default=$cc
1778set_default host_cc
1779
1780exesuf() {
1781 case $1 in
1782 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
1783 esac
1784}
1785
1786EXESUF=$(exesuf $target_os)
1787HOSTEXESUF=$(exesuf $host_os)
1788
1789# set temporary file name
1790: ${TMPDIR:=$TEMPDIR}
1791: ${TMPDIR:=$TMP}
1792: ${TMPDIR:=/tmp}
1793
1794if ! check_cmd type mktemp; then
1795 # simple replacement for missing mktemp
1796 # NOT SAFE FOR GENERAL USE
1797 mktemp(){
1798 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1799 }
1800fi
1801
1802tmpfile(){
1803 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1804 (set -C; exec > $tmp) 2>/dev/null ||
1805 die "Unable to create temporary file in $TMPDIR."
1806 append TMPFILES $tmp
1807 eval $1=$tmp
1808}
1809
1810trap 'rm -f -- $TMPFILES' EXIT
1811trap exit HUP INT TERM
1812
1813tmpfile TMPC .c
1814tmpfile TMPE $EXESUF
1815tmpfile TMPH .h
1816tmpfile TMPO .o
1817tmpfile TMPS .S
1818tmpfile TMPV .ver
1819tmpfile TMPSH .sh
1820tmpfile TMPASM .asm
1821
1822unset -f mktemp
1823
1824# make sure we can execute files in $TMPDIR
1825cat > $TMPSH 2>> $logfile <<EOF
1826#! /bin/sh
1827EOF
1828chmod +x $TMPSH >> $logfile 2>&1
1829if ! $TMPSH >> $logfile 2>&1; then
1830 cat <<EOF
1831Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1832variable to another directory and make sure that it is not mounted noexec.
1833EOF
1834 die "Sanity test failed."
1835fi
1836
1837filter_cflags=echo
1838filter_cppflags=echo
1839filter_asflags=echo
1840
1841if $cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
1842 cc_type=llvm_gcc
1843 cc_version=__VERSION__
1844 gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
1845 cc_ident="llvm-gcc $($cc -dumpversion) $gcc_extra_ver"
1846 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1847 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1848 speed_cflags='-O3'
1849 size_cflags='-Os'
1850elif $cc -v 2>&1 | grep -qi ^gcc; then
1851 cc_type=gcc
1852 cc_version=__VERSION__
1853 gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
1854 cc_ident="gcc $($cc -dumpversion) $gcc_extra_ver"
1855 if ! $cc -dumpversion | grep -q '^2\.'; then
1856 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1857 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
1858 fi
1859 speed_cflags='-O3'
1860 size_cflags='-Os'
1861elif $cc --version 2>/dev/null | grep -q Intel; then
1862 cc_type=icc
1863 cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1864 cc_ident=$($cc --version | head -n1)
1865 icc_version=$($cc -dumpversion)
1866 CC_DEPFLAGS='-MMD'
1867 AS_DEPFLAGS='-MMD'
1868 speed_cflags='-O3'
1869 size_cflags='-Os'
1870 noopt_cflags='-O1'
1871elif $cc -v 2>&1 | grep -q xlc; then
1872 cc_type=xlc
1873 cc_version="AV_STRINGIFY(__IBMC__)"
1874 cc_ident=$($cc -qversion 2>/dev/null | head -n1)
1875 speed_cflags='-O5'
1876 size_cflags='-O5 -qcompact'
1877elif $cc -V 2>/dev/null | grep -q Compaq; then
1878 cc_type=ccc
1879 cc_version="AV_STRINGIFY(__DECC_VER)"
1880 cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3)
1881 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1882 debuglevel=3
1883 add_ldflags -Wl,-z,now # calls to libots crash without this
1884 speed_cflags='-fast'
1885 size_cflags='-O1'
1886elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1887 test -d "$sysroot" || die "No valid sysroot specified."
1888 cc_type=armcc
1889 cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1890 cc_ident=$($cc --vsn | head -n1)
1891 armcc_conf="$PWD/armcc.conf"
1892 $cc --arm_linux_configure \
1893 --arm_linux_config_file="$armcc_conf" \
1894 --configure_sysroot="$sysroot" \
1895 --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
1896 die "Error creating armcc configuration file."
1897 $cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
1898 cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1899 as_default="${cross_prefix}gcc"
1900 CC_DEPFLAGS='-MMD'
1901 AS_DEPFLAGS='-MMD'
1902 speed_cflags='-O3'
1903 size_cflags='-Os'
1904elif $cc -version 2>/dev/null | grep -q TMS470; then
1905 cc_type=tms470
1906 cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
1907 cc_ident=$($cc -version | head -n1 | tr -s ' ')
1908 cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
1909 CC_O='-fr=$(@D)'
1910 as_default="${cross_prefix}gcc"
1911 ld_default="${cross_prefix}gcc"
1912 TMPO=$(basename $TMPC .c).o
1913 append TMPFILES $TMPO
1914 add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
1915 CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
1916 AS_DEPFLAGS='-MMD'
1917 speed_cflags='-O3 -mf=5'
1918 size_cflags='-O3 -mf=2'
1919 filter_cflags=tms470_flags
1920 tms470_flags(){
1921 for flag; do
1922 case $flag in
1923 -march=*|-mcpu=*)
1924 case "${flag#*=}" in
1925 armv7-a|cortex-a*) echo -mv=7a8 ;;
1926 armv7-r|cortex-r*) echo -mv=7r4 ;;
1927 armv7-m|cortex-m*) echo -mv=7m3 ;;
1928 armv6*|arm11*) echo -mv=6 ;;
1929 armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
1930 echo -mv=5e ;;
1931 armv4*|arm7*|arm9[24]*) echo -mv=4 ;;
1932 esac
1933 ;;
1934 -mfpu=neon) echo --float_support=vfpv3 --neon ;;
1935 -mfpu=vfp) echo --float_support=vfpv2 ;;
1936 -mfpu=vfpv3) echo --float_support=vfpv3 ;;
1937 -msoft-float) echo --float_support=vfplib ;;
1938 -O[0-3]|-mf=*) echo $flag ;;
1939 -g) echo -g -mn ;;
1940 -pds=*) echo $flag ;;
1941 esac
1942 done
1943 }
1944elif $cc -v 2>&1 | grep -q clang; then
1945 cc_type=clang
1946 $cc -dM -E $TMPC | grep -q __clang_version__ &&
1947 cc_version=__clang_version__ || cc_version=__VERSION__
1948 cc_ident=$($cc --version | head -n1)
1949 CC_DEPFLAGS='-MMD'
1950 AS_DEPFLAGS='-MMD'
1951 speed_cflags='-O3'
1952 size_cflags='-Os'
1953elif $cc -V 2>&1 | grep -q Sun; then
1954 cc_type=suncc
1955 cc_version="AV_STRINGIFY(__SUNPRO_C)"
1956 cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
1957 DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
1958 DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
1959 speed_cflags='-O5'
1960 size_cflags='-O5 -xspace'
1961 filter_cflags=suncc_flags
1962 suncc_flags(){
1963 for flag; do
1964 case $flag in
1965 -march=*|-mcpu=*)
1966 case "${flag#*=}" in
1967 native) echo -xtarget=native ;;
1968 v9|niagara) echo -xarch=sparc ;;
1969 ultrasparc) echo -xarch=sparcvis ;;
1970 ultrasparc3|niagara2) echo -xarch=sparcvis2 ;;
1971 i586|pentium) echo -xchip=pentium ;;
1972 i686|pentiumpro|pentium2) echo -xtarget=pentium_pro ;;
1973 pentium3*|c3-2) echo -xtarget=pentium3 ;;
1974 pentium-m) echo -xarch=sse2 -xchip=pentium3 ;;
1975 pentium4*) echo -xtarget=pentium4 ;;
1976 prescott|nocona) echo -xarch=sse3 -xchip=pentium4 ;;
1977 *-sse3) echo -xarch=sse3 ;;
1978 core2) echo -xarch=ssse3 -xchip=core2 ;;
1979 amdfam10|barcelona) echo -xarch=sse4_1 ;;
1980 athlon-4|athlon-[mx]p) echo -xarch=ssea ;;
1981 k8|opteron|athlon64|athlon-fx)
1982 echo -xarch=sse2a ;;
1983 athlon*) echo -xarch=pentium_proa ;;
1984 esac
1985 ;;
1986 -std=c99) echo -xc99 ;;
1987 -fomit-frame-pointer) echo -xregs=frameptr ;;
1988 -fPIC) echo -KPIC -xcode=pic32 ;;
1989 -W*,*) echo $flag ;;
1990 -f*-*|-W*) ;;
1991 *) echo $flag ;;
1992 esac
1993 done
1994 }
1995elif $cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
1996 cc_type=pathscale
1997 cc_version=__PATHSCALE__
1998 cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
1999 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2000 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2001 speed_cflags='-O2'
2002 size_cflags='-Os'
2003elif $cc -v 2>&1 | grep -q Open64; then
2004 cc_type=open64
2005 cc_version=__OPEN64__
2006 cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
2007 CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2008 AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
2009 speed_cflags='-O2'
2010 size_cflags='-Os'
2011fi
2012
2013test -n "$cc_type" && enable $cc_type ||
2014 warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2015
2016: ${as_default:=$cc}
2017: ${dep_cc_default:=$cc}
2018: ${ld_default:=$cc}
2019set_default ar as dep_cc ld
2020
2021test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
2022test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
2023
2024add_cflags $extra_cflags
2025add_asflags $extra_cflags
2026
2027if test -n "$sysroot"; then
2028 case "$cc_type" in
2029 gcc|llvm_gcc)
2030 add_cppflags --sysroot="$sysroot"
2031 add_ldflags --sysroot="$sysroot"
2032 ;;
2033 tms470)
2034 add_cppflags -I"$sysinclude"
2035 add_ldflags --sysroot="$sysroot"
2036 ;;
2037 clang)
2038 add_cppflags -isysroot "$sysroot"
2039 add_ldflags -isysroot "$sysroot"
2040 ;;
2041 esac
2042fi
2043
2044if test "$cpu" = host; then
2045 enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
2046
2047 case "$cc_type" in
2048 gcc|llvm_gcc)
2049 check_native(){
2050 $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2051 sed -n "/$1=/{
2052 s/.*$1=\\([^ ]*\\).*/\\1/
2053 p
2054 q
2055 }" $TMPE
2056 }
2057 cpu=$(check_native -march || check_native -mcpu)
2058 ;;
2059 esac
2060
2061 test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
2062fi
2063
2064# Deal with common $arch aliases
2065case "$arch" in
2066 arm*)
2067 arch="arm"
2068 ;;
2069 mips|mipsel|IP*)
2070 arch="mips"
2071 ;;
2072 mips64*)
2073 arch="mips"
2074 subarch="mips64"
2075 ;;
2076 parisc|hppa)
2077 arch="parisc"
2078 ;;
2079 parisc64|hppa64)
2080 arch="parisc"
2081 subarch="parisc64"
2082 ;;
2083 "Power Macintosh"|ppc|powerpc)
2084 arch="ppc"
2085 ;;
2086 ppc64|powerpc64)
2087 arch="ppc"
2088 subarch="ppc64"
2089 ;;
2090 s390|s390x)
2091 arch="s390"
2092 ;;
2093 sh4|sh)
2094 arch="sh4"
2095 ;;
2096 sun4u|sparc64)
2097 arch="sparc"
2098 subarch="sparc64"
2099 ;;
2100 i[3-6]86|i86pc|BePC|x86_64|amd64)
2101 arch="x86"
2102 ;;
2103esac
2104
2105is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2106enable $arch
2107
2108# Add processor-specific flags
2109if test "$cpu" = generic; then
2110 : do nothing
2111elif enabled ppc; then
2112
2113 case $(tolower $cpu) in
2114 601|ppc601|powerpc601)
2115 cpuflags="-mcpu=601"
2116 disable altivec
2117 ;;
2118 603*|ppc603*|powerpc603*)
2119 cpuflags="-mcpu=603"
2120 disable altivec
2121 ;;
2122 604*|ppc604*|powerpc604*)
2123 cpuflags="-mcpu=604"
2124 disable altivec
2125 ;;
2126 g3|75*|ppc75*|powerpc75*)
2127 cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2128 disable altivec
2129 ;;
2130 g4|745*|ppc745*|powerpc745*)
2131 cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
2132 ;;
2133 74*|ppc74*|powerpc74*)
2134 cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
2135 ;;
2136 g5|970|ppc970|powerpc970|power4*)
2137 cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
2138 ;;
2139 cell)
2140 cpuflags="-mcpu=cell"
2141 enable ldbrx
2142 ;;
2143 e500v2)
2144 cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
2145 disable altivec
2146 ;;
2147 e500)
2148 cpuflags="-mcpu=8540 -mhard-float"
2149 disable altivec
2150 ;;
2151 esac
2152
2153elif enabled x86; then
2154
2155 case $cpu in
2156 i[345]86|pentium)
2157 cpuflags="-march=$cpu"
2158 disable mmx
2159 ;;
2160 # targets that do NOT support conditional mov (cmov)
2161 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
2162 cpuflags="-march=$cpu"
2163 disable cmov
2164 ;;
2165 # targets that do support conditional mov (cmov)
2166 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona|atom)
2167 cpuflags="-march=$cpu"
2168 enable cmov
2169 enable fast_cmov
2170 ;;
2171 # targets that do support conditional mov but on which it's slow
2172 pentium4|pentium4m|prescott|nocona)
2173 cpuflags="-march=$cpu"
2174 enable cmov
2175 disable fast_cmov
2176 ;;
2177 esac
2178
2179elif enabled sparc; then
2180
2181 case $cpu in
2182 niagara)
2183 cpuflags="-mcpu=$cpu"
2184 disable vis
2185 ;;
2186 sparc64)
2187 cpuflags="-mcpu=v9"
2188 ;;
2189 esac
2190
2191elif enabled arm; then
2192
2193 case $cpu in
2194 armv*)
2195 cpuflags="-march=$cpu"
2196 subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2197 ;;
2198 *)
2199 cpuflags="-mcpu=$cpu"
2200 case $cpu in
2201 cortex-a*) subarch=armv7a ;;
2202 cortex-r*) subarch=armv7r ;;
2203 cortex-m*) subarch=armv7m ;;
2204 arm11*) subarch=armv6 ;;
2205 arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
2206 armv4*|arm7*|arm9[24]*) subarch=armv4 ;;
2207 esac
2208 ;;
2209 esac
2210
2211elif enabled alpha; then
2212
2213 enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2214
2215elif enabled bfin; then
2216
2217 cpuflags="-mcpu=$cpu"
2218
2219elif enabled mips; then
2220
2221 cpuflags="-march=$cpu"
2222
2223elif enabled avr32; then
2224
2225 case $cpu in
2226 ap7[02]0[0-2])
2227 subarch="avr32_ap"
2228 cpuflags="-mpart=$cpu"
2229 ;;
2230 ap)
2231 subarch="avr32_ap"
2232 cpuflags="-march=$cpu"
2233 ;;
2234 uc3[ab]*)
2235 subarch="avr32_uc"
2236 cpuflags="-mcpu=$cpu"
2237 ;;
2238 uc)
2239 subarch="avr32_uc"
2240 cpuflags="-march=$cpu"
2241 ;;
2242 esac
2243
2244fi
2245
2246add_cflags $cpuflags
2247add_asflags $cpuflags
2248
2249# compiler sanity check
2250check_exec <<EOF
2251int main(void){ return 0; }
2252EOF
2253if test "$?" != 0; then
2254 echo "$cc is unable to create an executable file."
2255 if test -z "$cross_prefix" && ! enabled cross_compile ; then
2256 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
2257 echo "Only do this if you know what cross compiling means."
2258 fi
2259 die "C compiler test failed."
2260fi
2261
2262add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2263check_cflags -std=c99
2264check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2265#include <stdlib.h>
2266EOF
2267check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2268#include <stdlib.h>
2269EOF
2270
2271check_host_cflags -std=c99
2272
2273case "$arch" in
2274 alpha|ia64|mips|parisc|sparc)
2275 spic=$shared
2276 ;;
2277 x86)
2278 subarch="x86_32"
2279 check_cc <<EOF && subarch="x86_64"
2280 int test[(int)sizeof(char*) - 7];
2281EOF
2282 if test "$subarch" = "x86_64"; then
2283 spic=$shared
2284 fi
2285 ;;
2286esac
2287
2288enable $subarch
2289enabled spic && enable pic
2290
2291# OS specific
2292case $target_os in
2293 haiku)
2294 prefix_default="/boot/common"
2295 network_extralibs="-lnetwork"
2296 ;;
2297 sunos)
2298 FFSERVERLDFLAGS=""
2299 SHFLAGS='-shared -Wl,-h,$$(@F)'
2300 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2301 network_extralibs="-lsocket -lnsl"
2302 add_cppflags -D__EXTENSIONS__
2303 nm_opts='-P -g'
2304 ;;
2305 netbsd)
2306 oss_indev_extralibs="-lossaudio"
2307 oss_outdev_extralibs="-lossaudio"
2308 add_cppflags -D_XOPEN_SOURCE=600
2309 ;;
2310 openbsd)
2311 enable malloc_aligned
2312 # On OpenBSD 4.5. the compiler does not use PIC unless
2313 # explicitly using -fPIC. FFmpeg builds fine without PIC,
2314 # however the generated executable will not do anything
2315 # (simply quits with exit-code 1, no crash, no output).
2316 # Thus explicitly enable PIC here.
2317 enable pic
2318 SHFLAGS='-shared'
2319 oss_indev_extralibs="-lossaudio"
2320 oss_outdev_extralibs="-lossaudio"
2321 ;;
2322 freebsd|dragonfly)
2323 enable malloc_aligned
2324 ;;
2325 bsd/os)
2326 add_extralibs -lpoll -lgnugetopt
2327 strip="strip -d"
2328 ;;
2329 darwin)
2330 enable malloc_aligned
2331 gas="gas-preprocessor.pl $cc"
2332 enabled ppc && add_asflags -force_cpusubtype_ALL
2333 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
2334 strip="${strip} -x"
2335 add_ldflags -Wl,-dynamic,-search_paths_first
2336 SLIBSUF=".dylib"
2337 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2338 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2339 FFSERVERLDFLAGS=-Wl,-bind_at_load
2340 objformat="macho"
2341 enabled x86_64 && objformat="macho64"
2342 enabled_any pic shared ||
2343 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2344 ;;
2345 mingw32*)
2346 if test $target_os = "mingw32ce"; then
2347 disable network
2348 else
2349 target_os=mingw32
2350 fi
2351 LIBTARGET=i386
2352 if enabled x86_64; then
2353 enable malloc_aligned
2354 LIBTARGET=x64
2355 elif enabled arm; then
2356 LIBTARGET=arm
2357 fi
2358 shlibdir_default="$bindir_default"
2359 disable ffserver
2360 SLIBPREF=""
2361 SLIBSUF=".dll"
2362 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2363 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2364 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2365 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2366 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2367 install -d "$(LIBDIR)"; \
2368 install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2369 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2370 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
2371 objformat="win32"
2372 enable dos_paths
2373 check_cflags -fno-common
2374 check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
2375 || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2376 die "ERROR: MinGW runtime version must be >= 3.15."
2377 ;;
2378 cygwin*)
2379 target_os=cygwin
2380 shlibdir_default="$bindir_default"
2381 SLIBPREF="cyg"
2382 SLIBSUF=".dll"
2383 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2384 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2385 SHFLAGS='-shared -Wl,--enable-auto-image-base'
2386 objformat="win32"
2387 enable dos_paths
2388 check_cflags -fno-common
2389 ;;
2390 *-dos|freedos|opendos)
2391 disable ffplay ffserver
2392 disable $INDEV_LIST $OUTDEV_LIST
2393 network_extralibs="-lsocket"
2394 objformat="coff"
2395 enable dos_paths
2396 ;;
2397 linux)
2398 enable dv1394
2399 ;;
2400 irix*)
2401 target_os=irix
2402 ranlib="echo ignoring ranlib"
2403 ;;
2404 os/2*)
2405 strip="lxlite"
2406 ln_s="cp -f"
2407 add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2408 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2409 FFSERVERLDFLAGS=""
2410 LIBSUF="_s.a"
2411 SLIBPREF=""
2412 SLIBSUF=".dll"
2413 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2414 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2415 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2416 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2417 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2418 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2419 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2420 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2421 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2422 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2423 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2424 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2425 enable dos_paths
2426 ;;
2427 gnu/kfreebsd)
2428 ;;
2429 gnu)
2430 ;;
2431 none)
2432 ;;
2433 *)
2434 die "Unknown OS '$target_os'."
2435 ;;
2436esac
2437
2438echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate
2439
2440check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
2441
2442set_default $PATHS_LIST
2443
2444# we need to build at least one lib type
2445if ! enabled_any static shared; then
2446 cat <<EOF
2447At least one library type must be built.
2448Specify --enable-static to build the static libraries or --enable-shared to
2449build the shared libraries as well. To only build the shared libraries specify
2450--disable-static in addition to --enable-shared.
2451EOF
2452 exit 1;
2453fi
2454
2455disabled static && LIBNAME=""
2456
2457die_license_disabled() {
2458 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2459}
2460
2461die_license_disabled gpl libx264
2462die_license_disabled gpl libxavs
2463die_license_disabled gpl libxvid
2464die_license_disabled gpl postproc
2465die_license_disabled gpl x11grab
2466
2467die_license_disabled nonfree libfaac
2468
2469die_license_disabled version3 libopencore_amrnb
2470die_license_disabled version3 libopencore_amrwb
2471
2472enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2473
2474check_deps $ARCH_EXT_LIST
2475
2476disabled optimizations || check_cflags -fomit-frame-pointer
2477
2478enable_pic() {
2479 enable pic
2480 add_cppflags -DPIC
2481 add_cflags -fPIC
2482 add_asflags -fPIC
2483}
2484
2485enabled pic && enable_pic
2486
2487check_cc <<EOF || die "Symbol mangling check failed."
2488int ff_extern;
2489EOF
2490sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2491extern_prefix=${sym%%ff_extern*}
2492
2493check_cc <<EOF && enable inline_asm
2494void foo(void) { __asm__ volatile ("" ::); }
2495EOF
2496
2497_restrict=
2498for restrict_keyword in restrict __restrict__ __restrict; do
2499 check_cc <<EOF && _restrict=$restrict_keyword && break
2500void foo(char * $restrict_keyword p);
2501EOF
2502done
2503
2504check_cc <<EOF && enable attribute_packed
2505struct { int x; } __attribute__((packed)) x;
2506EOF
2507
2508check_cc <<EOF && enable attribute_may_alias
2509union { int x; } __attribute__((may_alias)) x;
2510EOF
2511
2512check_cc <<EOF || die "endian test failed"
2513unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2514EOF
2515od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2516
2517if enabled alpha; then
2518
2519 check_cflags -mieee
2520
2521elif enabled arm; then
2522
2523 check_cflags -marm
2524 nogas=die
2525
2526 check_ld <<EOF && enable vfp_args
2527__asm__ (".eabi_attribute 28, 1");
2528int main(void) { return 0; }
2529EOF
2530
2531 # We have to check if pld is a nop and disable it.
2532 check_asm pld '"pld [r0]"'
2533
2534 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2535 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
2536 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2537 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
2538 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
2539 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
2540
2541 enabled_all armv6t2 shared !pic && enable_pic
2542
2543elif enabled mips; then
2544
2545 check_asm loongson '"dmult.g $1, $2, $3"'
2546 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
2547
2548elif enabled ppc; then
2549
2550 enable local_aligned_8 local_aligned_16
2551
2552 check_asm dcbzl '"dcbzl 0, %0" :: "r"(0)'
2553 check_asm ibm_asm '"add 0, 0, 0"'
2554 check_asm ppc4xx '"maclhw r10, r11, r12"'
2555 check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2556
2557 # AltiVec flags: The FSF version of GCC differs from the Apple version
2558 if enabled altivec; then
2559 nogas=warn
2560 check_cflags -maltivec -mabi=altivec &&
2561 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2562 check_cflags -faltivec
2563
2564 # check if our compiler supports Motorola AltiVec C API
2565 check_cc <<EOF || disable altivec
2566$inc_altivec_h
2567int main(void) {
2568 vector signed int v1, v2, v3;
2569 v1 = vec_add(v2,v3);
2570 return 0;
2571}
2572EOF
2573
2574 # check if our compiler supports braces for vector declarations
2575 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2576$inc_altivec_h
2577int main (void) { (vector int) {1}; return 0; }
2578EOF
2579 fi
2580
2581elif enabled sparc; then
2582
2583 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2584 add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2585
2586elif enabled x86; then
2587
2588 enable local_aligned_8 local_aligned_16
2589
2590 # check whether EBP is available on x86
2591 # As 'i' is stored on the stack, this program will crash
2592 # if the base pointer is used to access it because the
2593 # base pointer is cleared in the inline assembly code.
2594 check_exec_crash <<EOF && enable ebp_available
2595 volatile int i=0;
2596 __asm__ volatile (
2597 "xorl %%ebp, %%ebp"
2598 ::: "%ebp");
2599 return i;
2600EOF
2601
2602 # check whether EBX is available on x86
2603 check_asm ebx_available '""::"b"(0)' &&
2604 check_asm ebx_available '"":::"%ebx"'
2605
2606 # check whether xmm clobbers are supported
2607 check_asm xmm_clobbers '"":::"%xmm0"'
2608
2609 # check whether more than 10 operands are supported
2610 check_cc <<EOF && enable ten_operands
2611int main(void) {
2612 int x=0;
2613 __asm__ volatile(
2614 ""
2615 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2616 );
2617 return 0;
2618}
2619EOF
2620
2621 # check whether binutils is new enough to compile SSSE3/MMX2
2622 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2623 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
2624
2625 check_asm bswap '"bswap %%eax" ::: "%eax"'
2626
2627 if ! disabled_any asm mmx yasm; then
2628 if check_cmd $yasmexe --version; then
2629 enabled x86_64 && yasm_extra="-m amd64"
2630 yasm_debug="-g dwarf2"
2631 elif check_cmd nasm -v; then
2632 yasmexe=nasm
2633 yasm_debug="-g -F dwarf"
2634 enabled x86_64 && test "$objformat" = elf && objformat=elf64
2635 fi
2636
2637 YASMFLAGS="-f $objformat $yasm_extra"
2638 enabled pic && append YASMFLAGS "-DPIC"
2639 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
2640 case "$objformat" in
2641 elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
2642 esac
2643
2644 check_yasm "pabsw xmm0, xmm0" && enable yasm ||
2645 die "yasm not found, use --disable-yasm for a crippled build"
2646 fi
2647
2648 case "$cpu" in
2649 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2650 disable fast_clz
2651 ;;
2652 esac
2653
2654fi
2655
2656if enabled asm; then
2657 as=${gas:=$as}
2658 check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
2659 $nogas "GNU assembler not found, install gas-preprocessor"
2660fi
2661
2662if check_func dlopen; then
2663 ldl=
2664elif check_func dlopen -ldl; then
2665 ldl=-ldl
2666fi
2667
2668# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2669check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2670
2671check_func fcntl
2672check_func fork
2673check_func getaddrinfo $network_extralibs
2674check_func gethrtime
2675check_func getrusage
2676check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2677check_func inet_aton $network_extralibs
2678check_func isatty
2679check_func ${malloc_prefix}memalign && enable memalign
2680check_func mkstemp
2681check_func mmap
2682check_func ${malloc_prefix}posix_memalign && enable posix_memalign
2683check_func setrlimit
2684check_func strerror_r
2685check_func strtok_r
2686check_func_headers io.h setmode
2687check_func_headers lzo/lzo1x.h lzo1x_999_compress
2688check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2689check_func_headers windows.h GetProcessTimes
2690check_func_headers windows.h VirtualAlloc
2691
2692check_header conio.h
2693check_header dlfcn.h
2694check_header dxva2api.h
2695check_header malloc.h
2696check_header poll.h
2697check_header sys/mman.h
2698check_header sys/resource.h
2699check_header sys/select.h
2700check_header termios.h
2701check_header vdpau/vdpau.h
2702check_header vdpau/vdpau_x11.h
2703check_header X11/extensions/XvMClib.h
2704
2705check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
2706
2707if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2708 enabled_any $need_memalign ; then
2709 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2710fi
2711
2712disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
2713disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2714
2715# check for some common methods of building with pthread support
2716# do this before the optional library checks as some of them require pthreads
2717if ! disabled pthreads && ! enabled w32threads; then
2718 enable pthreads
2719 if check_func pthread_create; then
2720 :
2721 elif check_func pthread_create -pthread; then
2722 add_cflags -pthread
2723 add_extralibs -pthread
2724 elif check_func pthread_create -pthreads; then
2725 add_cflags -pthreads
2726 add_extralibs -pthreads
2727 elif check_func pthread_create -lpthreadGC2; then
2728 add_extralibs -lpthreadGC2
2729 elif ! check_lib pthread.h pthread_create -lpthread; then
2730 disable pthreads
2731 fi
2732fi
2733
2734for thread in $THREADS_LIST; do
2735 if enabled $thread; then
2736 test -n "$thread_type" &&
2737 die "ERROR: Only one thread type must be selected." ||
2738 thread_type="$thread"
2739 fi
2740done
2741
2742check_lib math.h sin -lm
2743disabled vaapi || check_lib va/va.h vaInitialize -lva
2744
2745check_mathfunc exp2
2746check_mathfunc exp2f
2747check_mathfunc llrint
2748check_mathfunc llrintf
2749check_mathfunc log2
2750check_mathfunc log2f
2751check_mathfunc lrint
2752check_mathfunc lrintf
2753check_mathfunc round
2754check_mathfunc roundf
2755check_mathfunc truncf
2756
2757# these are off by default, so fail if requested and not available
2758enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2759enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
2760enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
2761 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2762 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2763enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2764enabled libgsm && require libgsm gsm/gsm.h gsm_create -lgsm
2765enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
2766enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
2767enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
2768enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
2769enabled libopencv && { check_lib opencv/cv.h cvCreateImageHeader $(pkg-config --libs opencv) ||
2770 die "ERROR: libopencv not found"; }
2771enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2772enabled librtmp && { check_lib librtmp/rtmp.h RTMP_Socket $(pkg-config --libs librtmp) ||
2773 die "ERROR: librtmp not found or RTMP_Socket() missing, librtmp version must be >= 2.2.f"; }
2774enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2775 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2776enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
2777enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2778enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2779enabled libvpx && {
2780 enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
2781 die "ERROR: libvpx decoder version must be >=0.9.1"; }
2782 enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_enc_init_ver -lvpx ||
2783 die "ERROR: libvpx encoder version must be >=0.9.1"; } }
2784enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 &&
2785 { check_cpp_condition x264.h "X264_BUILD >= 99" ||
2786 die "ERROR: libx264 version must be >= 0.99."; }
2787enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
2788enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
2789enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2790
2791# libdc1394 check
2792if enabled libdc1394; then
2793 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2794 enable libdc1394_2; } ||
2795 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2796 enable libdc1394_1; } ||
2797 die "ERROR: No version of libdc1394 found "
2798fi
2799
2800SDL_CONFIG="${cross_prefix}sdl-config"
2801if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2802 sdl_cflags=$("${SDL_CONFIG}" --cflags)
2803 sdl_libs=$("${SDL_CONFIG}" --libs)
2804 check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2805 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2806 enable sdl &&
2807 check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2808fi
2809
2810texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2811
2812if enabled network; then
2813 check_type "sys/types.h sys/socket.h" socklen_t
2814 check_type netdb.h "struct addrinfo"
2815 check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
2816 check_type netinet/in.h "struct sockaddr_in6"
2817 check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
2818 check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
2819 # Prefer arpa/inet.h over winsock2
2820 if check_header arpa/inet.h ; then
2821 check_func closesocket
2822 elif check_header winsock2.h ; then
2823 check_func_headers winsock2.h closesocket -lws2 && \
2824 network_extralibs="-lws2" || \
2825 { check_func_headers winsock2.h closesocket -lws2_32 && \
2826 network_extralibs="-lws2_32"; }
2827 check_type ws2tcpip.h socklen_t
2828 check_type ws2tcpip.h "struct addrinfo"
2829 check_type ws2tcpip.h "struct ipv6_mreq"
2830 check_type ws2tcpip.h "struct sockaddr_in6"
2831 check_type ws2tcpip.h "struct sockaddr_storage"
2832 check_struct winsock2.h "struct sockaddr" sa_len
2833 else
2834 disable network
2835 fi
2836fi
2837
2838check_header linux/videodev.h
2839check_header linux/videodev2.h
2840check_header sys/videoio.h
2841
2842check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2843# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
2844# w32api 3.12 had it defined wrong
2845check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
2846
2847# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2848{ check_header dev/bktr/ioctl_meteor.h &&
2849 check_header dev/bktr/ioctl_bt848.h; } ||
2850{ check_header machine/ioctl_meteor.h &&
2851 check_header machine/ioctl_bt848.h; } ||
2852{ check_header dev/video/meteor/ioctl_meteor.h &&
2853 check_header dev/video/bktr/ioctl_bt848.h; } ||
2854check_header dev/ic/bt8xx.h
2855
2856check_header sys/soundcard.h
2857check_header soundcard.h
2858
2859enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2860
2861enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2862
2863enabled x11grab &&
2864check_header X11/Xlib.h &&
2865check_header X11/extensions/XShm.h &&
2866check_header X11/extensions/Xfixes.h &&
2867check_func XOpenDisplay -lX11 &&
2868check_func XShmCreateImage -lX11 -lXext &&
2869check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2870
2871if ! disabled vdpau && enabled vdpau_vdpau_h; then
2872check_cpp_condition \
2873 vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2874 { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2875 disable vdpau; }
2876fi
2877
2878enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2879
2880# add some useful compiler flags if supported
2881check_cflags -Wdeclaration-after-statement
2882check_cflags -Wall
2883check_cflags -Wno-parentheses
2884check_cflags -Wno-switch
2885check_cflags -Wdisabled-optimization
2886check_cflags -Wpointer-arith
2887check_cflags -Wredundant-decls
2888check_cflags -Wno-pointer-sign
2889check_cflags -Wcast-qual
2890check_cflags -Wwrite-strings
2891check_cflags -Wtype-limits
2892check_cflags -Wundef
2893check_cflags -Wmissing-prototypes
2894enabled extra_warnings && check_cflags -Winline
2895
2896# add some linker flags
2897check_ldflags -Wl,--warn-common
2898check_ldflags -Wl,--as-needed
2899check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavcore -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
2900check_ldflags -Wl,-Bsymbolic
2901
2902echo "X{};" > $TMPV
2903if test_ldflags -Wl,--version-script,$TMPV; then
2904 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
2905 check_cc <<EOF && enable symver_asm_label
2906void ff_foo(void) __asm__ ("av_foo@VERSION");
2907void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
2908EOF
2909 check_cc <<EOF && enable symver_gnu_asm
2910__asm__(".symver ff_foo,av_foo@VERSION");
2911void ff_foo(void) {}
2912EOF
2913fi
2914
2915if enabled small; then
2916 add_cflags $size_cflags
2917 optimizations="small"
2918elif enabled optimizations; then
2919 add_cflags $speed_cflags
2920else
2921 add_cflags $noopt_cflags
2922fi
2923check_cflags -fno-math-errno
2924check_cflags -fno-signed-zeros
2925
2926if enabled icc; then
2927 # Just warnings, no remarks
2928 check_cflags -w1
2929 # -wd: Disable following warnings
2930 # 144, 167, 556: -Wno-pointer-sign
2931 # 10006: ignoring unknown option -fno-signed-zeros
2932 # 10148: ignoring unknown option -Wno-parentheses
2933 # 10156: ignoring option '-W'; no argument required
2934 check_cflags -wd144,167,556,10006,10148,10156
2935 # 11030: Warning unknown option --as-needed
2936 # 10156: ignoring option '-export'; no argument required
2937 check_ldflags -wd10156,11030
2938 # Allow to compile with optimizations
2939 check_ldflags -march=$cpu
2940 # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
2941 enable ebp_available
2942 if enabled x86_32; then
2943 test ${icc_version%%.*} -ge 11 && \
2944 check_cflags -falign-stack=maintain-16-byte || \
2945 disable aligned_stack
2946 fi
2947elif enabled ccc; then
2948 # disable some annoying warnings
2949 add_cflags -msg_disable cvtu32to64
2950 add_cflags -msg_disable embedcomment
2951 add_cflags -msg_disable needconstext
2952 add_cflags -msg_disable nomainieee
2953 add_cflags -msg_disable ptrmismatch1
2954 add_cflags -msg_disable unreachcode
2955elif enabled gcc; then
2956 check_cflags -fno-tree-vectorize
2957 check_cflags -Werror=implicit-function-declaration
2958 check_cflags -Werror=missing-prototypes
2959elif enabled llvm_gcc; then
2960 check_cflags -mllvm -stack-alignment=16
2961elif enabled clang; then
2962 check_cflags -mllvm -stack-alignment=16
2963 check_cflags -Qunused-arguments
2964elif enabled armcc; then
2965 # 2523: use of inline assembler is deprecated
2966 add_cflags -W${armcc_opt},--diag_suppress=2523
2967 add_cflags -W${armcc_opt},--diag_suppress=1207
2968elif enabled tms470; then
2969 add_cflags -pds=824 -pds=837
2970fi
2971
2972enabled_any $THREADS_LIST && enable threads
2973
2974check_deps $CONFIG_LIST \
2975 $CONFIG_EXTRA \
2976 $HAVE_LIST \
2977 $DECODER_LIST \
2978 $ENCODER_LIST \
2979 $HWACCEL_LIST \
2980 $PARSER_LIST \
2981 $BSF_LIST \
2982 $DEMUXER_LIST \
2983 $MUXER_LIST \
2984 $FILTER_LIST \
2985 $INDEV_LIST \
2986 $OUTDEV_LIST \
2987 $PROTOCOL_LIST \
2988 $ACODEC_TESTS \
2989 $VCODEC_TESTS \
2990 $LAVF_TESTS \
2991 $LAVFI_TESTS \
2992 $SEEK_TESTS \
2993
2994enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
2995
2996echo "install prefix $prefix"
2997echo "source path $source_path"
2998echo "C compiler $cc"
2999echo "ARCH $arch ($cpu)"
3000if test "$build_suffix" != ""; then
3001 echo "build suffix $build_suffix"
3002fi
3003if test "$extra_version" != ""; then
3004 echo "version string suffix $extra_version"
3005fi
3006echo "big-endian ${bigendian-no}"
3007echo "runtime cpu detection ${runtime_cpudetect-no}"
3008if enabled x86; then
3009 echo "yasm ${yasm-no}"
3010 echo "MMX enabled ${mmx-no}"
3011 echo "MMX2 enabled ${mmx2-no}"
3012 echo "3DNow! enabled ${amd3dnow-no}"
3013 echo "3DNow! extended enabled ${amd3dnowext-no}"
3014 echo "SSE enabled ${sse-no}"
3015 echo "SSSE3 enabled ${ssse3-no}"
3016 echo "CMOV enabled ${cmov-no}"
3017 echo "CMOV is fast ${fast_cmov-no}"
3018 echo "EBX available ${ebx_available-no}"
3019 echo "EBP available ${ebp_available-no}"
3020 echo "10 operands supported ${ten_operands-no}"
3021fi
3022if enabled arm; then
3023 echo "ARMv5TE enabled ${armv5te-no}"
3024 echo "ARMv6 enabled ${armv6-no}"
3025 echo "ARMv6T2 enabled ${armv6t2-no}"
3026 echo "ARM VFP enabled ${armvfp-no}"
3027 echo "IWMMXT enabled ${iwmmxt-no}"
3028 echo "NEON enabled ${neon-no}"
3029fi
3030if enabled mips; then
3031 echo "MMI enabled ${mmi-no}"
3032fi
3033if enabled ppc; then
3034 echo "AltiVec enabled ${altivec-no}"
3035 echo "PPC 4xx optimizations ${ppc4xx-no}"
3036 echo "dcbzl available ${dcbzl-no}"
3037fi
3038if enabled sparc; then
3039 echo "VIS enabled ${vis-no}"
3040fi
3041echo "debug symbols ${debug-no}"
3042echo "strip symbols ${stripping-no}"
3043echo "optimizations ${optimizations-no}"
3044echo "static ${static-no}"
3045echo "shared ${shared-no}"
3046echo "postprocessing support ${postproc-no}"
3047echo "new filter support ${avfilter-no}"
3048echo "network support ${network-no}"
3049echo "threading support ${thread_type-no}"
3050echo "SDL support ${sdl-no}"
3051echo "Sun medialib support ${mlib-no}"
3052echo "AVISynth enabled ${avisynth-no}"
3053echo "frei0r enabled ${frei0r-no}"
3054echo "libdc1394 support ${libdc1394-no}"
3055echo "libdirac enabled ${libdirac-no}"
3056echo "libfaac enabled ${libfaac-no}"
3057echo "libgsm enabled ${libgsm-no}"
3058echo "libmp3lame enabled ${libmp3lame-no}"
3059echo "libnut enabled ${libnut-no}"
3060echo "libopencore-amrnb support ${libopencore_amrnb-no}"
3061echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3062echo "libopencv support ${libopencv-no}"
3063echo "libopenjpeg enabled ${libopenjpeg-no}"
3064echo "librtmp enabled ${librtmp-no}"
3065echo "libschroedinger enabled ${libschroedinger-no}"
3066echo "libspeex enabled ${libspeex-no}"
3067echo "libtheora enabled ${libtheora-no}"
3068echo "libvorbis enabled ${libvorbis-no}"
3069echo "libvpx enabled ${libvpx-no}"
3070echo "libx264 enabled ${libx264-no}"
3071echo "libxavs enabled ${libxavs-no}"
3072echo "libxvid enabled ${libxvid-no}"
3073echo "zlib enabled ${zlib-no}"
3074echo "bzlib enabled ${bzlib-no}"
3075echo
3076
3077for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3078 echo "Enabled ${type}s:"
3079 eval list=\$$(toupper $type)_LIST
3080 print_enabled '_*' $list | sort | pr -3 -t
3081 echo
3082done
3083
3084license="LGPL version 2.1 or later"
3085if enabled nonfree; then
3086 license="nonfree and unredistributable"
3087elif enabled gplv3; then
3088 license="GPL version 3 or later"
3089elif enabled lgplv3; then
3090 license="LGPL version 3 or later"
3091elif enabled gpl; then
3092 license="GPL version 2 or later"
3093fi
3094
3095echo "License: $license"
3096
3097echo "Creating config.mak and config.h..."
3098
3099# build tree in object directory if source path is different from current one
3100if enabled source_path_used; then
3101 DIRS="
3102 doc
3103 libavcodec
3104 libavcodec/$arch
3105 libavcore
3106 libavdevice
3107 libavfilter
3108 libavfilter/$arch
3109 libavformat
3110 libavutil
3111 libavutil/$arch
3112 libpostproc
3113 libswscale
3114 libswscale/$arch
3115 tests
3116 tools
3117 "
3118 FILES="
3119 Makefile
3120 common.mak
3121 subdir.mak
3122 doc/texi2pod.pl
3123 libavcodec/Makefile
3124 libavcodec/${arch}/Makefile
3125 libavcore/Makefile
3126 libavdevice/Makefile
3127 libavfilter/Makefile
3128 libavfilter/${arch}/Makefile
3129 libavformat/Makefile
3130 libavutil/Makefile
3131 libpostproc/Makefile
3132 libswscale/Makefile
3133 "
3134 map 'mkdir -p $v' $DIRS;
3135 map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
3136fi
3137
3138enabled stripping || strip="echo skipping strip"
3139
3140config_files="$TMPH config.mak"
3141
3142cat > config.mak <<EOF
3143# Automatically generated by configure - do not modify!
3144ifndef FFMPEG_CONFIG_MAK
3145FFMPEG_CONFIG_MAK=1
3146FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3147prefix=$prefix
3148LIBDIR=\$(DESTDIR)$libdir
3149SHLIBDIR=\$(DESTDIR)$shlibdir
3150INCDIR=\$(DESTDIR)$incdir
3151BINDIR=\$(DESTDIR)$bindir
3152DATADIR=\$(DESTDIR)$datadir
3153MANDIR=\$(DESTDIR)$mandir
3154SRC_PATH="$source_path"
3155SRC_PATH_BARE=$source_path
3156BUILD_ROOT="$PWD"
3157CC_IDENT=$cc_ident
3158ARCH=$arch
3159CC=$cc
3160AS=$as
3161LD=$ld
3162DEPCC=$dep_cc
3163YASM=$yasmexe
3164YASMDEP=$yasmexe
3165AR=$ar
3166RANLIB=$ranlib
3167CP=cp -p
3168LN_S=$ln_s
3169STRIP=$strip
3170CPPFLAGS=$CPPFLAGS
3171CFLAGS=$CFLAGS
3172ASFLAGS=$ASFLAGS
3173CC_O=$CC_O
3174LDFLAGS=$LDFLAGS
3175FFSERVERLDFLAGS=$FFSERVERLDFLAGS
3176SHFLAGS=$SHFLAGS
3177YASMFLAGS=$YASMFLAGS
3178BUILDSUF=$build_suffix
3179FULLNAME=$FULLNAME
3180LIBPREF=$LIBPREF
3181LIBSUF=$LIBSUF
3182LIBNAME=$LIBNAME
3183SLIBPREF=$SLIBPREF
3184SLIBSUF=$SLIBSUF
3185EXESUF=$EXESUF
3186EXTRA_VERSION=$extra_version
3187DEPFLAGS=$DEPFLAGS
3188CCDEP=$CCDEP
3189ASDEP=$ASDEP
3190CC_DEPFLAGS=$CC_DEPFLAGS
3191AS_DEPFLAGS=$AS_DEPFLAGS
3192HOSTCC=$host_cc
3193HOSTCFLAGS=$host_cflags
3194HOSTEXESUF=$HOSTEXESUF
3195HOSTLDFLAGS=$host_ldflags
3196HOSTLIBS=$host_libs
3197TARGET_EXEC=$target_exec
3198TARGET_PATH=$target_path
3199SDL_LIBS=$sdl_libs
3200SDL_CFLAGS=$sdl_cflags
3201LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
3202EXTRALIBS=$extralibs
3203INSTALL=install
3204LIBTARGET=${LIBTARGET}
3205SLIBNAME=${SLIBNAME}
3206SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
3207SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
3208SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
3209SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
3210SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
3211SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
3212SAMPLES=$samples
3213EOF
3214
3215get_version(){
3216 name=$1
3217 file=$source_path/$2
3218 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
3219 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3220 lcname=$(tolower $name)
3221 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
3222 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3223}
3224
3225get_version LIBSWSCALE libswscale/swscale.h
3226get_version LIBPOSTPROC libpostproc/postprocess.h
3227get_version LIBAVCODEC libavcodec/avcodec.h
3228get_version LIBAVCORE libavcore/avcore.h
3229get_version LIBAVDEVICE libavdevice/avdevice.h
3230get_version LIBAVFORMAT libavformat/avformat.h
3231get_version LIBAVUTIL libavutil/avutil.h
3232get_version LIBAVFILTER libavfilter/avfilter.h
3233
3234cat > $TMPH <<EOF
3235/* Automatically generated by configure - do not modify! */
3236#ifndef FFMPEG_CONFIG_H
3237#define FFMPEG_CONFIG_H
3238#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3239#define FFMPEG_LICENSE "$(c_escape $license)"
3240#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
3241#define CC_TYPE "$cc_type"
3242#define CC_VERSION $cc_version
3243#define restrict $_restrict
3244#define ASMALIGN(ZEROBITS) ".p2align " #ZEROBITS "\\n\\t"
3245#define EXTERN_PREFIX "${extern_prefix}"
3246#define EXTERN_ASM ${extern_prefix}
3247#define SLIBSUF "$SLIBSUF"
3248EOF
3249
3250test -n "$malloc_prefix" &&
3251 echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
3252
3253if enabled small || disabled optimizations; then
3254 echo "#undef av_always_inline" >> $TMPH
3255 if enabled small; then
3256 echo "#define av_always_inline inline" >> $TMPH
3257 else
3258 echo "#define av_always_inline av_unused" >> $TMPH
3259 fi
3260fi
3261
3262if enabled yasm; then
3263 append config_files $TMPASM
3264 printf '' >$TMPASM
3265fi
3266
3267print_config ARCH_ "$config_files" $ARCH_LIST
3268print_config HAVE_ "$config_files" $HAVE_LIST
3269print_config CONFIG_ "$config_files" $CONFIG_LIST \
3270 $CONFIG_EXTRA \
3271 $DECODER_LIST \
3272 $ENCODER_LIST \
3273 $HWACCEL_LIST \
3274 $PARSER_LIST \
3275 $BSF_LIST \
3276 $DEMUXER_LIST \
3277 $MUXER_LIST \
3278 $FILTER_LIST \
3279 $PROTOCOL_LIST \
3280 $INDEV_LIST \
3281 $OUTDEV_LIST \
3282
3283cat >>config.mak <<EOF
3284ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
3285VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
3286LAVF_TESTS=$(print_enabled -n _test $LAVF_TESTS)
3287LAVFI_TESTS=$(print_enabled -n _test $LAVFI_TESTS)
3288SEEK_TESTS=$(print_enabled -n _test $SEEK_TESTS)
3289EOF
3290
3291echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3292echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3293
3294# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3295cp_if_changed $TMPH config.h
3296touch .config
3297
3298enabled yasm && cp_if_changed $TMPASM config.asm
3299
3300cat > $TMPH <<EOF
3301/* Generated by ffconf */
3302#ifndef AVUTIL_AVCONFIG_H
3303#define AVUTIL_AVCONFIG_H
3304EOF
3305
3306print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3307
3308echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
3309
3310cp_if_changed $TMPH libavutil/avconfig.h
3311
3312test -n "$WARNINGS" && printf "\n$WARNINGS"
3313
3314# build pkg-config files
3315
3316pkgconfig_generate(){
3317name=$1
3318shortname=${name#lib}${build_suffix}
3319comment=$2
3320version=$3
3321libs=$4
3322requires=$5
3323enabled ${name#lib} || return 0
3324cat <<EOF > $name/$name.pc
3325prefix=$prefix
3326exec_prefix=\${prefix}
3327libdir=$libdir
3328includedir=$incdir
3329
3330Name: $name
3331Description: $comment
3332Version: $version
3333Requires: $(enabled shared || echo $requires)
3334Requires.private: $(enabled shared && echo $requires)
3335Conflicts:
3336Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3337Libs.private: $(enabled shared && echo $libs)
3338Cflags: -I\${includedir}
3339EOF
3340cat <<EOF > $name/$name-uninstalled.pc
3341prefix=
3342exec_prefix=
3343libdir=\${pcfiledir}
3344includedir=${source_path}
3345
3346Name: $name
3347Description: $comment
3348Version: $version
3349Requires: $requires
3350Conflicts:
3351Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3352Cflags: -I\${includedir}
3353EOF
3354}
3355
3356pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
3357pkgconfig_generate libavcore "FFmpeg multimedia shared core utilities library" "$LIBAVCORE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
3358pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavcore = $LIBAVCORE_VERSION"
3359pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
3360pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
3361pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavcore = $LIBAVCORE_VERSION"
3362pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
3363pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"