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