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