configure: simplify $arch handling
[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
1816 # Add processor-specific flags
1817 case $cpu in
1818 601|ppc601|PowerPC601)
1819 cpuflags="-mcpu=601"
1820 ;;
1821 603*|ppc603*|PowerPC603*)
1822 cpuflags="-mcpu=603"
1823 ;;
1824 604*|ppc604*|PowerPC604*)
1825 cpuflags="-mcpu=604"
1826 ;;
1827 G3|g3|75*|ppc75*|PowerPC75*)
1828 cpuflags="-mcpu=750 -mpowerpc-gfxopt"
1829 ;;
1830 G4|g4|745*|ppc745*|PowerPC745*)
1831 cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
1832 ;;
1833 74*|ppc74*|PowerPC74*)
1834 cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
1835 ;;
1836 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1837 cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1838 ;;
1839 Cell|CELL|cell)
1840 cpuflags="-mcpu=cell"
1841 enable ldbrx
1842 ;;
1843 i[345]86|pentium)
1844 cpuflags="-march=$cpu"
1845 disable mmx
1846 ;;
1847 # targets that do NOT support conditional mov (cmov)
1848 pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1849 cpuflags="-march=$cpu"
1850 disable cmov
1851 ;;
1852 # targets that do support conditional mov (cmov)
1853 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10)
1854 cpuflags="-march=$cpu"
1855 enable cmov
1856 enable fast_cmov
1857 ;;
1858 # targets that do support conditional mov but on which it's slow
1859 pentium4|pentium4m|prescott|nocona)
1860 cpuflags="-march=$cpu"
1861 enable cmov
1862 disable fast_cmov
1863 ;;
1864 sparc64)
1865 cpuflags="-mcpu=v9"
1866 ;;
1867 arm11*|cortex*)
1868 cpuflags="-mcpu=$cpu"
1869 ;;
1870 armv[67]*)
1871 cpuflags="-march=$cpu"
1872 ;;
1873 armv*)
1874 cpuflags="-march=$cpu"
1875 ;;
1876 arm*)
1877 cpuflags="-mcpu=$cpu"
1878 ;;
1879 ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1880 enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
1881 ;;
1882 bf*)
1883 cpuflags="-mcpu=$cpu"
1884 ;;
1885 mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
1886 cpuflags="-march=$cpu"
1887 ;;
1888 ap7[02]0[0-2])
1889 subarch="avr32_ap"
1890 cpuflags="-mpart=$cpu"
1891 ;;
1892 ap)
1893 subarch="avr32_ap"
1894 cpuflags="-march=$cpu"
1895 ;;
1896 uc3[ab]*)
1897 subarch="avr32_uc"
1898 cpuflags="-mcpu=$cpu"
1899 ;;
1900 uc)
1901 subarch="avr32_uc"
1902 cpuflags="-march=$cpu"
1903 ;;
1904 generic)
1905 ;;
1906 *)
1907 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1908 ;;
1909 esac
1910
1911 add_cflags $cpuflags
1912 add_asflags $cpuflags
1913
1914 # compiler sanity check
1915 check_exec <<EOF
1916 int main(void){ return 0; }
1917 EOF
1918 if test "$?" != 0; then
1919 echo "$cc is unable to create an executable file."
1920 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1921 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1922 echo "Only do this if you know what cross compiling means."
1923 fi
1924 die "C compiler test failed."
1925 fi
1926
1927 add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1928 check_cflags -std=c99
1929 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
1930 #include <stdlib.h>
1931 EOF
1932 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
1933 #include <stdlib.h>
1934 EOF
1935
1936 check_host_cflags -std=c99
1937
1938 case "$arch" in
1939 alpha|ia64|mips|parisc|sparc)
1940 spic=$shared
1941 ;;
1942 x86)
1943 subarch="x86_32"
1944 check_cc <<EOF && subarch="x86_64"
1945 int test[(int)sizeof(char*) - 7];
1946 EOF
1947 if test "$subarch" = "x86_64"; then
1948 spic=$shared
1949 fi
1950 ;;
1951 esac
1952
1953 enable $arch $subarch
1954 enabled spic && enable pic
1955 check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
1956
1957 # OS specific
1958 case $target_os in
1959 beos|haiku|zeta)
1960 prefix_default="$HOME/config"
1961 # 3 gcc releases known for BeOS, each with ugly bugs
1962 gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1963 case "$gcc_version" in
1964 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1965 disable mmx
1966 ;;
1967 *20010315*) echo "BeBits gcc"
1968 add_cflags -fno-expensive-optimizations
1969 ;;
1970 esac
1971 SHFLAGS=-nostart
1972 # enable BeOS things
1973 enable audio_beos
1974 # no need for libm, but the inet stuff
1975 # Check for BONE
1976 # XXX: actually should check for NOT net_server
1977 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1978 network_extralibs="-lbind -lsocket"
1979 else
1980 enable beos_netserver
1981 network_extralibs="-lnet"
1982 fi ;;
1983 sunos)
1984 FFSERVERLDFLAGS=""
1985 SHFLAGS='-shared -Wl,-h,$$(@F)'
1986 enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
1987 network_extralibs="-lsocket -lnsl"
1988 add_cppflags -D__EXTENSIONS__
1989 ;;
1990 netbsd)
1991 oss_indev_extralibs="-lossaudio"
1992 oss_outdev_extralibs="-lossaudio"
1993 ;;
1994 openbsd)
1995 enable malloc_aligned
1996 # On OpenBSD 4.5. the compiler does not use PIC unless
1997 # explicitly using -fPIC. FFmpeg builds fine without PIC,
1998 # however the generated executable will not do anything
1999 # (simply quits with exit-code 1, no crash, no output).
2000 # Thus explicitly enable PIC here.
2001 enable pic
2002 SHFLAGS='-shared'
2003 oss_indev_extralibs="-lossaudio"
2004 oss_outdev_extralibs="-lossaudio"
2005 ;;
2006 freebsd|dragonfly)
2007 enable malloc_aligned
2008 ;;
2009 bsd/os)
2010 osextralibs="-lpoll -lgnugetopt"
2011 strip="strip -d"
2012 ;;
2013 darwin)
2014 enable malloc_aligned
2015 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
2016 strip="strip -x"
2017 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
2018 SLIBSUF=".dylib"
2019 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
2020 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
2021 FFSERVERLDFLAGS=-Wl,-bind_at_load
2022 objformat="macho"
2023 enabled x86_64 && objformat="macho64"
2024 enabled_any pic shared ||
2025 { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2026 ;;
2027 mingw32*)
2028 # Only WinXP or greater are supported
2029 add_cflags -D_WIN32_WINNT=0x0501
2030 if test $target_os = "mingw32ce"; then
2031 disable network
2032 else
2033 target_os=mingw32
2034 fi
2035 LIBTARGET=i386
2036 if enabled x86_64; then
2037 enable malloc_aligned
2038 LIBTARGET=x64
2039 elif enabled arm; then
2040 LIBTARGET=arm
2041 fi
2042 shlibdir_default="$bindir_default"
2043 disable ffserver
2044 SLIBPREF=""
2045 SLIBSUF=".dll"
2046 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2047 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2048 SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
2049 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
2050 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"; \
2051 install -d "$(LIBDIR)"; \
2052 install -m 644 $(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) "$(LIBDIR)/lib$(SLIBNAME:$(SLIBSUF)=.dll.a)"'
2053 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
2054 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'
2055 objformat="win32"
2056 enable dos_paths
2057 check_cflags -fno-common
2058 if ! enabled x86_64; then
2059 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
2060 die "ERROR: MinGW runtime version must be >= 3.15."
2061 enabled_any avisynth vfwcap_indev &&
2062 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
2063 die "ERROR: avisynth and vfwcap_indev require w32api version 3.13 or later."; }
2064 fi
2065 ;;
2066 cygwin*)
2067 target_os=cygwin
2068 shlibdir_default="$bindir_default"
2069 SLIBPREF="cyg"
2070 SLIBSUF=".dll"
2071 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
2072 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2073 SHFLAGS='-shared -Wl,--enable-auto-image-base'
2074 objformat="win32"
2075 enable dos_paths
2076 check_cflags -fno-common
2077 ;;
2078 *-dos|freedos|opendos)
2079 disable ffplay ffserver
2080 disable $INDEV_LIST $OUTDEV_LIST
2081 network_extralibs="-lsocket"
2082 objformat="coff"
2083 enable dos_paths
2084 ;;
2085 linux)
2086 enable dv1394
2087 ;;
2088 irix*)
2089 target_os=irix
2090 ranlib="echo ignoring ranlib"
2091 ;;
2092 os/2*)
2093 strip="lxlite"
2094 ln_s="cp -f"
2095 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
2096 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2097 FFSERVERLDFLAGS=""
2098 LIBSUF="_s.a"
2099 SLIBPREF=""
2100 SLIBSUF=".dll"
2101 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
2102 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2103 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
2104 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
2105 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
2106 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
2107 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
2108 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
2109 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
2110 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2111 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
2112 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
2113 enable dos_paths
2114 ;;
2115 gnu/kfreebsd)
2116 ;;
2117 gnu)
2118 ;;
2119
2120 *)
2121 die "Unknown OS '$target_os'."
2122 ;;
2123 esac
2124
2125 set_default $PATHS_LIST
2126
2127 add_extralibs $osextralibs
2128
2129 # Combine FFLDFLAGS and the LDFLAGS environment variable.
2130 LDFLAGS="$FFLDFLAGS $LDFLAGS"
2131
2132 # we need to build at least one lib type
2133 if ! enabled_any static shared; then
2134 cat <<EOF
2135 At least one library type must be built.
2136 Specify --enable-static to build the static libraries or --enable-shared to
2137 build the shared libraries as well. To only build the shared libraries specify
2138 --disable-static in addition to --enable-shared.
2139 EOF
2140 exit 1;
2141 fi
2142
2143 disabled static && LIBNAME=""
2144
2145 if enabled_any libfaad libfaadbin ; then
2146 if check_header faad.h; then
2147 check_cc <<EOF
2148 #include <faad.h>
2149 #ifndef FAAD2_VERSION
2150 ok faad1
2151 #endif
2152 int main(void) { return 0; }
2153 EOF
2154 test $? = 0 && enable libfaad2
2155 else
2156 die "FAAD test failed."
2157 fi
2158 fi
2159
2160
2161 die_license_disabled() {
2162 enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2163 }
2164
2165 die_license_disabled gpl libfaad2
2166 die_license_disabled gpl libx264
2167 die_license_disabled gpl libxvid
2168 die_license_disabled gpl postproc
2169 die_license_disabled gpl x11grab
2170
2171 die_license_disabled nonfree libfaac
2172
2173 die_license_disabled version3 libopencore_amrnb
2174 die_license_disabled version3 libopencore_amrwb
2175
2176 enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2177
2178 check_deps $ARCH_EXT_LIST
2179
2180 disabled optimizations || check_cflags -fomit-frame-pointer
2181
2182 enable_pic() {
2183 enable pic
2184 add_cppflags -DPIC
2185 add_cflags -fPIC
2186 add_asflags -fPIC
2187 }
2188
2189 enabled pic && enable_pic
2190
2191 check_cc <<EOF || die "Symbol mangling check failed."
2192 int ff_extern;
2193 EOF
2194 sym=$($nm -P -g $TMPO | grep ff_extern)
2195 extern_prefix=${sym%%ff_extern*}
2196
2197 check_cc <<EOF && enable inline_asm
2198 void foo(void) { __asm__ volatile ("" ::); }
2199 EOF
2200
2201 _restrict=
2202 for restrict_keyword in restrict __restrict__ __restrict; do
2203 check_cc <<EOF && _restrict=$restrict_keyword && break
2204 void foo(char * $restrict_keyword p);
2205 EOF
2206 done
2207
2208 check_cc <<EOF && enable attribute_packed
2209 struct { int x; } __attribute__((packed)) x;
2210 EOF
2211
2212 check_cc <<EOF || die "endian test failed"
2213 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2214 EOF
2215 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2216
2217 if enabled alpha; then
2218
2219 check_cflags -mieee
2220
2221 elif enabled arm; then
2222
2223 check_cflags -marm
2224
2225 check_ld <<EOF && enable vfp_args
2226 __asm__ (".eabi_attribute 28, 1");
2227 int main(void) { return 0; }
2228 EOF
2229
2230 # We have to check if pld is a nop and disable it.
2231 check_asm pld '"pld [r0]"'
2232
2233 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
2234 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
2235 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
2236 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
2237 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
2238 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
2239
2240 enabled_all armv6t2 shared !pic && enable_pic
2241
2242 elif enabled ia64; then
2243
2244 # HACK: currently fails to build if .bss is > 4MB and shared libs are built
2245 enabled shared && enable_weak hardcoded_tables
2246
2247 elif enabled mips; then
2248
2249 check_asm loongson '"dmult.g $1, $2, $3"'
2250 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
2251
2252 elif enabled ppc; then
2253
2254 check_asm dcbzl '"dcbzl 0, 1"'
2255 check_asm ppc4xx '"maclhw r10, r11, r12"'
2256 check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2257
2258 # AltiVec flags: The FSF version of GCC differs from the Apple version
2259 if enabled altivec; then
2260 check_cflags -maltivec -mabi=altivec &&
2261 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
2262 check_cflags -faltivec
2263
2264 # check if our compiler supports Motorola AltiVec C API
2265 check_cc <<EOF || disable altivec
2266 $inc_altivec_h
2267 int main(void) {
2268 vector signed int v1, v2, v3;
2269 v1 = vec_add(v2,v3);
2270 return 0;
2271 }
2272 EOF
2273
2274 # check if our compiler supports braces for vector declarations
2275 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
2276 $inc_altivec_h
2277 int main (void) { (vector int) {1}; return 0; }
2278 EOF
2279 fi
2280
2281 elif enabled sparc; then
2282
2283 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
2284 add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2285
2286 elif enabled x86; then
2287
2288 # check whether EBP is available on x86
2289 # As 'i' is stored on the stack, this program will crash
2290 # if the base pointer is used to access it because the
2291 # base pointer is cleared in the inline assembly code.
2292 check_exec_crash <<EOF && enable ebp_available
2293 volatile int i=0;
2294 __asm__ volatile (
2295 "xorl %%ebp, %%ebp"
2296 ::: "%ebp");
2297 return i;
2298 EOF
2299
2300 # check whether EBX is available on x86
2301 check_asm ebx_available '""::"b"(0)' &&
2302 check_asm ebx_available '"":::"%ebx"'
2303
2304 # check whether more than 10 operands are supported
2305 check_cc <<EOF && enable ten_operands
2306 int main(void) {
2307 int x=0;
2308 __asm__ volatile(
2309 ""
2310 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
2311 );
2312 return 0;
2313 }
2314 EOF
2315
2316 # check whether binutils is new enough to compile SSSE3/MMX2
2317 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2318 enabled mmx2 && check_asm mmx2 '"pmaxub %mm0, %mm1"'
2319
2320 check_asm bswap '"bswap %%eax" ::: "%eax"'
2321
2322 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
2323 enabled x86_64 && append YASMFLAGS "-m amd64"
2324 enabled pic && append YASMFLAGS "-DPIC"
2325 test -n "$extern_prefix" && append YASMFLAGS "-DPREFIX"
2326 case "$objformat" in
2327 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
2328 esac
2329 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
2330
2331 case "$cpu" in
2332 athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
2333 disable fast_clz
2334 ;;
2335 esac
2336
2337 fi
2338
2339 if check_func dlopen; then
2340 ldl=
2341 elif check_func dlopen -ldl; then
2342 ldl=-ldl
2343 fi
2344
2345 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
2346 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
2347
2348 check_func fork
2349 check_func getaddrinfo $network_extralibs
2350 check_func gethrtime
2351 check_func getrusage
2352 check_func inet_aton $network_extralibs
2353 check_func isatty
2354 check_func memalign
2355 check_func mkstemp
2356 check_func posix_memalign
2357 check_func_headers io.h setmode
2358 check_func_headers lzo/lzo1x.h lzo1x_999_compress
2359 check_func_headers windows.h GetProcessTimes
2360 check_func_headers windows.h VirtualAlloc
2361
2362 check_header conio.h
2363 check_header dlfcn.h
2364 check_header malloc.h
2365 check_header poll.h
2366 check_header sys/mman.h
2367 check_header sys/resource.h
2368 check_header sys/select.h
2369 check_header termios.h
2370 check_header vdpau/vdpau.h
2371 check_header vdpau/vdpau_x11.h
2372 check_header X11/extensions/XvMClib.h
2373
2374 if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
2375 enabled_any $need_memalign ; then
2376 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2377 fi
2378
2379 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
2380 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2381
2382 # check for some common methods of building with pthread support
2383 # do this before the optional library checks as some of them require pthreads
2384 if enabled pthreads; then
2385 if check_func pthread_create; then
2386 :
2387 elif check_func pthread_create -pthread; then
2388 add_cflags -pthread
2389 add_extralibs -pthread
2390 elif check_func pthread_create -pthreads; then
2391 add_cflags -pthreads
2392 add_extralibs -pthreads
2393 elif check_func pthread_create -lpthreadGC2; then
2394 add_extralibs -lpthreadGC2
2395 elif ! check_lib pthread.h pthread_create -lpthread; then
2396 die "ERROR: can't find pthreads library"
2397 fi
2398 fi
2399
2400 for thread in $THREADS_LIST; do
2401 if enabled $thread; then
2402 test -n "$thread_type" &&
2403 die "ERROR: Only one thread type must be selected." ||
2404 thread_type="$thread"
2405 fi
2406 done
2407
2408 check_lib math.h sin -lm
2409 check_lib va/va.h vaInitialize -lva
2410
2411 check_func exp2
2412 check_func exp2f
2413 check_func llrint
2414 check_func log2
2415 check_func log2f
2416 check_func lrint
2417 check_func lrintf
2418 check_func round
2419 check_func roundf
2420 check_func truncf
2421
2422 # these are off by default, so fail if requested and not available
2423 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2424 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
2425 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init $(pkg-config --libs dirac) &&
2426 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init $(pkg-config --libs dirac)
2427 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2428 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
2429 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
2430 enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
2431 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
2432 enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
2433 enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2434 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2435 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2436 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2437 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
2438 enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2439 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2440 enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 -lm &&
2441 { check_cpp_condition x264.h "X264_BUILD >= 79" ||
2442 die "ERROR: libx264 version must be >= 0.79."; }
2443 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
2444 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2445
2446 # libdc1394 check
2447 if enabled libdc1394; then
2448 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2449 enable libdc1394_2; } ||
2450 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2451 enable libdc1394_1; } ||
2452 die "ERROR: No version of libdc1394 found "
2453 fi
2454
2455 SDL_CONFIG="${cross_prefix}sdl-config"
2456 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2457 sdl_cflags=$("${SDL_CONFIG}" --cflags)
2458 sdl_libs=$("${SDL_CONFIG}" --libs)
2459 check_func_headers SDL.h SDL_Init $sdl_cflags $sdl_libs &&
2460 check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
2461 enable sdl &&
2462 check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2463 fi
2464
2465 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2466
2467 if enabled network; then
2468 check_type "sys/types.h sys/socket.h" socklen_t
2469 check_type netdb.h "struct addrinfo"
2470 check_type sys/socket.h "struct sockaddr_storage"
2471 # Prefer arpa/inet.h over winsock2
2472 if check_header arpa/inet.h ; then
2473 check_func closesocket
2474 elif check_header winsock2.h ; then
2475 check_func_headers winsock2.h closesocket -lws2 && \
2476 network_extralibs="-lws2" || \
2477 { check_func_headers winsock2.h closesocket -lws2_32 && \
2478 network_extralibs="-lws2_32"; }
2479 check_type ws2tcpip.h socklen_t
2480 check_type ws2tcpip.h "struct addrinfo"
2481 check_type ws2tcpip.h "struct sockaddr_storage"
2482 else
2483 disable network
2484 fi
2485 fi
2486
2487 enabled_all network ipv6 && check_ld <<EOF || disable ipv6
2488 #include <sys/types.h>
2489 #include <sys/socket.h>
2490 #include <netinet/in.h>
2491 #include <netdb.h>
2492 int main(void) {
2493 struct sockaddr_storage saddr;
2494 struct ipv6_mreq mreq6;
2495 getaddrinfo(0,0,0,0);
2496 getnameinfo(0,0,0,0,0,0,0);
2497 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2498 }
2499 EOF
2500
2501 check_header linux/videodev.h
2502 check_header linux/videodev2.h
2503 check_header sys/videoio.h
2504
2505 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2506
2507 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2508 { check_header dev/bktr/ioctl_meteor.h &&
2509 check_header dev/bktr/ioctl_bt848.h; } ||
2510 { check_header machine/ioctl_meteor.h &&
2511 check_header machine/ioctl_bt848.h; } ||
2512 { check_header dev/video/meteor/ioctl_meteor.h &&
2513 check_header dev/video/bktr/ioctl_bt848.h; } ||
2514 check_header dev/ic/bt8xx.h
2515
2516 check_header sys/soundcard.h
2517 check_header soundcard.h
2518
2519 enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2520
2521 enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2522
2523 enabled x11grab &&
2524 check_header X11/Xlib.h &&
2525 check_header X11/extensions/XShm.h &&
2526 check_header X11/extensions/Xfixes.h &&
2527 check_func XOpenDisplay -lX11 &&
2528 check_func XShmCreateImage -lX11 -lXext &&
2529 check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2530
2531 if ! disabled vdpau && enabled vdpau_vdpau_h; then
2532 check_cpp_condition \
2533 vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2534 { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
2535 disable vdpau; }
2536 fi
2537
2538 enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
2539
2540 # add some useful compiler flags if supported
2541 check_cflags -Wdeclaration-after-statement
2542 check_cflags -Wall
2543 check_cflags -Wno-switch
2544 check_cflags -Wdisabled-optimization
2545 check_cflags -Wpointer-arith
2546 check_cflags -Wredundant-decls
2547 check_cflags -Wno-pointer-sign
2548 check_cflags -Wcast-qual
2549 check_cflags -Wwrite-strings
2550 check_cflags -Wtype-limits
2551 check_cflags -Wundef
2552 enabled extra_warnings && check_cflags -Winline
2553
2554 # add some linker flags
2555 check_ldflags -Wl,--warn-common
2556 check_ldflags -Wl,--as-needed
2557 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'
2558 check_ldflags -Wl,-Bsymbolic
2559
2560 echo "X{};" > $TMPV
2561 test_ldflags -Wl,--version-script,$TMPV &&
2562 append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
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 echo "Sun medialib support ${mlib-no}"
2710 echo "AVISynth enabled ${avisynth-no}"
2711 echo "libdc1394 support ${libdc1394-no}"
2712 echo "libdirac enabled ${libdirac-no}"
2713 echo "libfaac enabled ${libfaac-no}"
2714 echo "libfaad enabled ${libfaad-no}"
2715 echo "libfaad dlopened ${libfaadbin-no}"
2716 echo "libgsm enabled ${libgsm-no}"
2717 echo "libmp3lame enabled ${libmp3lame-no}"
2718 echo "libnut enabled ${libnut-no}"
2719 echo "libopencore-amrnb support ${libopencore_amrnb-no}"
2720 echo "libopencore-amrwb support ${libopencore_amrwb-no}"
2721 echo "libopenjpeg enabled ${libopenjpeg-no}"
2722 echo "libschroedinger enabled ${libschroedinger-no}"
2723 echo "libspeex enabled ${libspeex-no}"
2724 echo "libtheora enabled ${libtheora-no}"
2725 echo "libvorbis enabled ${libvorbis-no}"
2726 echo "libx264 enabled ${libx264-no}"
2727 echo "libxvid enabled ${libxvid-no}"
2728 echo "zlib enabled ${zlib-no}"
2729 echo "bzlib enabled ${bzlib-no}"
2730 echo
2731
2732 for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2733 echo "Enabled ${type}s:"
2734 eval list=\$$(toupper $type)_LIST
2735 for part in $list; do
2736 enabled $part && echo ${part%_*}
2737 done | sort | pr -3 -t
2738 echo
2739 done
2740
2741 license="LGPL version 2.1 or later"
2742 if enabled nonfree; then
2743 license="nonfree and unredistributable"
2744 elif enabled gplv3; then
2745 license="GPL version 3 or later"
2746 elif enabled lgplv3; then
2747 license="LGPL version 3 or later"
2748 elif enabled gpl; then
2749 license="GPL version 2 or later"
2750 fi
2751
2752 echo "License: $license"
2753
2754 echo "Creating config.mak and config.h..."
2755
2756 enabled stripping || strip="echo skipping strip"
2757
2758 cat > config.mak <<EOF
2759 # Automatically generated by configure - do not modify!
2760 ifndef FFMPEG_CONFIG_MAK
2761 FFMPEG_CONFIG_MAK=1
2762 FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
2763 prefix=$prefix
2764 LIBDIR=\$(DESTDIR)$libdir
2765 SHLIBDIR=\$(DESTDIR)$shlibdir
2766 INCDIR=\$(DESTDIR)$incdir
2767 BINDIR=\$(DESTDIR)$bindir
2768 DATADIR=\$(DESTDIR)$datadir
2769 MANDIR=\$(DESTDIR)$mandir
2770 SRC_PATH="$source_path"
2771 SRC_PATH_BARE=$source_path
2772 BUILD_ROOT="$PWD"
2773 ARCH=$arch
2774 CC=$cc
2775 AS=$as
2776 LD=$ld
2777 DEPCC=$dep_cc
2778 YASM=$yasmexe
2779 AR=$ar
2780 RANLIB=$ranlib
2781 LN_S=$ln_s
2782 STRIP=$strip
2783 CPPFLAGS=$CPPFLAGS
2784 CFLAGS=$CFLAGS
2785 ASFLAGS=$ASFLAGS
2786 CC_O=$CC_O
2787 LDFLAGS=$LDFLAGS
2788 FFSERVERLDFLAGS=$FFSERVERLDFLAGS
2789 SHFLAGS=$SHFLAGS
2790 YASMFLAGS=$YASMFLAGS
2791 BUILDSUF=$build_suffix
2792 FULLNAME=$FULLNAME
2793 LIBPREF=$LIBPREF
2794 LIBSUF=$LIBSUF
2795 LIBNAME=$LIBNAME
2796 SLIBPREF=$SLIBPREF
2797 SLIBSUF=$SLIBSUF
2798 EXESUF=$EXESUF
2799 EXTRA_VERSION=$extra_version
2800 DEPFLAGS=$DEPFLAGS
2801 CCDEP=$CCDEP
2802 ASDEP=$ASDEP
2803 CC_DEPFLAGS=$CC_DEPFLAGS
2804 AS_DEPFLAGS=$AS_DEPFLAGS
2805 HOSTCC=$host_cc
2806 HOSTCFLAGS=$host_cflags
2807 HOSTEXESUF=$HOSTEXESUF
2808 HOSTLDFLAGS=$host_ldflags
2809 HOSTLIBS=$host_libs
2810 TARGET_EXEC=$target_exec
2811 TARGET_PATH=$target_path
2812 SDL_LIBS=$sdl_libs
2813 SDL_CFLAGS=$sdl_cflags
2814 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
2815 EXTRALIBS=$extralibs
2816 EOF
2817
2818 get_version(){
2819 name=$1
2820 file=$source_path/$2
2821 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2822 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2823 lcname=$(tolower $name)
2824 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2825 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2826 }
2827
2828 get_version LIBSWSCALE libswscale/swscale.h
2829 get_version LIBPOSTPROC libpostproc/postprocess.h
2830 get_version LIBAVCODEC libavcodec/avcodec.h
2831 get_version LIBAVDEVICE libavdevice/avdevice.h
2832 get_version LIBAVFORMAT libavformat/avformat.h
2833 get_version LIBAVUTIL libavutil/avutil.h
2834 get_version LIBAVFILTER libavfilter/avfilter.h
2835
2836 enabled shared && cat >> config.mak <<EOF
2837 LIBTARGET=${LIBTARGET}
2838 SLIBNAME=${SLIBNAME}
2839 SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
2840 SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
2841 SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
2842 SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
2843 SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
2844 SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
2845 EOF
2846
2847 enabled asmalign_pot || align_shift="1 <<"
2848
2849 cat > $TMPH <<EOF
2850 /* Automatically generated by configure - do not modify! */
2851 #ifndef FFMPEG_CONFIG_H
2852 #define FFMPEG_CONFIG_H
2853 #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
2854 #define FFMPEG_LICENSE "$(c_escape $license)"
2855 #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
2856 #define CC_TYPE "$cc_type"
2857 #define CC_VERSION $cc_version
2858 #define restrict $_restrict
2859 #define ASMALIGN(ZEROBITS) ".align $align_shift " #ZEROBITS "\\n\\t"
2860 #define EXTERN_PREFIX "${extern_prefix}"
2861 #define EXTERN_ASM ${extern_prefix}
2862 EOF
2863
2864 if enabled small || disabled optimizations; then
2865 echo "#define av_always_inline" >> $TMPH
2866 fi
2867
2868 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2869 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2870 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2871 $CONFIG_EXTRA \
2872 $DECODER_LIST \
2873 $ENCODER_LIST \
2874 $HWACCEL_LIST \
2875 $PARSER_LIST \
2876 $BSF_LIST \
2877 $DEMUXER_LIST \
2878 $MUXER_LIST \
2879 $FILTER_LIST \
2880 $PROTOCOL_LIST \
2881 $INDEV_LIST \
2882 $OUTDEV_LIST \
2883
2884 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2885 echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
2886
2887 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2888 cmp -s $TMPH config.h &&
2889 echo "config.h is unchanged" ||
2890 mv -f $TMPH config.h
2891
2892 # build tree in object directory if source path is different from current one
2893 if enabled source_path_used; then
2894 DIRS="
2895 doc
2896 libavcodec
2897 libavcodec/$arch
2898 libavdevice
2899 libavfilter
2900 libavformat
2901 libavutil
2902 libavutil/$arch
2903 libpostproc
2904 libswscale
2905 libswscale/$arch
2906 tests
2907 tools
2908 "
2909 FILES="
2910 Makefile
2911 common.mak
2912 subdir.mak
2913 doc/texi2pod.pl
2914 libavcodec/Makefile
2915 libavdevice/Makefile
2916 libavfilter/Makefile
2917 libavformat/Makefile
2918 libavutil/Makefile
2919 libpostproc/Makefile
2920 libswscale/Makefile
2921 "
2922 for dir in $DIRS ; do
2923 mkdir -p $dir
2924 done
2925 for f in $FILES ; do
2926 $ln_s "$source_path/$f" $f
2927 done
2928 fi
2929
2930
2931 # build pkg-config files
2932
2933 pkgconfig_generate(){
2934 name=$1
2935 shortname=${name#lib}${build_suffix}
2936 comment=$2
2937 version=$3
2938 libs=$4
2939 requires=$5
2940 cat <<EOF > $name/$name.pc
2941 prefix=$prefix
2942 exec_prefix=\${prefix}
2943 libdir=$libdir
2944 includedir=$incdir
2945
2946 Name: $name
2947 Description: $comment
2948 Version: $version
2949 Requires: $(enabled shared || echo $requires)
2950 Requires.private: $(enabled shared && echo $requires)
2951 Conflicts:
2952 Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
2953 Libs.private: $(enabled shared && echo $libs)
2954 Cflags: -I\${includedir}
2955 EOF
2956 cat <<EOF > $name/$name-uninstalled.pc
2957 prefix=
2958 exec_prefix=
2959 libdir=\${pcfiledir}
2960 includedir=${source_path}
2961
2962 Name: $name
2963 Description: $comment
2964 Version: $version
2965 Requires: $requires
2966 Conflicts:
2967 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2968 Cflags: -I\${includedir}
2969 EOF
2970 }
2971
2972 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2973 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2974 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2975 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2976 enabled avfilter &&
2977 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2978 enabled postproc &&
2979 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2980 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"