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