f10490250e7cf2d088816e33aeea7068ef61068f
[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 [no]"
86 echo " --enable-avfilter-lavf video filters dependent on avformat [no]"
87 echo " --enable-beosthreads use BeOS threads [no]"
88 echo " --enable-os2threads use OS/2 threads [no]"
89 echo " --enable-pthreads use pthreads [no]"
90 echo " --enable-w32threads use Win32 threads [no]"
91 echo " --enable-x11grab enable X11 grabbing [no]"
92 echo " --enable-vdpau enable VDPAU support [no]"
93 echo " --disable-network disable network support [no]"
94 echo " --disable-ipv6 disable IPv6 support [no]"
95 echo " --disable-mpegaudio-hp faster (but less accurate) MPEG audio decoding [no]"
96 echo " --enable-gray enable full grayscale support (slower color)"
97 echo " --enable-fastdiv enable table-based division"
98 echo " --enable-small optimize for size instead of speed"
99 echo " --disable-aandct disable AAN DCT code"
100 echo " --disable-fft disable FFT code"
101 echo " --disable-golomb disable Golomb code"
102 echo " --disable-mdct disable MDCT code"
103 echo " --disable-rdft disable RDFT code"
104 echo " --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
105 echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
106 echo " --enable-beos-netserver enable BeOS netserver"
107 echo " --disable-encoder=NAME disable encoder NAME"
108 echo " --enable-encoder=NAME enable encoder NAME"
109 echo " --disable-encoders disable all encoders"
110 echo " --disable-decoder=NAME disable decoder NAME"
111 echo " --enable-decoder=NAME enable decoder NAME"
112 echo " --disable-decoders disable all decoders"
113 echo " --disable-muxer=NAME disable muxer NAME"
114 echo " --enable-muxer=NAME enable muxer NAME"
115 echo " --disable-muxers disable all muxers"
116 echo " --disable-demuxer=NAME disable demuxer NAME"
117 echo " --enable-demuxer=NAME enable demuxer NAME"
118 echo " --disable-demuxers disable all demuxers"
119 echo " --enable-parser=NAME enable parser NAME"
120 echo " --disable-parser=NAME disable parser NAME"
121 echo " --disable-parsers disable all parsers"
122 echo " --enable-bsf=NAME enable bitstream filter NAME"
123 echo " --disable-bsf=NAME disable bitstream filter NAME"
124 echo " --disable-bsfs disable all bitstream filters"
125 echo " --enable-protocol=NAME enable protocol NAME"
126 echo " --disable-protocol=NAME disable protocol NAME"
127 echo " --disable-protocols disable all protocols"
128 echo " --disable-indevs disable input devices"
129 echo " --disable-outdevs disable output devices"
130 echo " --disable-devices disable all devices"
131 echo " --enable-filter=NAME enable filter NAME"
132 echo " --disable-filter=NAME disable filter NAME"
133 echo " --disable-filters disable all filters"
134 echo " --list-decoders show all available decoders"
135 echo " --list-encoders show all available encoders"
136 echo " --list-muxers show all available muxers"
137 echo " --list-demuxers show all available demuxers"
138 echo " --list-parsers show all available parsers"
139 echo " --list-protocols show all available protocols"
140 echo " --list-bsfs show all available bitstream filters"
141 echo " --list-indevs show all available input devices"
142 echo " --list-outdevs show all available output devices"
143 echo " --list-filters show all available filters"
144 echo
145 echo "External library support:"
146 echo " --enable-avisynth enable reading of AVISynth script files [no]"
147 echo " --enable-bzlib enable bzlib [autodetect]"
148 echo " --enable-libamr-nb enable libamr-nb floating point audio codec [no]"
149 echo " --enable-libamr-wb enable libamr-wb floating point audio codec [no]"
150 echo " --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394"
151 echo " and libraw1394 [no]"
152 echo " --enable-libdirac enable Dirac support via libdirac [no]"
153 echo " --enable-libfaac enable FAAC support via libfaac [no]"
154 echo " --enable-libfaad enable FAAD support via libfaad [no]"
155 echo " --enable-libfaadbin open libfaad.so.0 at runtime [no]"
156 echo " --enable-libgsm enable GSM support via libgsm [no]"
157 echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [no]"
158 echo " --enable-libnut enable NUT (de)muxing via libnut,"
159 echo " native (de)muxer exists [no]"
160 echo " --enable-libopenjpeg enable JPEG 2000 decoding via OpenJPEG [no]"
161 echo " --enable-libschroedinger enable Dirac support via libschroedinger [no]"
162 echo " --enable-libspeex enable Speex decoding via libspeex [no]"
163 echo " --enable-libtheora enable Theora encoding via libtheora [no]"
164 echo " --enable-libvorbis enable Vorbis encoding via libvorbis,"
165 echo " native implementation exists [no]"
166 echo " --enable-libx264 enable H.264 encoding via x264 [no]"
167 echo " --enable-libxvid enable Xvid encoding via xvidcore,"
168 echo " native MPEG-4/Xvid encoder exists [no]"
169 echo " --enable-mlib enable Sun medialib [no]"
170 echo " --enable-zlib enable zlib [autodetect]"
171 echo ""
172 echo "Advanced options (experts only):"
173 echo " --source-path=PATH path to source code [$source_path]"
174 echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
175 echo " --enable-cross-compile assume a cross-compiler is used"
176 echo " --sysroot=PATH root of cross-build tree"
177 echo " --sysinclude=PATH location of cross-build system headers"
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-amd3dnowext disable 3DNow! extended optimizations"
200 echo " --disable-mmx disable MMX optimizations"
201 echo " --disable-mmx2 disable MMX2 optimizations"
202 echo " --disable-sse disable SSE optimizations"
203 echo " --disable-ssse3 disable SSSE3 optimizations"
204 echo " --disable-armv5te disable armv5te optimizations"
205 echo " --disable-armv6 disable armv6 optimizations"
206 echo " --disable-armv6t2 disable armv6t2 optimizations"
207 echo " --disable-armvfp disable ARM VFP optimizations"
208 echo " --disable-iwmmxt disable iwmmxt optimizations"
209 echo " --disable-mmi disable MMI optimizations"
210 echo " --disable-neon disable neon optimizations"
211 echo " --disable-vis disable VIS optimizations"
212 echo " --disable-yasm disable use of yasm assembler"
213 echo
214 echo "Developer options (useful when working on FFmpeg itself):"
215 echo " --disable-debug disable debugging symbols"
216 echo " --enable-debug=LEVEL set the debug level [$debuglevel]"
217 echo " --enable-gprof enable profiling with gprof [$gprof]"
218 echo " --disable-optimizations disable compiler optimizations"
219 echo " --enable-extra-warnings enable more compiler warnings"
220 echo " --disable-stripping disable stripping of executables and shared libraries"
221 echo ""
222 echo "NOTE: Object files are built at the place where configure is launched."
223 exit 0
224 }
225
226 log(){
227 echo "$@" >> $logfile
228 }
229
230 log_file(){
231 log BEGIN $1
232 pr -n -t $1 >> $logfile
233 log END $1
234 }
235
236 echolog(){
237 log "$@"
238 echo "$@"
239 }
240
241 die(){
242 echolog "$@"
243 cat <<EOF
244 If you think configure made a mistake, make sure you are using the latest
245 version from SVN. If the latest version fails, report the problem to the
246 ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
247 EOF
248 if disabled logging; then
249 cat <<EOF
250 Rerun configure with logging enabled (do not use --disable-logging), and
251 include the log this produces with your report.
252 EOF
253 else
254 cat <<EOF
255 Include the log file "$logfile" produced by configure as this will help
256 solving the problem.
257 EOF
258 fi
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 enable_safe(){
327 enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
328 }
329
330 disable_safe(){
331 disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
332 }
333
334 do_enable_deep(){
335 for var; do
336 enabled $var && continue
337 eval sel="\$${var}_select"
338 eval sgs="\$${var}_suggest"
339 pushvar var sgs
340 enable_deep $sel
341 popvar sgs
342 enable_deep_weak $sgs
343 popvar var
344 done
345 }
346
347 enable_deep(){
348 do_enable_deep $*
349 enable $*
350 }
351
352 enable_deep_weak(){
353 do_enable_deep $*
354 enable_weak $*
355 }
356
357 enabled(){
358 test "${1#!}" = "$1" && op== || op=!=
359 eval test "x\$${1#!}" $op "xyes"
360 }
361
362 disabled(){
363 test "${1#!}" = "$1" && op== || op=!=
364 eval test "x\$${1#!}" $op "xno"
365 }
366
367 enabled_all(){
368 for opt; do
369 enabled $opt || return 1
370 done
371 }
372
373 disabled_all(){
374 for opt; do
375 disabled $opt || return 1
376 done
377 }
378
379 enabled_any(){
380 for opt; do
381 enabled $opt && return 0
382 done
383 }
384
385 disabled_any(){
386 for opt; do
387 disabled $opt && return 0
388 done
389 return 1
390 }
391
392 set_default(){
393 for opt; do
394 eval : \${$opt:=\$${opt}_default}
395 done
396 }
397
398 is_in(){
399 value=$1
400 shift
401 for var in $*; do
402 [ $var = $value ] && return 0
403 done
404 return 1
405 }
406
407 check_deps(){
408 for cfg; do
409 cfg="${cfg#!}"
410 enabled ${cfg}_checking && die "Circular dependency for $cfg."
411 disabled ${cfg}_checking && continue
412 enable ${cfg}_checking
413
414 eval dep_all="\$${cfg}_deps"
415 eval dep_any="\$${cfg}_deps_any"
416 eval dep_sel="\$${cfg}_select"
417 eval dep_sgs="\$${cfg}_suggest"
418
419 pushvar cfg dep_all dep_any dep_sel dep_sgs
420 check_deps $dep_all $dep_any $dep_sel $dep_sgs
421 popvar cfg dep_all dep_any dep_sel dep_sgs
422
423 enabled_all $dep_all || disable $cfg
424 enabled_any $dep_any || disable $cfg
425 disabled_any $dep_sel && disable $cfg
426
427 if enabled $cfg; then
428 eval dep_extralibs="\$${cfg}_extralibs"
429 test -n "$dep_extralibs" && add_extralibs $dep_extralibs
430 enable_deep $dep_sel
431 enable_deep_weak $dep_sgs
432 fi
433
434 disable ${cfg}_checking
435 done
436 }
437
438 print_config(){
439 pfx=$1
440 header=$2
441 makefile=$3
442 shift 3
443 for cfg; do
444 ucname="`toupper $cfg`"
445 if enabled $cfg; then
446 echo "#define ${pfx}${ucname} 1" >> $header
447 echo "${pfx}${ucname}=yes" >> $makefile
448 else
449 echo "#define ${pfx}${ucname} 0" >> $header
450 fi
451 done
452 }
453
454 flags_saved(){
455 (: ${SAVE_CFLAGS?}) 2> /dev/null
456 }
457
458 save_flags(){
459 flags_saved && return
460 SAVE_CFLAGS="$CFLAGS"
461 SAVE_LDFLAGS="$LDFLAGS"
462 SAVE_extralibs="$extralibs"
463 }
464
465 restore_flags(){
466 flags_saved || return
467 CFLAGS="$SAVE_CFLAGS"
468 LDFLAGS="$SAVE_LDFLAGS"
469 extralibs="$SAVE_extralibs"
470 unset SAVE_CFLAGS
471 unset SAVE_LDFLAGS
472 unset SAVE_extralibs
473 }
474
475 temp_cflags(){
476 save_flags
477 CFLAGS="$CFLAGS $*"
478 }
479
480 temp_ldflags(){
481 save_flags
482 LDFLAGS="$LDFLAGS $*"
483 }
484
485 temp_extralibs(){
486 save_flags
487 extralibs="$extralibs $*"
488 }
489
490 append(){
491 var=$1
492 shift
493 flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
494 eval "$var=\"\$$var $*\""
495 }
496
497 add_cflags(){
498 append CFLAGS "$@"
499 }
500
501 add_ldflags(){
502 append LDFLAGS "$@"
503 }
504
505 add_extralibs(){
506 append extralibs "$@"
507 }
508
509 check_cmd(){
510 log "$@"
511 "$@" >> $logfile 2>&1
512 }
513
514 check_cc(){
515 log check_cc "$@"
516 cat > $TMPC
517 log_file $TMPC
518 check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
519 }
520
521 check_cpp(){
522 log check_cpp "$@"
523 cat > $TMPC
524 log_file $TMPC
525 check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
526 }
527
528 check_asm(){
529 log check_asm "$@"
530 name="$1"
531 asm="$2"
532 shift 2
533 check_cc "$@" <<EOF && enable $name || disable $name
534 void foo(void){ __asm__ volatile($asm); }
535 EOF
536 }
537
538 check_yasm(){
539 log check_yasm "$@"
540 echo "$1" > $TMPS
541 log_file $TMPS
542 shift 1
543 check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
544 }
545
546 check_ld(){
547 log check_ld "$@"
548 check_cc || return
549 flags=''
550 libs=''
551 for f; do
552 test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
553 done
554 check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
555 }
556
557 check_cflags(){
558 log check_cflags "$@"
559 check_cc "$@" <<EOF && add_cflags "$@"
560 int x;
561 EOF
562 }
563
564 check_ldflags(){
565 log check_ldflags "$@"
566 check_ld "$@" <<EOF && add_ldflags "$@"
567 int main(void){ return 0; }
568 EOF
569 }
570
571 check_header(){
572 log check_header "$@"
573 header=$1
574 shift
575 disable_safe $header
576 check_cpp "$@" <<EOF && enable_safe $header
577 #include <$header>
578 int x;
579 EOF
580 }
581
582 check_func(){
583 log check_func "$@"
584 func=$1
585 shift
586 disable $func
587 check_ld "$@" <<EOF && enable $func
588 extern int $func();
589 int main(void){ $func(); }
590 EOF
591 }
592
593 check_func_headers(){
594 log check_func_headers "$@"
595 headers=$1
596 func=$2
597 shift 2
598 disable $func
599 incs=""
600 for hdr in $headers; do
601 incs="$incs
602 #include <$hdr>"
603 done
604 check_ld "$@" <<EOF && enable $func && enable_safe $headers
605 $incs
606 int main(int argc, char **argv){
607 (void) $func;
608 return 0;
609 }
610 EOF
611 }
612
613 check_cpp_condition(){
614 log check_cpp_condition "$@"
615 header=$1
616 condition=$2
617 check_cpp <<EOF
618 #include <$header>
619 #if !($condition)
620 #error "unsatisfied condition: $condition"
621 #endif
622 EOF
623 }
624
625 check_lib(){
626 log check_lib "$@"
627 header="$1"
628 func="$2"
629 shift 2
630 temp_extralibs "$@"
631 check_header $header && check_func $func && add_extralibs "$@"
632 err=$?
633 restore_flags
634 return $err
635 }
636
637 check_lib2(){
638 log check_lib2 "$@"
639 headers="$1"
640 func="$2"
641 shift 2
642 temp_extralibs "$@"
643 check_func_headers "$headers" $func && add_extralibs "$@"
644 err=$?
645 restore_flags
646 return $err
647 }
648
649 check_exec(){
650 check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
651 }
652
653 check_exec_crash(){
654 code=`cat`
655
656 # exit() is not async signal safe. _Exit (C99) and _exit (POSIX)
657 # are safe but may not be available everywhere. Thus we use
658 # raise(SIGTERM) instead. The check is run in a subshell so we
659 # can redirect the "Terminated" message from the shell. SIGBUS
660 # is not defined by standard C so it is used conditionally.
661
662 (check_exec "$@") >> $logfile 2>&1 <<EOF
663 #include <signal.h>
664 static void sighandler(int sig){
665 raise(SIGTERM);
666 }
667 int main(void){
668 signal(SIGILL, sighandler);
669 signal(SIGFPE, sighandler);
670 signal(SIGSEGV, sighandler);
671 #ifdef SIGBUS
672 signal(SIGBUS, sighandler);
673 #endif
674 { $code }
675 }
676 EOF
677 }
678
679 check_type(){
680 log check_type "$@"
681 headers=$1
682 type=$2
683 shift 2
684 disable $type
685 incs=""
686 for hdr in $headers; do
687 incs="$incs
688 #include <$hdr>"
689 done
690 check_cc "$@" <<EOF && enable $type
691 $incs
692 $type v;
693 EOF
694 }
695
696 require(){
697 name="$1"
698 header="$2"
699 func="$3"
700 shift 3
701 check_lib $header $func "$@" || die "ERROR: $name not found"
702 }
703
704 require2(){
705 name="$1"
706 headers="$2"
707 func="$3"
708 shift 3
709 check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
710 }
711
712 check_foo_config(){
713 cfg=$1
714 pkg=$2
715 header=$3
716 func=$4
717 shift 4
718 disable $cfg
719 check_cmd ${pkg}-config --version
720 err=$?
721 if test "$err" = 0; then
722 temp_cflags `${pkg}-config --cflags`
723 temp_extralibs `${pkg}-config --libs`
724 check_lib "$@" $header $func && enable $cfg
725 fi
726 return $err
727 }
728
729 apply(){
730 file=$1
731 shift
732 "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
733 }
734
735 # CONFIG_LIST contains configurable options, while HAVE_LIST is for
736 # system-dependent things.
737
738 COMPONENT_LIST="
739 bsfs
740 decoders
741 demuxers
742 encoders
743 filters
744 indevs
745 muxers
746 outdevs
747 parsers
748 protocols
749 "
750
751 CONFIG_LIST="
752 $COMPONENT_LIST
753 aandct
754 avfilter
755 avfilter_lavf
756 avisynth
757 beos_netserver
758 bzlib
759 fastdiv
760 ffmpeg
761 ffplay
762 ffserver
763 fft
764 golomb
765 gpl
766 gprof
767 gray
768 hardcoded_tables
769 ipv6
770 libamr_nb
771 libamr_wb
772 libdc1394
773 libdirac
774 libfaac
775 libfaad
776 libfaadbin
777 libgsm
778 libmp3lame
779 libnut
780 libopenjpeg
781 libschroedinger
782 libspeex
783 libtheora
784 libvorbis
785 libx264
786 libxvid
787 mdct
788 memalign_hack
789 mlib
790 mpegaudio_hp
791 network
792 nonfree
793 postproc
794 powerpc_perf
795 rdft
796 shared
797 small
798 static
799 swscale
800 vdpau
801 x11grab
802 zlib
803 "
804
805 THREADS_LIST='
806 beosthreads
807 os2threads
808 pthreads
809 w32threads
810 '
811
812 ARCH_LIST='
813 alpha
814 arm
815 bfin
816 ia64
817 m68k
818 mips
819 parisc
820 ppc
821 s390
822 sh4
823 sparc
824 sparc64
825 x86
826 x86_32
827 x86_64
828 '
829
830 ARCH_EXT_LIST='
831 altivec
832 amd3dnow
833 amd3dnowext
834 armv5te
835 armv6
836 armv6t2
837 armvfp
838 iwmmxt
839 mmi
840 mmx
841 mmx2
842 neon
843 ppc4xx
844 sse
845 ssse3
846 vis
847 '
848
849 HAVE_LIST="
850 $ARCH_EXT_LIST
851 $THREADS_LIST
852 alsa_asoundlib_h
853 altivec_h
854 arpa_inet_h
855 bswap
856 closesocket
857 cmov
858 conio_h
859 dcbzl
860 dev_bktr_ioctl_bt848_h
861 dev_bktr_ioctl_meteor_h
862 dev_ic_bt8xx_h
863 dev_video_meteor_ioctl_meteor_h
864 dev_video_bktr_ioctl_bt848_h
865 dlfcn_h
866 dlopen
867 dos_paths
868 ebp_available
869 ebx_available
870 fast_64bit
871 fast_cmov
872 fast_unaligned
873 fork
874 gethrtime
875 GetProcessTimes
876 getrusage
877 inet_aton
878 inline_asm
879 libdc1394_1
880 libdc1394_2
881 llrint
882 lrint
883 lrintf
884 machine_ioctl_bt848_h
885 machine_ioctl_meteor_h
886 malloc_h
887 memalign
888 mkstemp
889 pld
890 posix_memalign
891 ppc64
892 round
893 roundf
894 sdl
895 sdl_video_size
896 setmode
897 socklen_t
898 soundcard_h
899 poll_h
900 sys_mman_h
901 sys_resource_h
902 sys_select_h
903 sys_soundcard_h
904 sys_videoio_h
905 ten_operands
906 termios_h
907 threads
908 truncf
909 winsock2_h
910 yasm
911 "
912
913 # options emitted with CONFIG_ prefix but not available on command line
914 CONFIG_EXTRA="
915 oldscaler
916 "
917
918 CMDLINE_SELECT="
919 $ARCH_EXT_LIST
920 $CONFIG_LIST
921 $THREADS_LIST
922 cross_compile
923 debug
924 extra_warnings
925 logging
926 optimizations
927 stripping
928 yasm
929 "
930
931 PATHS_LIST='
932 bindir
933 datadir
934 incdir
935 libdir
936 mandir
937 prefix
938 shlibdir
939 '
940
941 CMDLINE_SET="
942 $PATHS_LIST
943 arch
944 build_suffix
945 cc
946 cpu
947 cross_prefix
948 extra_version
949 host_cc
950 host_cflags
951 host_ldflags
952 host_libs
953 logfile
954 nm
955 source_path
956 sysinclude
957 sysroot
958 target_exec
959 target_os
960 target_path
961 "
962
963 # code dependency declarations
964
965 # architecture extensions
966 altivec_deps="ppc"
967 amd3dnow_deps="mmx"
968 amd3dnowext_deps="amd3dnow"
969 armv5te_deps="arm"
970 armv6_deps="arm"
971 armv6t2_deps="arm"
972 armvfp_deps="arm"
973 iwmmxt_deps="arm"
974 mmi_deps="mips"
975 mmx_deps="x86"
976 mmx2_deps="mmx"
977 neon_deps="arm"
978 ppc4xx_deps="ppc"
979 sse_deps="mmx"
980 ssse3_deps="sse"
981 vis_deps="sparc"
982
983 # common features
984 oldscaler_deps="!swscale"
985
986 # decoders / encoders
987 aac_decoder_select="fft mdct"
988 ac3_decoder_deps="gpl"
989 ac3_decoder_select="fft mdct"
990 atrac3_decoder_select="fft mdct"
991 cavs_decoder_select="golomb"
992 cook_decoder_select="fft mdct"
993 cscd_decoder_suggest="zlib"
994 dca_decoder_select="fft mdct"
995 dnxhd_encoder_select="aandct"
996 dxa_decoder_select="zlib"
997 eac3_decoder_deps="gpl"
998 eac3_decoder_select="fft mdct"
999 eatgq_decoder_select="aandct"
1000 eatqi_decoder_select="aandct"
1001 ffv1_decoder_select="golomb"
1002 flac_decoder_select="golomb"
1003 flac_encoder_select="golomb"
1004 flashsv_decoder_select="zlib"
1005 flashsv_encoder_select="zlib"
1006 flv_encoder_select="aandct"
1007 h261_encoder_select="aandct"
1008 h263_encoder_select="aandct"
1009 h263p_encoder_select="aandct"
1010 h264_decoder_select="golomb"
1011 h264_vdpau_decoder_deps="vdpau"
1012 imc_decoder_select="fft mdct"
1013 jpegls_decoder_select="golomb"
1014 jpegls_encoder_select="golomb"
1015 ljpeg_encoder_select="aandct"
1016 loco_decoder_select="golomb"
1017 mjpeg_encoder_select="aandct"
1018 mpeg1video_encoder_select="aandct"
1019 mpeg2video_encoder_select="aandct"
1020 mpeg4_encoder_select="aandct"
1021 mpeg_vdpau_decoder_deps="vdpau"
1022 mpeg1_vdpau_decoder_deps="vdpau"
1023 mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1024 msmpeg4v1_encoder_select="aandct"
1025 msmpeg4v2_encoder_select="aandct"
1026 msmpeg4v3_encoder_select="aandct"
1027 nellymoser_decoder_select="fft mdct"
1028 nellymoser_encoder_select="fft mdct"
1029 png_decoder_select="zlib"
1030 png_encoder_select="zlib"
1031 qdm2_decoder_select="fft mdct rdft"
1032 rv10_encoder_select="aandct"
1033 rv20_encoder_select="aandct"
1034 rv30_decoder_select="golomb"
1035 rv40_decoder_select="golomb"
1036 shorten_decoder_select="golomb"
1037 sonic_decoder_select="golomb"
1038 sonic_encoder_select="golomb"
1039 sonic_ls_encoder_select="golomb"
1040 svq3_decoder_select="golomb"
1041 svq3_decoder_suggest="zlib"
1042 tiff_decoder_suggest="zlib"
1043 tiff_encoder_suggest="zlib"
1044 tscc_decoder_select="zlib"
1045 vc1_vdpau_decoder_deps="vdpau"
1046 vorbis_decoder_select="fft mdct"
1047 vorbis_encoder_select="fft mdct"
1048 wmav1_decoder_select="fft mdct"
1049 wmav1_encoder_select="fft mdct"
1050 wmav2_decoder_select="fft mdct"
1051 wmav2_encoder_select="fft mdct"
1052 wmv1_encoder_select="aandct"
1053 wmv2_encoder_select="aandct"
1054 wmv3_vdpau_decoder_deps="vdpau"
1055 zlib_decoder_select="zlib"
1056 zlib_encoder_select="zlib"
1057 zmbv_decoder_select="zlib"
1058 zmbv_encoder_select="zlib"
1059
1060 # external libraries
1061 libamr_nb_decoder_deps="libamr_nb"
1062 libamr_nb_encoder_deps="libamr_nb"
1063 libamr_wb_decoder_deps="libamr_wb"
1064 libamr_wb_encoder_deps="libamr_wb"
1065 libdirac_decoder_deps="libdirac !libschroedinger"
1066 libdirac_encoder_deps="libdirac"
1067 libfaac_encoder_deps="libfaac"
1068 libfaad_decoder_deps="libfaad"
1069 libfaadbin_decoder_extralibs='$ldl'
1070 libgsm_decoder_deps="libgsm"
1071 libgsm_encoder_deps="libgsm"
1072 libgsm_ms_decoder_deps="libgsm"
1073 libgsm_ms_encoder_deps="libgsm"
1074 libmp3lame_encoder_deps="libmp3lame"
1075 libopenjpeg_decoder_deps="libopenjpeg"
1076 libschroedinger_decoder_deps="libschroedinger"
1077 libschroedinger_encoder_deps="libschroedinger"
1078 libspeex_decoder_deps="libspeex"
1079 libtheora_encoder_deps="libtheora"
1080 libvorbis_encoder_deps="libvorbis"
1081 libx264_encoder_deps="libx264"
1082 libxvid_encoder_deps="libxvid"
1083 vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1084
1085 # demuxers / muxers
1086 ac3_demuxer_deps="ac3_parser"
1087 alsa_demuxer_deps="alsa_asoundlib_h snd_pcm_htimestamp"
1088 alsa_demuxer_extralibs="-lasound"
1089 alsa_muxer_deps="alsa_asoundlib_h"
1090 alsa_muxer_extralibs="-lasound"
1091 audio_beos_demuxer_deps="audio_beos"
1092 audio_beos_demuxer_extralibs="-lmedia -lbe"
1093 audio_beos_muxer_deps="audio_beos"
1094 audio_beos_muxer_extralibs="-lmedia -lbe"
1095 avisynth_demuxer_deps="avisynth"
1096 bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1097 dirac_demuxer_deps="dirac_parser"
1098 dv1394_demuxer_deps="dv1394 dv_demuxer"
1099 libdc1394_demuxer_deps="libdc1394"
1100 libnut_demuxer_deps="libnut"
1101 libnut_muxer_deps="libnut"
1102 matroska_demuxer_suggest="zlib bzlib"
1103 mov_demuxer_suggest="zlib"
1104 mp3_demuxer_deps="mpegaudio_parser"
1105 oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
1106 oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1107 redir_demuxer_deps="network"
1108 rtp_muxer_deps="network rtp_protocol"
1109 rtsp_demuxer_deps="sdp_demuxer"
1110 sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1111 v4l_demuxer_deps="linux_videodev_h"
1112 v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
1113 vfwcap_demuxer_deps="capCreateCaptureWindow"
1114 vfwcap_demuxer_extralibs="-lvfw32"
1115 x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1116 x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1117
1118 # protocols
1119 gopher_protocol_deps="network"
1120 http_protocol_deps="network"
1121 rtp_protocol_deps="udp_protocol"
1122 tcp_protocol_deps="network"
1123 udp_protocol_deps="network"
1124
1125 # filters
1126 movie_filter_deps="avfilter_lavf"
1127
1128 # programs
1129 ffplay_deps="sdl"
1130 ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1131 ffserver_extralibs='$ldl'
1132
1133
1134 # default parameters
1135
1136 logfile="config.err"
1137
1138 # installation paths
1139 prefix_default="/usr/local"
1140 bindir_default='${prefix}/bin'
1141 datadir_default='${prefix}/share/ffmpeg'
1142 incdir_default='${prefix}/include'
1143 libdir_default='${prefix}/lib'
1144 mandir_default='${prefix}/share/man'
1145 shlibdir_default="$libdir_default"
1146
1147 # toolchain
1148 ar="ar"
1149 cc_default="gcc"
1150 host_cc_default="gcc"
1151 ln_s="ln -sf"
1152 nm_default="nm"
1153 objformat="elf"
1154 ranlib="ranlib"
1155 strip="strip"
1156 yasmexe="yasm"
1157
1158 # machine
1159 arch=`uname -m`
1160 cpu="generic"
1161
1162 # OS
1163 target_os=$(tolower $(uname -s))
1164
1165 # configurable options
1166 enable debug
1167 enable ffmpeg
1168 enable ffplay
1169 enable ffserver
1170 enable ipv6
1171 enable mpegaudio_hp
1172 enable network
1173 enable oldscaler
1174 enable optimizations
1175 enable protocols
1176 enable static
1177 enable stripping
1178
1179 # build settings
1180 add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
1181 SHFLAGS='-shared -Wl,-soname,$$(@F)'
1182 FFSERVERLDFLAGS=-Wl,-E
1183 LIBPREF="lib"
1184 LIBSUF=".a"
1185 FULLNAME='$(NAME)$(BUILDSUF)'
1186 LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1187 SLIBPREF="lib"
1188 SLIBSUF=".so"
1189 SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1190 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
1191 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1192 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1193
1194 host_cflags='-O3 -g -Wall'
1195 host_libs='-lm'
1196
1197 target_path='.'
1198
1199 # gcc stupidly only outputs the basename of targets with -MM, but we need the
1200 # full relative path for objects in subdirectories for non-recursive Make.
1201 DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1202
1203 # find source path
1204 source_path="`dirname \"$0\"`"
1205 enable source_path_used
1206 if test -z "$source_path" -o "$source_path" = "." ; then
1207 source_path="`pwd`"
1208 disable source_path_used
1209 else
1210 source_path="`cd \"$source_path\"; pwd`"
1211 echo "$source_path" | grep -q '[[:blank:]]' &&
1212 die "Out of tree builds are impossible with whitespace in source path."
1213 fi
1214
1215 FFMPEG_CONFIGURATION="$@"
1216
1217 find_things(){
1218 thing=$1
1219 pattern=$2
1220 file=$source_path/$3
1221 sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1222 }
1223
1224 ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
1225 DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
1226 PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
1227 BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
1228 MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
1229 DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
1230 OUTDEV_LIST=$(find_things muxer _MUX libavdevice/alldevices.c)
1231 INDEV_LIST=$(find_things demuxer DEMUX libavdevice/alldevices.c)
1232 PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1233 FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
1234
1235 enable $ARCH_EXT_LIST \
1236 $DECODER_LIST \
1237 $ENCODER_LIST \
1238 $PARSER_LIST \
1239 $BSF_LIST \
1240 $DEMUXER_LIST \
1241 $MUXER_LIST \
1242 $FILTER_LIST \
1243 $PROTOCOL_LIST \
1244 $INDEV_LIST \
1245 $OUTDEV_LIST \
1246
1247 die_unknown(){
1248 echo "Unknown option \"$1\"."
1249 echo "See $0 --help for available options."
1250 exit 1
1251 }
1252
1253 show_list() {
1254 suffix=_$1
1255 shift
1256 echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1257 exit 0
1258 }
1259
1260 for opt do
1261 optval="${opt#*=}"
1262 case "$opt" in
1263 --extra-cflags=*) add_cflags $optval
1264 ;;
1265 --extra-ldflags=*) add_ldflags $optval
1266 ;;
1267 --extra-libs=*) add_extralibs $optval
1268 ;;
1269 --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1270 ;;
1271 --enable-debug=*) debuglevel="$optval"
1272 ;;
1273 --enable-*=*|--disable-*=*)
1274 eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
1275 case "$thing" in
1276 encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1277 *) die_unknown "$opt" ;;
1278 esac
1279 ;;
1280 --enable-?*|--disable-?*)
1281 eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1282 if is_in $option $COMPONENT_LIST; then
1283 eval $action \$$(toupper ${option%s})_LIST
1284 elif is_in $option $CMDLINE_SELECT; then
1285 $action $option
1286 else
1287 die_unknown $opt
1288 fi
1289 ;;
1290 --list-*)
1291 NAME="${opt#--list-}"
1292 is_in $NAME $COMPONENT_LIST || die_unknown $opt
1293 NAME=${NAME%s}
1294 eval show_list $NAME \$$(toupper $NAME)_LIST
1295 ;;
1296 --help|-h) show_help
1297 ;;
1298 *)
1299 optname="${opt%%=*}"
1300 optname="${optname#--}"
1301 optname=$(echo "$optname" | sed 's/-/_/g')
1302 is_in $optname $CMDLINE_SET || die_unknown $opt
1303 eval $optname='$optval'
1304 ;;
1305 esac
1306 done
1307
1308 disabled logging && logfile=/dev/null
1309
1310 echo "# $0 $@" > $logfile
1311 set >> $logfile
1312
1313 test -n "$cross_prefix" && enable cross_compile
1314
1315 ar="${cross_prefix}${ar}"
1316 cc_default="${cross_prefix}${cc_default}"
1317 nm_default="${cross_prefix}${nm_default}"
1318 ranlib="${cross_prefix}${ranlib}"
1319 strip="${cross_prefix}${strip}"
1320
1321 sysinclude_default="${sysroot}/usr/include"
1322
1323 set_default cc nm sysinclude
1324 enabled cross_compile || host_cc_default=$cc
1325 set_default host_cc
1326
1327 case $target_os in
1328 mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) EXESUF=.exe ;;
1329 esac
1330
1331 # set temporary file name
1332 : ${TMPDIR:=$TEMPDIR}
1333 : ${TMPDIR:=$TMP}
1334 : ${TMPDIR:=/tmp}
1335
1336 if ! check_cmd type mktemp; then
1337 # simple replacement for missing mktemp
1338 # NOT SAFE FOR GENERAL USE
1339 mktemp(){
1340 echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
1341 }
1342 fi
1343
1344 tmpfile(){
1345 tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
1346 (set -C; exec > $tmp) 2>/dev/null ||
1347 die "Unable to create temoporary file in $TMPDIR."
1348 append TMPFILES $tmp
1349 eval $1=$tmp
1350 }
1351
1352 trap 'rm -f -- $TMPFILES' EXIT
1353 trap exit HUP INT TERM
1354
1355 tmpfile TMPC .c
1356 tmpfile TMPE $EXESUF
1357 tmpfile TMPH .h
1358 tmpfile TMPO .o
1359 tmpfile TMPS .S
1360 tmpfile TMPSH .sh
1361
1362 unset -f mktemp
1363
1364 # make sure we can execute files in $TMPDIR
1365 cat > $TMPSH 2>> $logfile <<EOF
1366 #! /bin/sh
1367 EOF
1368 chmod +x $TMPSH >> $logfile 2>&1
1369 if ! $TMPSH >> $logfile 2>&1; then
1370 cat <<EOF
1371 Unable to create and execute files in $TMPDIR. Set the TMPDIR environment
1372 variable to another directory and make sure that it is not mounted noexec.
1373 EOF
1374 die "Sanity test failed."
1375 fi
1376
1377 if $cc --version 2>/dev/null | grep -qi gcc; then
1378 cc_type=gcc
1379 elif $cc --version 2>/dev/null | grep -q Intel; then
1380 cc_type=icc
1381 elif $cc -v 2>&1 | grep -q xlc; then
1382 cc_type=xlc
1383 elif $cc -V 2>/dev/null | grep -q Compaq; then
1384 cc_type=ccc
1385 DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1386 add_ldflags -Wl,-z,now # calls to libots crash without this
1387 fi
1388
1389 test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"
1390
1391 if test -n "$sysroot"; then
1392 case "$cc_type" in
1393 gcc)
1394 add_cflags --sysroot="$sysroot"
1395 add_ldflags --sysroot="$sysroot"
1396 ;;
1397 esac
1398 fi
1399
1400 # compiler sanity check
1401 check_exec <<EOF
1402 int main(void){ return 0; }
1403 EOF
1404 if test "$?" != 0; then
1405 echo "$cc is unable to create an executable file."
1406 if test -z "$cross_prefix" && ! enabled cross_compile ; then
1407 echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1408 echo "Only do this if you know what cross compiling means."
1409 fi
1410 die "C compiler test failed."
1411 fi
1412
1413 check_cflags -std=c99
1414 check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
1415 #include <stdlib.h>
1416 EOF
1417 check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
1418 #include <stdlib.h>
1419 EOF
1420
1421 case "$arch" in
1422 alpha)
1423 arch="alpha"
1424 enable fast_64bit
1425 check_cflags -mieee
1426 ;;
1427 arm|armv[4567]*l)
1428 arch="arm"
1429 ;;
1430 avr32)
1431 ;;
1432 bfin)
1433 arch="bfin"
1434 ;;
1435 ia64)
1436 arch="ia64"
1437 enable fast_64bit
1438 ;;
1439 m68k)
1440 arch="m68k"
1441 ;;
1442 mips|mipsel|IP*)
1443 arch="mips"
1444 ;;
1445 mips64)
1446 arch="mips"
1447 enable fast_64bit
1448 ;;
1449 parisc|hppa)
1450 arch="parisc"
1451 ;;
1452 parisc64|hppa64)
1453 arch="parisc"
1454 enable fast_64bit
1455 ;;
1456 "Power Macintosh"|ppc|powerpc)
1457 arch="ppc"
1458 enable fast_unaligned
1459 ;;
1460 ppc64)
1461 arch="ppc"
1462 enable fast_64bit
1463 enable fast_unaligned
1464 ;;
1465 s390|s390x)
1466 arch="s390"
1467 ;;
1468 sh4|sh)
1469 arch="sh4"
1470 ;;
1471 sparc)
1472 arch="sparc"
1473 ;;
1474 sun4u|sparc64)
1475 arch="sparc"
1476 subarch="sparc64"
1477 enable fast_64bit
1478 ;;
1479 i386|i486|i586|i686|i86pc|BePC)
1480 arch="x86"
1481 subarch="x86_32"
1482 enable fast_unaligned
1483 ;;
1484 x86_64|amd64)
1485 arch="x86"
1486 subarch="x86_32"
1487 enable cmov
1488 enable fast_cmov
1489 enable fast_unaligned
1490 check_cc <<EOF && enable fast_64bit && subarch="x86_64"
1491 int test[sizeof(char*) - 7];
1492 EOF
1493 ;;
1494 *)
1495 arch="unknown"
1496 ;;
1497 esac
1498
1499 enable $arch $subarch
1500
1501 # OS specific
1502 case $target_os in
1503 beos|haiku|zeta)
1504 prefix_default="$HOME/config"
1505 # helps building libavcodec
1506 add_cflags -DPIC -fomit-frame-pointer
1507 # 3 gcc releases known for BeOS, each with ugly bugs
1508 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
1509 case "$gcc_version" in
1510 2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
1511 disable mmx
1512 ;;
1513 *20010315*) echo "BeBits gcc"
1514 add_cflags -fno-expensive-optimizations
1515 ;;
1516 esac
1517 SHFLAGS=-nostart
1518 # enable BeOS things
1519 enable audio_beos
1520 # no need for libm, but the inet stuff
1521 # Check for BONE
1522 # XXX: actually should check for NOT net_server
1523 if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1524 network_extralibs="-lbind -lsocket"
1525 else
1526 enable beos_netserver
1527 network_extralibs="-lnet"
1528 fi ;;
1529 sunos)
1530 FFSERVERLDFLAGS=""
1531 SHFLAGS='-shared -Wl,-h,$$(@F)'
1532 network_extralibs="-lsocket -lnsl"
1533 add_cflags -D__EXTENSIONS__
1534 ;;
1535 netbsd)
1536 oss_demuxer_extralibs="-lossaudio"
1537 oss_muxer_extralibs="-lossaudio"
1538 ;;
1539 openbsd)
1540 disable need_memalign
1541 LIBOBJFLAGS='$(PIC)'
1542 SHFLAGS='-shared'
1543 oss_demuxer_extralibs="-lossaudio"
1544 oss_muxer_extralibs="-lossaudio"
1545 ;;
1546 freebsd)
1547 disable need_memalign
1548 ;;
1549 bsd/os)
1550 osextralibs="-lpoll -lgnugetopt"
1551 strip="strip -d"
1552 ;;
1553 darwin)
1554 disable need_memalign
1555 SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1556 strip="strip -x"
1557 FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
1558 SLIBSUF=".dylib"
1559 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
1560 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
1561 FFSERVERLDFLAGS=-Wl,-bind_at_load
1562 objformat="macho"
1563 enabled x86_64 && objformat="macho64"
1564 ;;
1565 mingw32*)
1566 target_os=mingw32
1567 LIBTARGET=i386
1568 if enabled x86_64; then
1569 disable need_memalign
1570 LIBTARGET=x64
1571 fi
1572 shlibdir_default="$bindir_default"
1573 disable ffserver
1574 SLIBPREF=""
1575 SLIBSUF=".dll"
1576 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1577 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1578 SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1579 SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
1580 install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1581 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1582 SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
1583 objformat="win32"
1584 enable dos_paths
1585 if ! enabled x86_64; then
1586 check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
1587 die "ERROR: MinGW runtime version must be >= 3.15."
1588 enabled_any avisynth vfwcap_demuxer &&
1589 { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
1590 die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
1591 fi
1592 ;;
1593 cygwin*)
1594 target_os=cygwin
1595 shlibdir_default="$bindir_default"
1596 SLIBPREF="cyg"
1597 SLIBSUF=".dll"
1598 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
1599 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1600 SHFLAGS='-shared -Wl,--enable-auto-image-base'
1601 objformat="win32"
1602 enable dos_paths
1603 ;;
1604 *-dos|freedos|opendos)
1605 disable ffplay ffserver
1606 disable $INDEV_LIST $OUTDEV_LIST
1607 network_extralibs="-lsocket"
1608 objformat="coff"
1609 enable dos_paths
1610 ;;
1611 linux)
1612 enable dv1394
1613 ;;
1614 irix*)
1615 target_os=irix
1616 ranlib="echo ignoring ranlib"
1617 ;;
1618 os/2*)
1619 strip="lxlite"
1620 ln_s="cp -f"
1621 FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
1622 SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
1623 FFSERVERLDFLAGS=""
1624 LIBSUF="_s.a"
1625 SLIBPREF=""
1626 SLIBSUF=".dll"
1627 SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
1628 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
1629 SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
1630 echo PROTMODE >> $(SUBDIR)$(NAME).def; \
1631 echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
1632 echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
1633 echo EXPORTS >> $(SUBDIR)$(NAME).def; \
1634 emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
1635 SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
1636 emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
1637 SLIB_INSTALL_EXTRA_CMD='install -m 644 $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
1638 SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1639 enable dos_paths
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 ##########################################
2020 # SDL check
2021
2022 disable sdl_too_old
2023 disable sdl
2024 SDL_CONFIG="${cross_prefix}sdl-config"
2025 if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2026 sdl_cflags=`"${SDL_CONFIG}" --cflags`
2027 temp_cflags $sdl_cflags
2028 temp_extralibs `"${SDL_CONFIG}" --libs`
2029 if check_lib2 SDL.h SDL_Init; then
2030 _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
2031 if test "$_sdlversion" -lt 121 ; then
2032 enable sdl_too_old
2033 else
2034 enable sdl
2035 check_cc $sdl_cflags <<EOF && enable sdl_video_size
2036 #include <SDL.h>
2037 int main(int argc, char **argv){
2038 const SDL_VideoInfo *vi = SDL_GetVideoInfo();
2039 int w = vi->current_w;
2040 return 0;
2041 }
2042 EOF
2043 fi
2044 fi
2045 restore_flags
2046 fi
2047
2048 texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2049
2050 ##########################################
2051 # Network check
2052
2053 if enabled network; then
2054 check_type "sys/types.h sys/socket.h" socklen_t
2055 # Prefer arpa/inet.h over winsock2
2056 if check_header arpa/inet.h ; then
2057 check_func closesocket
2058 elif check_header winsock2.h ; then
2059 network_extralibs="-lws2_32"
2060 check_type ws2tcpip.h socklen_t
2061 check_func_headers winsock2.h closesocket
2062 fi
2063 fi
2064
2065 ##########################################
2066 # IPv6 check
2067
2068 enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2069 #include <sys/types.h>
2070 #include <sys/socket.h>
2071 #include <netinet/in.h>
2072 #include <netdb.h>
2073 int main(void) {
2074 struct sockaddr_storage saddr;
2075 struct ipv6_mreq mreq6;
2076 getaddrinfo(0,0,0,0);
2077 getnameinfo(0,0,0,0,0,0,0);
2078 IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2079 }
2080 EOF
2081
2082 check_header linux/videodev.h
2083 check_header linux/videodev2.h
2084 check_header sys/videoio.h
2085
2086 check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
2087
2088 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
2089 { check_header dev/bktr/ioctl_meteor.h &&
2090 check_header dev/bktr/ioctl_bt848.h; } ||
2091 { check_header machine/ioctl_meteor.h &&
2092 check_header machine/ioctl_bt848.h; } ||
2093 { check_header dev/video/meteor/ioctl_meteor.h &&
2094 check_header dev/video/bktr/ioctl_bt848.h; } ||
2095 check_header dev/ic/bt8xx.h
2096
2097 check_header sys/soundcard.h
2098 check_header soundcard.h
2099
2100 check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2101
2102 # deal with the X11 frame grabber
2103 enabled x11grab &&
2104 check_header X11/Xlib.h &&
2105 check_header X11/extensions/XShm.h &&
2106 check_func XOpenDisplay -lX11 &&
2107 check_func XShmCreateImage -lX11 -lXext
2108
2109 enabled debug && add_cflags -g"$debuglevel"
2110
2111 # add some useful compiler flags if supported
2112 check_cflags -Wdeclaration-after-statement
2113 check_cflags -Wall
2114 check_cflags -Wno-switch
2115 check_cflags -Wdisabled-optimization
2116 check_cflags -Wpointer-arith
2117 check_cflags -Wredundant-decls
2118 check_cflags -Wno-pointer-sign
2119 check_cflags -Wcast-qual
2120 check_cflags -Wwrite-strings
2121 check_cflags -Wtype-limits
2122 check_cflags -Wundef
2123 enabled extra_warnings && check_cflags -Winline
2124
2125 # add some linker flags
2126 check_ldflags -Wl,--warn-common
2127 check_ldflags -Wl,--as-needed
2128 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'
2129 check_ldflags -Wl,-Bsymbolic
2130
2131 if enabled small; then
2132 check_cflags -Os # not all compilers support -Os
2133 optimizations="small"
2134 elif enabled optimizations; then
2135 if enabled xlc; then
2136 add_cflags -O5
2137 add_ldflags -O5
2138 elif enabled ccc; then
2139 add_cflags -fast
2140 else
2141 add_cflags -O3
2142 fi
2143 fi
2144 check_cflags -fno-math-errno
2145 check_cflags -fno-signed-zeros
2146
2147 # add some flags for Intel C Compiler
2148 if enabled icc; then
2149 # Just warnings, no remarks
2150 check_cflags -w1
2151 # -wd: Disable following warnings
2152 # 144, 167, 556: -Wno-pointer-sign
2153 # 10006: ignoring unknown option -fno-signed-zeros
2154 # 10156: ignoring option '-W'; no argument required
2155 check_cflags -wd144,167,556,10006,10156
2156 # 11030: Warning unknown option --as-needed
2157 # 10156: ignoring option '-export'; no argument required
2158 check_ldflags -wd10156,11030
2159 # Allow to compile with optimizations
2160 check_ldflags -march=$cpu
2161 elif enabled ccc; then
2162 # disable some annoying warnings
2163 add_cflags -msg_disable cvtu32to64
2164 add_cflags -msg_disable embedcomment
2165 add_cflags -msg_disable needconstext
2166 add_cflags -msg_disable nomainieee
2167 add_cflags -msg_disable ptrmismatch1
2168 add_cflags -msg_disable unreachcode
2169 fi
2170
2171 # PIC flags for shared library objects where they are needed
2172 if enabled shared; then
2173 # LIBOBJFLAGS may have already been set in the OS configuration
2174 if test -z "$LIBOBJFLAGS" ; then
2175 case "${subarch-$arch}" in
2176 x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2177 esac
2178 fi
2179 fi
2180
2181 if enabled gprof; then
2182 add_cflags -p
2183 add_ldflags -p
2184 fi
2185
2186 # Find out if the .align argument is a power of two or not.
2187 check_asm asmalign_pot '".align 3"'
2188
2189 enabled_any $DECODER_LIST && enable decoders
2190 enabled_any $ENCODER_LIST && enable encoders
2191 enabled_any $BSF_LIST && enable bsfs
2192 enabled_any $DEMUXER_LIST && enable demuxers
2193 enabled_any $MUXER_LIST && enable muxers
2194 enabled_any $FILTER_LIST && enable filters
2195 enabled_any $INDEV_LIST && enable demuxers
2196 enabled_any $OUTDEV_LIST && enable muxers
2197 enabled_any $PROTOCOL_LIST && enable protocols
2198
2199 enabled_any $THREADS_LIST && enable threads
2200
2201 check_deps $CONFIG_LIST \
2202 $CONFIG_EXTRA \
2203 $HAVE_LIST \
2204 $DECODER_LIST \
2205 $ENCODER_LIST \
2206 $PARSER_LIST \
2207 $BSF_LIST \
2208 $DEMUXER_LIST \
2209 $MUXER_LIST \
2210 $FILTER_LIST \
2211 $INDEV_LIST \
2212 $OUTDEV_LIST \
2213 $PROTOCOL_LIST \
2214
2215 echo "install prefix $prefix"
2216 echo "source path $source_path"
2217 echo "C compiler $cc"
2218 echo ".align is power-of-two $asmalign_pot"
2219 echo "ARCH $arch ($cpu)"
2220 if test "$build_suffix" != ""; then
2221 echo "build suffix $build_suffix"
2222 fi
2223 if test "$extra_version" != ""; then
2224 echo "version string suffix $extra_version"
2225 fi
2226 echo "big-endian ${bigendian-no}"
2227 if enabled x86; then
2228 echo "yasm ${yasm-no}"
2229 echo "MMX enabled ${mmx-no}"
2230 echo "MMX2 enabled ${mmx2-no}"
2231 echo "3DNow! enabled ${amd3dnow-no}"
2232 echo "3DNow! extended enabled ${amd3dnowext-no}"
2233 echo "SSE enabled ${sse-no}"
2234 echo "SSSE3 enabled ${ssse3-no}"
2235 echo "CMOV enabled ${cmov-no}"
2236 echo "CMOV is fast ${fast_cmov-no}"
2237 echo "EBX available ${ebx_available-no}"
2238 echo "EBP available ${ebp_available-no}"
2239 echo "10 operands supported ${ten_operands-no}"
2240 fi
2241 if enabled arm; then
2242 echo "ARMv5TE enabled ${armv5te-no}"
2243 echo "ARMv6 enabled ${armv6-no}"
2244 echo "ARMv6T2 enabled ${armv6t2-no}"
2245 echo "ARM VFP enabled ${armvfp-no}"
2246 echo "IWMMXT enabled ${iwmmxt-no}"
2247 echo "NEON enabled ${neon-no}"
2248 fi
2249 if enabled mips; then
2250 echo "MMI enabled ${mmi-no}"
2251 fi
2252 if enabled ppc; then
2253 echo "AltiVec enabled ${altivec-no}"
2254 echo "PPC 4xx optimizations ${ppc4xx-no}"
2255 echo "dcbzl available ${dcbzl-no}"
2256 echo "performance report ${powerpc_perf-no}"
2257 fi
2258 if enabled sparc; then
2259 echo "VIS enabled ${vis-no}"
2260 fi
2261 echo "gprof enabled ${gprof-no}"
2262 echo "debug symbols ${debug-no}"
2263 echo "strip symbols ${stripping-no}"
2264 echo "optimizations ${optimizations-no}"
2265 echo "static ${static-no}"
2266 echo "shared ${shared-no}"
2267 echo "postprocessing support ${postproc-no}"
2268 echo "software scaler enabled ${swscale-no}"
2269 echo "new filter support ${avfilter-no}"
2270 echo "filters using lavformat ${avfilter_lavf-no}"
2271 echo "network support ${network-no}"
2272 if enabled network; then
2273 echo "IPv6 support ${ipv6-no}"
2274 fi
2275 echo "threading support ${thread_type-no}"
2276 echo "SDL support ${sdl-no}"
2277 if enabled sdl_too_old; then
2278 echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
2279 fi
2280 echo "Sun medialib support ${mlib-no}"
2281 echo "AVISynth enabled ${avisynth-no}"
2282 echo "libamr-nb support ${libamr_nb-no}"
2283 echo "libamr-wb support ${libamr_wb-no}"
2284 echo "libdc1394 support ${libdc1394-no}"
2285 echo "libdirac enabled ${libdirac-no}"
2286 echo "libfaac enabled ${libfaac-no}"
2287 echo "libfaad enabled ${libfaad-no}"
2288 echo "libfaad dlopened ${libfaadbin-no}"
2289 echo "libgsm enabled ${libgsm-no}"
2290 echo "libmp3lame enabled ${libmp3lame-no}"
2291 echo "libnut enabled ${libnut-no}"
2292 echo "libopenjpeg enabled ${libopenjpeg-no}"
2293 echo "libschroedinger enabled ${libschroedinger-no}"
2294 echo "libspeex enabled ${libspeex-no}"
2295 echo "libtheora enabled ${libtheora-no}"
2296 echo "libvorbis enabled ${libvorbis-no}"
2297 echo "libx264 enabled ${libx264-no}"
2298 echo "libxvid enabled ${libxvid-no}"
2299 echo "vdpau enabled ${vdpau-no}"
2300 echo "zlib enabled ${zlib-no}"
2301 echo "bzlib enabled ${bzlib-no}"
2302 echo
2303
2304 for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2305 echo "Enabled ${type}s:"
2306 eval list=\$$(toupper $type)_LIST
2307 for part in $list; do
2308 enabled $part && echo ${part%_*}
2309 done | sort | pr -3 -t
2310 echo
2311 done
2312
2313 license="LGPL"
2314 if enabled nonfree; then
2315 license="unredistributable"
2316 elif enabled gpl; then
2317 license="GPL"
2318 fi
2319
2320 echo "License: $license"
2321
2322 echo "Creating config.mak and config.h..."
2323
2324 echo "# Automatically generated by configure - do not modify!" > config.mak
2325 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2326 echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
2327 echo "#define FFMPEG_CONFIG_H" >> $TMPH
2328 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
2329 echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
2330
2331 echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2332 echo "prefix=$prefix" >> config.mak
2333 echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
2334 echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
2335 echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
2336 echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2337 echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2338 echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2339 echo "CC=$cc" >> config.mak
2340 echo "YASM=$yasmexe" >> config.mak
2341 echo "AR=$ar" >> config.mak
2342 echo "RANLIB=$ranlib" >> config.mak
2343 echo "LN_S=$ln_s" >> config.mak
2344 enabled stripping &&
2345 echo "STRIP=$strip" >> config.mak ||
2346 echo "STRIP=echo ignoring strip" >> config.mak
2347
2348 echo "OPTFLAGS=$CFLAGS" >> config.mak
2349 echo "LDFLAGS=$LDFLAGS" >> config.mak
2350 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2351 echo "SHFLAGS=$SHFLAGS" >> config.mak
2352 echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2353 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2354 echo "BUILD_STATIC=$static" >> config.mak
2355 echo "BUILDSUF=$build_suffix" >> config.mak
2356 echo "FULLNAME=$FULLNAME" >> config.mak
2357 echo "LIBPREF=$LIBPREF" >> config.mak
2358 echo "LIBSUF=$LIBSUF" >> config.mak
2359 echo "LIBNAME=$LIBNAME" >> config.mak
2360 echo "SLIBPREF=$SLIBPREF" >> config.mak
2361 echo "SLIBSUF=$SLIBSUF" >> config.mak
2362 echo "EXESUF=$EXESUF" >> config.mak
2363 echo "EXTRA_VERSION=$extra_version" >> config.mak
2364 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2365 echo "HOSTCC=$host_cc" >> config.mak
2366 echo "HOSTCFLAGS=$host_cflags" >> config.mak
2367 echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
2368 echo "HOSTLIBS=$host_libs" >> config.mak
2369 echo "TARGET_EXEC=$target_exec" >> config.mak
2370 echo "TARGET_PATH=$target_path" >> config.mak
2371
2372 if enabled bigendian; then
2373 echo "WORDS_BIGENDIAN=yes" >> config.mak
2374 echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2375 fi
2376
2377 if enabled sdl; then
2378 echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
2379 echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2380 fi
2381 if enabled texi2html; then
2382 echo "BUILD_DOC=yes" >> config.mak
2383 fi
2384
2385 get_version(){
2386 name=$1
2387 file=$source_path/$2
2388 eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
2389 eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2390 lcname=$(tolower $name)
2391 eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
2392 eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2393 }
2394
2395 get_version LIBSWSCALE libswscale/swscale.h
2396 get_version LIBPOSTPROC libpostproc/postprocess.h
2397 get_version LIBAVCODEC libavcodec/avcodec.h
2398 get_version LIBAVDEVICE libavdevice/avdevice.h
2399 get_version LIBAVFORMAT libavformat/avformat.h
2400 get_version LIBAVUTIL libavutil/avutil.h
2401 get_version LIBAVFILTER libavfilter/avfilter.h
2402
2403 if enabled shared; then
2404 echo "BUILD_SHARED=yes" >> config.mak
2405 echo "PIC=-fPIC -DPIC" >> config.mak
2406 echo "LIBTARGET=${LIBTARGET}" >> config.mak
2407 echo "SLIBNAME=${SLIBNAME}" >> config.mak
2408 echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
2409 echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2410 echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2411 echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2412 echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
2413 echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
2414 fi
2415 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2416 echo "EXTRALIBS=$extralibs" >> config.mak
2417
2418 echo "ARCH=$arch" >> config.mak
2419
2420 print_config ARCH_ $TMPH config.mak $ARCH_LIST
2421 print_config HAVE_ $TMPH config.mak $HAVE_LIST
2422 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST \
2423 $CONFIG_EXTRA \
2424 $DECODER_LIST \
2425 $ENCODER_LIST \
2426 $PARSER_LIST \
2427 $BSF_LIST \
2428 $DEMUXER_LIST \
2429 $MUXER_LIST \
2430 $FILTER_LIST \
2431 $PROTOCOL_LIST \
2432 $INDEV_LIST \
2433 $OUTDEV_LIST \
2434
2435 echo "#define restrict $_restrict" >> $TMPH
2436
2437 if enabled small; then
2438 echo "#define av_always_inline" >> $TMPH
2439 fi
2440
2441 echo "SRC_PATH=\"$source_path\"" >> config.mak
2442 echo "SRC_PATH_BARE=$source_path" >> config.mak
2443 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2444
2445 # Apparently it's not possible to portably echo a backslash.
2446 enabled asmalign_pot &&
2447 printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
2448 printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2449
2450 echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
2451
2452 echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
2453
2454 # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2455 cmp -s $TMPH config.h &&
2456 echo "config.h is unchanged" ||
2457 mv -f $TMPH config.h
2458
2459 # build tree in object directory if source path is different from current one
2460 if enabled source_path_used; then
2461 DIRS="\
2462 doc \
2463 libavcodec \
2464 libavcodec/alpha \
2465 libavcodec/arm \
2466 libavcodec/bfin \
2467 libavcodec/mlib \
2468 libavcodec/ppc \
2469 libavcodec/sh4 \
2470 libavcodec/sparc \
2471 libavcodec/x86 \
2472 libavdevice \
2473 libavfilter \
2474 libavformat \
2475 libavutil \
2476 libpostproc \
2477 libswscale \
2478 tests \
2479 tools \
2480 "
2481 FILES="\
2482 Makefile \
2483 common.mak \
2484 subdir.mak \
2485 doc/texi2pod.pl \
2486 libavcodec/Makefile \
2487 libavdevice/Makefile \
2488 libavfilter/Makefile \
2489 libavformat/Makefile \
2490 libavutil/Makefile \
2491 libpostproc/Makefile \
2492 libswscale/Makefile \
2493 "
2494 for dir in $DIRS ; do
2495 mkdir -p $dir
2496 done
2497 for f in $FILES ; do
2498 $ln_s "$source_path/$f" $f
2499 done
2500 fi
2501
2502
2503 # build pkg-config files
2504
2505 pkgconfig_generate(){
2506 name=$1
2507 shortname=${name#lib}${build_suffix}
2508 comment=$2
2509 version=$3
2510 libs=$4
2511 requires=$5
2512 cat <<EOF > $name/$name.pc
2513 prefix=$prefix
2514 exec_prefix=\${prefix}
2515 libdir=$libdir
2516 includedir=$incdir
2517
2518 Name: $name
2519 Description: $comment
2520 Version: $version
2521 Requires: $(disabled shared && echo $requires)
2522 Requires.private: $(enabled shared && echo $requires)
2523 Conflicts:
2524 Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
2525 Libs.private: $(enabled shared && echo $libs)
2526 Cflags: -I\${includedir}
2527 EOF
2528 cat <<EOF > $name/$name-uninstalled.pc
2529 prefix=
2530 exec_prefix=
2531 libdir=\${pcfiledir}
2532 includedir=${source_path}
2533
2534 Name: $name
2535 Description: $comment
2536 Version: $version
2537 Requires: $requires
2538 Conflicts:
2539 Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2540 Cflags: -I\${includedir}
2541 EOF
2542 }
2543
2544 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2545 pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2546 pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
2547 pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
2548 enabled avfilter &&
2549 pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2550 enabled postproc &&
2551 pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2552 if enabled swscale; then
2553 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2554 else
2555 pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavcodec = $LIBAVCODEC_VERSION"
2556 apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2557 fi