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