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