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