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