Do not add -D_FILE_OFFSET_BITS=64 and -D_LARGEFILE_SOURCE unconditionally to
[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 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1422 #include <stdlib.h>
1423 EOF
1424 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1425 #include <stdlib.h>
1426 EOF
1427
1428 case "$arch" in
1429 alpha)
1430 arch="alpha"
1431 enable fast_64bit
1432 check_cflags -mieee
1433 ;;
1434 arm|armv[4567]*l)
1435 arch="arm"
1436 ;;
1437 avr32)
1438 ;;
1439 bfin)
1440 arch="bfin"
1441 ;;
1442 ia64)
1443 arch="ia64"
1444 enable fast_64bit
1445 ;;
1446 m68k)
1447 arch="m68k"
1448 ;;
1449 mips|mipsel|IP*)
1450 arch="mips"
1451 ;;
1452 mips64)
1453 arch="mips"
1454 enable fast_64bit
1455 ;;
1456 parisc|hppa)
1457 arch="parisc"
1458 ;;
1459 parisc64|hppa64)
1460 arch="parisc"
1461 enable fast_64bit
1462 ;;
1463 "Power Macintosh"|ppc|powerpc)
1464 arch="ppc"
1465 enable fast_unaligned
1466 ;;
1467 ppc64)
1468 arch="ppc"
1469 enable fast_64bit
1470 enable fast_unaligned
1471 ;;
1472 s390|s390x)
1473 arch="s390"
1474 ;;
1475 sh4|sh)
1476 arch="sh4"
1477 ;;
1478 sparc)
1479 arch="sparc"
1480 ;;
1481 sun4u|sparc64)
1482 arch="sparc"
1483 subarch="sparc64"
1484 enable fast_64bit
1485 ;;
1486 i386|i486|i586|i686|i86pc|BePC)
1487 arch="x86"
1488 subarch="x86_32"
1489 enable fast_unaligned
1490 ;;
1491 x86_64|amd64)
1492 arch="x86"
1493 subarch="x86_32"
1494 enable cmov
1495 enable fast_cmov
1496 enable fast_unaligned
1497 check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1498 int test[sizeof(char*) - 7];
1499 EOF
1500 ;;
1501 *)
1502 arch="unknown"
1503 ;;
1504 esac
1505
1506 enable $arch $subarch
1507
1508 # OS specific
1509 case $target_os in
1510 beos|haiku|zeta)
1511 prefix_default="$HOME/config"
1512 # helps building libavcodec
1513 add_cflags -DPIC -fomit-frame-pointer
1514 # 3 gcc releases known for BeOS, each with ugly bugs
1515 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1516 case "$gcc_version" in
1517 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1518 disable mmx
1519 ;;
1520 *20010315*) echo "BeBits gcc"
1521 add_cflags -fno-expensive-optimizations
1522 ;;
1523 esac
1524 SHFLAGS=-nostart
1525 # enable BeOS things
1526 enable audio_beos
1527 # no need for libm, but the inet stuff
1528 # Check for BONE
1529 # XXX: actually should check for NOT net_server
1530 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1531 network_extralibs="-lbind -lsocket"
1532 else
1533 enable beos_netserver
1534 network_extralibs="-lnet"
1535 fi ;;
1536 sunos)
1537 FFSERVERLDFLAGS=""
1538 SHFLAGS='-shared -Wl,-h,$$(@F)'
1539 network_extralibs="-lsocket -lnsl"
1540 add_cflags -D__EXTENSIONS__
1541 ;;
1542 netbsd)
1543 oss_demuxer_extralibs="-lossaudio"
1544 oss_muxer_extralibs="-lossaudio"
1545 ;;
1546 openbsd)
1547 disable need_memalign
1548 LIBOBJFLAGS='$(PIC)'
1549 SHFLAGS='-shared'
1550 oss_demuxer_extralibs="-lossaudio"
1551 oss_muxer_extralibs="-lossaudio"
1552 ;;
1553 freebsd)
1554 disable need_memalign
1555 ;;
1556 bsd/os)
1557 osextralibs="-lpoll -lgnugetopt"
1558 strip="strip -d"
1559 ;;
1560 darwin)
1561 disable need_memalign
1562 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1563 VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1564 strip="strip -x"
1565 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1566 SLIBSUF=".dylib"
1567 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1568 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1569 FFSERVERLDFLAGS=-Wl,-bind_at_load
1570 objformat="macho"
1571 enabled x86_64 && objformat="macho64"
1572 ;;
1573 mingw32*)
1574 target_os=mingw32
1575 LIBTARGET=i386
1576 if enabled x86_64; then
1577 disable need_memalign
1578 LIBTARGET=x64
1579 fi
1580 shlibdir_default="$bindir_default"
1581 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1582 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1583 if enabled swscale; then
1584 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1585 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1586 fi
1587 disable ffserver
1588 SLIBPREF=""
1589 SLIBSUF=".dll"
1590 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1591 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1592 SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1593 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1594 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1595 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1596 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1597 objformat="win32"
1598 enable dos_paths
1599 if ! enabled x86_64; then
1600 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1601 die "ERROR: MinGW runtime version must be >= 3.15."
1602 enabled_any avisynth vfwcap_demuxer &&
1603 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1604 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1605 fi
1606 ;;
1607 cygwin*)
1608 target_os=cygwin
1609 shlibdir_default="$bindir_default"
1610 VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
1611 VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1612 if enabled swscale; then
1613 VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
1614 VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
1615 fi
1616 SLIBPREF="cyg"
1617 SLIBSUF=".dll"
1618 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1619 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1620 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1621 objformat="win32"
1622 enable dos_paths
1623 ;;
1624 *-dos|freedos|opendos)
1625 disable ffplay ffserver vhook
1626 disable $INDEV_LIST $OUTDEV_LIST
1627 network_extralibs="-lsocket"
1628 objformat="coff"
1629 enable dos_paths
1630 ;;
1631 linux)
1632 enable dv1394
1633 ;;
1634 irix*)
1635 target_os=irix
1636 ranlib="echo ignoring ranlib"
1637 ;;
1638 os/2*)
1639 strip="lxlite"
1640 ln_s="cp -f"
1641 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1642 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1643 FFSERVERLDFLAGS=""
1644 LIBSUF="_s.a"
1645 SLIBPREF=""
1646 SLIBSUF=".dll"
1647 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1648 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1649 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1650 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1651 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1652 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1653 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1654 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1655 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1656 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1657 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1658 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1659 disable vhook
1660 enable dos_paths
1661 ;;
1662 interix)
1663 disable vhook
1664 ;;
1665
1666 *)
1667 die "Unknown OS '$target_os'."
1668 ;;
1669 esac
1670
1671 set_default $PATHS_LIST
1672
1673 add_extralibs $osextralibs
1674
1675 # Combine FFLDFLAGS and the LDFLAGS environment variable.
1676 LDFLAGS="$FFLDFLAGS $LDFLAGS"
1677
1678 # we need to build at least one lib type
1679 if ! enabled_any static shared; then
1680 cat <<EOF
1681 At least one library type must be built.
1682 Specify --enable-static to build the static libraries or --enable-shared to
1683 build the shared libraries as well. To only build the shared libraries specify
1684 --disable-static in addition to --enable-shared.
1685 EOF
1686 exit 1;
1687 fi
1688
1689 disabled static && LIBNAME=""
1690
1691 if enabled_any libfaad libfaadbin ; then
1692 if check_header faad.h; then
1693 check_cc <<EOF
1694 #include <faad.h>
1695 #ifndef FAAD2_VERSION
1696 ok faad1
1697 #endif
1698 int main(void) { return 0; }
1699 EOF
1700 test $? = 0 && enable libfaad2
1701 else
1702 die "FAAD test failed."
1703 fi
1704 fi
1705
1706
1707 if ! enabled gpl; then
1708 die_gpl_disabled(){
1709 name=$1
1710 shift
1711 enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
1712 }
1713 die_gpl_disabled "The Postprocessing code" postproc
1714 die_gpl_disabled "libx264" libx264
1715 die_gpl_disabled "libxvidcore" libxvid
1716 die_gpl_disabled "FAAD2" libfaad2
1717 die_gpl_disabled "The X11 grabber" x11grab
1718 die_gpl_disabled "The software scaler" swscale
1719 fi
1720
1721 if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
1722 die "libamr is nonfree and --enable-nonfree is not specified."
1723 fi
1724
1725 check_deps $ARCH_EXT_LIST
1726
1727 test -z "$need_memalign" && need_memalign="$mmx"
1728
1729 #Darwin CC versions
1730 if test $target_os = darwin; then
1731 if enabled xlc; then
1732 add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1733 else
1734 add_cflags -pipe
1735 check_cflags -force_cpusubtype_ALL
1736 check_cflags -Wno-sign-compare
1737 enabled shared || check_cflags -mdynamic-no-pic
1738 fi
1739 fi
1740
1741 disabled optimizations || check_cflags -fomit-frame-pointer
1742
1743 # Add processor-specific flags
1744 if test $cpu != "generic"; then
1745 warn_altivec(){
1746 $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1747 }
1748 case $cpu in
1749 601|ppc601|PowerPC601)
1750 add_cflags -mcpu=601
1751 warn_altivec enabled PPC601
1752 ;;
1753 603*|ppc603*|PowerPC603*)
1754 add_cflags -mcpu=603
1755 warn_altivec enabled PPC603
1756 ;;
1757 604*|ppc604*|PowerPC604*)
1758 add_cflags -mcpu=604
1759 warn_altivec enabled PPC604
1760 ;;
1761 G3|g3|75*|ppc75*|PowerPC75*)
1762 add_cflags -mcpu=750 -mpowerpc-gfxopt
1763 warn_altivec enabled PPC75x
1764 ;;
1765 G4|g4|745*|ppc745*|PowerPC745*)
1766 add_cflags -mcpu=7450 -mpowerpc-gfxopt
1767 warn_altivec disabled PPC745x
1768 ;;
1769 74*|ppc74*|PowerPC74*)
1770 add_cflags -mcpu=7400 -mpowerpc-gfxopt
1771 warn_altivec disabled PPC74xx
1772 ;;
1773 G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1774 add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
1775 warn_altivec disabled PPC970
1776 enable ppc64
1777 ;;
1778 Cell|CELL|cell)
1779 add_cflags -mcpu=cell
1780 warn_altivec disabled Cell
1781 enable ppc64
1782 ;;
1783 # targets that do NOT support conditional mov (cmov)
1784 i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1785 add_cflags -march=$cpu
1786 disable cmov
1787 ;;
1788 # targets that do support conditional mov (cmov)
1789 i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1790 add_cflags -march=$cpu
1791 enable cmov
1792 enable fast_cmov
1793 ;;
1794 # targets that do support conditional mov but on which it's slow
1795 pentium4|pentium4m|prescott|nocona)
1796 add_cflags -march=$cpu
1797 enable cmov
1798 disable fast_cmov
1799 ;;
1800 sparc64)
1801 add_cflags -mcpu=v9
1802 ;;
1803 arm11*|cortex*)
1804 add_cflags -mcpu=$cpu
1805 enable fast_unaligned
1806 ;;
1807 armv*)
1808 add_cflags -march=$cpu
1809 ;;
1810 arm*)
1811 add_cflags -mcpu=$cpu
1812 ;;
1813 ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1814 enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
1815 ;;
1816 *)
1817 echo "WARNING: Unknown CPU \"$cpu\", ignored."
1818 ;;
1819 esac
1820 fi
1821
1822 check_cc <<EOF || die "Symbol mangling check failed."
1823 int ff_extern;
1824 EOF
1825 sym=$($nm -P -g $TMPO | grep ff_extern)
1826 extern_prefix=${sym%%ff_extern*}
1827
1828 check_asm inline_asm '""'
1829
1830 if enabled x86; then
1831 # check whether EBP is available on x86
1832 # As 'i' is stored on the stack, this program will crash
1833 # if the base pointer is used to access it because the
1834 # base pointer is cleared in the inline assembly code.
1835 check_exec_crash <<EOF && enable ebp_available
1836 volatile int i=0;
1837 __asm__ volatile (
1838 "xorl %%ebp, %%ebp"
1839 ::: "%ebp");
1840 return i;
1841 EOF
1842
1843 # check wether EBX is available on x86
1844 check_asm ebx_available '"":::"%ebx"'
1845
1846 # check whether more than 10 operands are supported
1847 check_cc <<EOF && enable ten_operands
1848 int main(void) {
1849 int x=0;
1850 __asm__ volatile(
1851 ""
1852 :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
1853 );
1854 return 0;
1855 }
1856 EOF
1857
1858 # check whether binutils is new enough to compile SSSE3/MMX2
1859 enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1860 enabled mmx2 && check_asm mmx2 '"movss %xmm0, %xmm0"'
1861
1862 check_asm bswap '"bswap %%eax" ::: "%eax"'
1863
1864 YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
1865 enabled x86_64 && append YASMFLAGS "-m amd64"
1866 enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
1867 case "$objformat" in
1868 elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1869 macho64) append YASMFLAGS "-DPIC -DPREFIX" ;;
1870 *) append YASMFLAGS "-DPREFIX" ;;
1871 esac
1872 disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1873 fi
1874
1875 # check for assembler specific support
1876
1877 enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1878 enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1879
1880 # check for SIMD availability
1881
1882 # AltiVec flags: The FSF version of GCC differs from the Apple version
1883 if enabled altivec; then
1884 check_cflags -maltivec -mabi=altivec &&
1885 { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1886 check_cflags -faltivec
1887
1888 # check if our compiler supports Motorola AltiVec C API
1889 check_cc <<EOF || disable altivec
1890 $inc_altivec_h
1891 int main(void) {
1892 vector signed int v1, v2, v3;
1893 v1 = vec_add(v2,v3);
1894 return 0;
1895 }
1896 EOF
1897
1898 # check if our compiler supports braces for vector declarations
1899 check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1900 $inc_altivec_h
1901 int main (void) { (vector int) {1}; return 0; }
1902 EOF
1903 fi
1904
1905 # We have to check if pld is a nop and disable it.
1906 enabled arm && check_asm pld '"pld [r0]"'
1907 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
1908 enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
1909 enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
1910 enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
1911 enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
1912 enabled mmi && check_asm mmi '"lq $2, 0($2)"'
1913 enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
1914 enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1915
1916 enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
1917
1918 # ---
1919 # big/little-endian test
1920 check_cc <<EOF || die "endian test failed"
1921 unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1922 EOF
1923 od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
1924
1925 # ---
1926 # check availability of some header files
1927
1928 if check_func dlopen; then
1929 ldl=
1930 elif check_func dlopen -ldl; then
1931 ldl=-ldl
1932 fi
1933
1934 # Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
1935 check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }
1936
1937 check_func fork
1938 check_func gethrtime
1939 check_func getrusage
1940 check_func inet_aton $network_extralibs
1941 check_func memalign
1942 check_func mkstemp
1943 check_func posix_memalign
1944 check_func_headers io.h setmode
1945 check_func_headers windows.h GetProcessTimes
1946
1947 check_header conio.h
1948 check_header dlfcn.h
1949 check_header malloc.h
1950 check_header poll.h
1951 check_header sys/mman.h
1952 check_header sys/resource.h
1953 check_header sys/select.h
1954 check_header termios.h
1955 check_header vdpau/vdpau.h
1956 check_header vdpau/vdpau_x11.h
1957 check_header X11/extensions/XvMClib.h
1958
1959 if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
1960 die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
1961 fi
1962
1963 disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
1964 disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1965
1966 # check for some common methods of building with pthread support
1967 # do this before the optional library checks as some of them require pthreads
1968 if enabled pthreads; then
1969 if check_func pthread_create; then
1970 :
1971 elif check_func pthread_create -pthread; then
1972 add_cflags -pthread
1973 add_extralibs -pthread
1974 elif check_func pthread_create -pthreads; then
1975 add_cflags -pthreads
1976 add_extralibs -pthreads
1977 elif check_func pthread_create -lpthreadGC2; then
1978 add_extralibs -lpthreadGC2
1979 elif ! check_lib pthread.h pthread_create -lpthread; then
1980 die "ERROR: can't find pthreads library"
1981 fi
1982 fi
1983
1984 for thread in $THREADS_LIST; do
1985 if enabled $thread; then
1986 test -n "$thread_type" &&
1987 die "ERROR: Only one thread type must be selected." ||
1988 thread_type="$thread"
1989 fi
1990 done
1991
1992 check_lib math.h sin -lm
1993
1994 # test for C99 functions in math.h
1995 for func in llrint lrint lrintf round roundf truncf; do
1996 check_exec <<EOF && enable $func || disable $func
1997 #include <math.h>
1998 int main(void) { return ($func(3.999f) > 0)?0:1; }
1999 EOF
2000 done
2001
2002 # these are off by default, so fail if requested and not available
2003 enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2004 enabled libamr_nb && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
2005 enabled libamr_wb && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
2006 enabled libdirac && add_cflags $(pkg-config --cflags dirac) &&
2007 require libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
2008 require libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2009 enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2010 enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
2011 enabled libgsm && require libgsm gsm.h gsm_create -lgsm
2012 enabled libmp3lame && require libmp3lame lame/lame.h lame_init -lmp3lame -lm
2013 enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
2014 enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2015 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
2016 require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
2017 enabled libspeex && require libspeex speex/speex.h speex_decoder_init -lspeex
2018 enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
2019 enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2020 enabled libx264 && require libx264 x264.h x264_encoder_open -lx264 -lm &&
2021 { check_cpp_condition x264.h "X264_BUILD >= 65" ||
2022 die "ERROR: libx264 version must be >= 0.65."; }
2023 enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
2024 enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2025
2026 # libdc1394 check
2027 if enabled libdc1394; then
2028 { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
2029 enable libdc1394_2; } ||
2030 { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
2031 enable libdc1394_1; } ||
2032 die "ERROR: No version of libdc1394 found "
2033 fi
2034
2035
2036 _restrict=
2037 for restrict_keyword in restrict __restrict__ __restrict; do
2038 check_cc <<EOF && _restrict=$restrict_keyword && break
2039 void foo(char * $restrict_keyword p);
2040 EOF
2041 done
2042
2043 test "$vhook" = "default" && vhook="$dlopen"
2044
2045 if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
2046 disable vhook
2047 echo
2048 echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
2049 echo "Patches welcome."
2050 echo
2051 fi
2052
2053 if enabled vhook; then
2054 check_ldflags -rdynamic
2055 check_ldflags -export-dynamic
2056 fi
2057
2058 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
2059 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
2060
2061 ##########################################
2062 # SDL check
2063
2064 disable sdl_too_old
2065 disable sdl
2066 SDL_CONFIG="${cross_prefix}sdl-config"
2067 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2068 sdl_cflags=`"${SDL_CONFIG}" --cflags`
2069 temp_cflags $sdl_cflags
2070 temp_extralibs `"${SDL_CONFIG}" --libs`
2071 if check_lib2 SDL.h SDL_Init; then
2072 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
2073 if test "$_sdlversion" -lt 121 ; then
2074 enable sdl_too_old
2075 else
2076 enable sdl
2077 check_cc $sdl_cflags <<EOF && enable sdl_video_size
2078 #include <SDL.h>
2079 int main(int argc, char **argv){
2080 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2081 int w = vi->current_w;
2082 return 0;
2083 }
2084 EOF
2085 fi
2086 fi
2087 restore_flags
2088 fi
2089
2090 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2091
2092 ##########################################
2093 # Network check
2094
2095 if enabled network; then
2096 check_type "sys/types.h sys/socket.h" socklen_t
2097 # Prefer arpa/inet.h over winsock2
2098 if check_header arpa/inet.h ; then
2099 check_func closesocket
2100 elif check_header winsock2.h ; then
2101 network_extralibs="-lws2_32"
2102 check_type ws2tcpip.h socklen_t
2103 check_func_headers winsock2.h closesocket
2104 fi
2105 fi
2106
2107 ##########################################
2108 # IPv6 check
2109
2110 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2111 #include <sys/types.h>
2112 #include <sys/socket.h>
2113 #include <netinet/in.h>
2114 #include <netdb.h>
2115 int main(void) {
2116 struct sockaddr_storage saddr;
2117 struct ipv6_mreq mreq6;
2118 getaddrinfo(0,0,0,0);
2119 getnameinfo(0,0,0,0,0,0,0);
2120 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2121 }
2122 EOF
2123
2124 check_header linux/videodev.h
2125 check_header linux/videodev2.h
2126 check_header sys/videoio.h
2127
2128 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2129
2130 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2131 { check_header dev/bktr/ioctl_meteor.h &&
2132 check_header dev/bktr/ioctl_bt848.h; } ||
2133 { check_header machine/ioctl_meteor.h &&
2134 check_header machine/ioctl_bt848.h; } ||
2135 { check_header dev/video/meteor/ioctl_meteor.h &&
2136 check_header dev/video/bktr/ioctl_bt848.h; } ||
2137 check_header dev/ic/bt8xx.h
2138
2139 check_header sys/soundcard.h
2140 check_header soundcard.h
2141
2142 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2143
2144 # deal with the X11 frame grabber
2145 enabled x11grab &&
2146 check_header X11/Xlib.h &&
2147 check_header X11/extensions/XShm.h &&
2148 check_func XOpenDisplay -lX11 &&
2149 check_func XShmCreateImage -lX11 -lXext
2150
2151 enabled debug && add_cflags -g"$debuglevel"
2152
2153 # add some useful compiler flags if supported
2154 check_cflags -Wdeclaration-after-statement
2155 check_cflags -Wall
2156 check_cflags -Wno-switch
2157 check_cflags -Wdisabled-optimization
2158 check_cflags -Wpointer-arith
2159 check_cflags -Wredundant-decls
2160 check_cflags -Wno-pointer-sign
2161 check_cflags -Wcast-qual
2162 check_cflags -Wwrite-strings
2163 check_cflags -Wtype-limits
2164 check_cflags -Wundef
2165 enabled extra_warnings && check_cflags -Winline
2166
2167 # add some linker flags
2168 check_ldflags -Wl,--warn-common
2169 check_ldflags -Wl,--as-needed
2170 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'
2171 check_ldflags -Wl,-Bsymbolic
2172
2173 if enabled small; then
2174 check_cflags -Os # not all compilers support -Os
2175 optimizations="small"
2176 elif enabled optimizations; then
2177 if enabled xlc; then
2178 add_cflags -O5
2179 add_ldflags -O5
2180 elif enabled ccc; then
2181 add_cflags -fast
2182 else
2183 add_cflags -O3
2184 fi
2185 fi
2186 check_cflags -fno-math-errno
2187 check_cflags -fno-signed-zeros
2188
2189 # add some flags for Intel C Compiler
2190 if enabled icc; then
2191 # Just warnings, no remarks
2192 check_cflags -w1
2193 # -wd: Disable following warnings
2194 # 144, 167, 556: -Wno-pointer-sign
2195 # 10006: ignoring unknown option -fno-signed-zeros
2196 # 10156: ignoring option '-W'; no argument required
2197 check_cflags -wd144,167,556,10006,10156
2198 # 11030: Warning unknown option --as-needed
2199 # 10156: ignoring option '-export'; no argument required
2200 check_ldflags -wd10156,11030
2201 # Allow to compile with optimizations
2202 check_ldflags -march=$cpu
2203 elif enabled ccc; then
2204 # disable some annoying warnings
2205 add_cflags -msg_disable cvtu32to64
2206 add_cflags -msg_disable embedcomment
2207 add_cflags -msg_disable needconstext
2208 add_cflags -msg_disable nomainieee
2209 add_cflags -msg_disable ptrmismatch1
2210 add_cflags -msg_disable unreachcode
2211 fi
2212
2213 # PIC flags for shared library objects where they are needed
2214 if enabled shared; then
2215 # LIBOBJFLAGS may have already been set in the OS configuration
2216 if test -z "$LIBOBJFLAGS" ; then
2217 case "${subarch-$arch}" in
2218 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2219 esac
2220 fi
2221 fi
2222
2223 if enabled gprof; then
2224 add_cflags -p
2225 add_ldflags -p
2226 fi
2227
2228 VHOOKCFLAGS="-fPIC"
2229
2230 # Find out if the .align argument is a power of two or not.
2231 check_asm asmalign_pot '".align 3"'
2232
2233 enabled_any $DECODER_LIST && enable decoders
2234 enabled_any $ENCODER_LIST && enable encoders
2235 enabled_any $BSF_LIST && enable bsfs
2236 enabled_any $DEMUXER_LIST && enable demuxers
2237 enabled_any $MUXER_LIST && enable muxers
2238 enabled_any $FILTER_LIST && enable filters
2239 enabled_any $INDEV_LIST && enable demuxers
2240 enabled_any $OUTDEV_LIST && enable muxers
2241 enabled_any $PROTOCOL_LIST && enable protocols
2242
2243 enabled_any $THREADS_LIST && enable threads
2244
2245 check_deps $CONFIG_LIST \
2246 $CONFIG_EXTRA \
2247 $HAVE_LIST \
2248 $DECODER_LIST \
2249 $ENCODER_LIST \
2250 $PARSER_LIST \
2251 $BSF_LIST \
2252 $DEMUXER_LIST \
2253 $MUXER_LIST \
2254 $FILTER_LIST \
2255 $INDEV_LIST \
2256 $OUTDEV_LIST \
2257 $PROTOCOL_LIST \
2258
2259 echo "install prefix $prefix"
2260 echo "source path $source_path"
2261 echo "C compiler $cc"
2262 echo ".align is power-of-two $asmalign_pot"
2263 echo "ARCH $arch ($cpu)"
2264 if test "$build_suffix" != ""; then
2265 echo "build suffix $build_suffix"
2266 fi
2267 if test "$extra_version" != ""; then
2268 echo "version string suffix $extra_version"
2269 fi
2270 echo "big-endian ${bigendian-no}"
2271 if enabled x86; then
2272 echo "yasm ${yasm-no}"
2273 echo "MMX enabled ${mmx-no}"
2274 echo "MMX2 enabled ${mmx2-no}"
2275 echo "3DNow! enabled ${amd3dnow-no}"
2276 echo "3DNow! extended enabled ${amd3dnowext-no}"
2277 echo "SSE enabled ${sse-no}"
2278 echo "SSSE3 enabled ${ssse3-no}"
2279 echo "CMOV enabled ${cmov-no}"
2280 echo "CMOV is fast ${fast_cmov-no}"
2281 echo "EBX available ${ebx_available-no}"
2282 echo "EBP available ${ebp_available-no}"
2283 echo "10 operands supported ${ten_operands-no}"
2284 fi
2285 if enabled arm; then
2286 echo "ARMv5TE enabled ${armv5te-no}"
2287 echo "ARMv6 enabled ${armv6-no}"
2288 echo "ARMv6T2 enabled ${armv6t2-no}"
2289 echo "ARM VFP enabled ${armvfp-no}"
2290 echo "IWMMXT enabled ${iwmmxt-no}"
2291 echo "NEON enabled ${neon-no}"
2292 fi
2293 if enabled mips; then
2294 echo "MMI enabled ${mmi-no}"
2295 fi
2296 if enabled ppc; then
2297 echo "AltiVec enabled ${altivec-no}"
2298 echo "PPC 4xx optimizations ${ppc4xx-no}"
2299 echo "dcbzl available ${dcbzl-no}"
2300 echo "performance report ${powerpc_perf-no}"
2301 fi
2302 if enabled sparc; then
2303 echo "VIS enabled ${vis-no}"
2304 fi
2305 echo "gprof enabled ${gprof-no}"
2306 echo "debug symbols ${debug-no}"
2307 echo "strip symbols ${stripping-no}"
2308 echo "optimizations ${optimizations-no}"
2309 echo "static ${static-no}"
2310 echo "shared ${shared-no}"
2311 echo "postprocessing support ${postproc-no}"
2312 echo "software scaler enabled ${swscale-no}"
2313 echo "new filter support ${avfilter-no}"
2314 echo "filters using lavformat ${avfilter_lavf-no}"
2315 echo "video hooking ${vhook-no}"
2316 if enabled vhook; then
2317 echo "Imlib2 support ${imlib2-no}"
2318 echo "FreeType support ${freetype2-no}"
2319 fi
2320 echo "network support ${network-no}"
2321 if enabled network; then
2322 echo "IPv6 support ${ipv6-no}"
2323 fi
2324 echo "threading support ${thread_type-no}"
2325 echo "SDL support ${sdl-no}"
2326 if enabled sdl_too_old; then
2327 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2328 fi
2329 echo "Sun medialib support ${mlib-no}"
2330 echo "AVISynth enabled ${avisynth-no}"
2331 echo "libamr-nb support ${libamr_nb-no}"
2332 echo "libamr-wb support ${libamr_wb-no}"
2333 echo "libdc1394 support ${libdc1394-no}"
2334 echo "libdirac enabled ${libdirac-no}"
2335 echo "libfaac enabled ${libfaac-no}"
2336 echo "libfaad enabled ${libfaad-no}"
2337 echo "libfaad dlopened ${libfaadbin-no}"
2338 echo "libgsm enabled ${libgsm-no}"
2339 echo "libmp3lame enabled ${libmp3lame-no}"
2340 echo "libnut enabled ${libnut-no}"
2341 echo "libopenjpeg enabled ${libopenjpeg-no}"
2342 echo "libschroedinger enabled ${libschroedinger-no}"
2343 echo "libspeex enabled ${libspeex-no}"
2344 echo "libtheora enabled ${libtheora-no}"
2345 echo "libvorbis enabled ${libvorbis-no}"
2346 echo "libx264 enabled ${libx264-no}"
2347 echo "libxvid enabled ${libxvid-no}"
2348 echo "vdpau enabled ${vdpau-no}"
2349 echo "zlib enabled ${zlib-no}"
2350 echo "bzlib enabled ${bzlib-no}"
2351 echo
2352
2353 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2354 echo "Enabled ${type}s:"
2355 eval list=\$$(toupper $type)_LIST
2356 for part in $list; do
2357 enabled $part && echo ${part%_*}
2358 done | sort | pr -3 -t
2359 echo
2360 done
2361
2362 license="LGPL"
2363 if enabled nonfree; then
2364 license="unredistributable"
2365 elif enabled gpl; then
2366 license="GPL"
2367 fi
2368
2369 echo "License: $license"
2370
2371 echo "Creating config.mak and config.h..."
2372
2373 echo "# Automatically generated by configure - do not modify!" > config.mak
2374 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2375 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2376 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2377 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2378 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2379
2380 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2381 echo "prefix=$prefix" >> config.mak
2382 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2383 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2384 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2385 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2386 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2387 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2388 echo "CC=$cc" >> config.mak
2389 echo "YASM=$yasmexe" >> config.mak
2390 echo "AR=$ar" >> config.mak
2391 echo "RANLIB=$ranlib" >> config.mak
2392 echo "LN_S=$ln_s" >> config.mak
2393 enabled stripping &&
2394 echo "STRIP=$strip" >> config.mak ||
2395 echo "STRIP=echo ignoring strip" >> config.mak
2396
2397 echo "OPTFLAGS=$CFLAGS" >> config.mak
2398 echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2399 echo "LDFLAGS=$LDFLAGS" >> config.mak
2400 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2401 echo "SHFLAGS=$SHFLAGS" >> config.mak
2402 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2403 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2404 echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2405 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2406 echo "BUILD_STATIC=$static" >> config.mak
2407 echo "BUILDSUF=$build_suffix" >> config.mak
2408 echo "FULLNAME=$FULLNAME" >> config.mak
2409 echo "LIBPREF=$LIBPREF" >> config.mak
2410 echo "LIBSUF=$LIBSUF" >> config.mak
2411 echo "LIBNAME=$LIBNAME" >> config.mak
2412 echo "SLIBPREF=$SLIBPREF" >> config.mak
2413 echo "SLIBSUF=$SLIBSUF" >> config.mak
2414 echo "EXESUF=$EXESUF" >> config.mak
2415 echo "EXTRA_VERSION=$extra_version" >> config.mak
2416 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2417 echo "HOSTCC=$host_cc" >> config.mak
2418 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2419 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2420 echo "HOSTLIBS=$host_libs" >> config.mak
2421 echo "TARGET_EXEC=$target_exec" >> config.mak
2422 echo "TARGET_PATH=$target_path" >> config.mak
2423
2424 if enabled bigendian; then
2425 echo "WORDS_BIGENDIAN=yes" >> config.mak
2426 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2427 fi
2428
2429 if enabled sdl; then
2430 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2431 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2432 fi
2433 if enabled texi2html; then
2434 echo "BUILD_DOC=yes" >> config.mak
2435 fi
2436
2437 get_version(){
2438 name=$1
2439 file=$source_path/$2
2440 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2441 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2442 lcname=$(tolower $name)
2443 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2444 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2445 }
2446
2447 get_version LIBSWSCALE libswscale/swscale.h
2448 get_version LIBPOSTPROC libpostproc/postprocess.h
2449 get_version LIBAVCODEC libavcodec/avcodec.h
2450 get_version LIBAVDEVICE libavdevice/avdevice.h
2451 get_version LIBAVFORMAT libavformat/avformat.h
2452 get_version LIBAVUTIL libavutil/avutil.h
2453 get_version LIBAVFILTER libavfilter/avfilter.h
2454
2455 if enabled shared; then
2456 echo "BUILD_SHARED=yes" >> config.mak
2457 echo "PIC=-fPIC -DPIC" >> config.mak
2458 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2459 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2460 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2461 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2462 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2463 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2464 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2465 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2466 fi
2467 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2468 echo "EXTRALIBS=$extralibs" >> config.mak
2469
2470 echo "ARCH=$arch" >> config.mak
2471
2472 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2473 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2474 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2475 $CONFIG_EXTRA \
2476 $DECODER_LIST \
2477 $ENCODER_LIST \
2478 $PARSER_LIST \
2479 $BSF_LIST \
2480 $DEMUXER_LIST \
2481 $MUXER_LIST \
2482 $FILTER_LIST \
2483 $PROTOCOL_LIST \
2484 $INDEV_LIST \
2485 $OUTDEV_LIST \
2486
2487 echo "#define restrict $_restrict" >> $TMPH
2488
2489 if enabled small; then
2490 echo "#define av_always_inline" >> $TMPH
2491 fi
2492
2493 echo "SRC_PATH=\"$source_path\"" >> config.mak
2494 echo "SRC_PATH_BARE=$source_path" >> config.mak
2495 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2496
2497 # Apparently it's not possible to portably echo a backslash.
2498 enabled asmalign_pot &&
2499 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2500 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2501
2502 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2503
2504 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2505
2506 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2507 cmp -s $TMPH config.h &&
2508 echo "config.h is unchanged" ||
2509 mv -f $TMPH config.h
2510
2511 # build tree in object directory if source path is different from current one
2512 if enabled source_path_used; then
2513 DIRS="\
2514 doc \
2515 libavcodec \
2516 libavcodec/alpha \
2517 libavcodec/arm \
2518 libavcodec/bfin \
2519 libavcodec/mlib \
2520 libavcodec/ppc \
2521 libavcodec/sh4 \
2522 libavcodec/sparc \
2523 libavcodec/x86 \
2524 libavdevice \
2525 libavfilter \
2526 libavformat \
2527 libavutil \
2528 libpostproc \
2529 libswscale \
2530 tests \
2531 tools \
2532 vhook \
2533 "
2534 FILES="\
2535 Makefile \
2536 common.mak \
2537 subdir.mak \
2538 doc/texi2pod.pl \
2539 libavcodec/Makefile \
2540 libavdevice/Makefile \
2541 libavfilter/Makefile \
2542 libavformat/Makefile \
2543 libavutil/Makefile \
2544 libpostproc/Makefile \
2545 libswscale/Makefile \
2546 "
2547 for dir in $DIRS ; do
2548 mkdir -p $dir
2549 done
2550 for f in $FILES ; do
2551 $ln_s "$source_path/$f" $f
2552 done
2553 fi
2554
2555
2556 # build pkg-config files
2557
2558 pkgconfig_generate(){
2559 name=$1
2560 shortname=${name#lib}${build_suffix}
2561 comment=$2
2562 version=$3
2563 libs=$4
2564 requires=$5
2565 cat <<EOF > $name/$name.pc
2566 prefix=$prefix
2567 exec_prefix=\${prefix}
2568 libdir=$libdir
2569 includedir=$incdir
2570
2571 Name: $name
2572 Description: $comment
2573 Version: $version
2574 Requires: $(disabled shared && echo $requires)
2575 Requires.private: $(enabled shared && echo $requires)
2576 Conflicts:
2577 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2578 Libs.private: $(enabled shared && echo $libs)
2579 Cflags: -I\${includedir}
2580 EOF
2581 cat <<EOF > $name/$name-uninstalled.pc
2582 prefix=
2583 exec_prefix=
2584 libdir=\${pcfiledir}
2585 includedir=${source_path}
2586
2587 Name: $name
2588 Description: $comment
2589 Version: $version
2590 Requires: $requires
2591 Conflicts:
2592 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2593 Cflags: -I\${includedir}
2594 EOF
2595 }
2596
2597 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2598 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2599 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2600 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2601 enabled avfilter &&
2602 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2603 enabled postproc &&
2604 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2605 if enabled swscale; then
2606 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2607 else
2608 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavcodec = $LIBAVCODEC_VERSION"
2609 apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2610 fi