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