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