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