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