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